diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..a44058c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +.DS_Store +node_modules +dist \ No newline at end of file diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b3b4d5b..9460ce3 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @tsurdilo @manuelstein @falko @duglin \ No newline at end of file +* @ricardozanini @cdavernas \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..099edc1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,56 @@ +name: Bug Report +description: Create a bug report +labels: ["type: bug"] +body: +- type: markdown + attributes: + value: | + :pray: Thanks for taking the time to fill out this bug report! + +- type: markdown + attributes: + value: | + ## Bug Report + +- type: textarea + id: i-tried-this + attributes: + label: "I tried this:" + placeholder: "What did you try to do?" + validations: + required: true + +- type: textarea + id: instead-what-happened + attributes: + label: "This happened:" + placeholder: "What happened instead of what you've expected?" + validations: + required: true + +- type: textarea + id: what-did-you-expect + attributes: + label: "I expected this:" + placeholder: "What did you expect to happen? Describe the output or behavior you expected to see (unless it's obvious)." + +- type: textarea + id: workaround + attributes: + label: "Is there a workaround?" + placeholder: "What's the workaround to avoid this issue?" + +- type: textarea + attributes: + label: Anything else? + placeholder: | + Links? References? Logs? Anything that will give us more context about the issue you are encountering. + Tip: You can attach images or log files by dragging files in. + +- type: textarea + attributes: + label: Community Notes + value: | + + * Please vote by adding a 👍 reaction to the issue to help us prioritize. + * If you are interested to work on this issue, please leave a comment.name: Bug Report 🐞 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..8e9f916 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,2 @@ +blank_issues_enabled: false +contact_links: [] \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml new file mode 100644 index 0000000..86db065 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.yml @@ -0,0 +1,47 @@ +name: Feature Request +description: Create a feature request +labels: ["type: enhancement"] +body: +- type: markdown + attributes: + value: | + :pray: Thanks for taking the time to fill out this feature request! + +- type: markdown + attributes: + value: | + ## Feature Request + +- type: textarea + id: what-would-you-like-to-be-added + attributes: + label: "What would you like to be added?" + placeholder: "Description of the feature you'd like to see." + validations: + required: true + +- type: textarea + id: proposals + attributes: + label: "Proposal(s):" + placeholder: "Describe your proposal(s) and any relevant details here." + +- type: textarea + id: alternatives + attributes: + label: "Alternative(s):" + placeholder: "Describe any alternative approaches, options, or suggestions you’d like to consider." + +- type: textarea + id: additional-info + attributes: + label: "Additional info:" + placeholder: "Provide any supplementary details, context, or supporting information here." + +- type: textarea + attributes: + label: Community Notes + value: | + + * Please vote by adding a 👍 reaction to the feature to help us prioritize. + * If you are interested to work on this feature, please leave a comment. diff --git a/.github/OWNERS b/.github/OWNERS index 78528e0..35b8508 100644 --- a/.github/OWNERS +++ b/.github/OWNERS @@ -1,12 +1,8 @@ reviewers: - - tsurdilo - - manuelstein - - falko - - duglin + - ricardozanini + - cdavernas approvers: - - tsurdilo - - manuelstein - - falko - - duglin + - ricardozanini + - cdavernas labels: - sig/contributor-experience \ No newline at end of file diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml deleted file mode 100644 index f5154c8..0000000 --- a/.github/workflows/greetings.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2020 The Serverless Workflow Specification Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Greetings - -on: [pull_request, issues] - -jobs: - greeting: - runs-on: ubuntu-latest - steps: - - uses: actions/first-interaction@v1 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - issue-message: 'Hello @${{ github.actor }} , thank you for submitting an issue!' - pr-message: 'Hello @${{ github.actor }} , thank you submitting a pull request!' diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d1745cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# build output +dist/ + +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# jetbrains setting folder +.idea/ \ No newline at end of file diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 0000000..dcd10cd --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,17 @@ +tasks: + - init: npm install + command: npm run dev + +ports: + - port: 4321 + onOpen: open-browser + +# Enable prebuilds of your project to enable faster workspace start times. +# https://www.gitpod.io/docs/prebuilds/#configure-the-github-app +github: + prebuilds: + master: true + branches: true + pullRequests: true + pullRequestsFromForks: true + addCheck: true \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..726a201 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20.11.1 \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..22a1505 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode"], + "unwantedRecommendations": [] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..d642209 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..57a3d28 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +open-workflow-specification.org \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..db177d4 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,28 @@ +# How to Contribute + +We'd love to accept your patches and contributions to this project. There are +just a few small guidelines you need to follow. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement. You (or your employer) retain the copyright to your contribution; +this simply gives us permission to use and redistribute your contributions as +part of the project. Head over to to see +your current agreements on file or to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Code reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. + +## Community Guidelines + +This project follows +[Google's Open Source Community Guidelines](https://opensource.google.com/conduct/). diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8980ed3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM node:lts +WORKDIR /app +COPY . . +RUN npm i +RUN npx astro telemetry disable +EXPOSE 4321 +CMD ["npx", "astro", "dev", "--host"] \ No newline at end of file diff --git a/README.md b/README.md index 257fab2..c6cc063 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,40 @@ -## Serverless Workflow Specification Website +# Open Workflow Specification Website Repository -This repository includes the sources for the Serverless Workflow Specification Website - -[serverlessworkflow.io](http://serverlessworkflow.io) \ No newline at end of file +This repository hosts the website for the [Open Workflow Specification](https://github.com/serverlessworkflow/specification) project at [https://serverlessworkflow.io](https://serverlessworkflow.io). + +## 🧑 Contributing to the website + +The website uses [Astro](https://astro.build/). You can find more information about how to get started with this stack [here](https://docs.astro.build/en/getting-started/). + +For the styling, it relies on [TailWind CSS](https://tailwindcss.com/) and [Daisy UI](https://daisyui.com/). + +To contribute to the website you don't need to have in-deth web design knowledge: +- To publish a blog post just add a new Markdown page to the [`blog`](src/content/blog) directory. You can always use the blog posts in this repository as a reference. +- For more complex changes to the website, have a look at the [Astro Docs](https://docs.astro.build/en/getting-started/) + +## 🚀 Project Structure + +To learn more about the folder structure of an Astro project, refer to [our guide on project structure](https://docs.astro.build/en/basics/project-structure/). + +## 🧞 Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :------------------------ | :----------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:4321` | +| `npm run build` | Build your production site to `./dist/` | +| `npm run preview` | Preview your build locally, before deploying | +| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | +| `npm run astro -- --help` | Get help using the Astro CLI | + + +Alternatively, you can use Docker to run the project and connect on `localhost:4321`: +``` +docker compose up --remove-orphans --watch +``` + +## 👀 Want to learn more? + +Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..dbac2ec --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,26 @@ +// @ts-check +import { defineConfig } from 'astro/config'; +import mdx from '@astrojs/mdx'; +import sitemap from '@astrojs/sitemap'; +import tailwindcss from "@tailwindcss/vite"; +import netlify from '@astrojs/netlify'; + +// https://astro.build/config +export default defineConfig({ + site: 'https://open-workflow-specification.org/', + integrations: [mdx(), sitemap()], + markdown: { + syntaxHighlight: 'shiki', + shikiConfig: { + themes: { + light: 'github-light', + dark: 'github-dark', + }, + wrap: true, + }, + }, + adapter: netlify(), + vite: { + plugins: [tailwindcss()], + } +}); \ No newline at end of file diff --git a/css/sws.css b/css/sws.css deleted file mode 100644 index 7d3f321..0000000 --- a/css/sws.css +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright 2020 The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -body { - font-family: 'Lato', sans-serif; -} -header { - padding: 156px 0 100px; -} -section { - padding: 150px 0; -} -.section-dark { - background-color: #000000; - color: #ffffff; -} -hr{ - height: 4px; - background-color: #a332ff; - border: none; -} -a { - color: #a332ff; -} -.navbar-custom { - background-color: #000000; -} -.navbar-custom .navbar-brand, -.navbar-custom .navbar-text { - color: #ffffff -} -.navbar-custom .navbar-nav .nav-link { - color: #ffffff -} -.navbar-custom .nav-item.active .nav-link, -.navbar-custom .nav-item:focus .nav-link, -.navbar-custom .nav-item:hover .nav-link { - color: #ffffff; -} -.footer-custom { - background-color: #000000; -} -.welcome-custom { - background-color: #000000; -} -.hr-short{ - height: 4px; - background-color: #a332ff; - border: none; -} \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..58e890b --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,15 @@ +services: + site: + build: + context: . + ports: + - "4321:4321" + develop: + watch: + - action: sync + path: ./ + target: /app + ignore: + - node_modules/ + - .astro/ + - .vscode/ \ No newline at end of file diff --git a/img/ce-logo-blue.png b/img/ce-logo-blue.png deleted file mode 100644 index 73a90be..0000000 Binary files a/img/ce-logo-blue.png and /dev/null differ diff --git a/img/ce-logo-white.png b/img/ce-logo-white.png deleted file mode 100644 index 9dc3506..0000000 Binary files a/img/ce-logo-white.png and /dev/null differ diff --git a/img/cncf-color.png b/img/cncf-color.png deleted file mode 100644 index 97796cb..0000000 Binary files a/img/cncf-color.png and /dev/null differ diff --git a/img/cncf-white.png b/img/cncf-white.png deleted file mode 100644 index 9c3fd07..0000000 Binary files a/img/cncf-white.png and /dev/null differ diff --git a/img/spec-goals-ws.png b/img/spec-goals-ws.png deleted file mode 100644 index 53722bd..0000000 Binary files a/img/spec-goals-ws.png and /dev/null differ diff --git a/img/sw-logo-header.png b/img/sw-logo-header.png deleted file mode 100644 index c1fd957..0000000 Binary files a/img/sw-logo-header.png and /dev/null differ diff --git a/img/sw-logo-nav.png b/img/sw-logo-nav.png deleted file mode 100644 index c3c5425..0000000 Binary files a/img/sw-logo-nav.png and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index f91a441..0000000 --- a/index.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - - - - - - - Serverless Workflow Specification - - - - - -
-
-
-
- -
-
-

Serverless Workflow

-
-

A specification for defining declarative workflow models - that orchestrate Event-driven, Serverless applications.

-
-
-
-
- -
-
-
-
-

Why Serverless Workflow

-
-

- Workflows have become key components of Serverless applications, yet implementations tend - to describe workflows differently. -

-
-
-
-
- Consistency
-
-

- The lack of a common way of describing serverless workflows means developers - do not have a consistent way of modelling their serverless orchestrations. -
-
-
-
-
- Portability
-
-

- The portability and productivity we can achieve from modeling serverless workflows is hindered overall. -
-
-
-
-
- Accessibility
-
-

- No common workflow format means no common libraries, tooling, and infrastructure for modeling - serverless workflows across different cloud platforms and/or containers. -
-
-
-
-
-
-
-
- -
-
-
-
-

What is Serverless Workflow

-
-

- Serverless Workflow is a specification - for describing workflows in a common way. - Serverless Workflow seeks to provide a vendor-neutral and platform-independent markup for - orchestrating services on cloud and container platforms. -

-

-
-


- -
-
-

-

- Serverless Workflow is a new effort and it's still under active development. - Its working group consists of a number of leaders in the business automation industry and enthusiasts in that field. - The specification is under the Cloud Native Computing Foundation. -

-
-
-
-
- -
-
-
-
-

Contribute to the Serverless Workflow Specification

-
-

- Serverless Workflow is organized via the CNCF's Serverless Working Group. -

- It is hosted by the Cloud Native Computing Foundation (CNCF) and was approved as a - Cloud Native Sandbox level project on July 14, 2020 -

- Everyone is encouraged to join us! If you're interested in contributing, please collaborate with us via: -

-

-

- As contributors and maintainers of this project, and in the interest of fostering - an open and welcoming community, we pledge to respect all people who contribute - through reporting issues, posting feature requests, updating documentation, - submitting pull requests or patches, and other activities. -

-

- We are committed to making participation in this project a harassment-free experience for - everyone, regardless of level of experience, gender, gender identity and expression, - sexual orientation, disability, personal appearance, body size, race, ethnicity, age, - religion, or nationality. -

-

- See our full project Code of Conduct information here. -

-
-
-
-
- -
-
-
-
-

Resources

-
-

-

Videos and Presentations

- - - - - - - - - - - - - - - - - - - - -
TitleSpeakersEvent
Introduction to Serverless Workflow SpecificationTihomir SurdilovicCNCF TOC Sandbox Proposal
Serverless Workflow, a New Approach to Business AutomationTihomir SurdilovicYouTube Live Event
-

-
-
-
-
- - - - - - - - - - diff --git a/js/sws.js b/js/sws.js deleted file mode 100644 index 0e9e782..0000000 --- a/js/sws.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copyright 2020 The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(function($) { - "use strict"; - - // Smooth scrolling using jQuery easing - $('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() { - if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { - var target = $(this.hash); - target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); - if (target.length) { - $('html, body').animate({ - scrollTop: (target.offset().top - 56) - }, 1000, "easeInOutExpo"); - return false; - } - } - }); - - // Closes responsive menu when a scroll trigger link is clicked - $('.js-scroll-trigger').click(function() { - $('.navbar-collapse').collapse('hide'); - }); - - // Activate scrollspy to add active class to navbar items on scroll - $('body').scrollspy({ - target: '#mainNav', - offset: 56 - }); - -})(jQuery); \ No newline at end of file diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 0000000..cfee5f9 --- /dev/null +++ b/netlify.toml @@ -0,0 +1,3 @@ +[build] +command = "npm run build" +publish = "dist" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..828a267 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7640 @@ +{ + "name": "website", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "website", + "version": "0.0.1", + "dependencies": { + "@astrojs/mdx": "^4.2.2", + "@astrojs/netlify": "^6.2.4", + "@astrojs/rss": "^4.0.11", + "@astrojs/sitemap": "^3.3.0", + "@tailwindcss/vite": "^4.0.13", + "astro": "^5.5.5", + "tailwindcss": "^4.0.13" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.16", + "daisyui": "^5.0.2" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz", + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.6.1.tgz", + "integrity": "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==", + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.1.tgz", + "integrity": "sha512-c5F5gGrkczUaTVgmMW9g1YMJGzOtRvjjhw6IfGuxarM6ct09MpwysP10US729dy07gg8y+ofVifezvP3BNsWZg==", + "dependencies": { + "@astrojs/internal-helpers": "0.6.1", + "@astrojs/prism": "3.2.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.1.0", + "js-yaml": "^4.1.0", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.1", + "remark-smartypants": "^3.0.2", + "shiki": "^3.0.0", + "smol-toml": "^1.3.1", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/mdx": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.2.2.tgz", + "integrity": "sha512-nWDvuCPenxoxbog3YK3yVWF3Jw7Lq1+ziWSAOc9fy6zAUbPDSr2bt3c6r6+oa1ll0miCQByj5UVts6eJvN/y+g==", + "dependencies": { + "@astrojs/markdown-remark": "6.3.1", + "@mdx-js/mdx": "^3.1.0", + "acorn": "^8.14.1", + "es-module-lexer": "^1.6.0", + "estree-util-visit": "^2.0.0", + "hast-util-to-html": "^9.0.5", + "kleur": "^4.1.5", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "remark-smartypants": "^3.0.2", + "source-map": "^0.7.4", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": "^18.17.1 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "astro": "^5.0.0" + } + }, + "node_modules/@astrojs/netlify": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@astrojs/netlify/-/netlify-6.2.4.tgz", + "integrity": "sha512-Pk1ZRDgH4cmrIqIuYQn1DJjNKRLNjybHoYWMoZnE+zP2NLQFirR15FQFKGbg8S3+zWQ1EptOBAb/ETnXpbwepA==", + "dependencies": { + "@astrojs/internal-helpers": "0.6.1", + "@astrojs/underscore-redirects": "0.6.0", + "@netlify/blobs": "^8.1.1", + "@netlify/functions": "^3.0.1", + "@vercel/nft": "^0.29.2", + "esbuild": "^0.25.0", + "tinyglobby": "^0.2.12", + "vite": "^6.2.3" + }, + "peerDependencies": { + "astro": "^5.3.0" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.2.0.tgz", + "integrity": "sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==", + "dependencies": { + "prismjs": "^1.29.0" + }, + "engines": { + "node": "^18.17.1 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/rss": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.11.tgz", + "integrity": "sha512-3e3H8i6kc97KGnn9iaZBJpIkdoQi8MmR5zH5R+dWsfCM44lLTszOqy1OBfGGxDt56mpQkYVtZJWoxMyWuUZBfw==", + "license": "MIT", + "dependencies": { + "fast-xml-parser": "^4.5.0", + "kleur": "^4.1.5" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.3.0.tgz", + "integrity": "sha512-nYE4lKQtk+Kbrw/w0G0TTgT724co0jUsU4tPlHY9au5HmTBKbwiCLwO/15b1/y13aZ4Kr9ZbMeMHlXuwn0ty4Q==", + "dependencies": { + "sitemap": "^8.0.0", + "stream-replace-string": "^2.0.0", + "zod": "^3.24.2" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/underscore-redirects": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@astrojs/underscore-redirects/-/underscore-redirects-0.6.0.tgz", + "integrity": "sha512-dnJgFpaM955IFNIkEEmMaaIdWXRdeZs1ID6mlGBqdjh6NiCXfKmOdq7L4fd9Dd/tr18fkLrOJ25IUJSxRAEhjQ==", + "license": "MIT" + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", + "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", + "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", + "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", + "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", + "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", + "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", + "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", + "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", + "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", + "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", + "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", + "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", + "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", + "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", + "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", + "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", + "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", + "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", + "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", + "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", + "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", + "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", + "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", + "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", + "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz", + "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.0" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz", + "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.0" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz", + "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz", + "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz", + "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz", + "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz", + "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz", + "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz", + "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz", + "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz", + "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz", + "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.0" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz", + "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.0" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz", + "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.0" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz", + "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.0" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz", + "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.0" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz", + "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz", + "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.0" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz", + "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.4.4" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz", + "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz", + "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz", + "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", + "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", + "license": "BSD-3-Clause", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", + "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@netlify/blobs": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-8.1.1.tgz", + "integrity": "sha512-7Dg3PzArvQ0Owq4wpkLECC9iaDBOxuWUN2uwbQtUF6tZssyez2QN+eO0CjuIhhZUivbw+X9bwsyiEjWkdJnv/A==", + "license": "MIT", + "engines": { + "node": "^14.16.0 || >=16.0.0" + } + }, + "node_modules/@netlify/functions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-3.0.1.tgz", + "integrity": "sha512-KqVvGatPnn3lw80vXsFbYV3H2S9FI9TQHneFVR6BBvfHWiqTvs8NwUoBpnUWgqPKKeUMuynycDabeSi9CW2WWw==", + "license": "MIT", + "dependencies": { + "@netlify/serverless-functions-api": "1.35.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@netlify/serverless-functions-api": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.35.0.tgz", + "integrity": "sha512-BH9eF3s7bUbqkcEUMR7dne/iCXSpZD10KVkGcs53eDrON5pKxsMdXvrdAx/q0HD24vJgHXGXObGSr5sjPllGEA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.13.tgz", + "integrity": "sha512-P9TmtE9Vew0vv5FwyD4bsg/dHHsIsAuUXkenuGUc5gm8fYgaxpdoxIKngCyEMEQxyCKR8PQY5V5VrrKNOx7exg==", + "license": "MIT", + "dependencies": { + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "tailwindcss": "4.0.13" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.13.tgz", + "integrity": "sha512-pTH3Ex5zAWC9LbS+WsYAFmkXQW3NRjmvxkKJY3NP1x0KHBWjz0Q2uGtdGMJzsa0EwoZ7wq9RTbMH1UNPceCpWw==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.0.13", + "@tailwindcss/oxide-darwin-arm64": "4.0.13", + "@tailwindcss/oxide-darwin-x64": "4.0.13", + "@tailwindcss/oxide-freebsd-x64": "4.0.13", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.13", + "@tailwindcss/oxide-linux-arm64-gnu": "4.0.13", + "@tailwindcss/oxide-linux-arm64-musl": "4.0.13", + "@tailwindcss/oxide-linux-x64-gnu": "4.0.13", + "@tailwindcss/oxide-linux-x64-musl": "4.0.13", + "@tailwindcss/oxide-win32-arm64-msvc": "4.0.13", + "@tailwindcss/oxide-win32-x64-msvc": "4.0.13" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.13.tgz", + "integrity": "sha512-+9zmwaPQ8A9ycDcdb+hRkMn6NzsmZ4YJBsW5Xqq5EdOu9xlIgmuMuJauVzDPB5BSbIWfhPdZ+le8NeRZpl1coA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.13.tgz", + "integrity": "sha512-Bj1QGlEJSjs/205CIRfb5/jeveOqzJ4pFMdRxu0gyiYWxBRyxsExXqaD+7162wnLP/EDKh6S1MC9E/1GwEhLtA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.13.tgz", + "integrity": "sha512-lRTkxjTpMGXhLLM5GjZ0MtjPczMuhAo9j7PeSsaU6Imkm7W7RbrXfT8aP934kS7cBBV+HKN5U19Z0WWaORfb8Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.13.tgz", + "integrity": "sha512-p/YLyKhs+xFibVeAPlpMGDVMKgjChgzs12VnDFaaqRSJoOz+uJgRSKiir2tn50e7Nm4YYw35q/DRBwpDBNo1MQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.13.tgz", + "integrity": "sha512-Ua/5ydE/QOTX8jHuc7M9ICWnaLi6K2MV/r+Ws2OppsOjy8tdlPbqYainJJ6Kl7ofm524K+4Fk9CQITPzeIESPw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.13.tgz", + "integrity": "sha512-/W1+Q6tBAVgZWh/bhfOHo4n7Ryh6E7zYj4bJd9SRbkPyLtRioyK3bi6RLuDj57sa7Amk/DeomSV9iycS0xqIPA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.13.tgz", + "integrity": "sha512-GQj6TWevNxwsYw20FdT2r2d1f7uiRsF07iFvNYxPIvIyPEV74eZ0zgFEsAH1daK1OxPy+LXdZ4grV17P5tVzhQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.13.tgz", + "integrity": "sha512-sQRH09faifF9w9WS6TKDWr1oLi4hoPx0EIWXZHQK/jcjarDpXGQ2DbF0KnALJCwWBxOIP/1nrmU01fZwwMzY3g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.13.tgz", + "integrity": "sha512-Or1N8DIF3tP+LsloJp+UXLTIMMHMUcWXFhJLCsM4T7MzFzxkeReewRWXfk5mk137cdqVeUEH/R50xAhY1mOkTQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.13.tgz", + "integrity": "sha512-u2mQyqCFrr9vVTP6sfDRfGE6bhOX3/7rInehzxNhHX1HYRIx09H3sDdXzTxnZWKOjIg3qjFTCrYFUZckva5PIg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.13.tgz", + "integrity": "sha512-sOEc4iCanp1Yqyeu9suQcEzfaUcHnqjBUgDg0ZXpjUMUwdSi37S1lu1RGoV1BYInvvGu3y3HHTmvsSfDhx2L8w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", + "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.13.tgz", + "integrity": "sha512-0XTd/NoVUAktIDaA4MdXhve0QWYh7WlZg20EHCuBFR80F8FhbVkRX+AY5cjbUP/IO2itHzt0iHc0iSE5kBUMhQ==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.0.13", + "@tailwindcss/oxide": "4.0.13", + "lightningcss": "1.29.2", + "tailwindcss": "4.0.13" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6" + } + }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vercel/nft": { + "version": "0.29.2", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.2.tgz", + "integrity": "sha512-A/Si4mrTkQqJ6EXJKv5EYCDQ3NL6nJXxG8VGXePsaiQigsomHYQC9xSpX8qGk7AEZk4b1ssbYIqJ0ISQQ7bfcA==", + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^10.4.5", + "graceful-fs": "^4.2.9", + "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@vercel/nft/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.0.tgz", + "integrity": "sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.18.1.tgz", + "integrity": "sha512-m4VWilWZ+Xt6NPoYzC4CgGZim/zQUO7WFL0RHCH0AiEavF1153iC3+me2atDvXpf/yX4PyGUeD8wZLq1cirT3g==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.0", + "@astrojs/internal-helpers": "0.7.6", + "@astrojs/markdown-remark": "6.3.11", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "acorn": "^8.15.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.3.1", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.1.1", + "cssesc": "^3.0.0", + "debug": "^4.4.3", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.6.2", + "diff": "^8.0.3", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.7.0", + "esbuild": "^0.27.3", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.4.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.3", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.3", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.17.4", + "vfile": "^6.0.3", + "vite": "^6.4.1", + "vitefu": "^1.1.1", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.1", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro/node_modules/@astrojs/internal-helpers": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.6.tgz", + "integrity": "sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q==", + "license": "MIT" + }, + "node_modules/astro/node_modules/@astrojs/markdown-remark": { + "version": "6.3.11", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.11.tgz", + "integrity": "sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.6", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/astro/node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/astro/node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/astro/node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/async-sema": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", + "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", + "license": "MIT" + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "node_modules/consola": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", + "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz", + "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/daisyui": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.0.2.tgz", + "integrity": "sha512-AfOlwcE+Ukwuh2NSrMDE8VXOl9UWidj2Q5f64DEYqtZVW0Z9pELBA50iGEKg2FpBUvztFY5DFv7+eZgRts70BA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/saadeghi/daisyui?sponsor=1" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", + "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.7.1.tgz", + "integrity": "sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esbuild": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", + "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.1", + "@esbuild/android-arm": "0.25.1", + "@esbuild/android-arm64": "0.25.1", + "@esbuild/android-x64": "0.25.1", + "@esbuild/darwin-arm64": "0.25.1", + "@esbuild/darwin-x64": "0.25.1", + "@esbuild/freebsd-arm64": "0.25.1", + "@esbuild/freebsd-x64": "0.25.1", + "@esbuild/linux-arm": "0.25.1", + "@esbuild/linux-arm64": "0.25.1", + "@esbuild/linux-ia32": "0.25.1", + "@esbuild/linux-loong64": "0.25.1", + "@esbuild/linux-mips64el": "0.25.1", + "@esbuild/linux-ppc64": "0.25.1", + "@esbuild/linux-riscv64": "0.25.1", + "@esbuild/linux-s390x": "0.25.1", + "@esbuild/linux-x64": "0.25.1", + "@esbuild/netbsd-arm64": "0.25.1", + "@esbuild/netbsd-x64": "0.25.1", + "@esbuild/openbsd-arm64": "0.25.1", + "@esbuild/openbsd-x64": "0.25.1", + "@esbuild/sunos-x64": "0.25.1", + "@esbuild/win32-arm64": "0.25.1", + "@esbuild/win32-ia32": "0.25.1", + "@esbuild/win32-x64": "0.25.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-xml-parser": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.6.tgz", + "integrity": "sha512-Yd4vkROfJf8AuJrDIVMVmYfULKmIJszVsMv7Vo71aocsKgFxpdlpSHXSaInvyYfgw2PRuObQSW2GFpVMUjxu9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", + "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT", + "optional": true + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", + "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.29.2", + "lightningcss-darwin-x64": "1.29.2", + "lightningcss-freebsd-x64": "1.29.2", + "lightningcss-linux-arm-gnueabihf": "1.29.2", + "lightningcss-linux-arm64-gnu": "1.29.2", + "lightningcss-linux-arm64-musl": "1.29.2", + "lightningcss-linux-x64-gnu": "1.29.2", + "lightningcss-linux-x64-musl": "1.29.2", + "lightningcss-win32-arm64-msvc": "1.29.2", + "lightningcss-win32-x64-msvc": "1.29.2" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", + "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", + "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", + "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", + "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", + "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", + "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", + "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", + "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", + "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", + "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", + "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", + "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", + "license": "MIT", + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", + "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", + "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz", + "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz", + "integrity": "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "license": "MIT", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/property-information": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", + "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", + "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", + "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz", + "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.4", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.3", + "@img/sharp-darwin-x64": "0.34.3", + "@img/sharp-libvips-darwin-arm64": "1.2.0", + "@img/sharp-libvips-darwin-x64": "1.2.0", + "@img/sharp-libvips-linux-arm": "1.2.0", + "@img/sharp-libvips-linux-arm64": "1.2.0", + "@img/sharp-libvips-linux-ppc64": "1.2.0", + "@img/sharp-libvips-linux-s390x": "1.2.0", + "@img/sharp-libvips-linux-x64": "1.2.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0", + "@img/sharp-libvips-linuxmusl-x64": "1.2.0", + "@img/sharp-linux-arm": "0.34.3", + "@img/sharp-linux-arm64": "0.34.3", + "@img/sharp-linux-ppc64": "0.34.3", + "@img/sharp-linux-s390x": "0.34.3", + "@img/sharp-linux-x64": "0.34.3", + "@img/sharp-linuxmusl-arm64": "0.34.3", + "@img/sharp-linuxmusl-x64": "0.34.3", + "@img/sharp-wasm32": "0.34.3", + "@img/sharp-win32-arm64": "0.34.3", + "@img/sharp-win32-ia32": "0.34.3", + "@img/sharp-win32-x64": "0.34.3" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.0.tgz", + "integrity": "sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz", + "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/style-to-js": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz", + "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.8" + } + }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tailwindcss": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.13.tgz", + "integrity": "sha512-gbvFrB0fOsTv/OugXWi2PtflJ4S6/ctu6Mmn3bCftmLY/6xRsQVEJPgIIpABwpZ52DpONkCA3bEj5b54MHxF2Q==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz", + "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/type-fest": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz", + "integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.0.tgz", + "integrity": "sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bb1e002 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "website", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/mdx": "^4.2.2", + "@astrojs/netlify": "^6.2.4", + "@astrojs/rss": "^4.0.11", + "@astrojs/sitemap": "^3.3.0", + "@tailwindcss/vite": "^4.0.13", + "astro": "^5.5.5", + "tailwindcss": "^4.0.13" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.16", + "daisyui": "^5.0.2" + } +} diff --git a/public/_headers b/public/_headers new file mode 100644 index 0000000..ec65ad1 --- /dev/null +++ b/public/_headers @@ -0,0 +1,5 @@ +# See: https://docs.netlify.com/routing/headers/ +# https://answers.netlify.com/t/access-control-allow-origin-policy/1813 +/* + Access-Control-Allow-Origin: * + Access-Control-Allow-Methods: OPTIONS, GET \ No newline at end of file diff --git a/public/_redirects b/public/_redirects new file mode 100644 index 0000000..f0648f4 --- /dev/null +++ b/public/_redirects @@ -0,0 +1,5 @@ +# See: https://docs.netlify.com/routing/redirects/ +# https://docs.netlify.com/routing/redirects/redirect-options/ +/schemas/previous/* /schemas/0.9/:splat 200 +/schemas/latest/* /schemas/1.0.3/:splat 200 +/schemas/snapshot/* /schemas/1.0.3/:splat 200 diff --git a/public/icons/android-icon-144x144.png b/public/icons/android-icon-144x144.png new file mode 100644 index 0000000..19aa472 Binary files /dev/null and b/public/icons/android-icon-144x144.png differ diff --git a/public/icons/android-icon-192x192.png b/public/icons/android-icon-192x192.png new file mode 100644 index 0000000..7797924 Binary files /dev/null and b/public/icons/android-icon-192x192.png differ diff --git a/public/icons/android-icon-36x36.png b/public/icons/android-icon-36x36.png new file mode 100644 index 0000000..d4786a2 Binary files /dev/null and b/public/icons/android-icon-36x36.png differ diff --git a/public/icons/android-icon-48x48.png b/public/icons/android-icon-48x48.png new file mode 100644 index 0000000..7ab3dac Binary files /dev/null and b/public/icons/android-icon-48x48.png differ diff --git a/public/icons/android-icon-72x72.png b/public/icons/android-icon-72x72.png new file mode 100644 index 0000000..abf48b9 Binary files /dev/null and b/public/icons/android-icon-72x72.png differ diff --git a/public/icons/android-icon-96x96.png b/public/icons/android-icon-96x96.png new file mode 100644 index 0000000..8fb72dd Binary files /dev/null and b/public/icons/android-icon-96x96.png differ diff --git a/public/icons/apple-icon-114x114.png b/public/icons/apple-icon-114x114.png new file mode 100644 index 0000000..c4ce2a2 Binary files /dev/null and b/public/icons/apple-icon-114x114.png differ diff --git a/public/icons/apple-icon-120x120.png b/public/icons/apple-icon-120x120.png new file mode 100644 index 0000000..a3909fc Binary files /dev/null and b/public/icons/apple-icon-120x120.png differ diff --git a/public/icons/apple-icon-144x144.png b/public/icons/apple-icon-144x144.png new file mode 100644 index 0000000..19aa472 Binary files /dev/null and b/public/icons/apple-icon-144x144.png differ diff --git a/public/icons/apple-icon-152x152.png b/public/icons/apple-icon-152x152.png new file mode 100644 index 0000000..f024619 Binary files /dev/null and b/public/icons/apple-icon-152x152.png differ diff --git a/public/icons/apple-icon-180x180.png b/public/icons/apple-icon-180x180.png new file mode 100644 index 0000000..2367eff Binary files /dev/null and b/public/icons/apple-icon-180x180.png differ diff --git a/public/icons/apple-icon-57x57.png b/public/icons/apple-icon-57x57.png new file mode 100644 index 0000000..7253eb0 Binary files /dev/null and b/public/icons/apple-icon-57x57.png differ diff --git a/public/icons/apple-icon-60x60.png b/public/icons/apple-icon-60x60.png new file mode 100644 index 0000000..9f510da Binary files /dev/null and b/public/icons/apple-icon-60x60.png differ diff --git a/public/icons/apple-icon-72x72.png b/public/icons/apple-icon-72x72.png new file mode 100644 index 0000000..abf48b9 Binary files /dev/null and b/public/icons/apple-icon-72x72.png differ diff --git a/public/icons/apple-icon-76x76.png b/public/icons/apple-icon-76x76.png new file mode 100644 index 0000000..81c6314 Binary files /dev/null and b/public/icons/apple-icon-76x76.png differ diff --git a/public/icons/apple-icon-precomposed.png b/public/icons/apple-icon-precomposed.png new file mode 100644 index 0000000..a831645 Binary files /dev/null and b/public/icons/apple-icon-precomposed.png differ diff --git a/public/icons/apple-icon.png b/public/icons/apple-icon.png new file mode 100644 index 0000000..a831645 Binary files /dev/null and b/public/icons/apple-icon.png differ diff --git a/public/icons/apple-touch-icon-180x180.png b/public/icons/apple-touch-icon-180x180.png new file mode 100644 index 0000000..2367eff Binary files /dev/null and b/public/icons/apple-touch-icon-180x180.png differ diff --git a/public/icons/browserconfig.xml b/public/icons/browserconfig.xml new file mode 100644 index 0000000..e12ed54 --- /dev/null +++ b/public/icons/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/public/icons/favicon-16x16.png b/public/icons/favicon-16x16.png new file mode 100644 index 0000000..6fc13ab Binary files /dev/null and b/public/icons/favicon-16x16.png differ diff --git a/public/icons/favicon-32x32.png b/public/icons/favicon-32x32.png new file mode 100644 index 0000000..7990495 Binary files /dev/null and b/public/icons/favicon-32x32.png differ diff --git a/public/icons/favicon-96x96.png b/public/icons/favicon-96x96.png new file mode 100644 index 0000000..8fb72dd Binary files /dev/null and b/public/icons/favicon-96x96.png differ diff --git a/public/icons/favicon.ico b/public/icons/favicon.ico new file mode 100644 index 0000000..a211f97 Binary files /dev/null and b/public/icons/favicon.ico differ diff --git a/public/icons/logo.svg b/public/icons/logo.svg new file mode 100644 index 0000000..a8457c9 --- /dev/null +++ b/public/icons/logo.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/public/icons/manifest.json b/public/icons/manifest.json new file mode 100644 index 0000000..ec7c350 --- /dev/null +++ b/public/icons/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/public/icons/ms-icon-144x144.png b/public/icons/ms-icon-144x144.png new file mode 100644 index 0000000..19aa472 Binary files /dev/null and b/public/icons/ms-icon-144x144.png differ diff --git a/public/icons/ms-icon-150x150.png b/public/icons/ms-icon-150x150.png new file mode 100644 index 0000000..8d3f649 Binary files /dev/null and b/public/icons/ms-icon-150x150.png differ diff --git a/public/icons/ms-icon-310x310.png b/public/icons/ms-icon-310x310.png new file mode 100644 index 0000000..9eafa4e Binary files /dev/null and b/public/icons/ms-icon-310x310.png differ diff --git a/public/icons/ms-icon-70x70.png b/public/icons/ms-icon-70x70.png new file mode 100644 index 0000000..995df9b Binary files /dev/null and b/public/icons/ms-icon-70x70.png differ diff --git a/public/img/banners/banner1.jpg b/public/img/banners/banner1.jpg new file mode 100644 index 0000000..5ac8e10 Binary files /dev/null and b/public/img/banners/banner1.jpg differ diff --git a/public/img/banners/banner2.jpg b/public/img/banners/banner2.jpg new file mode 100644 index 0000000..f4fb717 Binary files /dev/null and b/public/img/banners/banner2.jpg differ diff --git a/public/img/banners/placeholder-1.png b/public/img/banners/placeholder-1.png new file mode 100644 index 0000000..7653aa4 Binary files /dev/null and b/public/img/banners/placeholder-1.png differ diff --git a/public/img/logos/caf.png b/public/img/logos/caf.png new file mode 100644 index 0000000..5bb49a8 Binary files /dev/null and b/public/img/logos/caf.png differ diff --git a/public/img/logos/cncf-color-bg.svg b/public/img/logos/cncf-color-bg.svg new file mode 100644 index 0000000..c8d667f --- /dev/null +++ b/public/img/logos/cncf-color-bg.svg @@ -0,0 +1 @@ +cncf-color-bg.svg \ No newline at end of file diff --git a/public/img/logos/cncf-white-logo.svg b/public/img/logos/cncf-white-logo.svg new file mode 100644 index 0000000..bef1f96 --- /dev/null +++ b/public/img/logos/cncf-white-logo.svg @@ -0,0 +1 @@ +cncf-white-logo.svg \ No newline at end of file diff --git a/public/img/logos/eventmesh.png b/public/img/logos/eventmesh.png new file mode 100644 index 0000000..f170267 Binary files /dev/null and b/public/img/logos/eventmesh.png differ diff --git a/public/img/logos/eventmesh2.png b/public/img/logos/eventmesh2.png new file mode 100644 index 0000000..e854551 Binary files /dev/null and b/public/img/logos/eventmesh2.png differ diff --git a/public/img/logos/faasnet.png b/public/img/logos/faasnet.png new file mode 100644 index 0000000..efac506 Binary files /dev/null and b/public/img/logos/faasnet.png differ diff --git a/public/img/logos/foxflow.svg b/public/img/logos/foxflow.svg new file mode 100644 index 0000000..85b4789 --- /dev/null +++ b/public/img/logos/foxflow.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/img/logos/huawei.png b/public/img/logos/huawei.png new file mode 100644 index 0000000..a31877b Binary files /dev/null and b/public/img/logos/huawei.png differ diff --git a/public/img/logos/huawei.svg b/public/img/logos/huawei.svg new file mode 100644 index 0000000..7e108e1 --- /dev/null +++ b/public/img/logos/huawei.svg @@ -0,0 +1,22 @@ + + image + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/img/logos/lemlinelogo.png b/public/img/logos/lemlinelogo.png new file mode 100644 index 0000000..4062c37 Binary files /dev/null and b/public/img/logos/lemlinelogo.png differ diff --git a/public/img/logos/lf-stacked-color.svg b/public/img/logos/lf-stacked-color.svg new file mode 100644 index 0000000..e8df47f --- /dev/null +++ b/public/img/logos/lf-stacked-color.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/img/logos/lf-stacked-white.svg b/public/img/logos/lf-stacked-white.svg new file mode 100644 index 0000000..fd7114c --- /dev/null +++ b/public/img/logos/lf-stacked-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/logos/neuroglia.png b/public/img/logos/neuroglia.png new file mode 100644 index 0000000..0f5dfad Binary files /dev/null and b/public/img/logos/neuroglia.png differ diff --git a/public/img/logos/quarkusflow.png b/public/img/logos/quarkusflow.png new file mode 100644 index 0000000..30e1c04 Binary files /dev/null and b/public/img/logos/quarkusflow.png differ diff --git a/public/img/logos/redhat.svg b/public/img/logos/redhat.svg new file mode 100644 index 0000000..ec3968b --- /dev/null +++ b/public/img/logos/redhat.svg @@ -0,0 +1,73 @@ +Red Hat logo + + + + 2023-12-08T20:43:02.786Z + pending + TRA3ca3a36b-3fb6-454e-991b-27f2af9b77af + Logo + 2023-12-08T20:43:02.786Z + RGB + true + Stacked + pending + 2024-05-28T20:46:41.865Z + rhcc-audience:internal + Red Hat + no + DER3ca3a36b-3fb6-454e-991b-27f2af9b77af + Standard + yes + image/svg+xml + 2024-05-29T00:30:45.563Z + + + Red Hat logo + + + Activate + Activate + 2024-05-29T00:40:20.246Z + workflow-process-service + Activate + workflow-process-service + false + 2024-05-29T00:40:20.246Z + workflow-process-service + 2024-05-29T00:40:20.246Z + 250 + 388 + + + Logo B fits best in spaces that are more square. The hat and wordmark are the same size as they are in logo A, but they’re stacked instead of side by side. The clear space should be at least the height of the letter "e" all the way around the logo. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/img/logos/redhat_reverse.svg b/public/img/logos/redhat_reverse.svg new file mode 100644 index 0000000..80cf804 --- /dev/null +++ b/public/img/logos/redhat_reverse.svg @@ -0,0 +1,73 @@ +Red Hat logo + + + + 2023-12-08T20:43:02.386Z + pending + TRA8ddc1496-47ad-4e37-a42b-040a55220da9 + Logo + 2023-12-08T20:43:02.386Z + RGB + true + Stacked + pending + 2024-05-28T20:46:48.060Z + rhcc-audience:internal + Red Hat + no + DER8ddc1496-47ad-4e37-a42b-040a55220da9 + Reverse + yes + image/svg+xml + 2024-05-29T00:30:45.052Z + + + Red Hat logo + + + Activate + Activate + 2024-05-29T00:40:36.400Z + workflow-process-service + Activate + workflow-process-service + false + 2024-05-29T00:40:36.400Z + workflow-process-service + 2024-05-29T00:40:36.400Z + 250 + 388 + + + Logo B fits best in spaces that are more square. The hat and wordmark are the same size as they are in logo A, but they’re stacked instead of side by side. The clear space should be at least the height of the letter "e" all the way around the logo. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/img/logos/sonataflowlogo.png b/public/img/logos/sonataflowlogo.png new file mode 100644 index 0000000..7bfd848 Binary files /dev/null and b/public/img/logos/sonataflowlogo.png differ diff --git a/public/img/logos/sw-logo.png b/public/img/logos/sw-logo.png new file mode 100644 index 0000000..8d2f068 Binary files /dev/null and b/public/img/logos/sw-logo.png differ diff --git a/public/img/logos/synapselogo.png b/public/img/logos/synapselogo.png new file mode 100644 index 0000000..0fca78d Binary files /dev/null and b/public/img/logos/synapselogo.png differ diff --git a/public/img/logos/temporal.png b/public/img/logos/temporal.png new file mode 100644 index 0000000..b53ca6a Binary files /dev/null and b/public/img/logos/temporal.png differ diff --git a/public/img/logos/warrify.png b/public/img/logos/warrify.png new file mode 100644 index 0000000..41190fc Binary files /dev/null and b/public/img/logos/warrify.png differ diff --git a/public/img/logos/zigflowlogo.png b/public/img/logos/zigflowlogo.png new file mode 100644 index 0000000..519ab2a Binary files /dev/null and b/public/img/logos/zigflowlogo.png differ diff --git a/public/schemas/0.5/common.json b/public/schemas/0.5/common.json new file mode 100644 index 0000000..ce2b155 --- /dev/null +++ b/public/schemas/0.5/common.json @@ -0,0 +1,15 @@ +{ + "$id": "https://serverlessworkflow.org/core/0.5/common.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - common schema", + "type": "object", + "definitions": { + "metadata": { + "type": "object", + "description": "Metadata information", + "additionalProperties": { + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.5/events.json b/public/schemas/0.5/events.json new file mode 100644 index 0000000..e5d0356 --- /dev/null +++ b/public/schemas/0.5/events.json @@ -0,0 +1,129 @@ +{ + "$id": "https://serverlessworkflow.org/core/0.5/events.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - events schema", + "type": "object", + "events": { + "type": "array", + "description": "Workflow CloudEvent definitions. Defines CloudEvents that can be consumed or produced", + "items": { + "type": "object", + "$ref": "#/definitions/eventdef" + }, + "minItems": 1 + }, + "required": [ + "events" + ], + "definitions": { + "eventdef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique event name", + "minLength": 1 + }, + "names": { + "type": "array", + "description": "List of unique event names that share the rest of the properties (source, type, kind, default)", + "items": { + "type": "string" + }, + "minItems": 2, + "uniqueItems": true + }, + "source": { + "type": "string", + "description": "CloudEvent source" + }, + "type": { + "type": "string", + "description": "CloudEvent type" + }, + "kind": { + "type": "string", + "enum": [ + "consumed", + "produced" + ], + "description": "Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed'", + "default": "consumed" + }, + "correlation": { + "type": "array", + "description": "CloudEvent correlation definitions", + "minItems": 1, + "items": { + "type": "object", + "$ref": "#/definitions/correlationDef" + } + }, + "metadata": { + "$ref": "common.json#/definitions/metadata", + "description": "Metadata information" + } + }, + "if": { + "properties": { + "kind": { + "const": "consumed" + } + } + }, + "then": { + "oneOf": [ + { + "required": [ + "name", + "source", + "type" + ] + }, + { + "required": [ + "names", + "source", + "type" + ] + } + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type" + ] + }, + { + "required": [ + "names", + "type" + ] + } + ] + } + }, + "correlationDef": { + "type": "object", + "description": "CloudEvent correlation definition", + "properties": { + "contextAttributeName": { + "type": "string", + "description": "CloudEvent Extension Context Attribute name", + "minLength": 1 + }, + "contextAttributeValue": { + "type": "string", + "description": "CloudEvent Extension Context Attribute value", + "minLength": 1 + } + }, + "required": [ + "contextAttributeName" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.5/extensions/kpi.json b/public/schemas/0.5/extensions/kpi.json new file mode 100644 index 0000000..38105d4 --- /dev/null +++ b/public/schemas/0.5/extensions/kpi.json @@ -0,0 +1,282 @@ +{ + "$id": "https://serverlessworkflow.org/extensions/0.5/kpi.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - KPIs Extension Schema", + "type": "object", + "definitions": { + "kpi": { + "type": "object", + "description": "Serverless Workflow KPI Extension", + "properties": { + "extensionid": { + "type": "string", + "default": "workflow-kpi-extension", + "description": "Extension unique identifier" + }, + "workflowid": { + "type": "string", + "minLength": 1, + "description": "Workflow definition unique identifier (workflow id property)" + }, + "currency": { + "type": "string", + "default": "USD", + "description": "Unit for all cost-based KPI parameters. Default 'USD'" + }, + "events": { + "type": "array", + "description": "Events KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/eventskpi" + } + }, + "functions": { + "type": "array", + "description": "Functions KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/functionskpi" + } + }, + "states": { + "type": "array", + "description": "States KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/stateskpi" + } + }, + "workflow": { + "description": "Workflow KPIs", + "$ref": "#/definitions/workflowkpi" + } + }, + "required": [ + "extensionid", + "workflowid" + ] + }, + "eventskpi": { + "type": "object", + "properties": { + "for": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + }, + "maxConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the max amount of times this event is consumed" + }, + "minConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the min amount of times this event is consumed" + }, + "avgConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the avg amount of times this event is consumed" + }, + "maxProduced": { + "type": "string", + "description": "If event kind is 'produced', the max amount of times this event is produced" + }, + "minProduced": { + "type": "string", + "description": "If event kind is 'produced', the min amount times this event is produced" + }, + "avgProduced": { + "type": "string", + "description": "If event kind is 'produced', the avg amount of times this event is produced" + } + }, + "required": [ + "for", + "per" + ] + }, + "functionskpi": { + "type": "object", + "allOf": [ + { + "properties": { + "for": { + "type": "string", + "description": "References an unique function name in the defined workflow functions" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + }, + "maxErrors": { + "type": "string", + "description": "Max number of errors during function invocation" + }, + "maxRetry": { + "type": "string", + "description": "Max number of retries done for this function invocation" + }, + "maxTimeout": { + "type": "string", + "description": "Max number of times the function timeout time was reached" + } + } + }, + { + "$ref": "#/definitions/invocationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "for", + "per" + ] + }, + "stateskpi": { + "type": "object", + "allOf": [ + { + "properties": { + "for": { + "type": "string", + "description": "References an unique state name in the defined workflow events" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + } + } + }, + { + "$ref": "#/definitions/execkpis" + }, + { + "$ref": "#/definitions/durationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "for", + "per" + ] + }, + "workflowkpi": { + "type": "object", + "allOf": [ + { + "properties": { + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + } + } + }, + { + "$ref": "#/definitions/invocationkpis" + }, + { + "$ref": "#/definitions/durationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "per" + ] + }, + "thresholds": { + "type": "object", + "properties": { + "time": { + "type": "string", + "default": "PT1D", + "description": "ISO_8601 time. 1 day default" + }, + "instances": { + "type": "integer", + "minimum": 1, + "default": 1, + "description": "Number of workflow instances" + } + }, + "required": [ + ] + }, + "costkpis": { + "type": "object", + "properties": { + "maxCost": { + "type": "string", + "description": "Max cost" + }, + "minCost": { + "type": "string", + "description": "Min cost" + }, + "avgCost": { + "type": "string", + "description": "Avg cost" + } + } + }, + "invocationkpis": { + "type": "object", + "properties": { + "maxInvoked": { + "type": "string", + "description": "Max number of invocation times" + }, + "minInvoked": { + "type": "string", + "description": "Min number of invocation times" + }, + "avgInvoked": { + "type": "string", + "description": "Avg number of invocation times" + } + } + }, + "durationkpis": { + "type": "object", + "properties": { + "maxDuration": { + "type": "string", + "description": "ISO 8601. Max duration" + }, + "minDuration": { + "type": "string", + "description": "ISO 8601. Min duration" + }, + "avgDuration": { + "type": "string", + "description": "ISO 8601. Avg duration" + } + } + }, + "execkpis": { + "type": "object", + "properties": { + "maxExec": { + "type": "string", + "description": "Max exec number" + }, + "minExec": { + "type": "string", + "description": "Min exec numbe" + }, + "avgExec": { + "type": "string", + "description": "Avg exec number" + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.5/functions.json b/public/schemas/0.5/functions.json new file mode 100644 index 0000000..f912e3a --- /dev/null +++ b/public/schemas/0.5/functions.json @@ -0,0 +1,41 @@ +{ + "$id": "https://serverlessworkflow.org/core/0.5/functions.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - functions schema", + "type": "object", + "functions": { + "type": "array", + "description": "Workflow function definitions", + "items": { + "type": "object", + "$ref": "#/definitions/function" + }, + "minItems": 1 + }, + "required": [ + "functions" + ], + "definitions": { + "function": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique function name", + "minLength": 1 + }, + "operation": { + "type": "string", + "description": "Combination of the function/service OpenAPI definition URI and the operationID of the operation that needs to be invoked, separated by a '#'. For example 'https://petstore.swagger.io/v2/swagger.json#getPetById'", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "required": [ + "name" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.5/retries.json b/public/schemas/0.5/retries.json new file mode 100644 index 0000000..871e9d7 --- /dev/null +++ b/public/schemas/0.5/retries.json @@ -0,0 +1,54 @@ +{ + "$id": "https://serverlessworkflow.org/core/0.5/retries.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - retries schema", + "type": "object", + "retries": { + "type": "array", + "description": "Workflow Retry definitions. Define retry strategies that can be referenced in states onError definitions", + "items": { + "type": "object", + "$ref": "#/definitions/retrydef" + }, + "minItems": 1 + }, + "required": [ + "retries" + ], + "definitions": { + "retrydef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique retry strategy name", + "minLength": 1 + }, + "delay": { + "type": "string", + "description": "Time delay between retry attempts (ISO 8601 duration format)" + }, + "multiplier": { + "type": "string", + "description": "Multiplier value by which interval increases during each attempt (ISO 8601 time format)" + }, + "maxAttempts": { + "type": ["integer","string"], + "minimum": 1, + "minLength": 0, + "description": "Maximum number of retry attempts." + }, + "jitter": { + "type": ["number","string"], + "minimum": 0.0, + "maximum": 1.0, + "description": "If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0.0 and 1.0). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format)" + } + }, + "required": [ + "name", + "maxAttempts" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.5/workflow.json b/public/schemas/0.5/workflow.json new file mode 100644 index 0000000..ea3dfc7 --- /dev/null +++ b/public/schemas/0.5/workflow.json @@ -0,0 +1,1835 @@ +{ + "$id": "https://serverlessworkflow.org/core/0.5/workflow.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - workflow schema", + "type": "object", + "oneOf": [ + { + "properties": { + "id": { + "type": "string", + "description": "Workflow unique identifier", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "Workflow name", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Workflow description" + }, + "version": { + "type": "string", + "description": "Workflow version", + "minLength": 1 + }, + "schemaVersion": { + "type": "string", + "description": "Serverless Workflow schema version", + "minLength": 1 + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that workflow data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that workflow data output adheres to" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + }, + "events": { + "$ref": "events.json#/events" + }, + "functions": { + "$ref": "functions.json#/functions" + }, + "retries": { + "$ref": "retries.json#/retries" + }, + "states": { + "type": "array", + "description": "State definitions", + "items": { + "anyOf": [ + { + "title": "Delay State", + "$ref": "#/definitions/delaystate" + }, + { + "title": "Event State", + "$ref": "#/definitions/eventstate" + }, + { + "title": "Operation State", + "$ref": "#/definitions/operationstate" + }, + { + "title": "Parallel State", + "$ref": "#/definitions/parallelstate" + }, + { + "title": "Switch State", + "$ref": "#/definitions/switchstate" + }, + { + "title": "SubFlow State", + "$ref": "#/definitions/subflowstate" + }, + { + "title": "Inject State", + "$ref": "#/definitions/injectstate" + }, + { + "title": "ForEach State", + "$ref": "#/definitions/foreachstate" + }, + { + "title": "Callback State", + "$ref": "#/definitions/callbackstate" + } + ] + }, + "minItems": 1 + } + } + }, + { + "properties": { + "id": { + "type": "string", + "description": "Workflow unique identifier", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "Workflow name", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Workflow description" + }, + "version": { + "type": "string", + "description": "Workflow version", + "minLength": 1 + }, + "schemaVersion": { + "type": "string", + "description": "Serverless Workflow schema version", + "minLength": 1 + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that workflow data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that workflow data output adheres to" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + }, + "events": { + "type": "string", + "format": "uri", + "description": "URI to a resource containing event definitions (json or yaml)" + }, + "functions": { + "type": "string", + "format": "uri", + "description": "URI to a resource containing function definitions (json or yaml)" + }, + "states": { + "type": "array", + "description": "State definitions", + "items": { + "anyOf": [ + { + "title": "Delay State", + "$ref": "#/definitions/delaystate" + }, + { + "title": "Event State", + "$ref": "#/definitions/eventstate" + }, + { + "title": "Operation State", + "$ref": "#/definitions/operationstate" + }, + { + "title": "Parallel State", + "$ref": "#/definitions/parallelstate" + }, + { + "title": "Switch State", + "$ref": "#/definitions/switchstate" + }, + { + "title": "SubFlow State", + "$ref": "#/definitions/subflowstate" + }, + { + "title": "Inject State", + "$ref": "#/definitions/injectstate" + }, + { + "title": "ForEach State", + "$ref": "#/definitions/foreachstate" + }, + { + "title": "Callback State", + "$ref": "#/definitions/callbackstate" + } + ] + }, + "minItems": 1 + } + } + } + ], + "required": [ + "id", + "name", + "version", + "states" + ], + "definitions": { + "transition": { + "type": "object", + "properties": { + "expression": { + "type": "string", + "description": "JsonPath expression. Evaluates to true if returns non-empty result" + }, + "produceEvents": { + "type": "array", + "description": "Array of events to be produced", + "items": { + "type": "object", + "$ref": "#/definitions/produceeventdef" + } + }, + "nextState": { + "type": "string", + "description": "Name of state to transition to", + "minLength": 1 + } + }, + "required": [ + "nextState" + ] + }, + "error": { + "type": "object", + "properties": { + "error": { + "type": "string", + "description": "Domain-specific error name, or '*' to indicate all possible errors", + "minLength": 1 + }, + "code": { + "type": "string", + "description": "Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*'", + "minLength": 1 + }, + "retryRef": { + "type": "string", + "description": "References a unique name of a retry definition.", + "minLength": 1 + }, + "transition": { + "description": "Transition to next state to handle the error. If retryRef is defined, this transition is taken only if retries were unsuccessful.", + "$ref": "#/definitions/transition" + }, + "end": { + "description": "End workflow execution in case of this error. If retryRef is defined, this ends workflow only if retries were unsuccessful.", + "$ref": "#/definitions/end" + } + }, + "oneOf": [ + { + "required": [ + "error", + "transition" + ] + }, + { + "required": [ + "error", + "end" + ] + } + ] + }, + "onevents": { + "type": "object", + "properties": { + "eventRefs": { + "type" : "array", + "description": "References one or more unique event names in the defined workflow events", + "minItems": 1, + "items": { + "type": "string" + } + }, + "actionMode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies how actions are to be performed (in sequence of parallel)", + "default": "sequential" + }, + "actions": { + "type": "array", + "description": "Actions to be performed if expression matches", + "items": { + "type": "object", + "$ref": "#/definitions/action" + } + }, + "eventDataFilter": { + "$ref": "#/definitions/eventdatafilter" + } + }, + "required": [ + "eventRefs", + "actions" + ] + }, + "action": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique action definition name" + }, + "functionRef": { + "description": "References a reusable function definition", + "$ref": "#/definitions/functionref" + }, + "eventRef": { + "description": "References a 'trigger' and 'result' reusable event definitions", + "$ref": "#/definitions/eventref" + }, + "timeout": { + "type": "string", + "description": "Time period to wait for function execution to complete" + }, + "actionDataFilter": { + "$ref": "#/definitions/actiondatafilter" + } + }, + "oneOf": [ + { + "required": [ + "functionRef" + ] + }, + { + "required": [ + "eventRef" + ] + } + ] + }, + "functionref": { + "type": "object", + "description": "Function Reference", + "properties": { + "refName": { + "type": "string", + "description": "Name of the referenced function" + }, + "parameters": { + "type": "object", + "description": "Function parameters" + } + }, + "required": [ + "refName" + ] + }, + "eventref": { + "type": "object", + "description": "Event References", + "properties": { + "triggerEventRef": { + "type": "string", + "description": "Reference to the unique name of a 'produced' event definition" + }, + "resultEventRef": { + "type": "string", + "description": "Reference to the unique name of a 'consumed' event definition" + }, + "data": { + "type": ["string", "object"], + "description": "If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'triggerEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'triggerEventRef'." + }, + "contextAttributes": { + "type": "object", + "description": "Add additional extension context attributes to the produced event", + "additionalProperties": { + "type": "string" + } + } + }, + "required": [ + "triggerEventRef", + "resultEventRef" + ] + }, + "branch": { + "type": "object", + "description": "Branch Definition", + "properties": { + "name": { + "type": "string", + "description": "Branch name" + }, + "actions": { + "type": "array", + "description": "Actions to be executed in this branch", + "items": { + "type": "object", + "$ref": "#/definitions/action" + } + }, + "workflowId": { + "type": "string", + "description": "Unique Id of a workflow to be executed in this branch" + } + }, + "oneOf": [ + { + "required": [ + "name", + "workflowId" + ] + }, + { + "required": [ + "name", + "actions" + ] + } + ] + }, + "delaystate": { + "type": "object", + "description": "Causes the workflow execution to delay for a specified duration", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "delay", + "description": "State type" + }, + "start": { + "$ref": "#/definitions/start", + "description": "State start definition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "$ref": "#/definitions/statedatafilter" + }, + "timeDelay": { + "type": "string", + "description": "Amount of time (ISO 8601 format) to delay" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + } + }, + "transition": { + "description": "Next transition of the workflow after the time delay", + "$ref": "#/definitions/transition" + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data output adheres to" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "oneOf": [ + { + "required": [ + "name", + "type", + "timeDelay", + "end" + ] + }, + { + "required": [ + "name", + "type", + "timeDelay", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "timeDelay", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "timeDelay", + "end" + ] + } + ] + }, + "eventstate": { + "type": "object", + "description": "This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "event", + "description": "State type" + }, + "exclusive": { + "type": "boolean", + "default": true, + "description": "If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed" + }, + "onEvents": { + "type": "array", + "description": "Define what events trigger one or more actions to be performed", + "items": { + "type": "object", + "$ref": "#/definitions/onevents" + } + }, + "timeout": { + "type": "string", + "description": "Time period to wait for incoming events (ISO 8601 format)" + }, + "stateDataFilter": { + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + } + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data output adheres to" + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "start": { + "$ref": "#/definitions/start", + "description": "State start definition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "oneOf": [ + { + "required": [ + "name", + "type", + "onEvents", + "end" + ] + }, + { + "required": [ + "name", + "type", + "onEvents", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "onEvents", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "onEvents", + "end" + ] + } + ] + }, + "operationstate": { + "type": "object", + "description": "Defines actions be performed. Does not wait for incoming events", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "operation", + "description": "State type" + }, + "start": { + "$ref": "#/definitions/start", + "description": "State start definition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "$ref": "#/definitions/statedatafilter" + }, + "actionMode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies whether actions are performed in sequence or in parallel", + "default": "sequential" + }, + "actions": { + "type": "array", + "description": "Actions to be performed", + "items": { + "type": "object", + "$ref": "#/definitions/action" + } + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + } + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data output adheres to" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "oneOf": [ + { + "required": [ + "name", + "type", + "actionMode", + "actions", + "end" + ] + }, + { + "required": [ + "name", + "type", + "actionMode", + "actions", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "actionMode", + "actions", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "actionMode", + "actions", + "end" + ] + } + ] + }, + "parallelstate": { + "type": "object", + "description": "Consists of a number of states that are executed in parallel", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "parallel", + "description": "State type" + }, + "start": { + "$ref": "#/definitions/start", + "description": "State start definition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "$ref": "#/definitions/statedatafilter" + }, + "branches": { + "type": "array", + "description": "Branch Definitions", + "items": { + "type": "object", + "$ref": "#/definitions/branch" + } + }, + "completionType": { + "type" : "string", + "enum": ["and", "xor", "n_of_m"], + "description": "Option types on how to complete branch execution.", + "default": "and" + }, + "n": { + "type": ["integer","string"], + "minimum": 0, + "minLength": 0, + "description": "Used when completionType is set to 'n_of_m' to specify the 'N' value" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + } + }, + "transition": { + "description": "Next transition of the workflow after all branches have completed execution", + "$ref": "#/definitions/transition" + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data output adheres to" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "oneOf": [ + { + "required": [ + "name", + "type", + "branches", + "end" + ] + }, + { + "required": [ + "name", + "type", + "branches", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "branches", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "branches", + "transition", + "end" + ] + } + ] + }, + "switchstate": { + "oneOf": [ + { + "$ref": "#/definitions/databasedswitch" + }, + { + "$ref": "#/definitions/eventbasedswitch" + } + ] + }, + "eventbasedswitch": { + "type": "object", + "description": "Permits transitions to other states based on events", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "switch", + "description": "State type" + }, + "start": { + "$ref": "#/definitions/start", + "description": "State start definition" + }, + "stateDataFilter": { + "$ref": "#/definitions/statedatafilter" + }, + "eventConditions": { + "type": "array", + "description": "Defines conditions evaluated against events", + "items": { + "type": "object", + "$ref": "#/definitions/eventcondition" + } + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + } + }, + "eventTimeout": { + "type": "string", + "description": "If eventConditions is used, defines the time period to wait for events (ISO 8601 format)" + }, + "default": { + "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition", + "$ref": "#/definitions/defaultdef" + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data output adheres to" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "oneOf": [ + { + "required": [ + "name", + "type", + "eventConditions", + "default" + ] + }, + { + "required": [ + "start", + "name", + "type", + "eventConditions", + "default" + ] + } + ] + }, + "databasedswitch": { + "type": "object", + "description": "Permits transitions to other states based on data conditions", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "switch", + "description": "State type" + }, + "start": { + "$ref": "#/definitions/start", + "description": "State start definition" + }, + "stateDataFilter": { + "$ref": "#/definitions/statedatafilter" + }, + "dataConditions": { + "type": "array", + "description": "Defines conditions evaluated against state data", + "items": { + "type": "object", + "$ref": "#/definitions/datacondition" + } + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + } + }, + "default": { + "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition", + "$ref": "#/definitions/defaultdef" + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data output adheres to" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "oneOf": [ + { + "required": [ + "name", + "type", + "dataConditions", + "default" + ] + }, + { + "required": [ + "start", + "name", + "type", + "dataConditions", + "default" + ] + } + ] + }, + "defaultdef": { + "type": "object", + "description": "Default definition. Can be either a transition or end definition", + "properties": { + "transition": { + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end" + } + }, + "oneOf": [ + { + "required": [ + "transition" + ] + }, + { + "required": [ + "end" + ] + } + ] + }, + "eventcondition": { + "oneOf": [ + { + "$ref": "#/definitions/transitioneventcondition" + }, + { + "$ref": "#/definitions/enddeventcondition" + } + ] + }, + "transitioneventcondition": { + "type": "object", + "description": "Switch state data event condition", + "properties": { + "name": { + "type": "string", + "description": "Event condition name" + }, + "eventRef": { + "type" : "string", + "description": "References an unique event name in the defined workflow events" + }, + "transition": { + "description": "Next transition of the workflow if there is valid matches", + "$ref": "#/definitions/transition" + } + }, + "eventDataFilter": { + "description": "Event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + }, + "required": ["eventRef", "transition"] + }, + "enddeventcondition": { + "type": "object", + "description": "Switch state data event condition", + "properties": { + "name": { + "type": "string", + "description": "Event condition name" + }, + "eventRef": { + "type" : "string", + "description": "References an unique event name in the defined workflow events" + }, + "end": { + "$ref": "#/definitions/end", + "description": "Explicit transition to end" + } + }, + "eventDataFilter": { + "description": "Event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + }, + "required": ["eventRef", "transition"] + }, + "datacondition": { + "oneOf": [ + { + "$ref": "#/definitions/transitiondatacondition" + }, + { + "$ref": "#/definitions/enddatacondition" + } + ] + }, + "transitiondatacondition": { + "type": "object", + "description": "Switch state data based condition", + "properties": { + "name": { + "type": "string", + "description": "Data condition name" + }, + "condition": { + "type": "string", + "description": "JsonPath expression evaluated against state data. True if results are not empty" + }, + "transition": { + "description": "Next transition of the workflow if there is valid matches", + "$ref": "#/definitions/transition" + } + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + }, + "required": ["condition", "transition"] + }, + "enddatacondition": { + "type": "object", + "description": "Switch state data based condition", + "properties": { + "name": { + "type": "string", + "description": "Data condition name" + }, + "condition": { + "type": "string", + "description": "JsonPath expression evaluated against state data. True if results are not empty" + }, + "end": { + "$ref": "#/definitions/end", + "description": "Explicit transition to end" + } + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + }, + "required": ["condition", "end"] + }, + "subflowstate": { + "type": "object", + "description": "Defines a sub-workflow to be executed", + "properties": { + "id": { + "type": "string", + "description": "Unique state id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "subflow", + "description": "State type" + }, + "start": { + "$ref": "#/definitions/start", + "description": "State start definition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "waitForCompletion": { + "type": "boolean", + "default": false, + "description": "Workflow execution must wait for sub-workflow to finish before continuing" + }, + "workflowId": { + "type": "string", + "description": "Sub-workflow unique id" + }, + "stateDataFilter": { + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + } + }, + "transition": { + "description": "Next transition of the workflow after SubFlow has completed execution", + "$ref": "#/definitions/transition" + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data output adheres to" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "oneOf": [ + { + "required": [ + "name", + "type", + "workflowId", + "end" + ] + }, + { + "required": [ + "name", + "type", + "workflowId", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "workflowId", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "workflowId", + "end" + ] + } + ] + }, + "injectstate": { + "type": "object", + "description": "Inject static data into state data. Does not perform any actions", + "properties": { + "id": { + "type": "string", + "description": "Unique state id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "inject", + "description": "State type" + }, + "start": { + "$ref": "#/definitions/start", + "description": "State start definition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "data": { + "type": "object", + "description": "JSON object which can be set as states data input and can be manipulated via filters" + }, + "stateDataFilter": { + "$ref": "#/definitions/statedatafilter" + }, + "transition": { + "description": "Next transition of the workflow after subflow has completed", + "$ref": "#/definitions/transition" + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data output adheres to" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "oneOf": [ + { + "required": [ + "name", + "type", + "end" + ] + }, + { + "required": [ + "name", + "type", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "end" + ] + } + ] + }, + "foreachstate": { + "type": "object", + "description": "Execute a set of defined actions or workflows for each element of a data array", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "foreach", + "description": "State type" + }, + "start": { + "$ref": "#/definitions/start", + "description": "State start definition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "inputCollection": { + "type": "string", + "description": "JsonPath expression selecting an array element of the states data" + }, + "outputCollection": { + "type": "string", + "description": "JsonPath expression specifying an array element of the states data to add the results of each iteration" + }, + "iterationParam": { + "type": "string", + "description": "Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array" + }, + "max": { + "type": ["integer","string"], + "minimum": 0, + "minLength": 0, + "description": "Specifies how upper bound on how many iterations may run in parallel" + }, + "actions": { + "type": "array", + "description": "Actions to be executed for each of the elements of inputCollection", + "items": { + "type": "object", + "$ref": "#/definitions/action" + } + }, + "workflowId": { + "type": "string", + "description": "Unique Id of a workflow to be executed for each of the elements of inputCollection" + }, + "stateDataFilter": { + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + } + }, + "transition": { + "description": "Next transition of the workflow after state has completed", + "$ref": "#/definitions/transition" + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data output adheres to" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "oneOf": [ + { + "required": [ + "name", + "type", + "inputCollection", + "inputParameter", + "workflowId", + "end" + ] + }, + { + "required": [ + "name", + "type", + "inputCollection", + "inputParameter", + "workflowId", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "inputCollection", + "inputParameter", + "workflowId", + "end" + ] + }, + { + "required": [ + "start", + "name", + "type", + "inputCollection", + "inputParameter", + "workflowId", + "transition" + ] + }, + { + "required": [ + "name", + "type", + "inputCollection", + "inputParameter", + "actions", + "end" + ] + }, + { + "required": [ + "name", + "type", + "inputCollection", + "inputParameter", + "actions", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "inputCollection", + "inputParameter", + "actions", + "end" + ] + }, + { + "required": [ + "start", + "name", + "type", + "inputCollection", + "inputParameter", + "actions", + "transition" + ] + } + ] + }, + "callbackstate": { + "type": "object", + "description": "This state performs an action, then waits for the callback event that denotes completion of the action", + "properties": { + "id": { + "type": "string", + "description": "Unique state id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type" : "string", + "const": "callback", + "description": "State type" + }, + "action": { + "description": "Defines the action to be executed", + "$ref": "#/definitions/action" + }, + "eventRef": { + "type" : "string", + "description": "References an unique callback event name in the defined workflow events" + }, + "timeout": { + "type": "string", + "description": "Time period to wait for incoming events (ISO 8601 format)" + }, + "eventDataFilter": { + "description": "Callback event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "stateDataFilter": { + "description": "State data filter definition", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + } + }, + "dataInputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data input adheres to" + }, + "dataOutputSchema": { + "type": "string", + "format": "uri", + "description": "URI to JSON Schema that state data output adheres to" + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "start": { + "$ref": "#/definitions/start", + "description": "State start definition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "oneOf": [ + { + "required": [ + "name", + "type", + "action", + "eventRef", + "timeout", + "end" + ] + }, + { + "required": [ + "name", + "type", + "action", + "eventRef", + "timeout", + "transition" + ] + }, + { + "required": [ + "start", + "name", + "type", + "action", + "eventRef", + "timeout", + "end" + ] + }, + { + "required": [ + "start", + "name", + "type", + "action", + "eventRef", + "timeout", + "transition" + ] + } + ] + }, + "start": { + "type": "object", + "description": "State start definition", + "properties": { + "kind": { + "type": "string", + "enum": [ + "default", + "scheduled" + ], + "description": "Kind of start definition" + }, + "schedule": { + "description": "If kind is 'scheduled', define when the time/repeating intervals at which workflow instances can/should be started", + "$ref": "#/definitions/schedule" + } + }, + "if": { + "properties": { + "kind": { + "const": "scheduled" + } + } + }, + "then": { + "required": [ + "kind", + "schedule" + ] + }, + "else": { + "required": [ + "kind" + ] + } + }, + "schedule": { + "type": "object", + "description": "Start state schedule definition", + "properties": { + "interval": { + "type": "string", + "description": "Time interval (ISO 8601 format) describing when the workflow starting state is active" + }, + "cron": { + "type": "string", + "description": "Repeating interval (cron expression) describing when the workflow starting state should be triggered" + }, + "directInvoke": { + "description": "Define if workflow instances can be created outside of the defined interval/cron", + "type": "string", + "enum": [ + "allow", + "deny" + ] + }, + "timezone": { + "type": "string", + "description": "Timezone name used to evaluate the cron expression. Not used for interval as timezone can be specified there directly. If not specified, should default to local machine timezone." + } + }, + "oneOf": [ + { + "required": [ + "interval", + "directInvoke" + ] + }, + { + "required": [ + "cron", + "directInvoke" + ] + } + ] + }, + "end": { + "type": "object", + "description": "State end definition", + "properties": { + "kind": { + "type": "string", + "enum": [ + "default", + "terminate", + "event" + ], + "description": "Kind of end definition" + }, + "produceEvents": { + "type": "array", + "description": "Used if kind is event. Array of events to be produced", + "items": { + "type": "object", + "$ref": "#/definitions/produceeventdef" + } + } + }, + "if": { + "properties": { + "kind": { + "const": "event" + } + } + }, + "then": { + "required": [ + "kind", + "produceEvents" + ] + }, + "else": { + "required": [ + "kind" + ] + } + }, + "produceeventdef": { + "type": "object", + "description": "Produce an event and set its data", + "properties": { + "eventRef": { + "type": "string", + "description": "References a name of a defined event" + }, + "data": { + "type": ["string", "object"], + "description": "If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event." + }, + "contextAttributes": { + "type": "object", + "description": "Add additional event extension context attributes", + "additionalProperties": { + "type": "string" + } + } + }, + "required": [ + "eventRef" + ] + }, + "statedatafilter": { + "type": "object", + "properties": { + "dataInputPath": { + "type": "string", + "description": "JsonPath definition that selects parts of the states data input" + }, + "dataOutputPath": { + "type": "string", + "description": "JsonPath definition that selects parts of the states data output" + } + }, + "required": [] + }, + "eventdatafilter": { + "type": "object", + "properties": { + "dataOutputPath": { + "type": "string", + "description": "JsonPath definition that selects parts of the event data, to be merged with the states data" + } + }, + "required": [] + }, + "actiondatafilter": { + "type": "object", + "properties": { + "dataInputPath": { + "type": "string", + "description": "JsonPath definition that selects parts of the states data input to be the action data" + }, + "dataResultsPath": { + "type": "string", + "description": "JsonPath definition that selects parts of the actions data result, to be merged with the states data" + } + }, + "required": [] + }, + "errordatafilter": { + "type": "object", + "properties": { + "dataOutputPath": { + "type": "string", + "description": "JsonPath definition that selects parts of the error data, to be merged with the states data" + } + }, + "required": [] + } + } +} diff --git a/public/schemas/0.6/common.json b/public/schemas/0.6/common.json new file mode 100644 index 0000000..3d2e4d3 --- /dev/null +++ b/public/schemas/0.6/common.json @@ -0,0 +1,15 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.6/common.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - common schema", + "type": "object", + "definitions": { + "metadata": { + "type": "object", + "description": "Metadata information", + "additionalProperties": { + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.6/events.json b/public/schemas/0.6/events.json new file mode 100644 index 0000000..7ba488c --- /dev/null +++ b/public/schemas/0.6/events.json @@ -0,0 +1,112 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.6/events.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - events schema", + "type": "object", + "events": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing event definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow CloudEvent definitions. Defines CloudEvents that can be consumed or produced", + "items": { + "type": "object", + "$ref": "#/definitions/eventdef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "events" + ], + "definitions": { + "eventdef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique event name", + "minLength": 1 + }, + "source": { + "type": "string", + "description": "CloudEvent source" + }, + "type": { + "type": "string", + "description": "CloudEvent type" + }, + "kind": { + "type": "string", + "enum": [ + "consumed", + "produced" + ], + "description": "Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed'", + "default": "consumed" + }, + "correlation": { + "type": "array", + "description": "CloudEvent correlation definitions", + "minItems": 1, + "items": { + "type": "object", + "$ref": "#/definitions/correlationDef" + }, + "additionalItems": false + }, + "metadata": { + "$ref": "common.json#/definitions/metadata", + "description": "Metadata information" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "kind": { + "const": "consumed" + } + } + }, + "then": { + "required": [ + "name", + "source", + "type" + ] + }, + "else": { + "required": [ + "name", + "type" + ] + } + }, + "correlationDef": { + "type": "object", + "description": "CloudEvent correlation definition", + "properties": { + "contextAttributeName": { + "type": "string", + "description": "CloudEvent Extension Context Attribute name", + "minLength": 1 + }, + "contextAttributeValue": { + "type": "string", + "description": "CloudEvent Extension Context Attribute value", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "contextAttributeName" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.6/extensions/kpi.json b/public/schemas/0.6/extensions/kpi.json new file mode 100644 index 0000000..1f12781 --- /dev/null +++ b/public/schemas/0.6/extensions/kpi.json @@ -0,0 +1,282 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.6/extensions/kpi.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - KPIs Extension Schema", + "type": "object", + "definitions": { + "kpi": { + "type": "object", + "description": "Serverless Workflow KPI Extension", + "properties": { + "extensionid": { + "type": "string", + "default": "workflow-kpi-extension", + "description": "Extension unique identifier" + }, + "workflowid": { + "type": "string", + "minLength": 1, + "description": "Workflow definition unique identifier (workflow id property)" + }, + "currency": { + "type": "string", + "default": "USD", + "description": "Unit for all cost-based KPI parameters. Default 'USD'" + }, + "events": { + "type": "array", + "description": "Events KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/eventskpi" + } + }, + "functions": { + "type": "array", + "description": "Functions KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/functionskpi" + } + }, + "states": { + "type": "array", + "description": "States KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/stateskpi" + } + }, + "workflow": { + "description": "Workflow KPIs", + "$ref": "#/definitions/workflowkpi" + } + }, + "required": [ + "extensionid", + "workflowid" + ] + }, + "eventskpi": { + "type": "object", + "properties": { + "for": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + }, + "maxConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the max amount of times this event is consumed" + }, + "minConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the min amount of times this event is consumed" + }, + "avgConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the avg amount of times this event is consumed" + }, + "maxProduced": { + "type": "string", + "description": "If event kind is 'produced', the max amount of times this event is produced" + }, + "minProduced": { + "type": "string", + "description": "If event kind is 'produced', the min amount times this event is produced" + }, + "avgProduced": { + "type": "string", + "description": "If event kind is 'produced', the avg amount of times this event is produced" + } + }, + "required": [ + "for", + "per" + ] + }, + "functionskpi": { + "type": "object", + "allOf": [ + { + "properties": { + "for": { + "type": "string", + "description": "References an unique function name in the defined workflow functions" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + }, + "maxErrors": { + "type": "string", + "description": "Max number of errors during function invocation" + }, + "maxRetry": { + "type": "string", + "description": "Max number of retries done for this function invocation" + }, + "maxTimeout": { + "type": "string", + "description": "Max number of times the function timeout time was reached" + } + } + }, + { + "$ref": "#/definitions/invocationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "for", + "per" + ] + }, + "stateskpi": { + "type": "object", + "allOf": [ + { + "properties": { + "for": { + "type": "string", + "description": "References an unique state name in the defined workflow events" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + } + } + }, + { + "$ref": "#/definitions/execkpis" + }, + { + "$ref": "#/definitions/durationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "for", + "per" + ] + }, + "workflowkpi": { + "type": "object", + "allOf": [ + { + "properties": { + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + } + } + }, + { + "$ref": "#/definitions/invocationkpis" + }, + { + "$ref": "#/definitions/durationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "per" + ] + }, + "thresholds": { + "type": "object", + "properties": { + "time": { + "type": "string", + "default": "PT1D", + "description": "ISO_8601 time. 1 day default" + }, + "instances": { + "type": "integer", + "minimum": 1, + "default": 1, + "description": "Number of workflow instances" + } + }, + "required": [ + ] + }, + "costkpis": { + "type": "object", + "properties": { + "maxCost": { + "type": "string", + "description": "Max cost" + }, + "minCost": { + "type": "string", + "description": "Min cost" + }, + "avgCost": { + "type": "string", + "description": "Avg cost" + } + } + }, + "invocationkpis": { + "type": "object", + "properties": { + "maxInvoked": { + "type": "string", + "description": "Max number of invocation times" + }, + "minInvoked": { + "type": "string", + "description": "Min number of invocation times" + }, + "avgInvoked": { + "type": "string", + "description": "Avg number of invocation times" + } + } + }, + "durationkpis": { + "type": "object", + "properties": { + "maxDuration": { + "type": "string", + "description": "ISO 8601. Max duration" + }, + "minDuration": { + "type": "string", + "description": "ISO 8601. Min duration" + }, + "avgDuration": { + "type": "string", + "description": "ISO 8601. Avg duration" + } + } + }, + "execkpis": { + "type": "object", + "properties": { + "maxExec": { + "type": "string", + "description": "Max exec number" + }, + "minExec": { + "type": "string", + "description": "Min exec numbe" + }, + "avgExec": { + "type": "string", + "description": "Avg exec number" + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.6/functions.json b/public/schemas/0.6/functions.json new file mode 100644 index 0000000..6b30cd0 --- /dev/null +++ b/public/schemas/0.6/functions.json @@ -0,0 +1,60 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.6/functions.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - functions schema", + "type": "object", + "functions": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing function definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow function definitions", + "items": { + "type": "object", + "$ref": "#/definitions/function" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "functions" + ], + "definitions": { + "function": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique function name", + "minLength": 1 + }, + "operation": { + "type": "string", + "description": "If type is `rest`, #. If type is `rpc`, ##. If type is `expression`, defines the workflow expression.", + "minLength": 1 + }, + "type": { + "type": "string", + "description": "Defines the function type. Is either `rest`, `rpc` or `expression`. Default is `rest`", + "enum": [ + "rest", + "rpc", + "expression" + ], + "default": "rest" + } + }, + "additionalProperties": false, + "required": [ + "name", + "operation" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.6/retries.json b/public/schemas/0.6/retries.json new file mode 100644 index 0000000..8264dd8 --- /dev/null +++ b/public/schemas/0.6/retries.json @@ -0,0 +1,85 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.6/retries.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - retries schema", + "type": "object", + "retries": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing retry definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow Retry definitions. Define retry strategies that can be referenced in states onError definitions", + "items": { + "type": "object", + "$ref": "#/definitions/retrydef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "retries" + ], + "definitions": { + "retrydef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique retry strategy name", + "minLength": 1 + }, + "delay": { + "type": "string", + "description": "Time delay between retry attempts (ISO 8601 duration format)" + }, + "maxDelay": { + "type": "string", + "description": "Maximum time delay between retry attempts (ISO 8601 duration format)" + }, + "increment": { + "type": "string", + "description": "Static value by which the delay increases during each attempt (ISO 8601 time format)" + }, + "multiplier": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 1, + "multipleOf": 0.01, + "description": "Numeric value, if specified the delay between retries is multiplied by this value." + }, + "maxAttempts": { + "type": [ + "number", + "string" + ], + "minimum": 1, + "minLength": 0, + "description": "Maximum number of retry attempts." + }, + "jitter": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "maximum": 1, + "description": "If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0 and 1). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format)" + } + }, + "additionalProperties": false, + "required": [ + "name", + "maxAttempts" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.6/workflow.json b/public/schemas/0.6/workflow.json new file mode 100644 index 0000000..1ce11c5 --- /dev/null +++ b/public/schemas/0.6/workflow.json @@ -0,0 +1,1799 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.6/workflow.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - workflow schema", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Workflow unique identifier", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "Workflow name", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Workflow description" + }, + "version": { + "type": "string", + "description": "Workflow version", + "minLength": 1 + }, + "start": { + "$ref": "#/definitions/startdef" + }, + "schemaVersion": { + "type": "string", + "description": "Serverless Workflow schema version", + "minLength": 1 + }, + "expressionLang": { + "type": "string", + "description": "Identifies the expression language used for workflow expressions. Default is 'jq'", + "default": "jq", + "minLength": 1 + }, + "execTimeout": { + "$ref": "#/definitions/exectimeout" + }, + "keepActive": { + "type": "boolean", + "default": false, + "description": "If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'execTimeout'" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + }, + "events": { + "$ref": "events.json#/events" + }, + "functions": { + "$ref": "functions.json#/functions" + }, + "retries": { + "$ref": "retries.json#/retries" + }, + "states": { + "type": "array", + "description": "State definitions", + "items": { + "anyOf": [ + { + "title": "Delay State", + "$ref": "#/definitions/delaystate" + }, + { + "title": "Event State", + "$ref": "#/definitions/eventstate" + }, + { + "title": "Operation State", + "$ref": "#/definitions/operationstate" + }, + { + "title": "Parallel State", + "$ref": "#/definitions/parallelstate" + }, + { + "title": "Switch State", + "$ref": "#/definitions/switchstate" + }, + { + "title": "SubFlow State", + "$ref": "#/definitions/subflowstate" + }, + { + "title": "Inject State", + "$ref": "#/definitions/injectstate" + }, + { + "title": "ForEach State", + "$ref": "#/definitions/foreachstate" + }, + { + "title": "Callback State", + "$ref": "#/definitions/callbackstate" + } + ] + }, + "additionalItems": false, + "minItems": 1 + } + }, + "required": [ + "id", + "name", + "version", + "start", + "states" + ], + "definitions": { + "crondef": { + "oneOf": [ + { + "type": "string", + "description": "Cron expression defining when workflow instances should be created (automatically)", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "expression": { + "type": "string", + "description": "Repeating interval (cron expression) describing when the workflow instance should be created", + "minLength": 1 + }, + "validUntil": { + "type": "string", + "description": "Specific date and time (ISO 8601 format) when the cron expression invocation is no longer valid" + } + }, + "additionalProperties": false, + "required": ["expression"] + } + ] + }, + "exectimeout": { + "type": "object", + "properties": { + "duration": { + "type": "string", + "description": "Timeout duration (ISO 8601 duration format)", + "minLength": 1 + }, + "interrupt": { + "type": "boolean", + "description": "If `false`, workflow instance is allowed to finish current execution. If `true`, current workflow execution is abrupted.", + "default": false + }, + "runBefore": { + "type": "string", + "description": "Name of a workflow state to be executed before workflow instance is terminated", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "duration" + ] + }, + "transition": { + "oneOf": [ + { + "type": "string", + "description": "Name of state to transition to", + "minLength": 1 + }, + { + "type": "object", + "description": "Function Reference", + "properties": { + "nextState": { + "type": "string", + "description": "Name of state to transition to", + "minLength": 1 + }, + "produceEvents": { + "type": "array", + "description": "Array of events to be produced before the transition happens", + "items": { + "type": "object", + "$ref": "#/definitions/produceeventdef" + }, + "additionalItems": false + }, + "compensate": { + "type": "boolean", + "default": false, + "description": "If set to true, triggers workflow compensation when before this transition is taken. Default is false" + } + }, + "additionalProperties": false, + "required": [ + "nextState" + ] + } + ] + }, + "error": { + "type": "object", + "properties": { + "error": { + "type": "string", + "description": "Domain-specific error name, or '*' to indicate all possible errors", + "minLength": 1 + }, + "code": { + "type": "string", + "description": "Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*'", + "minLength": 1 + }, + "retryRef": { + "type": "string", + "description": "References a unique name of a retry definition.", + "minLength": 1 + }, + "transition": { + "description": "Transition to next state to handle the error. If retryRef is defined, this transition is taken only if retries were unsuccessful.", + "$ref": "#/definitions/transition" + }, + "end": { + "description": "End workflow execution in case of this error. If retryRef is defined, this ends workflow only if retries were unsuccessful.", + "$ref": "#/definitions/end" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "error", + "transition" + ] + }, + { + "required": [ + "error", + "end" + ] + } + ] + }, + "onevents": { + "type": "object", + "properties": { + "eventRefs": { + "type": "array", + "description": "References one or more unique event names in the defined workflow events", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "actionMode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies how actions are to be performed (in sequence of parallel)", + "default": "sequential" + }, + "actions": { + "type": "array", + "description": "Actions to be performed if expression matches", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + }, + "eventDataFilter": { + "description": "Event data filter", + "$ref": "#/definitions/eventdatafilter" + } + }, + "additionalProperties": false, + "required": [ + "eventRefs" + ] + }, + "action": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique action definition name" + }, + "functionRef": { + "description": "References a function to be invoked", + "$ref": "#/definitions/functionref" + }, + "eventRef": { + "description": "References a 'trigger' and 'result' reusable event definitions", + "$ref": "#/definitions/eventref" + }, + "timeout": { + "type": "string", + "description": "Time period to wait for function execution to complete" + }, + "actionDataFilter": { + "description": "Action data filter", + "$ref": "#/definitions/actiondatafilter" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "functionRef" + ] + }, + { + "required": [ + "eventRef" + ] + } + ] + }, + "functionref": { + "oneOf": [ + { + "type": "string", + "description": "Name of the referenced function", + "minLength": 1 + }, + { + "type": "object", + "description": "Function Reference", + "properties": { + "refName": { + "type": "string", + "description": "Name of the referenced function" + }, + "arguments": { + "type": "object", + "description": "Function arguments/inputs" + } + }, + "additionalProperties": false, + "required": [ + "refName" + ] + } + ] + }, + "eventref": { + "type": "object", + "description": "Event References", + "properties": { + "triggerEventRef": { + "type": "string", + "description": "Reference to the unique name of a 'produced' event definition" + }, + "resultEventRef": { + "type": "string", + "description": "Reference to the unique name of a 'consumed' event definition" + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'triggerEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'triggerEventRef'." + }, + "contextAttributes": { + "type": "object", + "description": "Add additional extension context attributes to the produced event", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "triggerEventRef", + "resultEventRef" + ] + }, + "branch": { + "type": "object", + "description": "Branch Definition", + "properties": { + "name": { + "type": "string", + "description": "Branch name" + }, + "actions": { + "type": "array", + "description": "Actions to be executed in this branch", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + }, + "workflowId": { + "type": "string", + "description": "Unique Id of a workflow to be executed in this branch" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "name", + "workflowId" + ] + }, + { + "required": [ + "name", + "actions" + ] + } + ] + }, + "delaystate": { + "type": "object", + "description": "Causes the workflow execution to delay for a specified duration", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "delay", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "timeDelay": { + "type": "string", + "description": "Amount of time (ISO 8601 format) to delay" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after the time delay", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": ["usedForCompensation"] + }, + "then": { + "required": [ + "name", + "type", + "timeDelay" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "timeDelay", + "end" + ] + }, + { + "required": [ + "name", + "type", + "timeDelay", + "transition" + ] + } + ] + } + }, + "eventstate": { + "type": "object", + "description": "This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "event", + "description": "State type" + }, + "exclusive": { + "type": "boolean", + "default": true, + "description": "If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed" + }, + "onEvents": { + "type": "array", + "description": "Define the events to be consumed and optional actions to be performed", + "items": { + "type": "object", + "$ref": "#/definitions/onevents" + }, + "additionalItems": false + }, + "timeout": { + "type": "string", + "description": "Time period to wait for incoming events (ISO 8601 format)" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "name", + "type", + "onEvents", + "end" + ] + }, + { + "required": [ + "name", + "type", + "onEvents", + "transition" + ] + } + ] + }, + "operationstate": { + "type": "object", + "description": "Defines actions be performed. Does not wait for incoming events", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "operation", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "actionMode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies whether actions are performed in sequence or in parallel", + "default": "sequential" + }, + "actions": { + "type": "array", + "description": "Actions to be performed", + "items": { + "type": "object", + "$ref": "#/definitions/action" + } + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": ["usedForCompensation"] + }, + "then": { + "required": [ + "name", + "type", + "actions" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "actions", + "end" + ] + }, + { + "required": [ + "name", + "type", + "actions", + "transition" + ] + } + ] + } + }, + "parallelstate": { + "type": "object", + "description": "Consists of a number of states that are executed in parallel", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "parallel", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "branches": { + "type": "array", + "description": "Branch Definitions", + "items": { + "type": "object", + "$ref": "#/definitions/branch" + }, + "additionalItems": false + }, + "completionType": { + "type": "string", + "enum": [ + "and", + "xor", + "n_of_m" + ], + "description": "Option types on how to complete branch execution.", + "default": "and" + }, + "n": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 0, + "description": "Used when completionType is set to 'n_of_m' to specify the 'N' value" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all branches have completed execution", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": ["usedForCompensation"] + }, + "then": { + "required": [ + "name", + "type", + "branches" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "branches", + "end" + ] + }, + { + "required": [ + "name", + "type", + "branches", + "transition" + ] + } + ] + } + }, + "switchstate": { + "oneOf": [ + { + "$ref": "#/definitions/databasedswitch" + }, + { + "$ref": "#/definitions/eventbasedswitch" + } + ] + }, + "eventbasedswitch": { + "type": "object", + "description": "Permits transitions to other states based on events", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "switch", + "description": "State type" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "eventConditions": { + "type": "array", + "description": "Defines conditions evaluated against events", + "items": { + "type": "object", + "$ref": "#/definitions/eventcondition" + }, + "additionalItems": false + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "eventTimeout": { + "type": "string", + "description": "If eventConditions is used, defines the time period to wait for events (ISO 8601 format)" + }, + "default": { + "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition", + "$ref": "#/definitions/defaultdef" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "type", + "eventConditions" + ] + }, + "databasedswitch": { + "type": "object", + "description": "Permits transitions to other states based on data conditions", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "switch", + "description": "State type" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "dataConditions": { + "type": "array", + "description": "Defines conditions evaluated against state data", + "items": { + "type": "object", + "$ref": "#/definitions/datacondition" + }, + "additionalItems": false + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "default": { + "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition", + "$ref": "#/definitions/defaultdef" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "type", + "dataConditions" + ] + }, + "defaultdef": { + "type": "object", + "description": "Default definition. Can be either a transition or end definition", + "properties": { + "transition": { + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "transition" + ] + }, + { + "required": [ + "end" + ] + } + ] + }, + "eventcondition": { + "oneOf": [ + { + "$ref": "#/definitions/transitioneventcondition" + }, + { + "$ref": "#/definitions/enddeventcondition" + } + ] + }, + "transitioneventcondition": { + "type": "object", + "description": "Switch state data event condition", + "properties": { + "name": { + "type": "string", + "description": "Event condition name" + }, + "eventRef": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "transition": { + "description": "Next transition of the workflow if there is valid matches", + "$ref": "#/definitions/transition" + }, + "eventDataFilter": { + "description": "Event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "eventRef", + "transition" + ] + }, + "enddeventcondition": { + "type": "object", + "description": "Switch state data event condition", + "properties": { + "name": { + "type": "string", + "description": "Event condition name" + }, + "eventRef": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "end": { + "$ref": "#/definitions/end", + "description": "Explicit transition to end" + }, + "eventDataFilter": { + "description": "Event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "eventRef", + "end" + ] + }, + "datacondition": { + "oneOf": [ + { + "$ref": "#/definitions/transitiondatacondition" + }, + { + "$ref": "#/definitions/enddatacondition" + } + ] + }, + "transitiondatacondition": { + "type": "object", + "description": "Switch state data based condition", + "properties": { + "name": { + "type": "string", + "description": "Data condition name" + }, + "condition": { + "type": "string", + "description": "Workflow expression evaluated against state data. Must evaluate to true or false" + }, + "transition": { + "description": "Workflow transition if condition is evaluated to true", + "$ref": "#/definitions/transition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "condition", + "transition" + ] + }, + "enddatacondition": { + "type": "object", + "description": "Switch state data based condition", + "properties": { + "name": { + "type": "string", + "description": "Data condition name" + }, + "condition": { + "type": "string", + "description": "Workflow expression evaluated against state data. Must evaluate to true or false" + }, + "end": { + "$ref": "#/definitions/end", + "description": "Workflow end definition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "condition", + "end" + ] + }, + "subflowstate": { + "type": "object", + "description": "Defines a sub-workflow to be executed", + "properties": { + "id": { + "type": "string", + "description": "Unique state id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "subflow", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "waitForCompletion": { + "type": "boolean", + "default": false, + "description": "Workflow execution must wait for sub-workflow to finish before continuing" + }, + "workflowId": { + "type": "string", + "description": "Sub-workflow unique id" + }, + "repeat": { + "$ref": "#/definitions/repeat", + "description": "SubFlow state repeat exec definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after SubFlow has completed execution", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "workflowId" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "workflowId", + "end" + ] + }, + { + "required": [ + "name", + "type", + "workflowId", + "transition" + ] + } + ] + } + }, + "injectstate": { + "type": "object", + "description": "Inject static data into state data. Does not perform any actions", + "properties": { + "id": { + "type": "string", + "description": "Unique state id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "inject", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "data": { + "type": "object", + "description": "JSON object which can be set as states data input and can be manipulated via filters" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "transition": { + "description": "Next transition of the workflow after subflow has completed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": ["usedForCompensation"] + }, + "then": { + "required": [ + "name", + "type", + "data" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "data", + "end" + ] + }, + { + "required": [ + "name", + "type", + "data", + "transition" + ] + } + ] + } + }, + "foreachstate": { + "type": "object", + "description": "Execute a set of defined actions or workflows for each element of a data array", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "foreach", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "inputCollection": { + "type": "string", + "description": "Workflow expression selecting an array element of the states data" + }, + "outputCollection": { + "type": "string", + "description": "Workflow expression specifying an array element of the states data to add the results of each iteration" + }, + "iterationParam": { + "type": "string", + "description": "Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array" + }, + "max": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 0, + "description": "Specifies how upper bound on how many iterations may run in parallel" + }, + "actions": { + "type": "array", + "description": "Actions to be executed for each of the elements of inputCollection", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + }, + "workflowId": { + "type": "string", + "description": "Unique Id of a workflow to be executed for each of the elements of inputCollection" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after state has completed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": ["usedForCompensation"] + }, + "then": { + "required": [ + "name", + "type", + "inputCollection", + "iterationParam", + "workflowId" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "inputCollection", + "iterationParam", + "workflowId", + "end" + ] + }, + { + "required": [ + "name", + "type", + "inputCollection", + "iterationParam", + "workflowId", + "transition" + ] + }, + { + "required": [ + "name", + "type", + "inputCollection", + "iterationParam", + "actions", + "end" + ] + }, + { + "required": [ + "name", + "type", + "inputCollection", + "iterationParam", + "actions", + "transition" + ] + } + ] + } + }, + "callbackstate": { + "type": "object", + "description": "This state performs an action, then waits for the callback event that denotes completion of the action", + "properties": { + "id": { + "type": "string", + "description": "Unique state id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "callback", + "description": "State type" + }, + "action": { + "description": "Defines the action to be executed", + "$ref": "#/definitions/action" + }, + "eventRef": { + "type": "string", + "description": "References an unique callback event name in the defined workflow events" + }, + "timeout": { + "type": "string", + "description": "Time period to wait for incoming events (ISO 8601 format)" + }, + "eventDataFilter": { + "description": "Event data filter", + "$ref": "#/definitions/eventdatafilter" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling and retries definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": ["usedForCompensation"] + }, + "then": { + "required": [ + "name", + "type", + "action", + "eventRef", + "timeout" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "action", + "eventRef", + "timeout", + "end" + ] + }, + { + "required": [ + "name", + "type", + "action", + "eventRef", + "timeout", + "transition" + ] + } + ] + } + }, + "startdef": { + "oneOf": [ + { + "type": "string", + "description": "Name of the starting workflow state", + "minLength": 1 + }, + { + "type": "object", + "description": "Workflow start definition", + "properties": { + "stateName": { + "type": "string", + "description": "Name of the starting workflow state", + "minLength": 1 + }, + "schedule": { + "description": "Define the time/repeating intervals or cron at which workflow instances should be automatically started.", + "$ref": "#/definitions/schedule" + } + }, + "additionalProperties": false, + "required": [ + "stateName", + "schedule" + ] + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "string", + "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created. (UTC timezone is assumed)", + "minLength": 1 + }, + { + "type": "object", + "description": "Start state schedule definition", + "properties": { + "interval": { + "type": "string", + "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.", + "minLength": 1 + }, + "cron": { + "$ref": "#/definitions/crondef" + }, + "timezone": { + "type": "string", + "description": "Timezone name used to evaluate the interval & cron-expression. (default: UTC)" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "interval" + ] + }, + { + "required": [ + "cron" + ] + } + ] + } + ] + }, + "end": { + "oneOf": [ + { + "type": "boolean", + "description": "State end definition", + "default": true + }, + { + "type": "object", + "description": "State end definition", + "properties": { + "terminate": { + "type": "boolean", + "default": false, + "description": "If true, completes all execution flows in the given workflow instance" + }, + "produceEvents": { + "type": "array", + "description": "Defines events that should be produced", + "items": { + "type": "object", + "$ref": "#/definitions/produceeventdef" + }, + "additionalItems": false + }, + "compensate": { + "type": "boolean", + "default": false, + "description": "If set to true, triggers workflow compensation. Default is false" + } + }, + "additionalProperties": false, + "required": [ + ] + } + ] + }, + "produceeventdef": { + "type": "object", + "description": "Produce an event and set its data", + "properties": { + "eventRef": { + "type": "string", + "description": "References a name of a defined event" + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event." + }, + "contextAttributes": { + "type": "object", + "description": "Add additional event extension context attributes", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "eventRef" + ] + }, + "statedatafilter": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Workflow expression to filter the state data input" + }, + "output": { + "type": "string", + "description": "Workflow expression that filters the state data output" + } + }, + "additionalProperties": false, + "required": [] + }, + "eventdatafilter": { + "type": "object", + "properties": { + "data": { + "type": "string", + "description": "Workflow expression that filters of the event data (payload)" + }, + "toStateData": { + "type": "string", + "description": " Workflow expression that selects a state data element to which the event payload should be added/merged into. If not specified, denotes, the top-level state data element." + } + }, + "additionalProperties": false, + "required": [] + }, + "actiondatafilter": { + "type": "object", + "properties": { + "fromStateData": { + "type": "string", + "description": "Workflow expression that selects state data that the state action can use" + }, + "results": { + "type": "string", + "description": "Workflow expression that filters the actions data results" + }, + "toStateData": { + "type": "string", + "description": "Workflow expression that selects a state data element to which the action results should be added/merged into. If not specified, denote, the top-level state data element" + } + }, + "additionalProperties": false, + "required": [] + }, + "repeat": { + "type": "object", + "properties": { + "expression": { + "type": "string", + "description": "Expression evaluated against SubFlow state data. SubFlow will repeat execution as long as this expression is true or until the max property count is reached", + "minLength": 1 + }, + "checkBefore": { + "type": "boolean", + "description": "If true, the expression is evaluated before each repeat execution, if false the expression is evaluated after each repeat execution", + "default": true + }, + "max": { + "type": "integer", + "description": "Sets the maximum amount of repeat executions", + "minimum": 0 + }, + "continueOnError": { + "type": "boolean", + "description": "If true, repeats executions in a case unhandled errors propagate from the sub-workflow to this state", + "default": false + }, + "stopOnEvents": { + "type": "array", + "description": "List referencing defined consumed workflow events. SubFlow will repeat execution until one of the defined events is consumed, or until the max property count is reached", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + } + }, + "additionalProperties": false, + "required": [] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/auth.json b/public/schemas/0.7/auth.json new file mode 100644 index 0000000..8678bb9 --- /dev/null +++ b/public/schemas/0.7/auth.json @@ -0,0 +1,218 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/auth.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - auth schema", + "type": "object", + "auth": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing auth definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow auth definitions", + "items": { + "type": "object", + "$ref": "#/definitions/authdef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "auth" + ], + "definitions": { + "authdef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique auth definition name", + "minLength": 1 + }, + "scheme": { + "type": "string", + "description": "Defines the auth type", + "enum": [ + "basic", + "bearer", + "oauth2" + ], + "default": "basic" + }, + "properties": { + "oneOf": [ + { + "type": "string", + "description": "Expression referencing a workflow secret that contains all needed auth info" + }, + { + "title": "Basic Auth Info", + "$ref": "#/definitions/basicpropsdef" + }, + { + "title": "Bearer Auth Info State", + "$ref": "#/definitions/bearerpropsdef" + }, + { + "title": "OAuth2 Info", + "$ref": "#/definitions/oauth2propsdef" + } + ] + } + }, + "required": [ + "name", + "properties" + ] + }, + "basicpropsdef": { + "oneOf": [ + { + "type": "string", + "description": "Expression referencing a workflow secret that contains all needed basic auth info" + }, + { + "type": "object", + "description": "Basic auth information", + "properties": { + "username": { + "type": "string", + "description": "String or a workflow expression. Contains the user name", + "minLength": 1 + }, + "password": { + "type": "string", + "description": "String or a workflow expression. Contains the user password", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "required": [ + "username", + "password" + ], + "additionalProperties": false + } + ] + }, + "bearerpropsdef": { + "oneOf": [ + { + "type": "string", + "description": "Expression referencing a workflow secret that contains all needed bearer auth info" + }, + { + "type": "object", + "description": "Bearer auth information", + "properties": { + "token": { + "type": "string", + "description": "String or a workflow expression. Contains the token", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "required": [ + "token" + ], + "additionalProperties": false + } + ] + }, + "oauth2propsdef": { + "oneOf": [ + { + "type": "string", + "description": "Expression referencing a workflow secret that contains all needed OAuth2 auth info" + }, + { + "type": "object", + "description": "OAuth2 information", + "properties": { + "authority": { + "type": "string", + "description": "String or a workflow expression. Contains the authority information", + "minLength": 1 + }, + "grantType": { + "type": "string", + "description": "Defines the grant type", + "enum": [ + "password", + "clientCredentials", + "tokenExchange" + ], + "additionalItems": false + }, + "clientId": { + "type": "string", + "description": "String or a workflow expression. Contains the client identifier", + "minLength": 1 + }, + "clientSecret": { + "type": "string", + "description": "Workflow secret or a workflow expression. Contains the client secret", + "minLength": 1 + }, + "scopes": { + "type": "array", + "description": "Array containing strings or workflow expressions. Contains the OAuth2 scopes", + "items": { + "type": "string" + }, + "minItems": 1, + "additionalItems": false + }, + "username": { + "type": "string", + "description": "String or a workflow expression. Contains the user name. Used only if grantType is 'resourceOwner'", + "minLength": 1 + }, + "password": { + "type": "string", + "description": "String or a workflow expression. Contains the user password. Used only if grantType is 'resourceOwner'", + "minLength": 1 + }, + "audiences": { + "type": "array", + "description": "Array containing strings or workflow expressions. Contains the OAuth2 audiences", + "items": { + "type": "string" + }, + "minItems": 1, + "additionalItems": false + }, + "subjectToken": { + "type": "string", + "description": "String or a workflow expression. Contains the subject token", + "minLength": 1 + }, + "requestedSubject": { + "type": "string", + "description": "String or a workflow expression. Contains the requested subject", + "minLength": 1 + }, + "requestedIssuer": { + "type": "string", + "description": "String or a workflow expression. Contains the requested issuer", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "required": ["grantType", "clientId"] + } + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/common.json b/public/schemas/0.7/common.json new file mode 100644 index 0000000..60224c5 --- /dev/null +++ b/public/schemas/0.7/common.json @@ -0,0 +1,15 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/common.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - common schema", + "type": "object", + "definitions": { + "metadata": { + "type": "object", + "description": "Metadata information", + "additionalProperties": { + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/errors.json b/public/schemas/0.7/errors.json new file mode 100644 index 0000000..b455eff --- /dev/null +++ b/public/schemas/0.7/errors.json @@ -0,0 +1,53 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/errors.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - errors schema", + "type": "object", + "errors": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing error definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow Error definitions. Defines checked errors that can be explicitly handled during workflow execution", + "items": { + "type": "object", + "$ref": "#/definitions/errordef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "errors" + ], + "definitions": { + "errordef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Domain-specific error name", + "minLength": 1 + }, + "code": { + "type": "string", + "description": "Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*'", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Error description" + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/events.json b/public/schemas/0.7/events.json new file mode 100644 index 0000000..c5c72ae --- /dev/null +++ b/public/schemas/0.7/events.json @@ -0,0 +1,117 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/events.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - events schema", + "type": "object", + "events": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing event definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow CloudEvent definitions. Defines CloudEvents that can be consumed or produced", + "items": { + "type": "object", + "$ref": "#/definitions/eventdef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "events" + ], + "definitions": { + "eventdef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique event name", + "minLength": 1 + }, + "source": { + "type": "string", + "description": "CloudEvent source" + }, + "type": { + "type": "string", + "description": "CloudEvent type" + }, + "kind": { + "type": "string", + "enum": [ + "consumed", + "produced" + ], + "description": "Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed'", + "default": "consumed" + }, + "correlation": { + "type": "array", + "description": "CloudEvent correlation definitions", + "minItems": 1, + "items": { + "type": "object", + "$ref": "#/definitions/correlationDef" + }, + "additionalItems": false + }, + "dataOnly": { + "type": "boolean", + "default": true, + "description": "If `true`, only the Event payload is accessible to consuming Workflow states. If `false`, both event payload and context attributes should be accessible " + }, + "metadata": { + "$ref": "common.json#/definitions/metadata", + "description": "Metadata information" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "kind": { + "const": "consumed" + } + } + }, + "then": { + "required": [ + "name", + "source", + "type" + ] + }, + "else": { + "required": [ + "name", + "type" + ] + } + }, + "correlationDef": { + "type": "object", + "description": "CloudEvent correlation definition", + "properties": { + "contextAttributeName": { + "type": "string", + "description": "CloudEvent Extension Context Attribute name", + "minLength": 1 + }, + "contextAttributeValue": { + "type": "string", + "description": "CloudEvent Extension Context Attribute value", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "contextAttributeName" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/extensions/kpi.json b/public/schemas/0.7/extensions/kpi.json new file mode 100644 index 0000000..5013a11 --- /dev/null +++ b/public/schemas/0.7/extensions/kpi.json @@ -0,0 +1,282 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/extensions/kpi.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - KPIs Extension Schema", + "type": "object", + "definitions": { + "kpi": { + "type": "object", + "description": "Serverless Workflow KPI Extension", + "properties": { + "extensionid": { + "type": "string", + "default": "workflow-kpi-extension", + "description": "Extension unique identifier" + }, + "workflowid": { + "type": "string", + "minLength": 1, + "description": "Workflow definition unique identifier (workflow id property)" + }, + "currency": { + "type": "string", + "default": "USD", + "description": "Unit for all cost-based KPI parameters. Default 'USD'" + }, + "events": { + "type": "array", + "description": "Events KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/eventskpi" + } + }, + "functions": { + "type": "array", + "description": "Functions KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/functionskpi" + } + }, + "states": { + "type": "array", + "description": "States KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/stateskpi" + } + }, + "workflow": { + "description": "Workflow KPIs", + "$ref": "#/definitions/workflowkpi" + } + }, + "required": [ + "extensionid", + "workflowid" + ] + }, + "eventskpi": { + "type": "object", + "properties": { + "for": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + }, + "maxConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the max amount of times this event is consumed" + }, + "minConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the min amount of times this event is consumed" + }, + "avgConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the avg amount of times this event is consumed" + }, + "maxProduced": { + "type": "string", + "description": "If event kind is 'produced', the max amount of times this event is produced" + }, + "minProduced": { + "type": "string", + "description": "If event kind is 'produced', the min amount times this event is produced" + }, + "avgProduced": { + "type": "string", + "description": "If event kind is 'produced', the avg amount of times this event is produced" + } + }, + "required": [ + "for", + "per" + ] + }, + "functionskpi": { + "type": "object", + "allOf": [ + { + "properties": { + "for": { + "type": "string", + "description": "References an unique function name in the defined workflow functions" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + }, + "maxErrors": { + "type": "string", + "description": "Max number of errors during function invocation" + }, + "maxRetry": { + "type": "string", + "description": "Max number of retries done for this function invocation" + }, + "maxTimeout": { + "type": "string", + "description": "Max number of times the function timeout time was reached" + } + } + }, + { + "$ref": "#/definitions/invocationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "for", + "per" + ] + }, + "stateskpi": { + "type": "object", + "allOf": [ + { + "properties": { + "for": { + "type": "string", + "description": "References an unique state name in the defined workflow events" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + } + } + }, + { + "$ref": "#/definitions/execkpis" + }, + { + "$ref": "#/definitions/durationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "for", + "per" + ] + }, + "workflowkpi": { + "type": "object", + "allOf": [ + { + "properties": { + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + } + } + }, + { + "$ref": "#/definitions/invocationkpis" + }, + { + "$ref": "#/definitions/durationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "per" + ] + }, + "thresholds": { + "type": "object", + "properties": { + "time": { + "type": "string", + "default": "PT1D", + "description": "ISO_8601 time. 1 day default" + }, + "instances": { + "type": "integer", + "minimum": 1, + "default": 1, + "description": "Number of workflow instances" + } + }, + "required": [ + ] + }, + "costkpis": { + "type": "object", + "properties": { + "maxCost": { + "type": "string", + "description": "Max cost" + }, + "minCost": { + "type": "string", + "description": "Min cost" + }, + "avgCost": { + "type": "string", + "description": "Avg cost" + } + } + }, + "invocationkpis": { + "type": "object", + "properties": { + "maxInvoked": { + "type": "string", + "description": "Max number of invocation times" + }, + "minInvoked": { + "type": "string", + "description": "Min number of invocation times" + }, + "avgInvoked": { + "type": "string", + "description": "Avg number of invocation times" + } + } + }, + "durationkpis": { + "type": "object", + "properties": { + "maxDuration": { + "type": "string", + "description": "ISO 8601. Max duration" + }, + "minDuration": { + "type": "string", + "description": "ISO 8601. Min duration" + }, + "avgDuration": { + "type": "string", + "description": "ISO 8601. Avg duration" + } + } + }, + "execkpis": { + "type": "object", + "properties": { + "maxExec": { + "type": "string", + "description": "Max exec number" + }, + "minExec": { + "type": "string", + "description": "Min exec numbe" + }, + "avgExec": { + "type": "string", + "description": "Avg exec number" + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/extensions/ratelimiting.json b/public/schemas/0.7/extensions/ratelimiting.json new file mode 100644 index 0000000..930ba0c --- /dev/null +++ b/public/schemas/0.7/extensions/ratelimiting.json @@ -0,0 +1,73 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/extensions/ratelimiting.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - Various workflow rate limiting settings", + "type": "object", + "definitions": { + "ratelimiting": { + "type": "object", + "description": "Serverless Workflow Rate Limiting Extension", + "properties": { + "extensionid": { + "type": "string", + "default": "workflow-ratelimiting-extension", + "description": "Extension unique identifier" + }, + "workflowid": { + "type": "string", + "minLength": 1, + "description": "Workflow definition unique identifier (workflow id property)" + }, + "workflowVersions": { + "type": "array", + "description": "Workflow versions. If not defined, applies to all workflow instances (regardless of their associated workflow version)", + "items": { + "type": "string" + } + }, + "singleInstance": { + "description": "Rate Limit settings per single instance of a workflow with provided workflowid", + "$ref": "#/definitions/ratelimits" + }, + "allInstances": { + "description": "Rate Limit settings across all instance of a workflow with provided workflowid", + "$ref": "#/definitions/ratelimits" + } + }, + "required": [ + "extensionid", + "workflowid" + ] + }, + "ratelimits": { + "type": "object", + "properties": { + "maxActionsPerSecond": { + "type": "number", + "default": 0, + "description": "Sets the rate limiting on number of actions that can be executed per second. Notice that the number is represented as number type, so that you can set it to less than 1 if needed. For example, set the number to 0.1 means workflow actions can be executed once every 10 seconds. Default zero value means 'unlimited'" + }, + "maxConcurrentActions": { + "type": "number", + "default": 100, + "description": "Maximum number of actions that can be executed in parallel" + }, + "maxProducedEventsPerSecond": { + "type": "number", + "default": 0, + "description": "Sets the rate limiting on number of events that can be produced per second. Notice that the number is represented as number type, so that you can set it to less than 1 if needed. For example, set the number to 0.1 means workflow can produce events once every 10 seconds. Default zero value means 'unlimited'" + }, + "maxStates": { + "type": "integer", + "default": 0, + "description": "Maximum number of workflow states that should be executed. Default is zero, meaning unlimited." + }, + "maxTransitions": { + "type": "integer", + "default": 0, + "description": "Maximum number of workflow transitions that should be executed. Default is zero, meaning unlimited." + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/functions.json b/public/schemas/0.7/functions.json new file mode 100644 index 0000000..cb35222 --- /dev/null +++ b/public/schemas/0.7/functions.json @@ -0,0 +1,71 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/functions.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - functions schema", + "type": "object", + "functions": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing function definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow function definitions", + "items": { + "type": "object", + "$ref": "#/definitions/function" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "functions" + ], + "definitions": { + "function": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique function name", + "minLength": 1 + }, + "operation": { + "type": "string", + "description": "If type is `rest`, #. If type is `asyncapi`, #. If type is `rpc`, ##. If type is `graphql`, ##. If type is `odata`, #. If type is `expression`, defines the workflow expression.", + "minLength": 1 + }, + "type": { + "type": "string", + "description": "Defines the function type. Is either `rest`, `asyncapi, `rpc`, `graphql`, `odata`, or `expression`. Default is `rest`", + "enum": [ + "rest", + "asyncapi", + "rpc", + "graphql", + "odata", + "expression" + ], + "default": "rest" + }, + "authRef": { + "type": "string", + "description": "References an auth definition name to be used to access to resource defined in the operation parameter", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "operation" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/odata.json b/public/schemas/0.7/odata.json new file mode 100644 index 0000000..27febab --- /dev/null +++ b/public/schemas/0.7/odata.json @@ -0,0 +1,81 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/odata.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - OData command options schema", + "type": "object", + "key": { + "type": "string", + "description": "The unique identifier of the single entry to query", + "minLength": 1 + }, + "queryOptions":{ + "$ref": "#/definitions/queryoptions" + }, + "definitions": { + "queryoptions": { + "type": "object", + "properties": { + "filter": { + "type": "string", + "description": "The $filter system query option allows clients to filter the set of resources that are addressed by a request URL. $filter specifies conditions that MUST be met by a resource for it to be returned in the set of matching resources", + "minLength": 1 + }, + "expand": { + "type": "string", + "description": "The $expand system query option allows clients to request related resources when a resource that satisfies a particular request is retrieved", + "minLength": 1 + }, + "select": { + "type": "string", + "description": "The $select system query option allows clients to requests a limited set of information for each entity or complex type identified by the ResourcePath and other System Query Options like $filter, $top, $skip etc. The $select query option is often used in conjunction with the $expand query option, to first increase the scope of the resource graph returned ($expand) and then selectively prune that resource graph ($select)", + "minLength": 1 + }, + "orderBy": { + "type": "string", + "description": "The $orderby system query option allows clients to request resource in a particular order", + "minLength": 1 + }, + "top": { + "type": "integer", + "description": "The $top system query option allows clients a required number of resources. Usually used in conjunction with the $skip query options", + "minLength": 1 + }, + "skip": { + "type": "integer", + "description": "The $skip system query option allows clients to skip a given number of resources. Usually used in conjunction with the $top query options", + "minLength": 1 + }, + "count": { + "type": "boolean", + "description": "The $count system query option allows clients to request a count of the matching resources included with the resources in the response" + }, + "search": { + "type": "string", + "description": "The $search system query option allows clients to request items within a collection matching a free-text search expression", + "minLength": 1 + }, + "format": { + "type": "string", + "description": "The $format system query option if supported allows clients to request a response in a particular format", + "minLength": 1 + }, + "compute": { + "type": "string", + "description": "The $compute system query option allows clients to define computed properties that can be used in a $select or within a $filter or $orderby expression.", + "minLength": 1 + }, + "index": { + "type": "string", + "description": "The $index system query option allows clients to do a positional insert into a collection annotated with using the Core.PositionalInsert term (see http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#VocCore)", + "minLength": 1 + }, + "schemaVersion": { + "type": "string", + "description": "The $schemaversion system query option allows clients to specify the version of the schema against which the request is made. The semantics of $schemaversion is covered in the OData-Protocol (http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#odata) document.", + "minLength": 1 + } + }, + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/retries.json b/public/schemas/0.7/retries.json new file mode 100644 index 0000000..23df5e3 --- /dev/null +++ b/public/schemas/0.7/retries.json @@ -0,0 +1,85 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/retries.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - retries schema", + "type": "object", + "retries": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing retry definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow Retry definitions. Define retry strategies that can be referenced in states onError definitions", + "items": { + "type": "object", + "$ref": "#/definitions/retrydef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "retries" + ], + "definitions": { + "retrydef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique retry strategy name", + "minLength": 1 + }, + "delay": { + "type": "string", + "description": "Time delay between retry attempts (ISO 8601 duration format)" + }, + "maxDelay": { + "type": "string", + "description": "Maximum time delay between retry attempts (ISO 8601 duration format)" + }, + "increment": { + "type": "string", + "description": "Static value by which the delay increases during each attempt (ISO 8601 time format)" + }, + "multiplier": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 1, + "multipleOf": 0.01, + "description": "Numeric value, if specified the delay between retries is multiplied by this value." + }, + "maxAttempts": { + "type": [ + "number", + "string" + ], + "minimum": 1, + "minLength": 0, + "description": "Maximum number of retry attempts." + }, + "jitter": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "maximum": 1, + "description": "If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0 and 1). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format)" + } + }, + "additionalProperties": false, + "required": [ + "name", + "maxAttempts" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/secrets.json b/public/schemas/0.7/secrets.json new file mode 100644 index 0000000..427d68e --- /dev/null +++ b/public/schemas/0.7/secrets.json @@ -0,0 +1,26 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/secrets.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - secrets schema", + "type": "object", + "secrets": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing secrets definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow Secrets definitions", + "items": { + "type": "string" + }, + "minItems": 1 + } + ] + }, + "required": [ + "secrets" + ] +} \ No newline at end of file diff --git a/public/schemas/0.7/timeouts.json b/public/schemas/0.7/timeouts.json new file mode 100644 index 0000000..c99ef6b --- /dev/null +++ b/public/schemas/0.7/timeouts.json @@ -0,0 +1,118 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/timeouts.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - functions schema", + "type": "object", + "timeouts": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing timeouts definitions (json or yaml)" + }, + { + "type": "object", + "description": "Workflow default timeouts", + "properties": { + "workflowExecTimeout": { + "$ref": "#/definitions/workflowExecTimeout" + }, + "stateExecTimeout": { + "$ref": "#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "#/definitions/actionExecTimeout" + }, + "branchExecTimeout": { + "$ref": "#/definitions/branchExecTimeout" + }, + "eventTimeout": { + "$ref": "#/definitions/eventTimeout" + } + }, + "additionalProperties": false, + "required": [] + } + ] + }, + "required": [ + "timeouts" + ], + "definitions": { + "workflowExecTimeout": { + "oneOf": [ + { + "type": "string", + "description": "Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "duration": { + "type": "string", + "description": "Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'", + "minLength": 1 + }, + "interrupt": { + "type": "boolean", + "description": "If `false`, workflow instance is allowed to finish current execution. If `true`, current workflow execution is abrupted.", + "default": true + }, + "runBefore": { + "type": "string", + "description": "Name of a workflow state to be executed before workflow instance is terminated", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "duration" + ] + } + ] + }, + "stateExecTimeout": { + "oneOf": [ + { + "type": "string", + "description": "Total state execution timeout (including retries) (ISO 8601 duration format)", + "minLength": 1 + }, + { + "type": "object", + "description": "Workflow default timeouts", + "properties": { + "single": { + "type": "string", + "description": "Single state execution timeout, not including retries (ISO 8601 duration format)", + "minLength": 1 + }, + "total": { + "type": "string", + "description": "Total state execution timeout, including retries (ISO 8601 duration format)", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": ["total"] + } + ] + }, + "actionExecTimeout": { + "type": "string", + "description": "Single actions definition execution timeout duration (ISO 8601 duration format)", + "minLength": 1 + }, + "branchExecTimeout": { + "type": "string", + "description": "Single branch execution timeout duration (ISO 8601 duration format)", + "minLength": 1 + }, + "eventTimeout": { + "type": "string", + "description": "Timeout duration to wait for consuming defined events (ISO 8601 duration format)", + "minLength": 1 + } + } +} \ No newline at end of file diff --git a/public/schemas/0.7/workflow.json b/public/schemas/0.7/workflow.json new file mode 100644 index 0000000..b7a7fc2 --- /dev/null +++ b/public/schemas/0.7/workflow.json @@ -0,0 +1,1953 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.7/workflow.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - workflow schema", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Workflow unique identifier", + "minLength": 1 + }, + "key": { + "type": "string", + "description": "Domain-specific workflow identifier", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "Workflow name", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Workflow description" + }, + "version": { + "type": "string", + "description": "Workflow version", + "minLength": 1 + }, + "annotations": { + "type": "array", + "description": "List of helpful terms describing the workflows intended purpose, subject areas, or other important qualities", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "dataInputSchema": { + "oneOf": [ + { + "type": "string", + "description": "URI of the JSON Schema used to validate the workflow data input", + "minLength": 1 + }, + { + "type": "object", + "description": "Workflow data input schema definition", + "properties": { + "schema": { + "type": "string", + "description": "URI of the JSON Schema used to validate the workflow data input", + "minLength": 1 + }, + "failOnValidationErrors": { + "type": "boolean", + "default": true, + "description": "Determines if workflow execution should continue if there are validation errors" + } + }, + "additionalProperties": false, + "required": [ + "schema", + "failOnValidationErrors" + ] + } + ] + }, + "secrets": { + "$ref": "secrets.json#/secrets" + }, + "constants": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing constants data (json or yaml)" + }, + { + "type": "object", + "description": "Workflow constants data (object type)" + } + ] + }, + "start": { + "$ref": "#/definitions/startdef" + }, + "specVersion": { + "type": "string", + "description": "Serverless Workflow schema version", + "minLength": 1 + }, + "expressionLang": { + "type": "string", + "description": "Identifies the expression language used for workflow expressions. Default is 'jq'", + "default": "jq", + "minLength": 1 + }, + "timeouts": { + "$ref": "timeouts.json#/timeouts" + }, + "errors": { + "$ref": "errors.json#/errors" + }, + "keepActive": { + "type": "boolean", + "default": false, + "description": "If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'workflowExecTimeout'" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + }, + "events": { + "$ref": "events.json#/events" + }, + "functions": { + "$ref": "functions.json#/functions" + }, + "autoRetries": { + "type": "boolean", + "default": false, + "description": "If set to true, actions should automatically be retried on unchecked errors. Default is false" + }, + "retries": { + "$ref": "retries.json#/retries" + }, + "auth": { + "$ref": "auth.json#/auth" + }, + "states": { + "type": "array", + "description": "State definitions", + "items": { + "anyOf": [ + { + "title": "Sleep State", + "$ref": "#/definitions/sleepstate" + }, + { + "title": "Event State", + "$ref": "#/definitions/eventstate" + }, + { + "title": "Operation State", + "$ref": "#/definitions/operationstate" + }, + { + "title": "Parallel State", + "$ref": "#/definitions/parallelstate" + }, + { + "title": "Switch State", + "$ref": "#/definitions/switchstate" + }, + { + "title": "Inject State", + "$ref": "#/definitions/injectstate" + }, + { + "title": "ForEach State", + "$ref": "#/definitions/foreachstate" + }, + { + "title": "Callback State", + "$ref": "#/definitions/callbackstate" + } + ] + }, + "additionalItems": false, + "minItems": 1 + } + }, + "oneOf": [ + { + "required": [ + "id", + "specVersion", + "name", + "start", + "states" + ] + }, + { + "required": [ + "key", + "specVersion", + "name", + "start", + "states" + ] + } + ], + "definitions": { + "sleep": { + "type": "object", + "properties": { + "before": { + "type": "string", + "description": "Amount of time (ISO 8601 duration format) to sleep before function/subflow invocation. Does not apply if 'eventRef' is defined." + }, + "after": { + "type": "string", + "description": "Amount of time (ISO 8601 duration format) to sleep after function/subflow invocation. Does not apply if 'eventRef' is defined." + } + }, + "oneOf": [ + { + "required": [ + "before" + ] + }, + { + "required": [ + "after" + ] + }, + { + "required": [ + "before", + "after" + ] + } + ] + }, + "crondef": { + "oneOf": [ + { + "type": "string", + "description": "Cron expression defining when workflow instances should be created (automatically)", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "expression": { + "type": "string", + "description": "Repeating interval (cron expression) describing when the workflow instance should be created", + "minLength": 1 + }, + "validUntil": { + "type": "string", + "description": "Specific date and time (ISO 8601 format) when the cron expression invocation is no longer valid" + } + }, + "additionalProperties": false, + "required": [ + "expression" + ] + } + ] + }, + "continueasdef": { + "oneOf": [ + { + "type": "string", + "description": "Unique id of the workflow to be continue execution as. Entire state data is passed as data input to next execution", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "workflowId": { + "type": "string", + "description": "Unique id of the workflow to continue execution as" + }, + "version": { + "type": "string", + "description": "Version of the workflow to continue execution as", + "minLength": 1 + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If string type, an expression which selects parts of the states data output to become the workflow data input of continued execution. If object type, a custom object to become the workflow data input of the continued execution" + }, + "workflowExecTimeout": { + "$ref": "timeouts.json#/definitions/workflowExecTimeout", + "description": "Workflow execution timeout to be used by the workflow continuing execution. Overwrites any specific settings set by that workflow" + } + }, + "required": [ + "workflowId" + ] + } + ] + }, + "transition": { + "oneOf": [ + { + "type": "string", + "description": "Name of state to transition to", + "minLength": 1 + }, + { + "type": "object", + "description": "Function Reference", + "properties": { + "nextState": { + "type": "string", + "description": "Name of state to transition to", + "minLength": 1 + }, + "produceEvents": { + "type": "array", + "description": "Array of events to be produced before the transition happens", + "items": { + "type": "object", + "$ref": "#/definitions/produceeventdef" + }, + "additionalItems": false + }, + "compensate": { + "type": "boolean", + "default": false, + "description": "If set to true, triggers workflow compensation when before this transition is taken. Default is false" + } + }, + "additionalProperties": false, + "required": [ + "nextState" + ] + } + ] + }, + "error": { + "type": "object", + "properties": { + "errorRef": { + "type": "string", + "description": "Reference to a unique workflow error definition. Used of errorRefs is not used", + "minLength": 1 + }, + "errorRefs": { + "type": "array", + "description": "References one or more workflow error definitions. Used if errorRef is not used", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "transition": { + "description": "Transition to next state to handle the error.", + "$ref": "#/definitions/transition" + }, + "end": { + "description": "End workflow execution in case of this error.", + "$ref": "#/definitions/end" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "errorRef", + "transition" + ] + }, + { + "required": [ + "errorRef", + "end" + ] + }, + { + "required": [ + "errorRefs", + "transition" + ] + }, + { + "required": [ + "errorRefs", + "end" + ] + } + ] + }, + "onevents": { + "type": "object", + "properties": { + "eventRefs": { + "type": "array", + "description": "References one or more unique event names in the defined workflow events", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "actionMode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies how actions are to be performed (in sequence or in parallel)", + "default": "sequential" + }, + "actions": { + "type": "array", + "description": "Actions to be performed if expression matches", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + }, + "eventDataFilter": { + "description": "Event data filter", + "$ref": "#/definitions/eventdatafilter" + } + }, + "additionalProperties": false, + "required": [ + "eventRefs" + ] + }, + "action": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique action definition name" + }, + "functionRef": { + "description": "References a function to be invoked", + "$ref": "#/definitions/functionref" + }, + "eventRef": { + "description": "References a 'trigger' and 'result' reusable event definitions", + "$ref": "#/definitions/eventref" + }, + "subFlowRef": { + "description": "References a sub-workflow to invoke", + "$ref": "#/definitions/subflowref" + }, + "sleep": { + "description": "Defines time periods workflow execution should sleep before / after function execution", + "$ref": "#/definitions/sleep" + }, + "retryRef": { + "type": "string", + "description": "References a defined workflow retry definition. If not defined the default retry policy is assumed" + }, + "nonRetryableErrors": { + "type": "array", + "description": "List of unique references to defined workflow errors for which the action should not be retried. Used only when `autoRetries` is set to `true`", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "retryableErrors": { + "type": "array", + "description": "List of unique references to defined workflow errors for which the action should be retried. Used only when `autoRetries` is set to `false`", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "actionDataFilter": { + "description": "Action data filter", + "$ref": "#/definitions/actiondatafilter" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "functionRef" + ] + }, + { + "required": [ + "eventRef" + ] + }, + { + "required": [ + "subFlowRef" + ] + } + ] + }, + "functionref": { + "oneOf": [ + { + "type": "string", + "description": "Name of the referenced function", + "minLength": 1 + }, + { + "type": "object", + "description": "Function Reference", + "properties": { + "refName": { + "type": "string", + "description": "Name of the referenced function" + }, + "arguments": { + "type": "object", + "description": "Function arguments/inputs" + }, + "selectionSet": { + "type": "string", + "description": "Only used if function type is 'graphql'. A string containing a valid GraphQL selection set" + } + }, + "additionalProperties": false, + "required": [ + "refName" + ] + } + ] + }, + "eventref": { + "type": "object", + "description": "Event References", + "properties": { + "triggerEventRef": { + "type": "string", + "description": "Reference to the unique name of a 'produced' event definition" + }, + "resultEventRef": { + "type": "string", + "description": "Reference to the unique name of a 'consumed' event definition" + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'triggerEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'triggerEventRef'." + }, + "contextAttributes": { + "type": "object", + "description": "Add additional extension context attributes to the produced event", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "triggerEventRef", + "resultEventRef" + ] + }, + "subflowref": { + "oneOf": [ + { + "type": "string", + "description": "Unique id of the sub-workflow to be invoked", + "minLength": 1 + }, + { + "type": "object", + "description": "Specifies a sub-workflow to be invoked", + "properties": { + "workflowId": { + "type": "string", + "description": "Unique id of the sub-workflow to be invoked" + }, + "version": { + "type": "string", + "description": "Version of the sub-workflow to be invoked", + "minLength": 1 + } + }, + "required": [ + "workflowId" + ] + } + ] + }, + "branch": { + "type": "object", + "description": "Branch Definition", + "properties": { + "name": { + "type": "string", + "description": "Branch name" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + }, + "branchExecTimeout": { + "$ref": "timeouts.json#/definitions/branchExecTimeout" + } + }, + "required": [] + }, + "actions": { + "type": "array", + "description": "Actions to be executed in this branch", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + } + }, + "additionalProperties": false, + "required": [ + "name", + "actions" + ] + }, + "sleepstate": { + "type": "object", + "description": "Causes the workflow execution to sleep for a specified duration", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "sleep", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "duration": { + "type": "string", + "description": "Duration (ISO 8601 duration format) to sleep" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + } + }, + "required": [] + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after the workflow sleep", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "duration" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "duration", + "end" + ] + }, + { + "required": [ + "name", + "type", + "duration", + "transition" + ] + } + ] + } + }, + "eventstate": { + "type": "object", + "description": "This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "event", + "description": "State type" + }, + "exclusive": { + "type": "boolean", + "default": true, + "description": "If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed" + }, + "onEvents": { + "type": "array", + "description": "Define the events to be consumed and optional actions to be performed", + "items": { + "type": "object", + "$ref": "#/definitions/onevents" + }, + "additionalItems": false + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + }, + "eventTimeout": { + "$ref": "timeouts.json#/definitions/eventTimeout" + } + }, + "required": [] + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "name", + "type", + "onEvents", + "end" + ] + }, + { + "required": [ + "name", + "type", + "onEvents", + "transition" + ] + } + ] + }, + "operationstate": { + "type": "object", + "description": "Defines actions be performed. Does not wait for incoming events", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "operation", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "actionMode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies whether actions are performed in sequence or in parallel", + "default": "sequential" + }, + "actions": { + "type": "array", + "description": "Actions to be performed", + "items": { + "type": "object", + "$ref": "#/definitions/action" + } + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + } + }, + "required": [] + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "actions" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "actions", + "end" + ] + }, + { + "required": [ + "name", + "type", + "actions", + "transition" + ] + } + ] + } + }, + "parallelstate": { + "type": "object", + "description": "Consists of a number of states that are executed in parallel", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "parallel", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "branchExecTimeout": { + "$ref": "timeouts.json#/definitions/branchExecTimeout" + } + }, + "required": [] + }, + "branches": { + "type": "array", + "description": "Branch Definitions", + "items": { + "type": "object", + "$ref": "#/definitions/branch" + }, + "additionalItems": false + }, + "completionType": { + "type": "string", + "enum": [ + "allOf", + "atLeast" + ], + "description": "Option types on how to complete branch execution.", + "default": "allOf" + }, + "numCompleted": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 0, + "description": "Used when completionType is set to 'atLeast' to specify the minimum number of branches that must complete before the state will transition." + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all branches have completed execution", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "branches" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "branches", + "end" + ] + }, + { + "required": [ + "name", + "type", + "branches", + "transition" + ] + } + ] + } + }, + "switchstate": { + "oneOf": [ + { + "$ref": "#/definitions/databasedswitch" + }, + { + "$ref": "#/definitions/eventbasedswitch" + } + ] + }, + "eventbasedswitch": { + "type": "object", + "description": "Permits transitions to other states based on events", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "switch", + "description": "State type" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "eventTimeout": { + "$ref": "timeouts.json#/definitions/eventTimeout" + } + }, + "required": [] + }, + "eventConditions": { + "type": "array", + "description": "Defines conditions evaluated against events", + "items": { + "type": "object", + "$ref": "#/definitions/eventcondition" + }, + "additionalItems": false + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "defaultCondition": { + "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition", + "$ref": "#/definitions/defaultconditiondef" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "type", + "eventConditions" + ] + }, + "databasedswitch": { + "type": "object", + "description": "Permits transitions to other states based on data conditions", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "switch", + "description": "State type" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + } + }, + "required": [] + }, + "dataConditions": { + "type": "array", + "description": "Defines conditions evaluated against state data", + "items": { + "type": "object", + "$ref": "#/definitions/datacondition" + }, + "additionalItems": false + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "defaultCondition": { + "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition", + "$ref": "#/definitions/defaultconditiondef" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "type", + "dataConditions" + ] + }, + "defaultconditiondef": { + "type": "object", + "description": "DefaultCondition definition. Can be either a transition or end definition", + "properties": { + "transition": { + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "transition" + ] + }, + { + "required": [ + "end" + ] + } + ] + }, + "eventcondition": { + "oneOf": [ + { + "$ref": "#/definitions/transitioneventcondition" + }, + { + "$ref": "#/definitions/enddeventcondition" + } + ] + }, + "transitioneventcondition": { + "type": "object", + "description": "Switch state data event condition", + "properties": { + "name": { + "type": "string", + "description": "Event condition name" + }, + "eventRef": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "transition": { + "description": "Next transition of the workflow if there is valid matches", + "$ref": "#/definitions/transition" + }, + "eventDataFilter": { + "description": "Event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "eventRef", + "transition" + ] + }, + "enddeventcondition": { + "type": "object", + "description": "Switch state data event condition", + "properties": { + "name": { + "type": "string", + "description": "Event condition name" + }, + "eventRef": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "end": { + "$ref": "#/definitions/end", + "description": "Explicit transition to end" + }, + "eventDataFilter": { + "description": "Event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "eventRef", + "end" + ] + }, + "datacondition": { + "oneOf": [ + { + "$ref": "#/definitions/transitiondatacondition" + }, + { + "$ref": "#/definitions/enddatacondition" + } + ] + }, + "transitiondatacondition": { + "type": "object", + "description": "Switch state data based condition", + "properties": { + "name": { + "type": "string", + "description": "Data condition name" + }, + "condition": { + "type": "string", + "description": "Workflow expression evaluated against state data. Must evaluate to true or false" + }, + "transition": { + "description": "Workflow transition if condition is evaluated to true", + "$ref": "#/definitions/transition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "condition", + "transition" + ] + }, + "enddatacondition": { + "type": "object", + "description": "Switch state data based condition", + "properties": { + "name": { + "type": "string", + "description": "Data condition name" + }, + "condition": { + "type": "string", + "description": "Workflow expression evaluated against state data. Must evaluate to true or false" + }, + "end": { + "$ref": "#/definitions/end", + "description": "Workflow end definition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "condition", + "end" + ] + }, + "injectstate": { + "type": "object", + "description": "Inject static data into state data. Does not perform any actions", + "properties": { + "id": { + "type": "string", + "description": "Unique state id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "inject", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "data": { + "type": "object", + "description": "JSON object which can be set as states data input and can be manipulated via filters" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + } + }, + "required": [] + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "transition": { + "description": "Next transition of the workflow after injection has completed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "data" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "data", + "end" + ] + }, + { + "required": [ + "name", + "type", + "data", + "transition" + ] + } + ] + } + }, + "foreachstate": { + "type": "object", + "description": "Execute a set of defined actions or workflows for each element of a data array", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "foreach", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "inputCollection": { + "type": "string", + "description": "Workflow expression selecting an array element of the states data" + }, + "outputCollection": { + "type": "string", + "description": "Workflow expression specifying an array element of the states data to add the results of each iteration" + }, + "iterationParam": { + "type": "string", + "description": "Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array" + }, + "batchSize": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 0, + "description": "Specifies how many iterations may run in parallel at the same time. Used if 'mode' property is set to 'parallel' (default)" + }, + "actions": { + "type": "array", + "description": "Actions to be executed for each of the elements of inputCollection", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + } + }, + "required": [] + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after state has completed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "mode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies how iterations are to be performed (sequentially or in parallel)", + "default": "parallel" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "inputCollection", + "iterationParam", + "actions" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "inputCollection", + "iterationParam", + "actions", + "end" + ] + }, + { + "required": [ + "name", + "type", + "inputCollection", + "iterationParam", + "actions", + "transition" + ] + } + ] + } + }, + "callbackstate": { + "type": "object", + "description": "This state performs an action, then waits for the callback event that denotes completion of the action", + "properties": { + "id": { + "type": "string", + "description": "Unique state id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "callback", + "description": "State type" + }, + "action": { + "description": "Defines the action to be executed", + "$ref": "#/definitions/action" + }, + "eventRef": { + "type": "string", + "description": "References an unique callback event name in the defined workflow events" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + }, + "eventTimeout": { + "$ref": "timeouts.json#/definitions/eventTimeout" + } + }, + "required": [] + }, + "eventDataFilter": { + "description": "Event data filter", + "$ref": "#/definitions/eventdatafilter" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "action", + "eventRef" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "action", + "eventRef", + "end" + ] + }, + { + "required": [ + "name", + "type", + "action", + "eventRef", + "transition" + ] + } + ] + } + }, + "startdef": { + "oneOf": [ + { + "type": "string", + "description": "Name of the starting workflow state", + "minLength": 1 + }, + { + "type": "object", + "description": "Workflow start definition", + "properties": { + "stateName": { + "type": "string", + "description": "Name of the starting workflow state", + "minLength": 1 + }, + "schedule": { + "description": "Define the time/repeating intervals or cron at which workflow instances should be automatically started.", + "$ref": "#/definitions/schedule" + } + }, + "additionalProperties": false, + "required": [ + "stateName", + "schedule" + ] + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "string", + "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created. (UTC timezone is assumed)", + "minLength": 1 + }, + { + "type": "object", + "description": "Start state schedule definition", + "properties": { + "interval": { + "type": "string", + "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.", + "minLength": 1 + }, + "cron": { + "$ref": "#/definitions/crondef" + }, + "timezone": { + "type": "string", + "description": "Timezone name used to evaluate the interval & cron-expression. (default: UTC)" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "interval" + ] + }, + { + "required": [ + "cron" + ] + } + ] + } + ] + }, + "end": { + "oneOf": [ + { + "type": "boolean", + "description": "State end definition", + "default": true + }, + { + "type": "object", + "description": "State end definition", + "properties": { + "terminate": { + "type": "boolean", + "default": false, + "description": "If true, completes all execution flows in the given workflow instance" + }, + "produceEvents": { + "type": "array", + "description": "Defines events that should be produced", + "items": { + "type": "object", + "$ref": "#/definitions/produceeventdef" + }, + "additionalItems": false + }, + "compensate": { + "type": "boolean", + "default": false, + "description": "If set to true, triggers workflow compensation. Default is false" + }, + "continueAs": { + "$ref": "#/definitions/continueasdef" + } + }, + "additionalProperties": false, + "required": [] + } + ] + }, + "produceeventdef": { + "type": "object", + "description": "Produce an event and set its data", + "properties": { + "eventRef": { + "type": "string", + "description": "References a name of a defined event" + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event." + }, + "contextAttributes": { + "type": "object", + "description": "Add additional event extension context attributes", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "eventRef" + ] + }, + "statedatafilter": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Workflow expression to filter the state data input" + }, + "output": { + "type": "string", + "description": "Workflow expression that filters the state data output" + } + }, + "additionalProperties": false, + "required": [] + }, + "eventdatafilter": { + "type": "object", + "properties": { + "data": { + "type": "string", + "description": "Workflow expression that filters the received event/payload (default: '${ . }')" + }, + "toStateData": { + "type": "string", + "description": " Workflow expression that selects a state data element to which the filtered event should be added/merged into. If not specified, denotes, the top-level state data element." + } + }, + "additionalProperties": false, + "required": [] + }, + "actiondatafilter": { + "type": "object", + "properties": { + "fromStateData": { + "type": "string", + "description": "Workflow expression that selects state data that the state action can use" + }, + "results": { + "type": "string", + "description": "Workflow expression that filters the actions data results" + }, + "toStateData": { + "type": "string", + "description": "Workflow expression that selects a state data element to which the action results should be added/merged into. If not specified, denote, the top-level state data element" + } + }, + "additionalProperties": false, + "required": [] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.8/auth.json b/public/schemas/0.8/auth.json new file mode 100644 index 0000000..e814047 --- /dev/null +++ b/public/schemas/0.8/auth.json @@ -0,0 +1,194 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/auth.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - auth schema", + "type": "object", + "auth": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing auth definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow auth definitions", + "items": { + "type": "object", + "$ref": "#/definitions/authdef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "auth" + ], + "definitions": { + "authdef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique auth definition name", + "minLength": 1 + }, + "scheme": { + "type": "string", + "description": "Defines the auth type", + "enum": [ + "basic", + "bearer", + "oauth2" + ], + "default": "basic" + }, + "properties": { + "oneOf": [ + { + "type": "string", + "description": "Expression referencing a workflow secret that contains all needed auth info" + }, + { + "title": "Basic Auth Info", + "$ref": "#/definitions/basicpropsdef" + }, + { + "title": "Bearer Auth Info State", + "$ref": "#/definitions/bearerpropsdef" + }, + { + "title": "OAuth2 Info", + "$ref": "#/definitions/oauth2propsdef" + } + ] + } + }, + "required": [ + "name", + "properties" + ] + }, + "basicpropsdef": { + "type": "object", + "description": "Basic auth information", + "properties": { + "username": { + "type": "string", + "description": "String or a workflow expression. Contains the user name", + "minLength": 1 + }, + "password": { + "type": "string", + "description": "String or a workflow expression. Contains the user password", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "required": [ + "username", + "password" + ], + "additionalProperties": false + }, + "bearerpropsdef": { + "type": "object", + "description": "Bearer auth information", + "properties": { + "token": { + "type": "string", + "description": "String or a workflow expression. Contains the token", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "required": [ + "token" + ], + "additionalProperties": false + }, + "oauth2propsdef": { + "type": "object", + "description": "OAuth2 information", + "properties": { + "authority": { + "type": "string", + "description": "String or a workflow expression. Contains the authority information", + "minLength": 1 + }, + "grantType": { + "type": "string", + "description": "Defines the grant type", + "enum": [ + "password", + "clientCredentials", + "tokenExchange" + ], + "additionalItems": false + }, + "clientId": { + "type": "string", + "description": "String or a workflow expression. Contains the client identifier", + "minLength": 1 + }, + "clientSecret": { + "type": "string", + "description": "Workflow secret or a workflow expression. Contains the client secret", + "minLength": 1 + }, + "scopes": { + "type": "array", + "description": "Array containing strings or workflow expressions. Contains the OAuth2 scopes", + "items": { + "type": "string" + }, + "minItems": 1, + "additionalItems": false + }, + "username": { + "type": "string", + "description": "String or a workflow expression. Contains the user name. Used only if grantType is 'resourceOwner'", + "minLength": 1 + }, + "password": { + "type": "string", + "description": "String or a workflow expression. Contains the user password. Used only if grantType is 'resourceOwner'", + "minLength": 1 + }, + "audiences": { + "type": "array", + "description": "Array containing strings or workflow expressions. Contains the OAuth2 audiences", + "items": { + "type": "string" + }, + "minItems": 1, + "additionalItems": false + }, + "subjectToken": { + "type": "string", + "description": "String or a workflow expression. Contains the subject token", + "minLength": 1 + }, + "requestedSubject": { + "type": "string", + "description": "String or a workflow expression. Contains the requested subject", + "minLength": 1 + }, + "requestedIssuer": { + "type": "string", + "description": "String or a workflow expression. Contains the requested issuer", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "required": ["grantType", "clientId"] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.8/common.json b/public/schemas/0.8/common.json new file mode 100644 index 0000000..5a3593e --- /dev/null +++ b/public/schemas/0.8/common.json @@ -0,0 +1,15 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/common.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - common schema", + "type": "object", + "definitions": { + "metadata": { + "type": "object", + "description": "Metadata information", + "additionalProperties": { + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.8/errors.json b/public/schemas/0.8/errors.json new file mode 100644 index 0000000..5208896 --- /dev/null +++ b/public/schemas/0.8/errors.json @@ -0,0 +1,53 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/errors.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - errors schema", + "type": "object", + "errors": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing error definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow Error definitions. Defines checked errors that can be explicitly handled during workflow execution", + "items": { + "type": "object", + "$ref": "#/definitions/errordef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "errors" + ], + "definitions": { + "errordef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Domain-specific error name", + "minLength": 1 + }, + "code": { + "type": "string", + "description": "Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*'", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Error description" + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + } +} diff --git a/public/schemas/0.8/events.json b/public/schemas/0.8/events.json new file mode 100644 index 0000000..61d16e1 --- /dev/null +++ b/public/schemas/0.8/events.json @@ -0,0 +1,117 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/events.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - events schema", + "type": "object", + "events": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing event definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow CloudEvent definitions. Defines CloudEvents that can be consumed or produced", + "items": { + "type": "object", + "$ref": "#/definitions/eventdef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "events" + ], + "definitions": { + "eventdef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique event name", + "minLength": 1 + }, + "source": { + "type": "string", + "description": "CloudEvent source" + }, + "type": { + "type": "string", + "description": "CloudEvent type" + }, + "kind": { + "type": "string", + "enum": [ + "consumed", + "produced" + ], + "description": "Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed'", + "default": "consumed" + }, + "correlation": { + "type": "array", + "description": "CloudEvent correlation definitions", + "minItems": 1, + "items": { + "type": "object", + "$ref": "#/definitions/correlationDef" + }, + "additionalItems": false + }, + "dataOnly": { + "type": "boolean", + "default": true, + "description": "If `true`, only the Event payload is accessible to consuming Workflow states. If `false`, both event payload and context attributes should be accessible " + }, + "metadata": { + "$ref": "common.json#/definitions/metadata", + "description": "Metadata information" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "kind": { + "const": "consumed" + } + } + }, + "then": { + "required": [ + "name", + "source", + "type" + ] + }, + "else": { + "required": [ + "name", + "type" + ] + } + }, + "correlationDef": { + "type": "object", + "description": "CloudEvent correlation definition", + "properties": { + "contextAttributeName": { + "type": "string", + "description": "CloudEvent Extension Context Attribute name", + "minLength": 1 + }, + "contextAttributeValue": { + "type": "string", + "description": "CloudEvent Extension Context Attribute value", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "contextAttributeName" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.8/extensions/kpi.json b/public/schemas/0.8/extensions/kpi.json new file mode 100644 index 0000000..08a8138 --- /dev/null +++ b/public/schemas/0.8/extensions/kpi.json @@ -0,0 +1,289 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/extensions/kpi.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - KPIs Extension Schema", + "type": "object", + "definitions": { + "kpi": { + "type": "object", + "description": "Serverless Workflow KPI Extension", + "properties": { + "extensionid": { + "type": "string", + "default": "workflow-kpi-extension", + "description": "Extension unique identifier" + }, + "workflowid": { + "type": "string", + "minLength": 1, + "description": "Workflow definition unique identifier (workflow id property)" + }, + "workflowVersions": { + "type": "array", + "description": "Workflow versions. If not defined, applies to all workflow instances (regardless of their associated workflow version)", + "items": { + "type": "string" + } + }, + "currency": { + "type": "string", + "default": "USD", + "description": "Unit for all cost-based KPI parameters. Default 'USD'" + }, + "events": { + "type": "array", + "description": "Events KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/eventskpi" + } + }, + "functions": { + "type": "array", + "description": "Functions KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/functionskpi" + } + }, + "states": { + "type": "array", + "description": "States KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/stateskpi" + } + }, + "workflow": { + "description": "Workflow KPIs", + "$ref": "#/definitions/workflowkpi" + } + }, + "required": [ + "extensionid", + "workflowid" + ] + }, + "eventskpi": { + "type": "object", + "properties": { + "for": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + }, + "maxConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the max amount of times this event is consumed" + }, + "minConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the min amount of times this event is consumed" + }, + "avgConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the avg amount of times this event is consumed" + }, + "maxProduced": { + "type": "string", + "description": "If event kind is 'produced', the max amount of times this event is produced" + }, + "minProduced": { + "type": "string", + "description": "If event kind is 'produced', the min amount times this event is produced" + }, + "avgProduced": { + "type": "string", + "description": "If event kind is 'produced', the avg amount of times this event is produced" + } + }, + "required": [ + "for", + "per" + ] + }, + "functionskpi": { + "type": "object", + "allOf": [ + { + "properties": { + "for": { + "type": "string", + "description": "References an unique function name in the defined workflow functions" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + }, + "maxErrors": { + "type": "string", + "description": "Max number of errors during function invocation" + }, + "maxRetry": { + "type": "string", + "description": "Max number of retries done for this function invocation" + }, + "maxTimeout": { + "type": "string", + "description": "Max number of times the function timeout time was reached" + } + } + }, + { + "$ref": "#/definitions/invocationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "for", + "per" + ] + }, + "stateskpi": { + "type": "object", + "allOf": [ + { + "properties": { + "for": { + "type": "string", + "description": "References an unique state name in the defined workflow events" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + } + } + }, + { + "$ref": "#/definitions/execkpis" + }, + { + "$ref": "#/definitions/durationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "for", + "per" + ] + }, + "workflowkpi": { + "type": "object", + "allOf": [ + { + "properties": { + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + } + } + }, + { + "$ref": "#/definitions/invocationkpis" + }, + { + "$ref": "#/definitions/durationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "per" + ] + }, + "thresholds": { + "type": "object", + "properties": { + "time": { + "type": "string", + "default": "PT1D", + "description": "ISO_8601 time. 1 day default" + }, + "instances": { + "type": "integer", + "minimum": 1, + "default": 1, + "description": "Number of workflow instances" + } + }, + "required": [ + ] + }, + "costkpis": { + "type": "object", + "properties": { + "maxCost": { + "type": "string", + "description": "Max cost" + }, + "minCost": { + "type": "string", + "description": "Min cost" + }, + "avgCost": { + "type": "string", + "description": "Avg cost" + } + } + }, + "invocationkpis": { + "type": "object", + "properties": { + "maxInvoked": { + "type": "string", + "description": "Max number of invocation times" + }, + "minInvoked": { + "type": "string", + "description": "Min number of invocation times" + }, + "avgInvoked": { + "type": "string", + "description": "Avg number of invocation times" + } + } + }, + "durationkpis": { + "type": "object", + "properties": { + "maxDuration": { + "type": "string", + "description": "ISO 8601. Max duration" + }, + "minDuration": { + "type": "string", + "description": "ISO 8601. Min duration" + }, + "avgDuration": { + "type": "string", + "description": "ISO 8601. Avg duration" + } + } + }, + "execkpis": { + "type": "object", + "properties": { + "maxExec": { + "type": "string", + "description": "Max exec number" + }, + "minExec": { + "type": "string", + "description": "Min exec numbe" + }, + "avgExec": { + "type": "string", + "description": "Avg exec number" + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.8/extensions/ratelimiting.json b/public/schemas/0.8/extensions/ratelimiting.json new file mode 100644 index 0000000..a7bc6f2 --- /dev/null +++ b/public/schemas/0.8/extensions/ratelimiting.json @@ -0,0 +1,73 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/extensions/ratelimiting.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - Various workflow rate limiting settings", + "type": "object", + "definitions": { + "ratelimiting": { + "type": "object", + "description": "Serverless Workflow Rate Limiting Extension", + "properties": { + "extensionid": { + "type": "string", + "default": "workflow-ratelimiting-extension", + "description": "Extension unique identifier" + }, + "workflowid": { + "type": "string", + "minLength": 1, + "description": "Workflow definition unique identifier (workflow id property)" + }, + "workflowVersions": { + "type": "array", + "description": "Workflow versions. If not defined, applies to all workflow instances (regardless of their associated workflow version)", + "items": { + "type": "string" + } + }, + "singleInstance": { + "description": "Rate Limit settings per single instance of a workflow with provided workflowid", + "$ref": "#/definitions/ratelimits" + }, + "allInstances": { + "description": "Rate Limit settings across all instance of a workflow with provided workflowid", + "$ref": "#/definitions/ratelimits" + } + }, + "required": [ + "extensionid", + "workflowid" + ] + }, + "ratelimits": { + "type": "object", + "properties": { + "maxActionsPerSecond": { + "type": "number", + "default": 0, + "description": "Sets the rate limiting on number of actions that can be executed per second. Notice that the number is represented as number type, so that you can set it to less than 1 if needed. For example, set the number to 0.1 means workflow actions can be executed once every 10 seconds. Default zero value means 'unlimited'" + }, + "maxConcurrentActions": { + "type": "number", + "default": 100, + "description": "Maximum number of actions that can be executed in parallel" + }, + "maxProducedEventsPerSecond": { + "type": "number", + "default": 0, + "description": "Sets the rate limiting on number of events that can be produced per second. Notice that the number is represented as number type, so that you can set it to less than 1 if needed. For example, set the number to 0.1 means workflow can produce events once every 10 seconds. Default zero value means 'unlimited'" + }, + "maxStates": { + "type": "integer", + "default": 0, + "description": "Maximum number of workflow states that should be executed. Default is zero, meaning unlimited." + }, + "maxTransitions": { + "type": "integer", + "default": 0, + "description": "Maximum number of workflow transitions that should be executed. Default is zero, meaning unlimited." + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.8/functions.json b/public/schemas/0.8/functions.json new file mode 100644 index 0000000..08f3b34 --- /dev/null +++ b/public/schemas/0.8/functions.json @@ -0,0 +1,72 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/functions.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - functions schema", + "type": "object", + "functions": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing function definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow function definitions", + "items": { + "type": "object", + "$ref": "#/definitions/function" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "functions" + ], + "definitions": { + "function": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique function name", + "minLength": 1 + }, + "operation": { + "type": "string", + "description": "If type is `rest`, #. If type is `asyncapi`, #. If type is `rpc`, ##. If type is `graphql`, ##. If type is `odata`, #. If type is `expression`, defines the workflow expression.", + "minLength": 1 + }, + "type": { + "type": "string", + "description": "Defines the function type. Is either `rest`, `asyncapi, `rpc`, `graphql`, `odata`, `expression`, or `custom`. Default is `rest`", + "enum": [ + "rest", + "asyncapi", + "rpc", + "graphql", + "odata", + "expression", + "custom" + ], + "default": "rest" + }, + "authRef": { + "type": "string", + "description": "References an auth definition name to be used to access to resource defined in the operation parameter", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "operation" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.8/odata.json b/public/schemas/0.8/odata.json new file mode 100644 index 0000000..958cd99 --- /dev/null +++ b/public/schemas/0.8/odata.json @@ -0,0 +1,81 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/odata.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - OData command options schema", + "type": "object", + "key": { + "type": "string", + "description": "The unique identifier of the single entry to query", + "minLength": 1 + }, + "queryOptions":{ + "$ref": "#/definitions/queryoptions" + }, + "definitions": { + "queryoptions": { + "type": "object", + "properties": { + "filter": { + "type": "string", + "description": "The $filter system query option allows clients to filter the set of resources that are addressed by a request URL. $filter specifies conditions that MUST be met by a resource for it to be returned in the set of matching resources", + "minLength": 1 + }, + "expand": { + "type": "string", + "description": "The $expand system query option allows clients to request related resources when a resource that satisfies a particular request is retrieved", + "minLength": 1 + }, + "select": { + "type": "string", + "description": "The $select system query option allows clients to requests a limited set of information for each entity or complex type identified by the ResourcePath and other System Query Options like $filter, $top, $skip etc. The $select query option is often used in conjunction with the $expand query option, to first increase the scope of the resource graph returned ($expand) and then selectively prune that resource graph ($select)", + "minLength": 1 + }, + "orderBy": { + "type": "string", + "description": "The $orderby system query option allows clients to request resource in a particular order", + "minLength": 1 + }, + "top": { + "type": "integer", + "description": "The $top system query option allows clients a required number of resources. Usually used in conjunction with the $skip query options", + "minLength": 1 + }, + "skip": { + "type": "integer", + "description": "The $skip system query option allows clients to skip a given number of resources. Usually used in conjunction with the $top query options", + "minLength": 1 + }, + "count": { + "type": "boolean", + "description": "The $count system query option allows clients to request a count of the matching resources included with the resources in the response" + }, + "search": { + "type": "string", + "description": "The $search system query option allows clients to request items within a collection matching a free-text search expression", + "minLength": 1 + }, + "format": { + "type": "string", + "description": "The $format system query option if supported allows clients to request a response in a particular format", + "minLength": 1 + }, + "compute": { + "type": "string", + "description": "The $compute system query option allows clients to define computed properties that can be used in a $select or within a $filter or $orderby expression.", + "minLength": 1 + }, + "index": { + "type": "string", + "description": "The $index system query option allows clients to do a positional insert into a collection annotated with using the Core.PositionalInsert term (see http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#VocCore)", + "minLength": 1 + }, + "schemaVersion": { + "type": "string", + "description": "The $schemaversion system query option allows clients to specify the version of the schema against which the request is made. The semantics of $schemaversion is covered in the OData-Protocol (http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#odata) document.", + "minLength": 1 + } + }, + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/public/schemas/0.8/retries.json b/public/schemas/0.8/retries.json new file mode 100644 index 0000000..1690abd --- /dev/null +++ b/public/schemas/0.8/retries.json @@ -0,0 +1,85 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/retries.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - retries schema", + "type": "object", + "retries": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing retry definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow Retry definitions. Define retry strategies that can be referenced in states onError definitions", + "items": { + "type": "object", + "$ref": "#/definitions/retrydef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "retries" + ], + "definitions": { + "retrydef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique retry strategy name", + "minLength": 1 + }, + "delay": { + "type": "string", + "description": "Time delay between retry attempts (ISO 8601 duration format)" + }, + "maxDelay": { + "type": "string", + "description": "Maximum time delay between retry attempts (ISO 8601 duration format)" + }, + "increment": { + "type": "string", + "description": "Static value by which the delay increases during each attempt (ISO 8601 time format)" + }, + "multiplier": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 1, + "multipleOf": 0.01, + "description": "Numeric value, if specified the delay between retries is multiplied by this value." + }, + "maxAttempts": { + "type": [ + "number", + "string" + ], + "minimum": 1, + "minLength": 0, + "description": "Maximum number of retry attempts." + }, + "jitter": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "maximum": 1, + "description": "If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0 and 1). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format)" + } + }, + "additionalProperties": false, + "required": [ + "name", + "maxAttempts" + ] + } + } +} diff --git a/public/schemas/0.8/secrets.json b/public/schemas/0.8/secrets.json new file mode 100644 index 0000000..dc553cc --- /dev/null +++ b/public/schemas/0.8/secrets.json @@ -0,0 +1,26 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/secrets.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - secrets schema", + "type": "object", + "secrets": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing secrets definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow Secrets definitions", + "items": { + "type": "string" + }, + "minItems": 1 + } + ] + }, + "required": [ + "secrets" + ] +} \ No newline at end of file diff --git a/public/schemas/0.8/timeouts.json b/public/schemas/0.8/timeouts.json new file mode 100644 index 0000000..0e0e1b2 --- /dev/null +++ b/public/schemas/0.8/timeouts.json @@ -0,0 +1,118 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/timeouts.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - functions schema", + "type": "object", + "timeouts": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing timeouts definitions (json or yaml)" + }, + { + "type": "object", + "description": "Workflow default timeouts", + "properties": { + "workflowExecTimeout": { + "$ref": "#/definitions/workflowExecTimeout" + }, + "stateExecTimeout": { + "$ref": "#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "#/definitions/actionExecTimeout" + }, + "branchExecTimeout": { + "$ref": "#/definitions/branchExecTimeout" + }, + "eventTimeout": { + "$ref": "#/definitions/eventTimeout" + } + }, + "additionalProperties": false, + "required": [] + } + ] + }, + "required": [ + "timeouts" + ], + "definitions": { + "workflowExecTimeout": { + "oneOf": [ + { + "type": "string", + "description": "Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "duration": { + "type": "string", + "description": "Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'", + "minLength": 1 + }, + "interrupt": { + "type": "boolean", + "description": "If `false`, workflow instance is allowed to finish current execution. If `true`, current workflow execution is abrupted.", + "default": true + }, + "runBefore": { + "type": "string", + "description": "Name of a workflow state to be executed before workflow instance is terminated", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "duration" + ] + } + ] + }, + "stateExecTimeout": { + "oneOf": [ + { + "type": "string", + "description": "Total state execution timeout (including retries) (ISO 8601 duration format)", + "minLength": 1 + }, + { + "type": "object", + "description": "Workflow default timeouts", + "properties": { + "single": { + "type": "string", + "description": "Single state execution timeout, not including retries (ISO 8601 duration format)", + "minLength": 1 + }, + "total": { + "type": "string", + "description": "Total state execution timeout, including retries (ISO 8601 duration format)", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": ["total"] + } + ] + }, + "actionExecTimeout": { + "type": "string", + "description": "Single actions definition execution timeout duration (ISO 8601 duration format)", + "minLength": 1 + }, + "branchExecTimeout": { + "type": "string", + "description": "Single branch execution timeout duration (ISO 8601 duration format)", + "minLength": 1 + }, + "eventTimeout": { + "type": "string", + "description": "Timeout duration to wait for consuming defined events (ISO 8601 duration format)", + "minLength": 1 + } + } +} \ No newline at end of file diff --git a/public/schemas/0.8/workflow.json b/public/schemas/0.8/workflow.json new file mode 100644 index 0000000..2d11730 --- /dev/null +++ b/public/schemas/0.8/workflow.json @@ -0,0 +1,2008 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.8/workflow.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - workflow schema", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Workflow unique identifier", + "minLength": 1 + }, + "key": { + "type": "string", + "description": "Domain-specific workflow identifier", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "Workflow name", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Workflow description" + }, + "version": { + "type": "string", + "description": "Workflow version", + "minLength": 1 + }, + "annotations": { + "type": "array", + "description": "List of helpful terms describing the workflows intended purpose, subject areas, or other important qualities", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "dataInputSchema": { + "oneOf": [ + { + "type": "string", + "description": "URI of the JSON Schema used to validate the workflow data input", + "minLength": 1 + }, + { + "type": "object", + "description": "Workflow data input schema definition", + "properties": { + "schema": { + "type": "string", + "description": "URI of the JSON Schema used to validate the workflow data input", + "minLength": 1 + }, + "failOnValidationErrors": { + "type": "boolean", + "default": true, + "description": "Determines if workflow execution should continue if there are validation errors" + } + }, + "additionalProperties": false, + "required": [ + "schema", + "failOnValidationErrors" + ] + } + ] + }, + "secrets": { + "$ref": "secrets.json#/secrets" + }, + "constants": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing constants data (json or yaml)" + }, + { + "type": "object", + "description": "Workflow constants data (object type)" + } + ] + }, + "start": { + "$ref": "#/definitions/startdef" + }, + "specVersion": { + "type": "string", + "description": "Serverless Workflow schema version", + "minLength": 1 + }, + "expressionLang": { + "type": "string", + "description": "Identifies the expression language used for workflow expressions. Default is 'jq'", + "default": "jq", + "minLength": 1 + }, + "timeouts": { + "$ref": "timeouts.json#/timeouts" + }, + "errors": { + "$ref": "errors.json#/errors" + }, + "keepActive": { + "type": "boolean", + "default": false, + "description": "If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'workflowExecTimeout'" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + }, + "events": { + "$ref": "events.json#/events" + }, + "functions": { + "$ref": "functions.json#/functions" + }, + "autoRetries": { + "type": "boolean", + "default": false, + "description": "If set to true, actions should automatically be retried on unchecked errors. Default is false" + }, + "retries": { + "$ref": "retries.json#/retries" + }, + "auth": { + "$ref": "auth.json#/auth" + }, + "states": { + "type": "array", + "description": "State definitions", + "items": { + "anyOf": [ + { + "title": "Sleep State", + "$ref": "#/definitions/sleepstate" + }, + { + "title": "Event State", + "$ref": "#/definitions/eventstate" + }, + { + "title": "Operation State", + "$ref": "#/definitions/operationstate" + }, + { + "title": "Parallel State", + "$ref": "#/definitions/parallelstate" + }, + { + "title": "Switch State", + "$ref": "#/definitions/switchstate" + }, + { + "title": "Inject State", + "$ref": "#/definitions/injectstate" + }, + { + "title": "ForEach State", + "$ref": "#/definitions/foreachstate" + }, + { + "title": "Callback State", + "$ref": "#/definitions/callbackstate" + } + ] + }, + "additionalItems": false, + "minItems": 1 + } + }, + "oneOf": [ + { + "required": [ + "id", + "specVersion", + "states" + ] + }, + { + "required": [ + "key", + "specVersion", + "states" + ] + } + ], + "definitions": { + "sleep": { + "type": "object", + "properties": { + "before": { + "type": "string", + "description": "Amount of time (ISO 8601 duration format) to sleep before function/subflow invocation. Does not apply if 'eventRef' is defined." + }, + "after": { + "type": "string", + "description": "Amount of time (ISO 8601 duration format) to sleep after function/subflow invocation. Does not apply if 'eventRef' is defined." + } + }, + "oneOf": [ + { + "required": [ + "before" + ] + }, + { + "required": [ + "after" + ] + }, + { + "required": [ + "before", + "after" + ] + } + ] + }, + "crondef": { + "oneOf": [ + { + "type": "string", + "description": "Cron expression defining when workflow instances should be created (automatically)", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "expression": { + "type": "string", + "description": "Repeating interval (cron expression) describing when the workflow instance should be created", + "minLength": 1 + }, + "validUntil": { + "type": "string", + "description": "Specific date and time (ISO 8601 format) when the cron expression invocation is no longer valid" + } + }, + "additionalProperties": false, + "required": [ + "expression" + ] + } + ] + }, + "continueasdef": { + "oneOf": [ + { + "type": "string", + "description": "Unique id of the workflow to be continue execution as. Entire state data is passed as data input to next execution", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "workflowId": { + "type": "string", + "description": "Unique id of the workflow to continue execution as" + }, + "version": { + "type": "string", + "description": "Version of the workflow to continue execution as", + "minLength": 1 + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If string type, an expression which selects parts of the states data output to become the workflow data input of continued execution. If object type, a custom object to become the workflow data input of the continued execution" + }, + "workflowExecTimeout": { + "$ref": "timeouts.json#/definitions/workflowExecTimeout", + "description": "Workflow execution timeout to be used by the workflow continuing execution. Overwrites any specific settings set by that workflow" + } + }, + "required": [ + "workflowId" + ] + } + ] + }, + "transition": { + "oneOf": [ + { + "type": "string", + "description": "Name of state to transition to", + "minLength": 1 + }, + { + "type": "object", + "description": "Function Reference", + "properties": { + "nextState": { + "type": "string", + "description": "Name of state to transition to", + "minLength": 1 + }, + "produceEvents": { + "type": "array", + "description": "Array of events to be produced before the transition happens", + "items": { + "type": "object", + "$ref": "#/definitions/produceeventdef" + }, + "additionalItems": false + }, + "compensate": { + "type": "boolean", + "default": false, + "description": "If set to true, triggers workflow compensation when before this transition is taken. Default is false" + } + }, + "additionalProperties": false, + "required": [ + "nextState" + ] + } + ] + }, + "error": { + "type": "object", + "properties": { + "errorRef": { + "type": "string", + "description": "Reference to a unique workflow error definition. Used of errorRefs is not used", + "minLength": 1 + }, + "errorRefs": { + "type": "array", + "description": "References one or more workflow error definitions. Used if errorRef is not used", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "transition": { + "description": "Transition to next state to handle the error.", + "$ref": "#/definitions/transition" + }, + "end": { + "description": "End workflow execution in case of this error.", + "$ref": "#/definitions/end" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "errorRef", + "transition" + ] + }, + { + "required": [ + "errorRef", + "end" + ] + }, + { + "required": [ + "errorRefs", + "transition" + ] + }, + { + "required": [ + "errorRefs", + "end" + ] + } + ] + }, + "onevents": { + "type": "object", + "properties": { + "eventRefs": { + "type": "array", + "description": "References one or more unique event names in the defined workflow events", + "minItems": 1, + "items": { + "type": "string" + }, + "uniqueItems": true, + "additionalItems": false + }, + "actionMode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies how actions are to be performed (in sequence or in parallel)", + "default": "sequential" + }, + "actions": { + "type": "array", + "description": "Actions to be performed if expression matches", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + }, + "eventDataFilter": { + "description": "Event data filter", + "$ref": "#/definitions/eventdatafilter" + } + }, + "additionalProperties": false, + "required": [ + "eventRefs" + ] + }, + "action": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique action identifier" + }, + "name": { + "type": "string", + "description": "Unique action definition name" + }, + "functionRef": { + "description": "References a function to be invoked", + "$ref": "#/definitions/functionref" + }, + "eventRef": { + "description": "References a 'trigger' and 'result' reusable event definitions", + "$ref": "#/definitions/eventref" + }, + "subFlowRef": { + "description": "References a sub-workflow to invoke", + "$ref": "#/definitions/subflowref" + }, + "sleep": { + "description": "Defines time periods workflow execution should sleep before / after function execution", + "$ref": "#/definitions/sleep" + }, + "retryRef": { + "type": "string", + "description": "References a defined workflow retry definition. If not defined the default retry policy is assumed" + }, + "nonRetryableErrors": { + "type": "array", + "description": "List of unique references to defined workflow errors for which the action should not be retried. Used only when `autoRetries` is set to `true`", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "retryableErrors": { + "type": "array", + "description": "List of unique references to defined workflow errors for which the action should be retried. Used only when `autoRetries` is set to `false`", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "actionDataFilter": { + "description": "Action data filter", + "$ref": "#/definitions/actiondatafilter" + }, + "condition": { + "description": "Expression, if defined, must evaluate to true for this action to be performed. If false, action is disregarded", + "type": "string", + "minLength": 1 + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "functionRef" + ] + }, + { + "required": [ + "eventRef" + ] + }, + { + "required": [ + "subFlowRef" + ] + } + ] + }, + "functionref": { + "oneOf": [ + { + "type": "string", + "description": "Name of the referenced function", + "minLength": 1 + }, + { + "type": "object", + "description": "Function Reference", + "properties": { + "refName": { + "type": "string", + "description": "Name of the referenced function" + }, + "arguments": { + "type": "object", + "description": "Function arguments/inputs" + }, + "selectionSet": { + "type": "string", + "description": "Only used if function type is 'graphql'. A string containing a valid GraphQL selection set" + }, + "invoke": { + "type": "string", + "enum": [ + "sync", + "async" + ], + "description": "Specifies if the function should be invoked sync or async", + "default": "sync" + } + }, + "additionalProperties": false, + "required": [ + "refName" + ] + } + ] + }, + "eventref": { + "type": "object", + "description": "Event References", + "properties": { + "triggerEventRef": { + "type": "string", + "description": "Reference to the unique name of a 'produced' event definition" + }, + "resultEventRef": { + "type": "string", + "description": "Reference to the unique name of a 'consumed' event definition" + }, + "resultEventTimeout": { + "type": "string", + "description": "Maximum amount of time (ISO 8601 format) to wait for the result event. If not defined it should default to the actionExecutionTimeout" + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'triggerEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'triggerEventRef'." + }, + "contextAttributes": { + "type": "object", + "description": "Add additional extension context attributes to the produced event", + "additionalProperties": { + "type": "string" + } + }, + "invoke": { + "type": "string", + "enum": [ + "sync", + "async" + ], + "description": "Specifies if the function should be invoked sync or async. Default is sync.", + "default": "sync" + } + }, + "additionalProperties": false, + "required": [ + "triggerEventRef", + "resultEventRef" + ] + }, + "subflowref": { + "oneOf": [ + { + "type": "string", + "description": "Unique id of the sub-workflow to be invoked", + "minLength": 1 + }, + { + "type": "object", + "description": "Specifies a sub-workflow to be invoked", + "properties": { + "workflowId": { + "type": "string", + "description": "Unique id of the sub-workflow to be invoked" + }, + "version": { + "type": "string", + "description": "Version of the sub-workflow to be invoked", + "minLength": 1 + }, + "onParentComplete": { + "type": "string", + "enum": [ + "continue", + "terminate" + ], + "description": "If invoke is 'async', specifies how subflow execution should behave when parent workflow completes. Default is 'terminate'", + "default": "terminate" + }, + "invoke": { + "type": "string", + "enum": [ + "sync", + "async" + ], + "description": "Specifies if the subflow should be invoked sync or async", + "default": "sync" + } + }, + "required": [ + "workflowId" + ] + } + ] + }, + "branch": { + "type": "object", + "description": "Branch Definition", + "properties": { + "name": { + "type": "string", + "description": "Branch name" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + }, + "branchExecTimeout": { + "$ref": "timeouts.json#/definitions/branchExecTimeout" + } + }, + "required": [] + }, + "actions": { + "type": "array", + "description": "Actions to be executed in this branch", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + } + }, + "additionalProperties": false, + "required": [ + "name", + "actions" + ] + }, + "sleepstate": { + "type": "object", + "description": "Causes the workflow execution to sleep for a specified duration", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "sleep", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "duration": { + "type": "string", + "description": "Duration (ISO 8601 duration format) to sleep" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + } + }, + "required": [] + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after the workflow sleep", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "duration" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "duration", + "end" + ] + }, + { + "required": [ + "name", + "type", + "duration", + "transition" + ] + } + ] + } + }, + "eventstate": { + "type": "object", + "description": "This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "event", + "description": "State type" + }, + "exclusive": { + "type": "boolean", + "default": true, + "description": "If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed" + }, + "onEvents": { + "type": "array", + "description": "Define the events to be consumed and optional actions to be performed", + "items": { + "type": "object", + "$ref": "#/definitions/onevents" + }, + "additionalItems": false + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + }, + "eventTimeout": { + "$ref": "timeouts.json#/definitions/eventTimeout" + } + }, + "required": [] + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "name", + "type", + "onEvents", + "end" + ] + }, + { + "required": [ + "name", + "type", + "onEvents", + "transition" + ] + } + ] + }, + "operationstate": { + "type": "object", + "description": "Defines actions be performed. Does not wait for incoming events", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "operation", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "actionMode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies whether actions are performed in sequence or in parallel", + "default": "sequential" + }, + "actions": { + "type": "array", + "description": "Actions to be performed", + "items": { + "type": "object", + "$ref": "#/definitions/action" + } + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + } + }, + "required": [] + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "actions" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "actions", + "end" + ] + }, + { + "required": [ + "name", + "type", + "actions", + "transition" + ] + } + ] + } + }, + "parallelstate": { + "type": "object", + "description": "Consists of a number of states that are executed in parallel", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "parallel", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "branchExecTimeout": { + "$ref": "timeouts.json#/definitions/branchExecTimeout" + } + }, + "required": [] + }, + "branches": { + "type": "array", + "description": "Branch Definitions", + "items": { + "type": "object", + "$ref": "#/definitions/branch" + }, + "additionalItems": false + }, + "completionType": { + "type": "string", + "enum": [ + "allOf", + "atLeast" + ], + "description": "Option types on how to complete branch execution.", + "default": "allOf" + }, + "numCompleted": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 0, + "description": "Used when completionType is set to 'atLeast' to specify the minimum number of branches that must complete before the state will transition." + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all branches have completed execution", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "branches" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "branches", + "end" + ] + }, + { + "required": [ + "name", + "type", + "branches", + "transition" + ] + } + ] + } + }, + "switchstate": { + "oneOf": [ + { + "$ref": "#/definitions/databasedswitchstate" + }, + { + "$ref": "#/definitions/eventbasedswitchstate" + } + ] + }, + "eventbasedswitchstate": { + "type": "object", + "description": "Permits transitions to other states based on events", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "switch", + "description": "State type" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "eventTimeout": { + "$ref": "timeouts.json#/definitions/eventTimeout" + } + }, + "required": [] + }, + "eventConditions": { + "type": "array", + "description": "Defines conditions evaluated against events", + "items": { + "type": "object", + "$ref": "#/definitions/eventcondition" + }, + "additionalItems": false + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "defaultCondition": { + "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition", + "$ref": "#/definitions/defaultconditiondef" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "type", + "eventConditions", + "defaultCondition" + ] + }, + "databasedswitchstate": { + "type": "object", + "description": "Permits transitions to other states based on data conditions", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "switch", + "description": "State type" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + } + }, + "required": [] + }, + "dataConditions": { + "type": "array", + "description": "Defines conditions evaluated against state data", + "items": { + "type": "object", + "$ref": "#/definitions/datacondition" + }, + "additionalItems": false + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "defaultCondition": { + "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition", + "$ref": "#/definitions/defaultconditiondef" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "type", + "dataConditions", + "defaultCondition" + ] + }, + "defaultconditiondef": { + "type": "object", + "description": "DefaultCondition definition. Can be either a transition or end definition", + "properties": { + "transition": { + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "transition" + ] + }, + { + "required": [ + "end" + ] + } + ] + }, + "eventcondition": { + "oneOf": [ + { + "$ref": "#/definitions/transitioneventcondition" + }, + { + "$ref": "#/definitions/enddeventcondition" + } + ] + }, + "transitioneventcondition": { + "type": "object", + "description": "Switch state data event condition", + "properties": { + "name": { + "type": "string", + "description": "Event condition name" + }, + "eventRef": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "transition": { + "description": "Next transition of the workflow if there is valid matches", + "$ref": "#/definitions/transition" + }, + "eventDataFilter": { + "description": "Event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "eventRef", + "transition" + ] + }, + "enddeventcondition": { + "type": "object", + "description": "Switch state data event condition", + "properties": { + "name": { + "type": "string", + "description": "Event condition name" + }, + "eventRef": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "end": { + "$ref": "#/definitions/end", + "description": "Explicit transition to end" + }, + "eventDataFilter": { + "description": "Event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "eventRef", + "end" + ] + }, + "datacondition": { + "oneOf": [ + { + "$ref": "#/definitions/transitiondatacondition" + }, + { + "$ref": "#/definitions/enddatacondition" + } + ] + }, + "transitiondatacondition": { + "type": "object", + "description": "Switch state data based condition", + "properties": { + "name": { + "type": "string", + "description": "Data condition name" + }, + "condition": { + "type": "string", + "description": "Workflow expression evaluated against state data. Must evaluate to true or false" + }, + "transition": { + "description": "Workflow transition if condition is evaluated to true", + "$ref": "#/definitions/transition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "condition", + "transition" + ] + }, + "enddatacondition": { + "type": "object", + "description": "Switch state data based condition", + "properties": { + "name": { + "type": "string", + "description": "Data condition name" + }, + "condition": { + "type": "string", + "description": "Workflow expression evaluated against state data. Must evaluate to true or false" + }, + "end": { + "$ref": "#/definitions/end", + "description": "Workflow end definition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "condition", + "end" + ] + }, + "injectstate": { + "type": "object", + "description": "Inject static data into state data. Does not perform any actions", + "properties": { + "id": { + "type": "string", + "description": "Unique state id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "inject", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "data": { + "type": "object", + "description": "JSON object which can be set as states data input and can be manipulated via filters" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + } + }, + "required": [] + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "transition": { + "description": "Next transition of the workflow after injection has completed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "data" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "data", + "end" + ] + }, + { + "required": [ + "name", + "type", + "data", + "transition" + ] + } + ] + } + }, + "foreachstate": { + "type": "object", + "description": "Execute a set of defined actions or workflows for each element of a data array", + "properties": { + "id": { + "type": "string", + "description": "Unique State id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "foreach", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "inputCollection": { + "type": "string", + "description": "Workflow expression selecting an array element of the states data" + }, + "outputCollection": { + "type": "string", + "description": "Workflow expression specifying an array element of the states data to add the results of each iteration" + }, + "iterationParam": { + "type": "string", + "description": "Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array" + }, + "batchSize": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 0, + "description": "Specifies how many iterations may run in parallel at the same time. Used if 'mode' property is set to 'parallel' (default)" + }, + "actions": { + "type": "array", + "description": "Actions to be executed for each of the elements of inputCollection", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + } + }, + "required": [] + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after state has completed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "mode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies how iterations are to be performed (sequentially or in parallel)", + "default": "parallel" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "inputCollection", + "actions" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "inputCollection", + "actions", + "end" + ] + }, + { + "required": [ + "name", + "type", + "inputCollection", + "actions", + "transition" + ] + } + ] + } + }, + "callbackstate": { + "type": "object", + "description": "This state performs an action, then waits for the callback event that denotes completion of the action", + "properties": { + "id": { + "type": "string", + "description": "Unique state id", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "callback", + "description": "State type" + }, + "action": { + "description": "Defines the action to be executed", + "$ref": "#/definitions/action" + }, + "eventRef": { + "type": "string", + "description": "References an unique callback event name in the defined workflow events" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + }, + "eventTimeout": { + "$ref": "timeouts.json#/definitions/eventTimeout" + } + }, + "required": [] + }, + "eventDataFilter": { + "description": "Event data filter", + "$ref": "#/definitions/eventdatafilter" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "action", + "eventRef" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "action", + "eventRef", + "end" + ] + }, + { + "required": [ + "name", + "type", + "action", + "eventRef", + "transition" + ] + } + ] + } + }, + "startdef": { + "oneOf": [ + { + "type": "string", + "description": "Name of the starting workflow state", + "minLength": 1 + }, + { + "type": "object", + "description": "Workflow start definition", + "properties": { + "stateName": { + "type": "string", + "description": "Name of the starting workflow state", + "minLength": 1 + }, + "schedule": { + "description": "Define the time/repeating intervals or cron at which workflow instances should be automatically started.", + "$ref": "#/definitions/schedule" + } + }, + "additionalProperties": false, + "required": [ + "stateName", + "schedule" + ] + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "string", + "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created. (UTC timezone is assumed)", + "minLength": 1 + }, + { + "type": "object", + "description": "Start state schedule definition", + "properties": { + "interval": { + "type": "string", + "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.", + "minLength": 1 + }, + "cron": { + "$ref": "#/definitions/crondef" + }, + "timezone": { + "type": "string", + "description": "Timezone name used to evaluate the interval & cron-expression. (default: UTC)" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "interval" + ] + }, + { + "required": [ + "cron" + ] + } + ] + } + ] + }, + "end": { + "oneOf": [ + { + "type": "boolean", + "description": "State end definition", + "default": true + }, + { + "type": "object", + "description": "State end definition", + "properties": { + "terminate": { + "type": "boolean", + "default": false, + "description": "If true, completes all execution flows in the given workflow instance" + }, + "produceEvents": { + "type": "array", + "description": "Defines events that should be produced", + "items": { + "type": "object", + "$ref": "#/definitions/produceeventdef" + }, + "additionalItems": false + }, + "compensate": { + "type": "boolean", + "default": false, + "description": "If set to true, triggers workflow compensation. Default is false" + }, + "continueAs": { + "$ref": "#/definitions/continueasdef" + } + }, + "additionalProperties": false, + "required": [] + } + ] + }, + "produceeventdef": { + "type": "object", + "description": "Produce an event and set its data", + "properties": { + "eventRef": { + "type": "string", + "description": "References a name of a defined event" + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event." + }, + "contextAttributes": { + "type": "object", + "description": "Add additional event extension context attributes", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "eventRef" + ] + }, + "statedatafilter": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Workflow expression to filter the state data input" + }, + "output": { + "type": "string", + "description": "Workflow expression that filters the state data output" + } + }, + "additionalProperties": false, + "required": [] + }, + "eventdatafilter": { + "type": "object", + "properties": { + "useData": { + "type": "boolean", + "description": "If set to false, event payload is not added/merged to state data. In this case 'data' and 'toStateData' should be ignored. Default is true.", + "default": true + }, + "data": { + "type": "string", + "description": "Workflow expression that filters the received event payload (default: '${ . }')" + }, + "toStateData": { + "type": "string", + "description": " Workflow expression that selects a state data element to which the filtered event should be added/merged into. If not specified, denotes, the top-level state data element." + } + }, + "additionalProperties": false, + "required": [] + }, + "actiondatafilter": { + "type": "object", + "properties": { + "fromStateData": { + "type": "string", + "description": "Workflow expression that selects state data that the state action can use" + }, + "useResults": { + "type": "boolean", + "description": "If set to false, action data results are not added/merged to state data. In this case 'results' and 'toStateData' should be ignored. Default is true.", + "default": true + }, + "results": { + "type": "string", + "description": "Workflow expression that filters the actions data results" + }, + "toStateData": { + "type": "string", + "description": "Workflow expression that selects a state data element to which the action results should be added/merged into. If not specified, denote, the top-level state data element" + } + }, + "additionalProperties": false, + "required": [] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/auth.json b/public/schemas/0.9/auth.json new file mode 100644 index 0000000..3f9f1bd --- /dev/null +++ b/public/schemas/0.9/auth.json @@ -0,0 +1,194 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/auth.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - auth schema", + "type": "object", + "auth": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing auth definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow auth definitions", + "items": { + "type": "object", + "$ref": "#/definitions/authdef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "auth" + ], + "definitions": { + "authdef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique auth definition name", + "minLength": 1 + }, + "scheme": { + "type": "string", + "description": "Defines the auth type", + "enum": [ + "basic", + "bearer", + "oauth2" + ], + "default": "basic" + }, + "properties": { + "oneOf": [ + { + "type": "string", + "description": "Expression referencing a workflow secret that contains all needed auth info" + }, + { + "title": "Basic Auth Info", + "$ref": "#/definitions/basicpropsdef" + }, + { + "title": "Bearer Auth Info State", + "$ref": "#/definitions/bearerpropsdef" + }, + { + "title": "OAuth2 Info", + "$ref": "#/definitions/oauth2propsdef" + } + ] + } + }, + "required": [ + "name", + "properties" + ] + }, + "basicpropsdef": { + "type": "object", + "description": "Basic auth information", + "properties": { + "username": { + "type": "string", + "description": "String or a workflow expression. Contains the user name", + "minLength": 1 + }, + "password": { + "type": "string", + "description": "String or a workflow expression. Contains the user password", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "required": [ + "username", + "password" + ], + "additionalProperties": false + }, + "bearerpropsdef": { + "type": "object", + "description": "Bearer auth information", + "properties": { + "token": { + "type": "string", + "description": "String or a workflow expression. Contains the token", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "required": [ + "token" + ], + "additionalProperties": false + }, + "oauth2propsdef": { + "type": "object", + "description": "OAuth2 information", + "properties": { + "authority": { + "type": "string", + "description": "String or a workflow expression. Contains the authority information", + "minLength": 1 + }, + "grantType": { + "type": "string", + "description": "Defines the grant type", + "enum": [ + "password", + "clientCredentials", + "tokenExchange" + ], + "additionalItems": false + }, + "clientId": { + "type": "string", + "description": "String or a workflow expression. Contains the client identifier", + "minLength": 1 + }, + "clientSecret": { + "type": "string", + "description": "Workflow secret or a workflow expression. Contains the client secret", + "minLength": 1 + }, + "scopes": { + "type": "array", + "description": "Array containing strings or workflow expressions. Contains the OAuth2 scopes", + "items": { + "type": "string" + }, + "minItems": 1, + "additionalItems": false + }, + "username": { + "type": "string", + "description": "String or a workflow expression. Contains the user name. Used only if grantType is 'resourceOwner'", + "minLength": 1 + }, + "password": { + "type": "string", + "description": "String or a workflow expression. Contains the user password. Used only if grantType is 'resourceOwner'", + "minLength": 1 + }, + "audiences": { + "type": "array", + "description": "Array containing strings or workflow expressions. Contains the OAuth2 audiences", + "items": { + "type": "string" + }, + "minItems": 1, + "additionalItems": false + }, + "subjectToken": { + "type": "string", + "description": "String or a workflow expression. Contains the subject token", + "minLength": 1 + }, + "requestedSubject": { + "type": "string", + "description": "String or a workflow expression. Contains the requested subject", + "minLength": 1 + }, + "requestedIssuer": { + "type": "string", + "description": "String or a workflow expression. Contains the requested issuer", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "required": ["grantType", "clientId"] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/common.json b/public/schemas/0.9/common.json new file mode 100644 index 0000000..4322f83 --- /dev/null +++ b/public/schemas/0.9/common.json @@ -0,0 +1,15 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/common.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - common schema", + "type": "object", + "definitions": { + "metadata": { + "type": "object", + "description": "Metadata information", + "additionalProperties": { + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/errors.json b/public/schemas/0.9/errors.json new file mode 100644 index 0000000..8d16def --- /dev/null +++ b/public/schemas/0.9/errors.json @@ -0,0 +1,53 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/errors.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - errors schema", + "type": "object", + "errors": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing error definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow Error definitions. Defines checked errors that can be explicitly handled during workflow execution", + "items": { + "type": "object", + "$ref": "#/definitions/errordef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "errors" + ], + "definitions": { + "errordef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Domain-specific error name", + "minLength": 1 + }, + "code": { + "type": "string", + "description": "Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*'", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Error description" + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/events.json b/public/schemas/0.9/events.json new file mode 100644 index 0000000..b86fce2 --- /dev/null +++ b/public/schemas/0.9/events.json @@ -0,0 +1,117 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/events.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - events schema", + "type": "object", + "events": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing event definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow CloudEvent definitions. Defines CloudEvents that can be consumed or produced", + "items": { + "type": "object", + "$ref": "#/definitions/eventdef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "events" + ], + "definitions": { + "eventdef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique event name", + "minLength": 1 + }, + "source": { + "type": "string", + "description": "CloudEvent source" + }, + "type": { + "type": "string", + "description": "CloudEvent type" + }, + "kind": { + "type": "string", + "enum": [ + "consumed", + "produced" + ], + "description": "Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed'", + "default": "consumed" + }, + "correlation": { + "type": "array", + "description": "CloudEvent correlation definitions", + "minItems": 1, + "items": { + "type": "object", + "$ref": "#/definitions/correlationDef" + }, + "additionalItems": false + }, + "dataOnly": { + "type": "boolean", + "default": true, + "description": "If `true`, only the Event payload is accessible to consuming Workflow states. If `false`, both event payload and context attributes should be accessible " + }, + "metadata": { + "$ref": "common.json#/definitions/metadata", + "description": "Metadata information" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "kind": { + "const": "consumed" + } + } + }, + "then": { + "required": [ + "name", + "source", + "type" + ] + }, + "else": { + "required": [ + "name", + "type" + ] + } + }, + "correlationDef": { + "type": "object", + "description": "CloudEvent correlation definition", + "properties": { + "contextAttributeName": { + "type": "string", + "description": "CloudEvent Extension Context Attribute name", + "minLength": 1 + }, + "contextAttributeValue": { + "type": "string", + "description": "CloudEvent Extension Context Attribute value", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "contextAttributeName" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/extensions/kpi.json b/public/schemas/0.9/extensions/kpi.json new file mode 100644 index 0000000..924bbab --- /dev/null +++ b/public/schemas/0.9/extensions/kpi.json @@ -0,0 +1,289 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/extensions/kpi.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - KPIs Extension Schema", + "type": "object", + "definitions": { + "kpi": { + "type": "object", + "description": "Serverless Workflow KPI Extension", + "properties": { + "extensionid": { + "type": "string", + "default": "workflow-kpi-extension", + "description": "Extension unique identifier" + }, + "workflowid": { + "type": "string", + "minLength": 1, + "description": "Workflow definition unique identifier (workflow id property)" + }, + "workflowVersions": { + "type": "array", + "description": "Workflow versions. If not defined, applies to all workflow instances (regardless of their associated workflow version)", + "items": { + "type": "string" + } + }, + "currency": { + "type": "string", + "default": "USD", + "description": "Unit for all cost-based KPI parameters. Default 'USD'" + }, + "events": { + "type": "array", + "description": "Events KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/eventskpi" + } + }, + "functions": { + "type": "array", + "description": "Functions KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/functionskpi" + } + }, + "states": { + "type": "array", + "description": "States KPIs", + "items": { + "type": "object", + "$ref": "#/definitions/stateskpi" + } + }, + "workflow": { + "description": "Workflow KPIs", + "$ref": "#/definitions/workflowkpi" + } + }, + "required": [ + "extensionid", + "workflowid" + ] + }, + "eventskpi": { + "type": "object", + "properties": { + "for": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + }, + "maxConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the max amount of times this event is consumed" + }, + "minConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the min amount of times this event is consumed" + }, + "avgConsumed": { + "type": "string", + "description": "If event kind is 'consumed', the avg amount of times this event is consumed" + }, + "maxProduced": { + "type": "string", + "description": "If event kind is 'produced', the max amount of times this event is produced" + }, + "minProduced": { + "type": "string", + "description": "If event kind is 'produced', the min amount times this event is produced" + }, + "avgProduced": { + "type": "string", + "description": "If event kind is 'produced', the avg amount of times this event is produced" + } + }, + "required": [ + "for", + "per" + ] + }, + "functionskpi": { + "type": "object", + "allOf": [ + { + "properties": { + "for": { + "type": "string", + "description": "References an unique function name in the defined workflow functions" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + }, + "maxErrors": { + "type": "string", + "description": "Max number of errors during function invocation" + }, + "maxRetry": { + "type": "string", + "description": "Max number of retries done for this function invocation" + }, + "maxTimeout": { + "type": "string", + "description": "Max number of times the function timeout time was reached" + } + } + }, + { + "$ref": "#/definitions/invocationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "for", + "per" + ] + }, + "stateskpi": { + "type": "object", + "allOf": [ + { + "properties": { + "for": { + "type": "string", + "description": "References an unique state name in the defined workflow events" + }, + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + } + } + }, + { + "$ref": "#/definitions/execkpis" + }, + { + "$ref": "#/definitions/durationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "for", + "per" + ] + }, + "workflowkpi": { + "type": "object", + "allOf": [ + { + "properties": { + "per": { + "description": "Define the kpi thresholds in terms of time and/or num of workflow instances", + "$ref": "#/definitions/thresholds" + } + } + }, + { + "$ref": "#/definitions/invocationkpis" + }, + { + "$ref": "#/definitions/durationkpis" + }, + { + "$ref": "#/definitions/costkpis" + } + ], + "required": [ + "per" + ] + }, + "thresholds": { + "type": "object", + "properties": { + "time": { + "type": "string", + "default": "PT1D", + "description": "ISO_8601 time. 1 day default" + }, + "instances": { + "type": "integer", + "minimum": 1, + "default": 1, + "description": "Number of workflow instances" + } + }, + "required": [ + ] + }, + "costkpis": { + "type": "object", + "properties": { + "maxCost": { + "type": "string", + "description": "Max cost" + }, + "minCost": { + "type": "string", + "description": "Min cost" + }, + "avgCost": { + "type": "string", + "description": "Avg cost" + } + } + }, + "invocationkpis": { + "type": "object", + "properties": { + "maxInvoked": { + "type": "string", + "description": "Max number of invocation times" + }, + "minInvoked": { + "type": "string", + "description": "Min number of invocation times" + }, + "avgInvoked": { + "type": "string", + "description": "Avg number of invocation times" + } + } + }, + "durationkpis": { + "type": "object", + "properties": { + "maxDuration": { + "type": "string", + "description": "ISO 8601. Max duration" + }, + "minDuration": { + "type": "string", + "description": "ISO 8601. Min duration" + }, + "avgDuration": { + "type": "string", + "description": "ISO 8601. Avg duration" + } + } + }, + "execkpis": { + "type": "object", + "properties": { + "maxExec": { + "type": "string", + "description": "Max exec number" + }, + "minExec": { + "type": "string", + "description": "Min exec numbe" + }, + "avgExec": { + "type": "string", + "description": "Avg exec number" + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/extensions/ratelimiting.json b/public/schemas/0.9/extensions/ratelimiting.json new file mode 100644 index 0000000..e9ca507 --- /dev/null +++ b/public/schemas/0.9/extensions/ratelimiting.json @@ -0,0 +1,73 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/extensions/ratelimiting.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - Various workflow rate limiting settings", + "type": "object", + "definitions": { + "ratelimiting": { + "type": "object", + "description": "Serverless Workflow Rate Limiting Extension", + "properties": { + "extensionid": { + "type": "string", + "default": "workflow-ratelimiting-extension", + "description": "Extension unique identifier" + }, + "workflowid": { + "type": "string", + "minLength": 1, + "description": "Workflow definition unique identifier (workflow id property)" + }, + "workflowVersions": { + "type": "array", + "description": "Workflow versions. If not defined, applies to all workflow instances (regardless of their associated workflow version)", + "items": { + "type": "string" + } + }, + "singleInstance": { + "description": "Rate Limit settings per single instance of a workflow with provided workflowid", + "$ref": "#/definitions/ratelimits" + }, + "allInstances": { + "description": "Rate Limit settings across all instance of a workflow with provided workflowid", + "$ref": "#/definitions/ratelimits" + } + }, + "required": [ + "extensionid", + "workflowid" + ] + }, + "ratelimits": { + "type": "object", + "properties": { + "maxActionsPerSecond": { + "type": "number", + "default": 0, + "description": "Sets the rate limiting on number of actions that can be executed per second. Notice that the number is represented as number type, so that you can set it to less than 1 if needed. For example, set the number to 0.1 means workflow actions can be executed once every 10 seconds. Default zero value means 'unlimited'" + }, + "maxConcurrentActions": { + "type": "number", + "default": 100, + "description": "Maximum number of actions that can be executed in parallel" + }, + "maxProducedEventsPerSecond": { + "type": "number", + "default": 0, + "description": "Sets the rate limiting on number of events that can be produced per second. Notice that the number is represented as number type, so that you can set it to less than 1 if needed. For example, set the number to 0.1 means workflow can produce events once every 10 seconds. Default zero value means 'unlimited'" + }, + "maxStates": { + "type": "integer", + "default": 0, + "description": "Maximum number of workflow states that should be executed. Default is zero, meaning unlimited." + }, + "maxTransitions": { + "type": "integer", + "default": 0, + "description": "Maximum number of workflow transitions that should be executed. Default is zero, meaning unlimited." + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/functions.json b/public/schemas/0.9/functions.json new file mode 100644 index 0000000..87a6a8a --- /dev/null +++ b/public/schemas/0.9/functions.json @@ -0,0 +1,72 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/functions.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - functions schema", + "type": "object", + "functions": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing function definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow function definitions", + "items": { + "type": "object", + "$ref": "#/definitions/function" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "functions" + ], + "definitions": { + "function": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique function name", + "minLength": 1 + }, + "operation": { + "type": "string", + "description": "If type is `rest`, #. If type is `asyncapi`, #. If type is `rpc`, ##. If type is `graphql`, ##. If type is `odata`, #. If type is `expression`, defines the workflow expression.", + "minLength": 1 + }, + "type": { + "type": "string", + "description": "Defines the function type. Is either `rest`, `asyncapi, `rpc`, `graphql`, `odata`, `expression`, or `custom`. Default is `rest`", + "enum": [ + "rest", + "asyncapi", + "rpc", + "graphql", + "odata", + "expression", + "custom" + ], + "default": "rest" + }, + "authRef": { + "type": "string", + "description": "References an auth definition name to be used to access to resource defined in the operation parameter", + "minLength": 1 + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "operation" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/odata.json b/public/schemas/0.9/odata.json new file mode 100644 index 0000000..79df36e --- /dev/null +++ b/public/schemas/0.9/odata.json @@ -0,0 +1,81 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/odata.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - OData command options schema", + "type": "object", + "key": { + "type": "string", + "description": "The unique identifier of the single entry to query", + "minLength": 1 + }, + "queryOptions":{ + "$ref": "#/definitions/queryoptions" + }, + "definitions": { + "queryoptions": { + "type": "object", + "properties": { + "filter": { + "type": "string", + "description": "The $filter system query option allows clients to filter the set of resources that are addressed by a request URL. $filter specifies conditions that MUST be met by a resource for it to be returned in the set of matching resources", + "minLength": 1 + }, + "expand": { + "type": "string", + "description": "The $expand system query option allows clients to request related resources when a resource that satisfies a particular request is retrieved", + "minLength": 1 + }, + "select": { + "type": "string", + "description": "The $select system query option allows clients to requests a limited set of information for each entity or complex type identified by the ResourcePath and other System Query Options like $filter, $top, $skip etc. The $select query option is often used in conjunction with the $expand query option, to first increase the scope of the resource graph returned ($expand) and then selectively prune that resource graph ($select)", + "minLength": 1 + }, + "orderBy": { + "type": "string", + "description": "The $orderby system query option allows clients to request resource in a particular order", + "minLength": 1 + }, + "top": { + "type": "integer", + "description": "The $top system query option allows clients a required number of resources. Usually used in conjunction with the $skip query options", + "minLength": 1 + }, + "skip": { + "type": "integer", + "description": "The $skip system query option allows clients to skip a given number of resources. Usually used in conjunction with the $top query options", + "minLength": 1 + }, + "count": { + "type": "boolean", + "description": "The $count system query option allows clients to request a count of the matching resources included with the resources in the response" + }, + "search": { + "type": "string", + "description": "The $search system query option allows clients to request items within a collection matching a free-text search expression", + "minLength": 1 + }, + "format": { + "type": "string", + "description": "The $format system query option if supported allows clients to request a response in a particular format", + "minLength": 1 + }, + "compute": { + "type": "string", + "description": "The $compute system query option allows clients to define computed properties that can be used in a $select or within a $filter or $orderby expression.", + "minLength": 1 + }, + "index": { + "type": "string", + "description": "The $index system query option allows clients to do a positional insert into a collection annotated with using the Core.PositionalInsert term (see http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#VocCore)", + "minLength": 1 + }, + "schemaVersion": { + "type": "string", + "description": "The $schemaversion system query option allows clients to specify the version of the schema against which the request is made. The semantics of $schemaversion is covered in the OData-Protocol (http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#odata) document.", + "minLength": 1 + } + }, + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/retries.json b/public/schemas/0.9/retries.json new file mode 100644 index 0000000..6b76afb --- /dev/null +++ b/public/schemas/0.9/retries.json @@ -0,0 +1,85 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/retries.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - retries schema", + "type": "object", + "retries": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing retry definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow Retry definitions. Define retry strategies that can be referenced in states onError definitions", + "items": { + "type": "object", + "$ref": "#/definitions/retrydef" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "retries" + ], + "definitions": { + "retrydef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique retry strategy name", + "minLength": 1 + }, + "delay": { + "type": "string", + "description": "Time delay between retry attempts (ISO 8601 duration format)" + }, + "maxDelay": { + "type": "string", + "description": "Maximum time delay between retry attempts (ISO 8601 duration format)" + }, + "increment": { + "type": "string", + "description": "Static value by which the delay increases during each attempt (ISO 8601 time format)" + }, + "multiplier": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 1, + "multipleOf": 0.01, + "description": "Numeric value, if specified the delay between retries is multiplied by this value." + }, + "maxAttempts": { + "type": [ + "number", + "string" + ], + "minimum": 1, + "minLength": 0, + "description": "Maximum number of retry attempts." + }, + "jitter": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "maximum": 1, + "description": "If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0 and 1). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format)" + } + }, + "additionalProperties": false, + "required": [ + "name", + "maxAttempts" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/secrets.json b/public/schemas/0.9/secrets.json new file mode 100644 index 0000000..dec1c0c --- /dev/null +++ b/public/schemas/0.9/secrets.json @@ -0,0 +1,26 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/secrets.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - secrets schema", + "type": "object", + "secrets": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing secrets definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow Secrets definitions", + "items": { + "type": "string" + }, + "minItems": 1 + } + ] + }, + "required": [ + "secrets" + ] +} \ No newline at end of file diff --git a/public/schemas/0.9/timeouts.json b/public/schemas/0.9/timeouts.json new file mode 100644 index 0000000..30ff3c1 --- /dev/null +++ b/public/schemas/0.9/timeouts.json @@ -0,0 +1,96 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/timeouts.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - functions schema", + "type": "object", + "timeouts": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing timeouts definitions (json or yaml)" + }, + { + "type": "object", + "description": "Workflow default timeouts", + "properties": { + "workflowExecTimeout": { + "$ref": "#/definitions/workflowExecTimeout" + }, + "stateExecTimeout": { + "$ref": "#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "#/definitions/actionExecTimeout" + }, + "branchExecTimeout": { + "$ref": "#/definitions/branchExecTimeout" + }, + "eventTimeout": { + "$ref": "#/definitions/eventTimeout" + } + }, + "additionalProperties": false, + "required": [] + } + ] + }, + "required": [ + "timeouts" + ], + "definitions": { + "workflowExecTimeout": { + "oneOf": [ + { + "type": "string", + "description": "Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "duration": { + "type": "string", + "description": "Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'", + "minLength": 1 + }, + "interrupt": { + "type": "boolean", + "description": "If `false`, workflow instance is allowed to finish current execution. If `true`, current workflow execution is abrupted.", + "default": true + }, + "runBefore": { + "type": "string", + "description": "Name of a workflow state to be executed before workflow instance is terminated", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "duration" + ] + } + ] + }, + "stateExecTimeout": { + "type": "string", + "description": "Workflow state execution timeout duration (ISO 8601 duration format)", + "minLength": 1 + }, + "actionExecTimeout": { + "type": "string", + "description": "Action execution timeout duration (ISO 8601 duration format)", + "minLength": 1 + }, + "branchExecTimeout": { + "type": "string", + "description": "Branch execution timeout duration (ISO 8601 duration format)", + "minLength": 1 + }, + "eventTimeout": { + "type": "string", + "description": "Timeout duration to wait for consuming defined events (ISO 8601 duration format)", + "minLength": 1 + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/workflow.json b/public/schemas/0.9/workflow.json new file mode 100644 index 0000000..455135d --- /dev/null +++ b/public/schemas/0.9/workflow.json @@ -0,0 +1,1897 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/workflow.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - workflow schema", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Workflow unique identifier", + "minLength": 1 + }, + "key": { + "type": "string", + "description": "Domain-specific workflow identifier", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "Workflow name", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Workflow description" + }, + "version": { + "type": "string", + "description": "Workflow version", + "minLength": 1 + }, + "annotations": { + "type": "array", + "description": "List of helpful terms describing the workflows intended purpose, subject areas, or other important qualities", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "dataInputSchema": { + "oneOf": [ + { + "type": "string", + "description": "URI of the JSON Schema used to validate the workflow data input", + "minLength": 1 + }, + { + "type": "object", + "description": "Workflow data input schema definition", + "properties": { + "schema": { + "oneof":[ + { + "type": "string", + "description": "URI of the JSON Schema used to validate the workflow data input", + "minLength": 1 + }, + { + "type": "object", + "description": "The JSON Schema object used to validate the workflow data input", + "$schema": "http://json-schema.org/draft-07/schema#" + } + ] + }, + "failOnValidationErrors": { + "type": "boolean", + "default": true, + "description": "Determines if workflow execution should continue if there are validation errors" + } + }, + "additionalProperties": false, + "required": [ + "schema" + ] + } + ] + }, + "secrets": { + "$ref": "secrets.json#/secrets" + }, + "constants": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing constants data (json or yaml)" + }, + { + "type": "object", + "description": "Workflow constants data (object type)" + } + ] + }, + "start": { + "$ref": "#/definitions/startdef" + }, + "specVersion": { + "type": "string", + "description": "Serverless Workflow schema version", + "minLength": 1 + }, + "expressionLang": { + "type": "string", + "description": "Identifies the expression language used for workflow expressions. Default is 'jq'", + "default": "jq", + "minLength": 1 + }, + "timeouts": { + "$ref": "timeouts.json#/timeouts" + }, + "errors": { + "$ref": "errors.json#/errors" + }, + "keepActive": { + "type": "boolean", + "default": false, + "description": "If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'workflowExecTimeout'" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + }, + "events": { + "$ref": "events.json#/events" + }, + "functions": { + "$ref": "functions.json#/functions" + }, + "autoRetries": { + "type": "boolean", + "default": false, + "description": "If set to true, actions should automatically be retried on unchecked errors. Default is false" + }, + "retries": { + "$ref": "retries.json#/retries" + }, + "auth": { + "$ref": "auth.json#/auth" + }, + "extensions": { + "$ref": "workflowextensions.json#/extensions" + }, + "states": { + "type": "array", + "description": "State definitions", + "items": { + "anyOf": [ + { + "title": "Sleep State", + "$ref": "#/definitions/sleepstate" + }, + { + "title": "Event State", + "$ref": "#/definitions/eventstate" + }, + { + "title": "Operation State", + "$ref": "#/definitions/operationstate" + }, + { + "title": "Parallel State", + "$ref": "#/definitions/parallelstate" + }, + { + "title": "Switch State", + "$ref": "#/definitions/switchstate" + }, + { + "title": "Inject State", + "$ref": "#/definitions/injectstate" + }, + { + "title": "ForEach State", + "$ref": "#/definitions/foreachstate" + }, + { + "title": "Callback State", + "$ref": "#/definitions/callbackstate" + } + ] + }, + "additionalItems": false, + "minItems": 1 + } + }, + "oneOf": [ + { + "required": [ + "id", + "specVersion", + "states" + ] + }, + { + "required": [ + "key", + "specVersion", + "states" + ] + } + ], + "definitions": { + "sleep": { + "type": "object", + "properties": { + "before": { + "type": "string", + "description": "Amount of time (ISO 8601 duration format) to sleep before function/subflow invocation. Does not apply if 'eventRef' is defined." + }, + "after": { + "type": "string", + "description": "Amount of time (ISO 8601 duration format) to sleep after function/subflow invocation. Does not apply if 'eventRef' is defined." + } + }, + "oneOf": [ + { + "required": [ + "before" + ] + }, + { + "required": [ + "after" + ] + }, + { + "required": [ + "before", + "after" + ] + } + ] + }, + "crondef": { + "oneOf": [ + { + "type": "string", + "description": "Cron expression defining when workflow instances should be created (automatically)", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "expression": { + "type": "string", + "description": "Repeating interval (cron expression) describing when the workflow instance should be created", + "minLength": 1 + }, + "validUntil": { + "type": "string", + "description": "Specific date and time (ISO 8601 format) when the cron expression invocation is no longer valid" + } + }, + "additionalProperties": false, + "required": [ + "expression" + ] + } + ] + }, + "continueasdef": { + "oneOf": [ + { + "type": "string", + "description": "Unique id of the workflow to be continue execution as. Entire state data is passed as data input to next execution", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "workflowId": { + "type": "string", + "description": "Unique id of the workflow to continue execution as" + }, + "version": { + "type": "string", + "description": "Version of the workflow to continue execution as", + "minLength": 1 + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If string type, an expression which selects parts of the states data output to become the workflow data input of continued execution. If object type, a custom object to become the workflow data input of the continued execution" + }, + "workflowExecTimeout": { + "$ref": "timeouts.json#/definitions/workflowExecTimeout", + "description": "Workflow execution timeout to be used by the workflow continuing execution. Overwrites any specific settings set by that workflow" + } + }, + "required": [ + "workflowId" + ] + } + ] + }, + "transition": { + "oneOf": [ + { + "type": "string", + "description": "Name of state to transition to", + "minLength": 1 + }, + { + "type": "object", + "description": "Function Reference", + "properties": { + "nextState": { + "type": "string", + "description": "Name of state to transition to", + "minLength": 1 + }, + "produceEvents": { + "type": "array", + "description": "Array of events to be produced before the transition happens", + "items": { + "type": "object", + "$ref": "#/definitions/produceeventdef" + }, + "additionalItems": false + }, + "compensate": { + "type": "boolean", + "default": false, + "description": "If set to true, triggers workflow compensation when before this transition is taken. Default is false" + } + }, + "additionalProperties": false, + "required": [ + "nextState" + ] + } + ] + }, + "error": { + "type": "object", + "properties": { + "errorRef": { + "type": "string", + "description": "Reference to a unique workflow error definition. Used of errorRefs is not used", + "minLength": 1 + }, + "errorRefs": { + "type": "array", + "description": "References one or more workflow error definitions. Used if errorRef is not used", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "transition": { + "description": "Transition to next state to handle the error.", + "$ref": "#/definitions/transition" + }, + "end": { + "description": "End workflow execution in case of this error.", + "$ref": "#/definitions/end" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "errorRef", + "transition" + ] + }, + { + "required": [ + "errorRef", + "end" + ] + }, + { + "required": [ + "errorRefs", + "transition" + ] + }, + { + "required": [ + "errorRefs", + "end" + ] + } + ] + }, + "onevents": { + "type": "object", + "properties": { + "eventRefs": { + "type": "array", + "description": "References one or more unique event names in the defined workflow events", + "minItems": 1, + "items": { + "type": "string" + }, + "uniqueItems": true, + "additionalItems": false + }, + "actionMode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies how actions are to be performed (in sequence or in parallel)", + "default": "sequential" + }, + "actions": { + "type": "array", + "description": "Actions to be performed if expression matches", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + }, + "eventDataFilter": { + "description": "Event data filter", + "$ref": "#/definitions/eventdatafilter" + } + }, + "additionalProperties": false, + "required": [ + "eventRefs" + ] + }, + "action": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique action definition name" + }, + "functionRef": { + "description": "References a function to be invoked", + "$ref": "#/definitions/functionref" + }, + "eventRef": { + "description": "References a 'trigger' and 'result' reusable event definitions", + "$ref": "#/definitions/eventref" + }, + "subFlowRef": { + "description": "References a sub-workflow to invoke", + "$ref": "#/definitions/subflowref" + }, + "sleep": { + "description": "Defines time periods workflow execution should sleep before / after function execution", + "$ref": "#/definitions/sleep" + }, + "retryRef": { + "type": "string", + "description": "References a defined workflow retry definition. If not defined the default retry policy is assumed" + }, + "nonRetryableErrors": { + "type": "array", + "description": "List of unique references to defined workflow errors for which the action should not be retried. Used only when `autoRetries` is set to `true`", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "retryableErrors": { + "type": "array", + "description": "List of unique references to defined workflow errors for which the action should be retried. Used only when `autoRetries` is set to `false`", + "minItems": 1, + "items": { + "type": "string" + }, + "additionalItems": false + }, + "actionDataFilter": { + "description": "Action data filter", + "$ref": "#/definitions/actiondatafilter" + }, + "condition": { + "description": "Expression, if defined, must evaluate to true for this action to be performed. If false, action is disregarded", + "type": "string", + "minLength": 1 + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "functionRef" + ] + }, + { + "required": [ + "eventRef" + ] + }, + { + "required": [ + "subFlowRef" + ] + } + ] + }, + "functionref": { + "oneOf": [ + { + "type": "string", + "description": "Name of the referenced function", + "minLength": 1 + }, + { + "type": "object", + "description": "Function Reference", + "properties": { + "refName": { + "type": "string", + "description": "Name of the referenced function" + }, + "arguments": { + "type": "object", + "description": "Function arguments/inputs" + }, + "selectionSet": { + "type": "string", + "description": "Only used if function type is 'graphql'. A string containing a valid GraphQL selection set" + }, + "invoke": { + "type": "string", + "enum": [ + "sync", + "async" + ], + "description": "Specifies if the function should be invoked sync or async", + "default": "sync" + } + }, + "additionalProperties": false, + "required": [ + "refName" + ] + } + ] + }, + "eventref": { + "type": "object", + "description": "Event References", + "properties": { + "produceEventRef": { + "type": "string", + "description": "Reference to the unique name of a 'produced' event definition" + }, + "consumeEventRef": { + "type": "string", + "description": "Reference to the unique name of a 'consumed' event definition" + }, + "consumeEventTimeout": { + "type": "string", + "description": "Maximum amount of time (ISO 8601 format) to wait for the result event. If not defined it should default to the actionExecutionTimeout" + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'produceEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'produceEventRef'." + }, + "contextAttributes": { + "type": "object", + "description": "Add additional extension context attributes to the produced event", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "produceEventRef" + ] + }, + "subflowref": { + "oneOf": [ + { + "type": "string", + "description": "Unique id of the sub-workflow to be invoked", + "minLength": 1 + }, + { + "type": "object", + "description": "Specifies a sub-workflow to be invoked", + "properties": { + "workflowId": { + "type": "string", + "description": "Unique id of the sub-workflow to be invoked" + }, + "version": { + "type": "string", + "description": "Version of the sub-workflow to be invoked", + "minLength": 1 + }, + "onParentComplete": { + "type": "string", + "enum": [ + "continue", + "terminate" + ], + "description": "If invoke is 'async', specifies how subflow execution should behave when parent workflow completes. Default is 'terminate'", + "default": "terminate" + }, + "invoke": { + "type": "string", + "enum": [ + "sync", + "async" + ], + "description": "Specifies if the subflow should be invoked sync or async", + "default": "sync" + } + }, + "required": [ + "workflowId" + ] + } + ] + }, + "branch": { + "type": "object", + "description": "Branch Definition", + "properties": { + "name": { + "type": "string", + "description": "Branch name" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + }, + "branchExecTimeout": { + "$ref": "timeouts.json#/definitions/branchExecTimeout" + } + }, + "required": [] + }, + "actions": { + "type": "array", + "description": "Actions to be executed in this branch", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + } + }, + "additionalProperties": false, + "required": [ + "name", + "actions" + ] + }, + "sleepstate": { + "type": "object", + "description": "Causes the workflow execution to sleep for a specified duration", + "properties": { + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "sleep", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "duration": { + "type": "string", + "description": "Duration (ISO 8601 duration format) to sleep" + }, + "transition": { + "description": "Next transition of the workflow after the workflow sleep", + "$ref": "#/definitions/transition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "name", + "type", + "duration", + "end" + ] + }, + { + "required": [ + "name", + "type", + "duration", + "transition" + ] + } + ] + }, + "eventstate": { + "type": "object", + "description": "This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel", + "properties": { + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "event", + "description": "State type" + }, + "exclusive": { + "type": "boolean", + "default": true, + "description": "If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed" + }, + "onEvents": { + "type": "array", + "description": "Define the events to be consumed and optional actions to be performed", + "items": { + "type": "object", + "$ref": "#/definitions/onevents" + }, + "additionalItems": false + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + }, + "eventTimeout": { + "$ref": "timeouts.json#/definitions/eventTimeout" + } + }, + "required": [] + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "name", + "type", + "onEvents", + "end" + ] + }, + { + "required": [ + "name", + "type", + "onEvents", + "transition" + ] + } + ] + }, + "operationstate": { + "type": "object", + "description": "Defines actions be performed. Does not wait for incoming events", + "properties": { + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "operation", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "actionMode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies whether actions are performed in sequence or in parallel", + "default": "sequential" + }, + "actions": { + "type": "array", + "description": "Actions to be performed", + "items": { + "type": "object", + "$ref": "#/definitions/action" + } + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + } + }, + "required": [] + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "actions" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "actions", + "end" + ] + }, + { + "required": [ + "name", + "type", + "actions", + "transition" + ] + } + ] + } + }, + "parallelstate": { + "type": "object", + "description": "Consists of a number of states that are executed in parallel", + "properties": { + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "parallel", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "branchExecTimeout": { + "$ref": "timeouts.json#/definitions/branchExecTimeout" + } + }, + "required": [] + }, + "branches": { + "type": "array", + "description": "Branch Definitions", + "items": { + "type": "object", + "$ref": "#/definitions/branch" + }, + "additionalItems": false + }, + "completionType": { + "type": "string", + "enum": [ + "allOf", + "atLeast" + ], + "description": "Option types on how to complete branch execution.", + "default": "allOf" + }, + "numCompleted": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 0, + "description": "Used when completionType is set to 'atLeast' to specify the minimum number of branches that must complete before the state will transition." + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all branches have completed execution", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "branches" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "branches", + "end" + ] + }, + { + "required": [ + "name", + "type", + "branches", + "transition" + ] + } + ] + } + }, + "switchstate": { + "oneOf": [ + { + "$ref": "#/definitions/databasedswitchstate" + }, + { + "$ref": "#/definitions/eventbasedswitchstate" + } + ] + }, + "eventbasedswitchstate": { + "type": "object", + "description": "Permits transitions to other states based on events", + "properties": { + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "switch", + "description": "State type" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "eventTimeout": { + "$ref": "timeouts.json#/definitions/eventTimeout" + } + }, + "required": [] + }, + "eventConditions": { + "type": "array", + "description": "Defines conditions evaluated against events", + "items": { + "type": "object", + "$ref": "#/definitions/eventcondition" + }, + "additionalItems": false + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "defaultCondition": { + "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition", + "$ref": "#/definitions/defaultconditiondef" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "type", + "eventConditions", + "defaultCondition" + ] + }, + "databasedswitchstate": { + "type": "object", + "description": "Permits transitions to other states based on data conditions", + "properties": { + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "switch", + "description": "State type" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + } + }, + "required": [] + }, + "dataConditions": { + "type": "array", + "description": "Defines conditions evaluated against state data", + "items": { + "type": "object", + "$ref": "#/definitions/datacondition" + }, + "additionalItems": false + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "defaultCondition": { + "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition", + "$ref": "#/definitions/defaultconditiondef" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "name", + "type", + "dataConditions", + "defaultCondition" + ] + }, + "defaultconditiondef": { + "type": "object", + "description": "DefaultCondition definition. Can be either a transition or end definition", + "properties": { + "transition": { + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "transition" + ] + }, + { + "required": [ + "end" + ] + } + ] + }, + "eventcondition": { + "oneOf": [ + { + "$ref": "#/definitions/transitioneventcondition" + }, + { + "$ref": "#/definitions/endeventcondition" + } + ] + }, + "transitioneventcondition": { + "type": "object", + "description": "Switch state data event condition", + "properties": { + "name": { + "type": "string", + "description": "Event condition name" + }, + "eventRef": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "transition": { + "description": "Next transition of the workflow if there is valid matches", + "$ref": "#/definitions/transition" + }, + "eventDataFilter": { + "description": "Event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "eventRef", + "transition" + ] + }, + "endeventcondition": { + "type": "object", + "description": "Switch state data event condition", + "properties": { + "name": { + "type": "string", + "description": "Event condition name" + }, + "eventRef": { + "type": "string", + "description": "References an unique event name in the defined workflow events" + }, + "end": { + "$ref": "#/definitions/end", + "description": "Explicit transition to end" + }, + "eventDataFilter": { + "description": "Event data filter definition", + "$ref": "#/definitions/eventdatafilter" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "eventRef", + "end" + ] + }, + "datacondition": { + "oneOf": [ + { + "$ref": "#/definitions/transitiondatacondition" + }, + { + "$ref": "#/definitions/enddatacondition" + } + ] + }, + "transitiondatacondition": { + "type": "object", + "description": "Switch state data based condition", + "properties": { + "name": { + "type": "string", + "description": "Data condition name" + }, + "condition": { + "type": "string", + "description": "Workflow expression evaluated against state data. Must evaluate to true or false" + }, + "transition": { + "description": "Workflow transition if condition is evaluated to true", + "$ref": "#/definitions/transition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "condition", + "transition" + ] + }, + "enddatacondition": { + "type": "object", + "description": "Switch state data based condition", + "properties": { + "name": { + "type": "string", + "description": "Data condition name" + }, + "condition": { + "type": "string", + "description": "Workflow expression evaluated against state data. Must evaluate to true or false" + }, + "end": { + "$ref": "#/definitions/end", + "description": "Workflow end definition" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "required": [ + "condition", + "end" + ] + }, + "injectstate": { + "type": "object", + "description": "Inject static data into state data. Does not perform any actions", + "properties": { + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "inject", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "data": { + "type": "object", + "description": "JSON object which can be set as states data input and can be manipulated via filters" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "transition": { + "description": "Next transition of the workflow after injection has completed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "data" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "data", + "end" + ] + }, + { + "required": [ + "name", + "type", + "data", + "transition" + ] + } + ] + } + }, + "foreachstate": { + "type": "object", + "description": "Execute a set of defined actions or workflows for each element of a data array", + "properties": { + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "foreach", + "description": "State type" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "inputCollection": { + "type": "string", + "description": "Workflow expression selecting an array element of the states data" + }, + "outputCollection": { + "type": "string", + "description": "Workflow expression specifying an array element of the states data to add the results of each iteration" + }, + "iterationParam": { + "type": "string", + "description": "Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array" + }, + "batchSize": { + "type": [ + "number", + "string" + ], + "minimum": 0, + "minLength": 0, + "description": "Specifies how many iterations may run in parallel at the same time. Used if 'mode' property is set to 'parallel' (default)" + }, + "actions": { + "type": "array", + "description": "Actions to be executed for each of the elements of inputCollection", + "items": { + "type": "object", + "$ref": "#/definitions/action" + }, + "additionalItems": false + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + } + }, + "required": [] + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after state has completed", + "$ref": "#/definitions/transition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "mode": { + "type": "string", + "enum": [ + "sequential", + "parallel" + ], + "description": "Specifies how iterations are to be performed (sequentially or in parallel)", + "default": "parallel" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "inputCollection", + "actions" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "inputCollection", + "actions", + "end" + ] + }, + { + "required": [ + "name", + "type", + "inputCollection", + "actions", + "transition" + ] + } + ] + } + }, + "callbackstate": { + "type": "object", + "description": "This state performs an action, then waits for the callback event that denotes completion of the action", + "properties": { + "name": { + "type": "string", + "description": "State name" + }, + "type": { + "type": "string", + "const": "callback", + "description": "State type" + }, + "action": { + "description": "Defines the action to be executed", + "$ref": "#/definitions/action" + }, + "eventRef": { + "type": "string", + "description": "References an unique callback event name in the defined workflow events" + }, + "timeouts": { + "type": "object", + "description": "State specific timeouts", + "properties": { + "stateExecTimeout": { + "$ref": "timeouts.json#/definitions/stateExecTimeout" + }, + "actionExecTimeout": { + "$ref": "timeouts.json#/definitions/actionExecTimeout" + }, + "eventTimeout": { + "$ref": "timeouts.json#/definitions/eventTimeout" + } + }, + "required": [] + }, + "eventDataFilter": { + "description": "Event data filter", + "$ref": "#/definitions/eventdatafilter" + }, + "stateDataFilter": { + "description": "State data filter", + "$ref": "#/definitions/statedatafilter" + }, + "onErrors": { + "type": "array", + "description": "States error handling definitions", + "items": { + "type": "object", + "$ref": "#/definitions/error" + }, + "additionalItems": false + }, + "transition": { + "description": "Next transition of the workflow after all the actions have been performed", + "$ref": "#/definitions/transition" + }, + "end": { + "$ref": "#/definitions/end", + "description": "State end definition" + }, + "compensatedBy": { + "type": "string", + "minLength": 1, + "description": "Unique Name of a workflow state which is responsible for compensation of this state" + }, + "usedForCompensation": { + "type": "boolean", + "default": false, + "description": "If true, this state is used to compensate another state. Default is false" + }, + "metadata": { + "$ref": "common.json#/definitions/metadata" + } + }, + "additionalProperties": false, + "if": { + "properties": { + "usedForCompensation": { + "const": true + } + }, + "required": [ + "usedForCompensation" + ] + }, + "then": { + "required": [ + "name", + "type", + "action", + "eventRef" + ] + }, + "else": { + "oneOf": [ + { + "required": [ + "name", + "type", + "action", + "eventRef", + "end" + ] + }, + { + "required": [ + "name", + "type", + "action", + "eventRef", + "transition" + ] + } + ] + } + }, + "startdef": { + "oneOf": [ + { + "type": "string", + "description": "Name of the starting workflow state", + "minLength": 1 + }, + { + "type": "object", + "description": "Workflow start definition", + "properties": { + "stateName": { + "type": "string", + "description": "Name of the starting workflow state", + "minLength": 1 + }, + "schedule": { + "description": "Define the time/repeating intervals or cron at which workflow instances should be automatically started.", + "$ref": "#/definitions/schedule" + } + }, + "additionalProperties": false, + "required": [ + "schedule" + ] + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "string", + "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created. (UTC timezone is assumed)", + "minLength": 1 + }, + { + "type": "object", + "description": "Start state schedule definition", + "properties": { + "interval": { + "type": "string", + "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.", + "minLength": 1 + }, + "cron": { + "$ref": "#/definitions/crondef" + }, + "timezone": { + "type": "string", + "description": "Timezone name used to evaluate the interval & cron-expression. (default: UTC)" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "interval" + ] + }, + { + "required": [ + "cron" + ] + } + ] + } + ] + }, + "end": { + "oneOf": [ + { + "type": "boolean", + "description": "State end definition", + "default": true + }, + { + "type": "object", + "description": "State end definition", + "properties": { + "terminate": { + "type": "boolean", + "default": false, + "description": "If true, completes all execution flows in the given workflow instance" + }, + "produceEvents": { + "type": "array", + "description": "Defines events that should be produced", + "items": { + "type": "object", + "$ref": "#/definitions/produceeventdef" + }, + "additionalItems": false + }, + "compensate": { + "type": "boolean", + "default": false, + "description": "If set to true, triggers workflow compensation. Default is false" + }, + "continueAs": { + "$ref": "#/definitions/continueasdef" + } + }, + "additionalProperties": false, + "required": [] + } + ] + }, + "produceeventdef": { + "type": "object", + "description": "Produce an event and set its data", + "properties": { + "eventRef": { + "type": "string", + "description": "References a name of a defined event" + }, + "data": { + "type": [ + "string", + "object" + ], + "description": "If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event." + }, + "contextAttributes": { + "type": "object", + "description": "Add additional event extension context attributes", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "eventRef" + ] + }, + "statedatafilter": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Workflow expression to filter the state data input" + }, + "output": { + "type": "string", + "description": "Workflow expression that filters the state data output" + } + }, + "additionalProperties": false, + "required": [] + }, + "eventdatafilter": { + "type": "object", + "properties": { + "useData": { + "type": "boolean", + "description": "If set to false, event payload is not added/merged to state data. In this case 'data' and 'toStateData' should be ignored. Default is true.", + "default": true + }, + "data": { + "type": "string", + "description": "Workflow expression that filters the received event payload (default: '${ . }')" + }, + "toStateData": { + "type": "string", + "description": " Workflow expression that selects a state data element to which the filtered event should be added/merged into. If not specified, denotes, the top-level state data element." + } + }, + "additionalProperties": false, + "required": [] + }, + "actiondatafilter": { + "type": "object", + "properties": { + "fromStateData": { + "type": "string", + "description": "Workflow expression that selects state data that the state action can use" + }, + "useResults": { + "type": "boolean", + "description": "If set to false, action data results are not added/merged to state data. In this case 'results' and 'toStateData' should be ignored. Default is true.", + "default": true + }, + "results": { + "type": "string", + "description": "Workflow expression that filters the actions data results" + }, + "toStateData": { + "type": "string", + "description": "Workflow expression that selects a state data element to which the action results should be added/merged into. If not specified, denote, the top-level state data element" + } + }, + "additionalProperties": false, + "required": [] + } + } +} \ No newline at end of file diff --git a/public/schemas/0.9/workflowextensions.json b/public/schemas/0.9/workflowextensions.json new file mode 100644 index 0000000..364b543 --- /dev/null +++ b/public/schemas/0.9/workflowextensions.json @@ -0,0 +1,50 @@ +{ + "$id": "https://serverlessworkflow.io/schemas/0.9/extensions.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Serverless Workflow specification - extensions schema", + "type": "object", + "extensions": { + "oneOf": [ + { + "type": "string", + "format": "uri", + "description": "URI to a resource containing workflow extensions definitions (json or yaml)" + }, + { + "type": "array", + "description": "Workflow extensions definitions", + "items": { + "type": "object", + "$ref": "#/definitions/extension" + }, + "additionalItems": false, + "minItems": 1 + } + ] + }, + "required": [ + "extensions" + ], + "definitions": { + "extension": { + "type": "object", + "properties": { + "extensionId": { + "type": "string", + "description": "Unique extension id", + "minLength": 1 + }, + "resource": { + "type": "string", + "description": "URI to a resource containing this workflow extension definitions (json or yaml)", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "extensionId", + "resource" + ] + } + } +} \ No newline at end of file diff --git a/public/schemas/1.0.0-alpha1/workflow.json b/public/schemas/1.0.0-alpha1/workflow.json new file mode 100644 index 0000000..fb34eb8 --- /dev/null +++ b/public/schemas/1.0.0-alpha1/workflow.json @@ -0,0 +1,1282 @@ +{ + "id": "https://open-workflow-specification.org/schemas/1.0.0-alpha1/workflow.json", + "$schema": "http://json-schema.org/draft-07/schema", + "description": "Open Workflow Specification DSL - Workflow Schema", + "type": "object", + "properties": { + "document": { + "type": "object", + "properties": { + "dsl": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "description": "The version of the DSL used by the workflow." + }, + "namespace": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "description": "The workflow's namespace." + }, + "name": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "description": "The workflow's name." + }, + "version": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "description": "The workflow's semantic version." + }, + "title": { + "type": "string", + "description": "The workflow's title." + }, + "summary": { + "type": "string", + "description": "The workflow's Markdown summary." + }, + "tags": { + "type": "object", + "description": "A key/value mapping of the workflow's tags, if any.", + "additionalProperties": true + } + }, + "required": ["dsl", "namespace", "name", "version"], + "description": "Documents the workflow" + }, + "input": { + "$ref": "#/$defs/input", + "description": "Configures the workflow's input." + }, + "use": { + "type": "object", + "properties": { + "authentications": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/authenticationPolicy" + }, + "description": "The workflow's reusable authentication policies." + }, + "errors": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/error" + }, + "description": "The workflow's reusable errors." + }, + "extensions": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/extension" + }, + "description": "The workflow's extensions." + }, + "functions": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/task" + }, + "description": "The workflow's reusable functions." + }, + "retries": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/retryPolicy" + }, + "description": "The workflow's reusable retry policies." + }, + "secrets": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The workflow's secrets." + } + }, + "description": "Defines the workflow's reusable components." + }, + "do": { + "type": "object", + "minProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/task" + }, + "description": "Defines the tasks the workflow must perform" + }, + "timeout": { + "$ref": "#/$defs/timeout", + "description": "The workflow's timeout configuration, if any." + }, + "output": { + "$ref": "#/$defs/output", + "description": "Configures the workflow's output." + }, + "schedule": { + "type": "object", + "properties": { + "every": { + "$ref": "#/$defs/duration", + "description": "Specifies the duration of the interval at which the workflow should be executed." + }, + "cron": { + "type": "string", + "description": "Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight.\"" + }, + "after": { + "$ref": "#/$defs/duration", + "description": "Specifies a delay duration that the workflow must wait before starting again after it completes." + }, + "on": { + "$ref": "#/$defs/eventConsumptionStrategy", + "description": "Specifies the events that trigger the workflow execution." + } + }, + "description": "Schedules the workflow" + } + }, + "$defs": { + "task": { + "type": "object", + "properties": { + "input": { + "$ref": "#/$defs/input", + "description": "Configure the task's input." + }, + "output": { + "$ref": "#/$defs/output", + "description": "Configure the task's output." + }, + "timeout": { + "$ref": "#/$defs/timeout", + "description": "The task's timeout configuration, if any." + }, + "then": { + "$ref": "#/$defs/flowDirective", + "description": "The flow directive to be performed upon completion of the task." + } + }, + "oneOf": [ + { + "$ref": "#/$defs/callTask" + }, + { + "$ref": "#/$defs/compositeTask" + }, + { + "$ref": "#/$defs/emitTask" + }, + { + "$ref": "#/$defs/forTask" + }, + { + "$ref": "#/$defs/listenTask" + }, + { + "$ref": "#/$defs/raiseTask" + }, + { + "$ref": "#/$defs/runTask" + }, + { + "$ref": "#/$defs/setTask" + }, + { + "$ref": "#/$defs/switchTask" + }, + { + "$ref": "#/$defs/tryTask" + }, + { + "$ref": "#/$defs/waitTask" + } + ] + }, + "callTask": { + "type": "object", + "oneOf": [ + { + "properties": { + "call": { + "type": "string", + "constant": "asyncapi" + }, + "with": { + "type": "object", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "description": "The document that defines the AsyncAPI operation to call." + }, + "operationRef": { + "type": "string", + "description": "A reference to the AsyncAPI operation to call." + }, + "server": { + "type": "string", + "description": "A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel." + }, + "message": { + "type": "string", + "description": "The name of the message to use. If not set, defaults to the first message defined by the operation." + }, + "binding": { + "type": "string", + "description": "The name of the binding to use. If not set, defaults to the first binding defined by the operation." + }, + "payload": { + "type": "object", + "description": "The payload to call the AsyncAPI operation with, if any." + }, + "authentication": { + "ref": "#/$defs/authenticationPolicy", + "description": "The authentication policy, if any, to use when calling the AsyncAPI operation." + } + }, + "required": ["document", "operationRef"], + "description": "Defines the AsyncAPI call to perform." + } + }, + "required": ["call", "with"] + }, + { + "properties": { + "call": { + "type": "string", + "constant": "grpc" + }, + "with": { + "type": "object", + "properties": { + "proto": { + "$ref": "#/$defs/externalResource", + "description": "The proto resource that describes the GRPC service to call." + }, + "service": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the GRPC service to call." + }, + "host": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "description": "The hostname of the GRPC service to call." + }, + "port": { + "type": "integer", + "min": 0, + "max": 65535, + "description": "The port number of the GRPC service to call." + }, + "authentication": { + "$ref": "#/$defs/authenticationPolicy", + "description": "The endpoint's authentication policy, if any." + } + }, + "required": ["name", "host"] + }, + "method": { + "type": "string", + "description": "The name of the method to call on the defined GRPC service." + }, + "arguments": { + "type": "object", + "additionalProperties": true, + "description": "The arguments, if any, to call the method with." + } + }, + "required": ["proto", "service", "method"], + "description": "Defines the GRPC call to perform." + } + }, + "required": ["call", "with"] + }, + { + "properties": { + "call": { + "type": "string", + "constant": "http" + }, + "with": { + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The HTTP method of the HTTP request to perform." + }, + "endpoint": { + "$ref": "#/$defs/endpoint", + "description": "The HTTP endpoint to send the request to." + }, + "headers": { + "type": "object", + "description": "A name/value mapping of the headers, if any, of the HTTP request to perform." + }, + "body": { + "description": "The body, if any, of the HTTP request to perform." + }, + "output": { + "type": "string", + "enum": ["raw", "content", "response"], + "description": "The http call output format. Defaults to 'content'." + } + }, + "required": ["method", "endpoint"], + "description": "Defines the HTTP call to perform." + } + }, + "required": ["call", "with"] + }, + { + "properties": { + "call": { + "type": "string", + "constant": "openapi" + }, + "with": { + "type": "object", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "description": "The document that defines the OpenAPI operation to call." + }, + "operationId": { + "type": "string", + "description": "The id of the OpenAPI operation to call." + }, + "parameters": { + "type": "object", + "additionalProperties": true, + "description": "A name/value mapping of the parameters of the OpenAPI operation to call." + }, + "authentication": { + "$ref": "#/$defs/authenticationPolicy", + "description": "The authentication policy, if any, to use when calling the OpenAPI operation." + }, + "output": { + "type": "string", + "enum": ["raw", "content", "response"], + "description": "The http call output format. Defaults to 'content'." + } + }, + "required": ["document", "operationId"], + "description": "Defines the OpenAPI call to perform." + } + }, + "required": ["call", "with"] + }, + { + "properties": { + "call": { + "type": "string", + "not": { + "enum": ["asyncapi", "grpc", "http", "openapi"] + }, + "description": "The name of the function to call." + }, + "with": { + "type": "object", + "additionalProperties": true, + "description": "A name/value mapping of the parameters, if any, to call the function with." + } + }, + "required": ["call"] + } + ] + }, + "compositeTask": { + "properties": { + "execute": { + "type": "object", + "oneOf": [ + { + "properties": { + "concurrently": { + "type": "object", + "minProperties": 2, + "additionalProperties": { + "$ref": "#/$defs/task" + }, + "description": "A name/definition mapping of the tasks to perform concurrently." + }, + "compete": { + "type": "boolean", + "description": "Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output." + } + }, + "required": ["concurrently"] + }, + { + "properties": { + "sequentially": { + "type": "object", + "minProperties": 2, + "additionalProperties": { + "$ref": "#/$defs/task" + }, + "description": "A name/definition mapping of the tasks to perform sequentially." + } + }, + "required": ["sequentially"] + } + ], + "description": "Configures the task execution strategy to use" + } + }, + "required": ["execute"], + "description": "Serves as a pivotal orchestrator within workflow systems, enabling the seamless integration and execution of multiple subtasks to accomplish complex operations" + }, + "emitTask": { + "properties": { + "emit": { + "type": "object", + "properties": { + "event": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The event's unique identifier" + }, + "source": { + "type": "string", + "format": "uri", + "description": "Identifies the context in which an event happened" + }, + "type": { + "type": "string", + "description": "This attribute contains a value describing the type of event related to the originating occurrence." + }, + "time": { + "type": "string", + "format": "date-time" + }, + "subject": { + "type": "string" + }, + "datacontenttype": { + "type": "string", + "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format." + }, + "dataschema": { + "type": "string", + "format": "uri" + } + }, + "required": ["source", "type"], + "additionalProperties": true + } + }, + "required": ["event"] + } + }, + "required": ["emit"], + "description": "Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services." + }, + "flowDirective": { + "type": "string", + "enum": ["continue", "exit", "end"], + "default": "continue" + }, + "forTask": { + "properties": { + "for": { + "type": "object", + "properties": { + "each": { + "type": "string", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "in": { + "type": "string", + "description": "A runtime expression used to get the collection to enumerate." + }, + "at": { + "type": "string", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + } + }, + "required": ["in"] + }, + "while": { + "type": "string", + "description": "A runtime expression that represents the condition, if any, that must be met for the iteration to continue." + }, + "do": { + "$ref": "#/$defs/task" + } + }, + "description": "Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.", + "required": ["for", "do"] + }, + "listenTask": { + "type": "object", + "properties": { + "listen": { + "type": "object", + "properties": { + "to": { + "$ref": "#/$defs/eventConsumptionStrategy", + "description": "Defines the event(s) to listen to." + } + }, + "required": ["to"] + } + }, + "required": ["listen"], + "description": "Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems." + }, + "raiseTask": { + "type": "object", + "properties": { + "raise": { + "type": "object", + "properties": { + "error": { + "$ref": "#/$defs/error", + "description": "Defines the error to raise." + } + }, + "required": ["error"] + } + }, + "required": ["raise"], + "description": "Intentionally triggers and propagates errors." + }, + "runTask": { + "type": "object", + "properties": { + "run": { + "type": "object", + "oneOf": [ + { + "properties": { + "container": { + "type": "object", + "properties": { + "image": { + "type": "string", + "description": "The name of the container image to run." + }, + "command": { + "type": "string", + "description": "The command, if any, to execute on the container" + }, + "ports": { + "type": "object", + "description": "The container's port mappings, if any." + }, + "volumes": { + "type": "object", + "description": "The container's volume mappings, if any." + }, + "environment": { + "type": "object", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + } + }, + "required": ["image"] + } + }, + "required": ["container"], + "description": "Enables the execution of external processes encapsulated within a containerized environment." + }, + { + "properties": { + "script": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "The language of the script to run." + }, + "environment": { + "type": "object", + "additionalProperties": true, + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + } + }, + "oneOf": [ + { + "properties": { + "code": { + "type": "string" + } + }, + "required": ["code"], + "description": "The script's code." + }, + { + "properties": { + "source": { + "$ref": "#/$defs/externalResource" + } + }, + "description": "The script's resource.", + "required": ["code"] + } + ], + "required": ["language"] + } + }, + "required": ["script"], + "description": "Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages." + }, + { + "properties": { + "shell": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "The shell command to run." + }, + "arguments": { + "type": "object", + "additionalProperties": true, + "description": "A list of the arguments of the shell command to run." + }, + "environment": { + "type": "object", + "additionalProperties": true, + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + } + }, + "required": ["command"] + } + }, + "required": ["shell"], + "description": "Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks." + }, + { + "properties": { + "workflow": { + "type": "object", + "properties": { + "namespace": { + "type": "string", + "description": "The namespace the workflow to run belongs to." + }, + "name": { + "type": "string", + "description": "The name of the workflow to run." + }, + "version": { + "type": "string", + "default": "latest", + "description": "The version of the workflow to run. Defaults to latest" + }, + "input": { + "type": "object", + "additionalProperties": true, + "description": "The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified." + } + }, + "required": ["namespace", "name", "version"] + } + }, + "required": ["workflow"], + "description": "Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units." + } + ] + } + }, + "required": ["run"], + "description": "Provides the capability to execute external containers, shell commands, scripts, or workflows." + }, + "setTask": { + "type": "object", + "properties": { + "set": { + "type": "object", + "minProperties": 1, + "additionalProperties": true, + "description": "The data to set" + } + }, + "required": ["set"], + "description": "A task used to set data" + }, + "switchTask": { + "type": "object", + "properties": { + "switch": { + "type": "object", + "minProperties": 1, + "additionalProperties": { + "type": "object", + "properties": { + "when": { + "type": "string", + "description": "A runtime expression used to determine whether or not the case matches." + }, + "then": { + "$ref": "#/$defs/flowDirective", + "description": "The flow directive to execute when the case matches." + } + } + } + } + }, + "required": ["switch"], + "description": "Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria" + }, + "tryTask": { + "type": "object", + "properties": { + "try": { + "$ref": "#/$defs/task", + "description": "The task to perform." + }, + "catch": { + "type": "object", + "properties": { + "errors": { + "type": "object" + }, + "as": { + "type": "string", + "description": "The name of the runtime expression variable to save the error as. Defaults to 'error'." + }, + "when": { + "type": "string", + "description": "A runtime expression used to determine whether or not to catch the filtered error" + }, + "exceptWhen": { + "type": "string", + "description": "A runtime expression used to determine whether or not to catch the filtered error" + }, + "retry": { + "$ref": "#/$defs/retryPolicy", + "description": "The retry policy to use, if any, when catching errors." + }, + "do": { + "$ref": "#/$defs/task", + "description": "The definition of the task to run when catching an error." + } + } + } + }, + "required": ["try", "catch"], + "description": "Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones." + }, + "waitTask": { + "type": "object", + "properties": { + "wait": { + "$ref": "#/$defs/duration", + "description": "The amount of time to wait." + } + }, + "required": ["wait"], + "description": "Allows workflows to pause or delay their execution for a specified period of time." + }, + "authenticationPolicy": { + "type": "object", + "oneOf": [ + { + "properties": { + "basic": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": ["username", "password"] + } + }, + "required": ["basic"], + "description": "Use basic authentication." + }, + { + "properties": { + "bearer": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "The bearer token to use." + } + }, + "required": ["token"] + } + }, + "required": ["bearer"], + "description": "Use bearer authentication." + }, + { + "properties": { + "oauth2": { + "type": "object", + "properties": { + "authority": { + "type": "string", + "format": "uri", + "description": "The URI that references the OAuth2 authority to use." + }, + "grant": { + "type": "string", + "description": "The grant type to use." + }, + "client": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The client id to use." + }, + "secret": { + "type": "string", + "description": "The client secret to use, if any." + } + }, + "required": ["id"] + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The scopes, if any, to request the token for." + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The audiences, if any, to request the token for." + }, + "username": { + "type": "string", + "description": "The username to use. Used only if the grant type is Password." + }, + "password": { + "type": "string", + "description": "The password to use. Used only if the grant type is Password." + }, + "subject": { + "$ref": "#/$defs/oauth2Token", + "description": "The security token that represents the identity of the party on behalf of whom the request is being made." + }, + "actor": { + "$ref": "#/$defs/oauth2Token", + "description": "The security token that represents the identity of the acting party." + } + }, + "required": ["authority", "grant", "client"] + } + }, + "required": ["oauth2"], + "description": "Use OAUTH2 authentication." + } + ], + "description": "Defines an authentication policy." + }, + "oauth2Token": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "The security token to use to use." + }, + "type": { + "type": "string", + "description": "The type of the security token to use to use." + } + }, + "required": ["token", "type"] + }, + "duration": { + "type": "object", + "minProperties": 1, + "properties": { + "days": { + "type": "integer", + "description": "Number of days, if any." + }, + "hours": { + "type": "integer", + "description": "Number of days, if any." + }, + "minutes": { + "type": "integer", + "description": "Number of minutes, if any." + }, + "seconds": { + "type": "integer", + "description": "Number of seconds, if any." + }, + "milliseconds": { + "type": "integer", + "description": "Number of milliseconds, if any." + } + }, + "description": "The definition of a duration." + }, + "error": { + "type": "object", + "properties": { + "type": { + "type": "string", + "format": "uri", + "description": "A URI reference that identifies the error type." + }, + "status": { + "type": "integer", + "description": "The status code generated by the origin for this occurrence of the error." + }, + "instance": { + "type": "string", + "format": "uri", + "description": "A JSON Pointer used to reference the component the error originates from." + }, + "title": { + "type": "string", + "description": "A short, human-readable summary of the error." + }, + "detail": { + "type": "string", + "description": "A human-readable explanation specific to this occurrence of the error." + } + }, + "required": ["type", "status", "instance"] + }, + "endpoint": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "format": "uri", + "description": "The endpoint's URI." + }, + "authentication": { + "$ref": "#/$defs/authenticationPolicy", + "description": "The authentication policy to use." + } + }, + "required": ["uri"] + }, + "eventConsumptionStrategy": { + "type": "object", + "oneOf": [ + { + "properties": { + "all": { + "type": "array", + "items": { + "$ref": "#/$defs/eventFilter" + }, + "description": "A list containing all the events that must be consumed." + } + }, + "required": ["all"] + }, + { + "properties": { + "any": { + "type": "array", + "items": { + "$ref": "#/$defs/eventFilter" + }, + "description": "A list containing any of the events to consume." + } + }, + "required": ["any"] + }, + { + "properties": { + "one": { + "$ref": "#/$defs/eventFilter", + "description": "The single event to consume." + } + }, + "required": ["one"] + } + ] + }, + "eventFilter": { + "type": "object", + "properties": { + "with": { + "type": "object", + "minProperties": 1, + "properties": { + "id": { + "type": "string", + "description": "The event's unique identifier" + }, + "source": { + "type": "string", + "description": "Identifies the context in which an event happened" + }, + "type": { + "type": "string", + "description": "This attribute contains a value describing the type of event related to the originating occurrence." + }, + "time": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "datacontenttype": { + "type": "string", + "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format." + }, + "dataschema": { + "type": "string" + } + }, + "additionalProperties": true, + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes." + }, + "correlate": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "A runtime expression used to extract the correlation value from the filtered event." + }, + "expect": { + "type": "string", + "description": "A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation." + } + }, + "required": ["from"], + "description": "A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics." + } + }, + "required": ["with"], + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes." + }, + "extension": { + "type": "object", + "properties": { + "extend": { + "type": "string", + "enum": [ + "call", + "composite", + "emit", + "for", + "listen", + "raise", + "run", + "set", + "switch", + "try", + "wait", + "all" + ], + "description": "The type of task to extend." + }, + "when": { + "type": "string", + "description": "A runtime expression, if any, used to determine whether or not the extension should apply in the specified context." + }, + "before": { + "$ref": "#/$defs/task", + "description": "The task to execute before the extended task, if any." + }, + "after": { + "$ref": "#/$defs/task", + "description": "The task to execute after the extended task, if any." + } + }, + "required": ["extend"], + "description": "The definition of a an extension." + }, + "externalResource": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "format": "uri", + "description": "The endpoint's URI." + }, + "authentication": { + "$ref": "#/$defs/authenticationPolicy", + "description": "The authentication policy to use." + }, + "name": { + "type": "string", + "description": "The external resource's name, if any." + } + }, + "required": ["uri"] + }, + "input": { + "type": "object", + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "description": "The schema used to describe and validate the input of the workflow or task." + }, + "from": { + "type": "string", + "description": "A runtime expression, if any, used to mutate and/or filter the input of the workflow or task." + } + }, + "description": "Configures the input of a workflow or task." + }, + "output": { + "type": "object", + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "description": "The schema used to describe and validate the output of the workflow or task." + }, + "from": { + "type": "string", + "description": "A runtime expression, if any, used to mutate and/or filter the output of the workflow or task." + }, + "to": { + "type": "string", + "description": "A runtime expression, if any, used to output data to the current context." + } + }, + "description": "Configures the output of a workflow or task." + }, + "retryPolicy": { + "type": "object", + "properties": { + "when": { + "type": "string", + "description": "A runtime expression, if any, used to determine whether or not to retry running the task, in a given context." + }, + "exceptWhen": { + "type": "string", + "description": "A runtime expression used to determine whether or not to retry running the task, in a given context." + }, + "delay": { + "$ref": "#/$defs/duration", + "description": "The duration to wait between retry attempts." + }, + "backoff": { + "type": "object", + "oneOf": [ + { + "properties": { + "constant": { + "type": "object", + "description": "The definition of the constant backoff to use, if any." + } + }, + "required": ["constant"] + }, + { + "properties": { + "exponential": { + "type": "object", + "description": "The definition of the exponential backoff to use, if any." + } + }, + "required": ["exponential"] + }, + { + "properties": { + "linear": { + "type": "object", + "description": "The definition of the linear backoff to use, if any." + } + }, + "required": ["linear"] + } + ], + "description": "The retry duration backoff." + }, + "limit": { + "type": "object", + "properties": { + "attempt": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "description": "The maximum amount of retry attempts, if any." + }, + "duration": { + "$ref": "#/$defs/duration", + "description": "The maximum duration for each retry attempt." + } + } + }, + "duration": { + "$ref": "#/$defs/duration", + "description": "The duration limit, if any, for all retry attempts." + } + }, + "description": "The retry limit, if any" + }, + "jitter": { + "type": "object", + "properties": { + "from": { + "$ref": "#/$defs/duration", + "description": "The minimum duration of the jitter range" + }, + "to": { + "$ref": "#/$defs/duration", + "description": "The maximum duration of the jitter range" + } + }, + "required": ["from", "to"], + "description": "The parameters, if any, that control the randomness or variability of the delay between retry attempts." + } + }, + "description": "Defines a retry policy." + }, + "schema": { + "type": "object", + "properties": { + "format": { + "type": "string", + "default": "json", + "description": "The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`." + } + }, + "oneOf": [ + { + "properties": { + "document": { + "description": "The schema's inline definition." + } + }, + "required": ["document"] + }, + { + "properties": { + "resource": { + "$ref": "#/$defs/externalResource", + "description": "The schema's external resource." + } + }, + "required": ["resource"] + } + ], + "description": "Represents the definition of a schema." + }, + "timeout": { + "type": "object", + "properties": { + "after": { + "$ref": "#/$defs/duration", + "description": "The duration after which to timeout." + } + }, + "required": ["after"], + "description": "The definition of a timeout." + } + }, + "required": ["document", "do"] +} diff --git a/public/schemas/1.0.0-alpha2/workflow.json b/public/schemas/1.0.0-alpha2/workflow.json new file mode 100644 index 0000000..04e6f2f --- /dev/null +++ b/public/schemas/1.0.0-alpha2/workflow.json @@ -0,0 +1,1594 @@ +{ + "$id": "https://open-workflow-specification.org/schemas/1.0.0-alpha2/workflow.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Open Workflow Specification DSL - Workflow Schema", + "type": "object", + "properties": { + "document": { + "type": "object", + "properties": { + "dsl": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "description": "The version of the DSL used by the workflow." + }, + "namespace": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "description": "The workflow's namespace." + }, + "name": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "description": "The workflow's name." + }, + "version": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "description": "The workflow's semantic version." + }, + "title": { + "type": "string", + "description": "The workflow's title." + }, + "summary": { + "type": "string", + "description": "The workflow's Markdown summary." + }, + "tags": { + "type": "object", + "description": "A key/value mapping of the workflow's tags, if any.", + "additionalProperties": true + } + }, + "required": [ + "dsl", + "namespace", + "name", + "version" + ], + "description": "Documents the workflow" + }, + "input": { + "$ref": "#/$defs/input", + "description": "Configures the workflow's input." + }, + "use": { + "type": "object", + "properties": { + "authentications": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/authenticationPolicy" + }, + "description": "The workflow's reusable authentication policies." + }, + "errors": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/error" + }, + "description": "The workflow's reusable errors." + }, + "extensions": { + "type": "array", + "items": { + "type": "object", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/extension" + } + }, + "description": "The workflow's extensions." + }, + "functions": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/task" + }, + "description": "The workflow's reusable functions." + }, + "retries": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/retryPolicy" + }, + "description": "The workflow's reusable retry policies." + }, + "secrets": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The workflow's secrets." + } + }, + "description": "Defines the workflow's reusable components." + }, + "do": { + "description": "Defines the task(s) the workflow must perform", + "$ref": "#/$defs/taskList" + }, + "timeout": { + "$ref": "#/$defs/timeout", + "description": "The workflow's timeout configuration, if any." + }, + "output": { + "$ref": "#/$defs/output", + "description": "Configures the workflow's output." + }, + "schedule": { + "type": "object", + "properties": { + "every": { + "$ref": "#/$defs/duration", + "description": "Specifies the duration of the interval at which the workflow should be executed." + }, + "cron": { + "type": "string", + "description": "Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight.\"" + }, + "after": { + "$ref": "#/$defs/duration", + "description": "Specifies a delay duration that the workflow must wait before starting again after it completes." + }, + "on": { + "$ref": "#/$defs/eventConsumptionStrategy", + "description": "Specifies the events that trigger the workflow execution." + } + }, + "description": "Schedules the workflow" + } + }, + "$defs": { + "taskList": { + "type": "array", + "items": { + "type": "object", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/task" + } + } + }, + "taskBase": { + "type": "object", + "properties": { + "if": { + "type": "string", + "description": "A runtime expression, if any, used to determine whether or not the task should be run." + }, + "input": { + "$ref": "#/$defs/input", + "description": "Configure the task's input." + }, + "output": { + "$ref": "#/$defs/output", + "description": "Configure the task's output." + }, + "export": { + "$ref": "#/$defs/export", + "description": "Export task output to context." + }, + "timeout": { + "$ref": "#/$defs/timeout", + "description": "The task's timeout configuration, if any." + }, + "then": { + "$ref": "#/$defs/flowDirective", + "description": "The flow directive to be performed upon completion of the task." + } + } + }, + "task": { + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/callTask" + }, + { + "$ref": "#/$defs/doTask" + }, + { + "$ref": "#/$defs/forkTask" + }, + { + "$ref": "#/$defs/emitTask" + }, + { + "$ref": "#/$defs/forTask" + }, + { + "$ref": "#/$defs/listenTask" + }, + { + "$ref": "#/$defs/raiseTask" + }, + { + "$ref": "#/$defs/runTask" + }, + { + "$ref": "#/$defs/setTask" + }, + { + "$ref": "#/$defs/switchTask" + }, + { + "$ref": "#/$defs/tryTask" + }, + { + "$ref": "#/$defs/waitTask" + } + ] + }, + "callTask": { + "oneOf": [ + { + "title": "CallAsyncAPI", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "call", + "with" + ], + "unevaluatedProperties": false, + "properties": { + "call": { + "type": "string", + "const": "asyncapi" + }, + "with": { + "type": "object", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "description": "The document that defines the AsyncAPI operation to call." + }, + "operationRef": { + "type": "string", + "description": "A reference to the AsyncAPI operation to call." + }, + "server": { + "type": "string", + "description": "A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel." + }, + "message": { + "type": "string", + "description": "The name of the message to use. If not set, defaults to the first message defined by the operation." + }, + "binding": { + "type": "string", + "description": "The name of the binding to use. If not set, defaults to the first binding defined by the operation." + }, + "payload": { + "type": "object", + "description": "The payload to call the AsyncAPI operation with, if any." + }, + "authentication": { + "description": "The authentication policy, if any, to use when calling the AsyncAPI operation.", + "oneOf": [ + { + "$ref": "#/$defs/authenticationPolicy" + }, + { + "type": "string" + } + ] + } + }, + "required": [ + "document", + "operationRef" + ], + "additionalProperties": false, + "description": "Defines the AsyncAPI call to perform." + } + } + }, + { + "title": "CallGRPC", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "grpc" + }, + "with": { + "type": "object", + "properties": { + "proto": { + "$ref": "#/$defs/externalResource", + "description": "The proto resource that describes the GRPC service to call." + }, + "service": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the GRPC service to call." + }, + "host": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "description": "The hostname of the GRPC service to call." + }, + "port": { + "type": "integer", + "min": 0, + "max": 65535, + "description": "The port number of the GRPC service to call." + }, + "authentication": { + "description": "The endpoint's authentication policy, if any.", + "oneOf": [ + { + "$ref": "#/$defs/authenticationPolicy" + }, + { + "type": "string" + } + ] + } + }, + "required": [ + "name", + "host" + ] + }, + "method": { + "type": "string", + "description": "The name of the method to call on the defined GRPC service." + }, + "arguments": { + "type": "object", + "additionalProperties": true, + "description": "The arguments, if any, to call the method with." + } + }, + "required": [ + "proto", + "service", + "method" + ], + "additionalProperties": false, + "description": "Defines the GRPC call to perform." + } + } + }, + { + "title": "CallHTTP", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "http" + }, + "with": { + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The HTTP method of the HTTP request to perform." + }, + "endpoint": { + "description": "The HTTP endpoint to send the request to.", + "oneOf": [ + { + "$ref": "#/$defs/endpoint" + }, + { + "type": "string", + "format": "uri-template" + } + ] + }, + "headers": { + "type": "object", + "description": "A name/value mapping of the headers, if any, of the HTTP request to perform." + }, + "body": { + "description": "The body, if any, of the HTTP request to perform." + }, + "output": { + "type": "string", + "enum": [ + "raw", + "content", + "response" + ], + "description": "The http call output format. Defaults to 'content'." + } + }, + "required": [ + "method", + "endpoint" + ], + "additionalProperties": false, + "description": "Defines the HTTP call to perform." + } + } + }, + { + "title": "CallOpenAPI", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "openapi" + }, + "with": { + "type": "object", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "description": "The document that defines the OpenAPI operation to call." + }, + "operationId": { + "type": "string", + "description": "The id of the OpenAPI operation to call." + }, + "parameters": { + "type": "object", + "additionalProperties": true, + "description": "A name/value mapping of the parameters of the OpenAPI operation to call." + }, + "authentication": { + "description": "The authentication policy, if any, to use when calling the OpenAPI operation.", + "oneOf": [ + { + "$ref": "#/$defs/authenticationPolicy" + }, + { + "type": "string" + } + ] + }, + "output": { + "type": "string", + "enum": [ + "raw", + "content", + "response" + ], + "description": "The http call output format. Defaults to 'content'." + } + }, + "required": [ + "document", + "operationId" + ], + "additionalProperties": false, + "description": "Defines the OpenAPI call to perform." + } + } + }, + { + "title": "CallFunction", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call" + ], + "properties": { + "call": { + "type": "string", + "not": { + "enum": [ + "asyncapi", + "grpc", + "http", + "openapi" + ] + }, + "description": "The name of the function to call." + }, + "with": { + "type": "object", + "additionalProperties": true, + "description": "A name/value mapping of the parameters, if any, to call the function with." + } + } + } + ] + }, + "forkTask": { + "description": "Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "fork" + ], + "properties": { + "fork": { + "type": "object", + "required": [ + "branches" + ], + "properties": { + "branches": { + "$ref": "#/$defs/taskList" + }, + "compete": { + "description": "Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output.", + "type": "boolean", + "default": false + } + } + } + } + }, + "doTask": { + "description": "Allows to execute a list of tasks in sequence", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "do" + ], + "properties": { + "do": { + "$ref": "#/$defs/taskList" + } + } + }, + "emitTask": { + "description": "Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "emit" + ], + "unevaluatedProperties": false, + "properties": { + "emit": { + "type": "object", + "properties": { + "event": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The event's unique identifier" + }, + "source": { + "type": "string", + "format": "uri", + "description": "Identifies the context in which an event happened" + }, + "type": { + "type": "string", + "description": "This attribute contains a value describing the type of event related to the originating occurrence." + }, + "time": { + "type": "string", + "format": "date-time" + }, + "subject": { + "type": "string" + }, + "datacontenttype": { + "type": "string", + "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format." + }, + "dataschema": { + "type": "string", + "format": "uri" + } + }, + "required": [ + "source", + "type" + ], + "additionalProperties": true + } + }, + "required": [ + "event" + ] + } + } + }, + "forTask": { + "description": "Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "for", + "do" + ], + "unevaluatedProperties": false, + "properties": { + "for": { + "type": "object", + "properties": { + "each": { + "type": "string", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "in": { + "type": "string", + "description": "A runtime expression used to get the collection to enumerate." + }, + "at": { + "type": "string", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + } + }, + "required": [ + "in" + ] + }, + "while": { + "type": "string", + "description": "A runtime expression that represents the condition, if any, that must be met for the iteration to continue." + }, + "do": { + "$ref": "#/$defs/taskList" + } + } + }, + "listenTask": { + "description": "Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "listen" + ], + "unevaluatedProperties": false, + "properties": { + "listen": { + "type": "object", + "properties": { + "to": { + "$ref": "#/$defs/eventConsumptionStrategy", + "description": "Defines the event(s) to listen to." + } + }, + "required": [ + "to" + ] + } + } + }, + "raiseTask": { + "description": "Intentionally triggers and propagates errors.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "raise" + ], + "unevaluatedProperties": false, + "properties": { + "raise": { + "type": "object", + "properties": { + "error": { + "$ref": "#/$defs/error", + "description": "Defines the error to raise." + } + }, + "required": [ + "error" + ] + } + } + }, + "runTask": { + "description": "Provides the capability to execute external containers, shell commands, scripts, or workflows.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "run" + ], + "unevaluatedProperties": false, + "properties": { + "run": { + "type": "object", + "oneOf": [ + { + "properties": { + "container": { + "type": "object", + "properties": { + "image": { + "type": "string", + "description": "The name of the container image to run." + }, + "command": { + "type": "string", + "description": "The command, if any, to execute on the container" + }, + "ports": { + "type": "object", + "description": "The container's port mappings, if any." + }, + "volumes": { + "type": "object", + "description": "The container's volume mappings, if any." + }, + "environment": { + "type": "object", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + } + }, + "required": [ + "image" + ] + } + }, + "required": [ + "container" + ], + "description": "Enables the execution of external processes encapsulated within a containerized environment." + }, + { + "properties": { + "script": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "The language of the script to run." + }, + "environment": { + "type": "object", + "additionalProperties": true, + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + } + }, + "oneOf": [ + { + "properties": { + "code": { + "type": "string" + } + }, + "required": [ + "code" + ], + "description": "The script's code." + }, + { + "properties": { + "source": { + "$ref": "#/$defs/externalResource" + } + }, + "description": "The script's resource.", + "required": [ + "source" + ] + } + ], + "required": [ + "language" + ] + } + }, + "required": [ + "script" + ], + "description": "Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages." + }, + { + "properties": { + "shell": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "The shell command to run." + }, + "arguments": { + "type": "object", + "additionalProperties": true, + "description": "A list of the arguments of the shell command to run." + }, + "environment": { + "type": "object", + "additionalProperties": true, + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + } + }, + "required": [ + "command" + ] + } + }, + "required": [ + "shell" + ], + "description": "Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks." + }, + { + "properties": { + "workflow": { + "type": "object", + "properties": { + "namespace": { + "type": "string", + "description": "The namespace the workflow to run belongs to." + }, + "name": { + "type": "string", + "description": "The name of the workflow to run." + }, + "version": { + "type": "string", + "default": "latest", + "description": "The version of the workflow to run. Defaults to latest" + }, + "input": { + "type": "object", + "additionalProperties": true, + "description": "The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified." + } + }, + "required": [ + "namespace", + "name", + "version" + ] + } + }, + "required": [ + "workflow" + ], + "description": "Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units." + } + ] + } + } + }, + "setTask": { + "description": "A task used to set data", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "set" + ], + "unevaluatedProperties": false, + "properties": { + "set": { + "type": "object", + "minProperties": 1, + "additionalProperties": true, + "description": "The data to set" + } + } + }, + "switchTask": { + "description": "Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "switch" + ], + "unevaluatedProperties": false, + "properties": { + "switch": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The case's name." + }, + "when": { + "type": "string", + "description": "A runtime expression used to determine whether or not the case matches." + }, + "then": { + "$ref": "#/$defs/flowDirective", + "description": "The flow directive to execute when the case matches." + } + } + } + } + } + } + }, + "tryTask": { + "description": "Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "try", + "catch" + ], + "unevaluatedProperties": false, + "properties": { + "try": { + "description": "The task(s) to perform.", + "$ref": "#/$defs/taskList" + }, + "catch": { + "type": "object", + "properties": { + "errors": { + "type": "object" + }, + "as": { + "type": "string", + "description": "The name of the runtime expression variable to save the error as. Defaults to 'error'." + }, + "when": { + "type": "string", + "description": "A runtime expression used to determine whether or not to catch the filtered error" + }, + "exceptWhen": { + "type": "string", + "description": "A runtime expression used to determine whether or not to catch the filtered error" + }, + "retry": { + "$ref": "#/$defs/retryPolicy", + "description": "The retry policy to use, if any, when catching errors." + }, + "do": { + "description": "The definition of the task(s) to run when catching an error.", + "$ref": "#/$defs/taskList" + } + } + } + } + }, + "waitTask": { + "description": "Allows workflows to pause or delay their execution for a specified period of time.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "wait" + ], + "unevaluatedProperties": false, + "properties": { + "wait": { + "description": "The amount of time to wait.", + "$ref": "#/$defs/duration" + } + } + }, + "flowDirective": { + "additionalProperties": false, + "anyOf": [ + { + "type": "string", + "enum": [ + "continue", + "exit", + "end" + ], + "default": "continue" + }, + { + "type": "string" + } + ] + }, + "authenticationPolicy": { + "type": "object", + "oneOf": [ + { + "properties": { + "basic": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + } + }, + "required": [ + "basic" + ], + "description": "Use basic authentication." + }, + { + "properties": { + "bearer": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "The bearer token to use." + } + }, + "required": [ + "token" + ] + } + }, + "required": [ + "bearer" + ], + "description": "Use bearer authentication." + }, + { + "properties": { + "oauth2": { + "type": "object", + "properties": { + "authority": { + "type": "string", + "format": "uri", + "description": "The URI that references the OAuth2 authority to use." + }, + "grant": { + "type": "string", + "description": "The grant type to use." + }, + "client": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The client id to use." + }, + "secret": { + "type": "string", + "description": "The client secret to use, if any." + } + }, + "required": [ + "id" + ] + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The scopes, if any, to request the token for." + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The audiences, if any, to request the token for." + }, + "username": { + "type": "string", + "description": "The username to use. Used only if the grant type is Password." + }, + "password": { + "type": "string", + "description": "The password to use. Used only if the grant type is Password." + }, + "subject": { + "$ref": "#/$defs/oauth2Token", + "description": "The security token that represents the identity of the party on behalf of whom the request is being made." + }, + "actor": { + "$ref": "#/$defs/oauth2Token", + "description": "The security token that represents the identity of the acting party." + } + }, + "required": [ + "authority", + "grant", + "client" + ] + } + }, + "required": [ + "oauth2" + ], + "description": "Use OAUTH2 authentication." + } + ], + "description": "Defines an authentication policy." + }, + "oauth2Token": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "The security token to use to use." + }, + "type": { + "type": "string", + "description": "The type of the security token to use to use." + } + }, + "required": [ + "token", + "type" + ] + }, + "duration": { + "type": "object", + "minProperties": 1, + "properties": { + "days": { + "type": "integer", + "description": "Number of days, if any." + }, + "hours": { + "type": "integer", + "description": "Number of days, if any." + }, + "minutes": { + "type": "integer", + "description": "Number of minutes, if any." + }, + "seconds": { + "type": "integer", + "description": "Number of seconds, if any." + }, + "milliseconds": { + "type": "integer", + "description": "Number of milliseconds, if any." + } + }, + "description": "The definition of a duration." + }, + "error": { + "type": "object", + "properties": { + "type": { + "type": "string", + "format": "uri", + "description": "A URI reference that identifies the error type." + }, + "status": { + "type": "integer", + "description": "The status code generated by the origin for this occurrence of the error." + }, + "instance": { + "type": "string", + "format": "json-pointer", + "description": "A JSON Pointer used to reference the component the error originates from." + }, + "title": { + "type": "string", + "description": "A short, human-readable summary of the error." + }, + "detail": { + "type": "string", + "description": "A human-readable explanation specific to this occurrence of the error." + } + }, + "required": [ + "type", + "status", + "instance" + ] + }, + "endpoint": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "format": "uri-template", + "description": "The endpoint's URI." + }, + "authentication": { + "description": "The authentication policy to use.", + "oneOf": [ + { + "$ref": "#/$defs/authenticationPolicy" + }, + { + "type": "string" + } + ] + } + }, + "required": [ + "uri" + ] + }, + "eventConsumptionStrategy": { + "type": "object", + "oneOf": [ + { + "properties": { + "all": { + "type": "array", + "items": { + "$ref": "#/$defs/eventFilter" + }, + "description": "A list containing all the events that must be consumed." + } + }, + "required": [ + "all" + ] + }, + { + "properties": { + "any": { + "type": "array", + "items": { + "$ref": "#/$defs/eventFilter" + }, + "description": "A list containing any of the events to consume." + } + }, + "required": [ + "any" + ] + }, + { + "properties": { + "one": { + "$ref": "#/$defs/eventFilter", + "description": "The single event to consume." + } + }, + "required": [ + "one" + ] + } + ] + }, + "eventFilter": { + "type": "object", + "properties": { + "with": { + "type": "object", + "minProperties": 1, + "properties": { + "id": { + "type": "string", + "description": "The event's unique identifier" + }, + "source": { + "type": "string", + "description": "Identifies the context in which an event happened" + }, + "type": { + "type": "string", + "description": "This attribute contains a value describing the type of event related to the originating occurrence." + }, + "time": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "datacontenttype": { + "type": "string", + "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format." + }, + "dataschema": { + "type": "string" + } + }, + "additionalProperties": true, + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes." + }, + "correlate": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "A runtime expression used to extract the correlation value from the filtered event." + }, + "expect": { + "type": "string", + "description": "A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation." + } + }, + "required": [ + "from" + ] + }, + "description": "A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics." + } + }, + "required": [ + "with" + ], + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes." + }, + "extension": { + "type": "object", + "properties": { + "extend": { + "type": "string", + "enum": [ + "call", + "composite", + "emit", + "for", + "listen", + "raise", + "run", + "set", + "switch", + "try", + "wait", + "all" + ], + "description": "The type of task to extend." + }, + "when": { + "type": "string", + "description": "A runtime expression, if any, used to determine whether or not the extension should apply in the specified context." + }, + "before": { + "description": "The task(s) to execute before the extended task, if any.", + "$ref": "#/$defs/taskList" + }, + "after": { + "description": "The task(s) to execute after the extended task, if any.", + "$ref": "#/$defs/taskList" + } + }, + "required": [ + "extend" + ], + "description": "The definition of a an extension." + }, + "externalResource": { + "oneOf": [ + { + "type": "string", + "format": "uri" + }, + { + "type": "object", + "properties": { + "uri": { + "type": "string", + "format": "uri", + "description": "The endpoint's URI." + }, + "authentication": { + "description": "The authentication policy to use.", + "oneOf": [ + { + "$ref": "#/$defs/authenticationPolicy" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string", + "description": "The external resource's name, if any." + } + }, + "required": [ + "uri" + ] + } + ] + }, + "input": { + "type": "object", + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "description": "The schema used to describe and validate the input of the workflow or task." + }, + "from": { + "type": "string", + "description": "A runtime expression, if any, used to mutate and/or filter the input of the workflow or task." + } + }, + "description": "Configures the input of a workflow or task." + }, + "output": { + "type": "object", + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "description": "The schema used to describe and validate the output of the workflow or task." + }, + "as": { + "type": "string", + "description": "A runtime expression, if any, used to mutate and/or filter the output of the workflow or task." + } + }, + "description": "Configures the output of a workflow or task." + }, + "export": { + "type": "object", + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "description": "The schema used to describe and validate the workflow context." + }, + "as": { + "type": "string", + "description": "A runtime expression, if any, used to export the output data to the context." + } + }, + "description": "Set the content of the context." + }, + "retryPolicy": { + "type": "object", + "properties": { + "when": { + "type": "string", + "description": "A runtime expression, if any, used to determine whether or not to retry running the task, in a given context." + }, + "exceptWhen": { + "type": "string", + "description": "A runtime expression used to determine whether or not to retry running the task, in a given context." + }, + "delay": { + "$ref": "#/$defs/duration", + "description": "The duration to wait between retry attempts." + }, + "backoff": { + "type": "object", + "oneOf": [ + { + "properties": { + "constant": { + "type": "object", + "description": "The definition of the constant backoff to use, if any." + } + }, + "required": [ + "constant" + ] + }, + { + "properties": { + "exponential": { + "type": "object", + "description": "The definition of the exponential backoff to use, if any." + } + }, + "required": [ + "exponential" + ] + }, + { + "properties": { + "linear": { + "type": "object", + "description": "The definition of the linear backoff to use, if any." + } + }, + "required": [ + "linear" + ] + } + ], + "description": "The retry duration backoff." + }, + "limit": { + "type": "object", + "properties": { + "attempt": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "description": "The maximum amount of retry attempts, if any." + }, + "duration": { + "$ref": "#/$defs/duration", + "description": "The maximum duration for each retry attempt." + } + } + }, + "duration": { + "$ref": "#/$defs/duration", + "description": "The duration limit, if any, for all retry attempts." + } + }, + "description": "The retry limit, if any" + }, + "jitter": { + "type": "object", + "properties": { + "from": { + "$ref": "#/$defs/duration", + "description": "The minimum duration of the jitter range" + }, + "to": { + "$ref": "#/$defs/duration", + "description": "The maximum duration of the jitter range" + } + }, + "required": [ + "from", + "to" + ], + "description": "The parameters, if any, that control the randomness or variability of the delay between retry attempts." + } + }, + "description": "Defines a retry policy." + }, + "schema": { + "type": "object", + "properties": { + "format": { + "type": "string", + "default": "json", + "description": "The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`." + } + }, + "oneOf": [ + { + "properties": { + "document": { + "description": "The schema's inline definition." + } + }, + "required": [ + "document" + ] + }, + { + "properties": { + "resource": { + "$ref": "#/$defs/externalResource", + "description": "The schema's external resource." + } + }, + "required": [ + "resource" + ] + } + ], + "description": "Represents the definition of a schema." + }, + "timeout": { + "type": "object", + "properties": { + "after": { + "$ref": "#/$defs/duration", + "description": "The duration after which to timeout." + } + }, + "required": [ + "after" + ], + "description": "The definition of a timeout." + } + }, + "required": [ + "document", + "do" + ] + } \ No newline at end of file diff --git a/public/schemas/1.0.0-alpha2/workflow.yaml b/public/schemas/1.0.0-alpha2/workflow.yaml new file mode 100644 index 0000000..a76bf7f --- /dev/null +++ b/public/schemas/1.0.0-alpha2/workflow.yaml @@ -0,0 +1,968 @@ +$id: https://open-workflow-specification.org/schemas/1.0.0-alpha2/workflow.yaml +$schema: https://json-schema.org/draft/2020-12/schema +description: Open Workflow Specification DSL - Workflow Schema +type: object +properties: + document: + type: object + properties: + dsl: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + description: The version of the DSL used by the workflow. + namespace: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + description: The workflow's namespace. + name: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + description: The workflow's name. + version: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + description: The workflow's semantic version. + title: + type: string + description: The workflow's title. + summary: + type: string + description: The workflow's Markdown summary. + tags: + type: object + description: A key/value mapping of the workflow's tags, if any. + additionalProperties: true + required: [ dsl, namespace, name, version ] + description: Documents the workflow + input: + $ref: '#/$defs/input' + description: Configures the workflow's input. + use: + type: object + properties: + authentications: + type: object + additionalProperties: + $ref: '#/$defs/authenticationPolicy' + description: The workflow's reusable authentication policies. + errors: + type: object + additionalProperties: + $ref: '#/$defs/error' + description: The workflow's reusable errors. + extensions: + type: array + items: + type: object + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/extension' + description: The workflow's extensions. + functions: + type: object + additionalProperties: + $ref: '#/$defs/task' + description: The workflow's reusable functions. + retries: + type: object + additionalProperties: + $ref: '#/$defs/retryPolicy' + description: The workflow's reusable retry policies. + secrets: + type: array + items: + type: string + description: The workflow's secrets. + description: Defines the workflow's reusable components. + do: + description: Defines the task(s) the workflow must perform + $ref: '#/$defs/taskList' + timeout: + $ref: '#/$defs/timeout' + description: The workflow's timeout configuration, if any. + output: + $ref: '#/$defs/output' + description: Configures the workflow's output. + schedule: + type: object + properties: + every: + $ref: '#/$defs/duration' + description: Specifies the duration of the interval at which the workflow should be executed. + cron: + type: string + description: Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight." + after: + $ref: '#/$defs/duration' + description: Specifies a delay duration that the workflow must wait before starting again after it completes. + on: + $ref: '#/$defs/eventConsumptionStrategy' + description: Specifies the events that trigger the workflow execution. + description: Schedules the workflow +$defs: + taskList: + type: array + items: + type: object + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/task' + taskBase: + type: object + properties: + if: + type: string + description: A runtime expression, if any, used to determine whether or not the task should be run. + input: + $ref: '#/$defs/input' + description: Configure the task's input. + output: + $ref: '#/$defs/output' + description: Configure the task's output. + export: + $ref: '#/$defs/export' + description: Export task output to context. + timeout: + $ref: '#/$defs/timeout' + description: The task's timeout configuration, if any. + then: + $ref: '#/$defs/flowDirective' + description: The flow directive to be performed upon completion of the task. + task: + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/callTask' + - $ref: '#/$defs/doTask' + - $ref: '#/$defs/forkTask' + - $ref: '#/$defs/emitTask' + - $ref: '#/$defs/forTask' + - $ref: '#/$defs/listenTask' + - $ref: '#/$defs/raiseTask' + - $ref: '#/$defs/runTask' + - $ref: '#/$defs/setTask' + - $ref: '#/$defs/switchTask' + - $ref: '#/$defs/tryTask' + - $ref: '#/$defs/waitTask' + callTask: + oneOf: + - title: CallAsyncAPI + $ref: '#/$defs/taskBase' + type: object + required: [ call, with ] + unevaluatedProperties: false + properties: + call: + type: string + const: asyncapi + with: + type: object + properties: + document: + $ref: '#/$defs/externalResource' + description: The document that defines the AsyncAPI operation to call. + operationRef: + type: string + description: A reference to the AsyncAPI operation to call. + server: + type: string + description: A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel. + message: + type: string + description: The name of the message to use. If not set, defaults to the first message defined by the operation. + binding: + type: string + description: The name of the binding to use. If not set, defaults to the first binding defined by the operation. + payload: + type: object + description: The payload to call the AsyncAPI operation with, if any. + authentication: + description: The authentication policy, if any, to use when calling the AsyncAPI operation. + oneOf: + - $ref: '#/$defs/authenticationPolicy' + - type: string + required: [ document, operationRef ] + additionalProperties: false + description: Defines the AsyncAPI call to perform. + - title: CallGRPC + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: grpc + with: + type: object + properties: + proto: + $ref: '#/$defs/externalResource' + description: The proto resource that describes the GRPC service to call. + service: + type: object + properties: + name: + type: string + description: The name of the GRPC service to call. + host: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + description: The hostname of the GRPC service to call. + port: + type: integer + min: 0 + max: 65535 + description: The port number of the GRPC service to call. + authentication: + description: The endpoint's authentication policy, if any. + oneOf: + - $ref: '#/$defs/authenticationPolicy' + - type: string + required: [ name, host ] + method: + type: string + description: The name of the method to call on the defined GRPC service. + arguments: + type: object + additionalProperties: true + description: The arguments, if any, to call the method with. + required: [ proto, service, method ] + additionalProperties: false + description: Defines the GRPC call to perform. + - title: CallHTTP + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: http + with: + type: object + properties: + method: + type: string + description: The HTTP method of the HTTP request to perform. + endpoint: + description: The HTTP endpoint to send the request to. + oneOf: + - $ref: '#/$defs/endpoint' + - type: string + format: uri-template + headers: + type: object + description: A name/value mapping of the headers, if any, of the HTTP request to perform. + body: + description: The body, if any, of the HTTP request to perform. + output: + type: string + enum: [ raw, content, response ] + description: The http call output format. Defaults to 'content'. + required: [ method, endpoint ] + additionalProperties: false + description: Defines the HTTP call to perform. + - title: CallOpenAPI + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: openapi + with: + type: object + properties: + document: + $ref: '#/$defs/externalResource' + description: The document that defines the OpenAPI operation to call. + operationId: + type: string + description: The id of the OpenAPI operation to call. + parameters: + type: object + additionalProperties: true + description: A name/value mapping of the parameters of the OpenAPI operation to call. + authentication: + description: The authentication policy, if any, to use when calling the OpenAPI operation. + oneOf: + - $ref: '#/$defs/authenticationPolicy' + - type: string + output: + type: string + enum: [ raw, content, response ] + description: The http call output format. Defaults to 'content'. + required: [ document, operationId ] + additionalProperties: false + description: Defines the OpenAPI call to perform. + - title: CallFunction + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call ] + properties: + call: + type: string + not: + enum: ["asyncapi", "grpc", "http", "openapi"] + description: The name of the function to call. + with: + type: object + additionalProperties: true + description: A name/value mapping of the parameters, if any, to call the function with. + forkTask: + description: Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ fork ] + properties: + fork: + type: object + required: [ branches ] + properties: + branches: + $ref: '#/$defs/taskList' + compete: + description: Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output. + type: boolean + default: false + doTask: + description: Allows to execute a list of tasks in sequence + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ do ] + properties: + do: + $ref: '#/$defs/taskList' + emitTask: + description: Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services. + $ref: '#/$defs/taskBase' + type: object + required: [ emit ] + unevaluatedProperties: false + properties: + emit: + type: object + properties: + event: + type: object + properties: + id: + type: string + description: The event's unique identifier + source: + type: string + format: uri + description: Identifies the context in which an event happened + type: + type: string + description: This attribute contains a value describing the type of event related to the originating occurrence. + time: + type: string + format: date-time + subject: + type: string + datacontenttype: + type: string + description: Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format. + dataschema: + type: string + format: uri + required: [ source, type ] + additionalProperties: true + required: [ event ] + forTask: + description: Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets. + $ref: '#/$defs/taskBase' + type: object + required: [ for, do ] + unevaluatedProperties: false + properties: + for: + type: object + properties: + each: + type: string + description: The name of the variable used to store the current item being enumerated. + default: item + in: + type: string + description: A runtime expression used to get the collection to enumerate. + at: + type: string + description: The name of the variable used to store the index of the current item being enumerated. + default: index + required: [ in ] + while: + type: string + description: A runtime expression that represents the condition, if any, that must be met for the iteration to continue. + do: + $ref: '#/$defs/taskList' + listenTask: + description: Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems. + $ref: '#/$defs/taskBase' + type: object + required: [ listen ] + unevaluatedProperties: false + properties: + listen: + type: object + properties: + to: + $ref: '#/$defs/eventConsumptionStrategy' + description: Defines the event(s) to listen to. + required: [ to ] + raiseTask: + description: Intentionally triggers and propagates errors. + $ref: '#/$defs/taskBase' + type: object + required: [ raise ] + unevaluatedProperties: false + properties: + raise: + type: object + properties: + error: + $ref: '#/$defs/error' + description: Defines the error to raise. + required: [ error ] + runTask: + description: Provides the capability to execute external containers, shell commands, scripts, or workflows. + $ref: '#/$defs/taskBase' + type: object + required: [ run ] + unevaluatedProperties: false + properties: + run: + type: object + oneOf: + - properties: + container: + type: object + properties: + image: + type: string + description: The name of the container image to run. + command: + type: string + description: The command, if any, to execute on the container + ports: + type: object + description: The container's port mappings, if any. + volumes: + type: object + description: The container's volume mappings, if any. + environment: + type: object + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + required: [ image ] + required: [ container ] + description: Enables the execution of external processes encapsulated within a containerized environment. + - properties: + script: + type: object + properties: + language: + type: string + description: The language of the script to run. + environment: + type: object + additionalProperties: true + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + oneOf: + - properties: + code: + type: string + required: [ code ] + description: The script's code. + - properties: + source: + $ref: '#/$defs/externalResource' + description: The script's resource. + required: [ source ] + required: [ language ] + required: [ script ] + description: Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages. + - properties: + shell: + type: object + properties: + command: + type: string + description: The shell command to run. + arguments: + type: object + additionalProperties: true + description: A list of the arguments of the shell command to run. + environment: + type: object + additionalProperties: true + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + required: [ command ] + required: [ shell ] + description: Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks. + - properties: + workflow: + type: object + properties: + namespace: + type: string + description: The namespace the workflow to run belongs to. + name: + type: string + description: The name of the workflow to run. + version: + type: string + default: latest + description: The version of the workflow to run. Defaults to latest + input: + type: object + additionalProperties: true + description: The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified. + required: [ namespace, name, version ] + required: [ workflow ] + description: Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units. + setTask: + description: A task used to set data + $ref: '#/$defs/taskBase' + type: object + required: [ set ] + unevaluatedProperties: false + properties: + set: + type: object + minProperties: 1 + additionalProperties: true + description: The data to set + switchTask: + description: Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria + $ref: '#/$defs/taskBase' + type: object + required: [ switch ] + unevaluatedProperties: false + properties: + switch: + type: array + minItems: 1 + items: + type: object + minProperties: 1 + maxProperties: 1 + additionalProperties: + type: object + properties: + name: + type: string + description: The case's name. + when: + type: string + description: A runtime expression used to determine whether or not the case matches. + then: + $ref: '#/$defs/flowDirective' + description: The flow directive to execute when the case matches. + tryTask: + description: Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones. + $ref: '#/$defs/taskBase' + type: object + required: [ try, catch ] + unevaluatedProperties: false + properties: + try: + description: The task(s) to perform. + $ref: '#/$defs/taskList' + catch: + type: object + properties: + errors: + type: object + as: + type: string + description: The name of the runtime expression variable to save the error as. Defaults to 'error'. + when: + type: string + description: A runtime expression used to determine whether or not to catch the filtered error + exceptWhen: + type: string + description: A runtime expression used to determine whether or not to catch the filtered error + retry: + $ref: '#/$defs/retryPolicy' + description: The retry policy to use, if any, when catching errors. + do: + description: The definition of the task(s) to run when catching an error. + $ref: '#/$defs/taskList' + waitTask: + description: Allows workflows to pause or delay their execution for a specified period of time. + $ref: '#/$defs/taskBase' + type: object + required: [ wait ] + unevaluatedProperties: false + properties: + wait: + description: The amount of time to wait. + $ref: '#/$defs/duration' + flowDirective: + additionalProperties: false + anyOf: + - type: string + enum: [ continue, exit, end ] + default: continue + - type: string + authenticationPolicy: + type: object + oneOf: + - properties: + basic: + type: object + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + required: [ basic ] + description: Use basic authentication. + - properties: + bearer: + type: object + properties: + token: + type: string + description: The bearer token to use. + required: [ token ] + required: [ bearer ] + description: Use bearer authentication. + - properties: + oauth2: + type: object + properties: + authority: + type: string + format: uri + description: The URI that references the OAuth2 authority to use. + grant: + type: string + description: The grant type to use. + client: + type: object + properties: + id: + type: string + description: The client id to use. + secret: + type: string + description: The client secret to use, if any. + required: [ id ] + scopes: + type: array + items: + type: string + description: The scopes, if any, to request the token for. + audiences: + type: array + items: + type: string + description: The audiences, if any, to request the token for. + username: + type: string + description: The username to use. Used only if the grant type is Password. + password: + type: string + description: The password to use. Used only if the grant type is Password. + subject: + $ref: '#/$defs/oauth2Token' + description: The security token that represents the identity of the party on behalf of whom the request is being made. + actor: + $ref: '#/$defs/oauth2Token' + description: The security token that represents the identity of the acting party. + required: [ authority, grant, client ] + required: [ oauth2 ] + description: Use OAUTH2 authentication. + description: Defines an authentication policy. + oauth2Token: + type: object + properties: + token: + type: string + description: The security token to use to use. + type: + type: string + description: The type of the security token to use to use. + required: [ token, type ] + duration: + type: object + minProperties: 1 + properties: + days: + type: integer + description: Number of days, if any. + hours: + type: integer + description: Number of days, if any. + minutes: + type: integer + description: Number of minutes, if any. + seconds: + type: integer + description: Number of seconds, if any. + milliseconds: + type: integer + description: Number of milliseconds, if any. + description: The definition of a duration. + error: + type: object + properties: + type: + type: string + format: uri + description: A URI reference that identifies the error type. + status: + type: integer + description: The status code generated by the origin for this occurrence of the error. + instance: + type: string + format: json-pointer + description: A JSON Pointer used to reference the component the error originates from. + title: + type: string + description: A short, human-readable summary of the error. + detail: + type: string + description: A human-readable explanation specific to this occurrence of the error. + required: [ type, status, instance ] + endpoint: + type: object + properties: + uri: + type: string + format: uri-template + description: The endpoint's URI. + authentication: + description: The authentication policy to use. + oneOf: + - $ref: '#/$defs/authenticationPolicy' + - type: string + required: [ uri ] + eventConsumptionStrategy: + type: object + oneOf: + - properties: + all: + type: array + items: + $ref: '#/$defs/eventFilter' + description: A list containing all the events that must be consumed. + required: [ all ] + - properties: + any: + type: array + items: + $ref: '#/$defs/eventFilter' + description: A list containing any of the events to consume. + required: [ any ] + - properties: + one: + $ref: '#/$defs/eventFilter' + description: The single event to consume. + required: [ one ] + eventFilter: + type: object + properties: + with: + type: object + minProperties: 1 + properties: + id: + type: string + description: The event's unique identifier + source: + type: string + description: Identifies the context in which an event happened + type: + type: string + description: This attribute contains a value describing the type of event related to the originating occurrence. + time: + type: string + subject: + type: string + datacontenttype: + type: string + description: Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format. + dataschema: + type: string + additionalProperties: true + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + correlate: + type: object + additionalProperties: + type: object + properties: + from: + type: string + description: A runtime expression used to extract the correlation value from the filtered event. + expect: + type: string + description: A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation. + required: [ from ] + description: A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics. + required: [ with ] + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + extension: + type: object + properties: + extend: + type: string + enum: [ call, composite, emit, for, listen, raise, run, set, switch, try, wait, all ] + description: The type of task to extend. + when: + type: string + description: A runtime expression, if any, used to determine whether or not the extension should apply in the specified context. + before: + description: The task(s) to execute before the extended task, if any. + $ref: '#/$defs/taskList' + after: + description: The task(s) to execute after the extended task, if any. + $ref: '#/$defs/taskList' + required: [ extend ] + description: The definition of a an extension. + externalResource: + oneOf: + - type: string + format: uri + - type: object + properties: + uri: + type: string + format: uri + description: The endpoint's URI. + authentication: + description: The authentication policy to use. + oneOf: + - $ref: '#/$defs/authenticationPolicy' + - type: string + name: + type: string + description: The external resource's name, if any. + required: [ uri ] + input: + type: object + properties: + schema: + $ref: '#/$defs/schema' + description: The schema used to describe and validate the input of the workflow or task. + from: + type: string + description: A runtime expression, if any, used to mutate and/or filter the input of the workflow or task. + description: Configures the input of a workflow or task. + output: + type: object + properties: + schema: + $ref: '#/$defs/schema' + description: The schema used to describe and validate the output of the workflow or task. + as: + type: string + description: A runtime expression, if any, used to mutate and/or filter the output of the workflow or task. + description: Configures the output of a workflow or task. + export: + type: object + properties: + schema: + $ref: '#/$defs/schema' + description: The schema used to describe and validate the workflow context. + as: + type: string + description: A runtime expression, if any, used to export the output data to the context. + description: Set the content of the context. + retryPolicy: + type: object + properties: + when: + type: string + description: A runtime expression, if any, used to determine whether or not to retry running the task, in a given context. + exceptWhen: + type: string + description: A runtime expression used to determine whether or not to retry running the task, in a given context. + delay: + $ref: '#/$defs/duration' + description: The duration to wait between retry attempts. + backoff: + type: object + oneOf: + - properties: + constant: + type: object + description: The definition of the constant backoff to use, if any. + required: [ constant ] + - properties: + exponential: + type: object + description: The definition of the exponential backoff to use, if any. + required: [ exponential ] + - properties: + linear: + type: object + description: The definition of the linear backoff to use, if any. + required: [ linear ] + description: The retry duration backoff. + limit: + type: object + properties: + attempt: + type: object + properties: + count: + type: integer + description: The maximum amount of retry attempts, if any. + duration: + $ref: '#/$defs/duration' + description: The maximum duration for each retry attempt. + duration: + $ref: '#/$defs/duration' + description: The duration limit, if any, for all retry attempts. + description: The retry limit, if any + jitter: + type: object + properties: + from: + $ref: '#/$defs/duration' + description: The minimum duration of the jitter range + to: + $ref: '#/$defs/duration' + description: The maximum duration of the jitter range + required: [ from, to ] + description: The parameters, if any, that control the randomness or variability of the delay between retry attempts. + description: Defines a retry policy. + schema: + type: object + properties: + format: + type: string + default: json + description: The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`. + oneOf: + - properties: + document: + description: The schema's inline definition. + required: [ document ] + - properties: + resource: + $ref: '#/$defs/externalResource' + description: The schema's external resource. + required: [ resource ] + description: Represents the definition of a schema. + timeout: + type: object + properties: + after: + $ref: '#/$defs/duration' + description: The duration after which to timeout. + required: [ after ] + description: The definition of a timeout. +required: [ document, do ] \ No newline at end of file diff --git a/public/schemas/1.0.0-alpha3/workflow.json b/public/schemas/1.0.0-alpha3/workflow.json new file mode 100644 index 0000000..723e4a3 --- /dev/null +++ b/public/schemas/1.0.0-alpha3/workflow.json @@ -0,0 +1,2246 @@ +{ + "$id": "https://open-workflow-specification.org/schemas/1.0.0-alpha3/workflow.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Open Workflow Specification DSL - Workflow Schema.", + "type": "object", + "required": [ + "document", + "do" + ], + "properties": { + "document": { + "type": "object", + "title": "Document", + "description": "Documents the workflow.", + "unevaluatedProperties": false, + "properties": { + "dsl": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowDSL", + "description": "The version of the DSL used by the workflow." + }, + "namespace": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowNamespace", + "description": "The workflow's namespace." + }, + "name": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowName", + "description": "The workflow's name." + }, + "version": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowVersion", + "description": "The workflow's semantic version." + }, + "title": { + "type": "string", + "title": "WorkflowTitle", + "description": "The workflow's title." + }, + "summary": { + "type": "string", + "title": "WorkflowSummary", + "description": "The workflow's Markdown summary." + }, + "tags": { + "type": "object", + "title": "WorkflowTags", + "description": "A key/value mapping of the workflow's tags, if any.", + "additionalProperties": true + }, + "metadata": { + "type": "object", + "title": "WorkflowMetadata", + "description": "Holds additional information about the workflow.", + "additionalProperties": true + } + }, + "required": [ + "dsl", + "namespace", + "name", + "version" + ] + }, + "input": { + "$ref": "#/$defs/input", + "title": "Input", + "description": "Configures the workflow's input." + }, + "use": { + "type": "object", + "title": "Use", + "description": "Defines the workflow's reusable components.", + "unevaluatedProperties": false, + "properties": { + "authentications": { + "type": "object", + "title": "UseAuthentications", + "description": "The workflow's reusable authentication policies.", + "additionalProperties": { + "$ref": "#/$defs/authenticationPolicy" + } + }, + "errors": { + "type": "object", + "title": "UseErrors", + "description": "The workflow's reusable errors.", + "additionalProperties": { + "$ref": "#/$defs/error" + } + }, + "extensions": { + "type": "array", + "title": "UseExtensions", + "description": "The workflow's extensions.", + "items": { + "type": "object", + "title": "ExtensionItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/extension" + } + } + }, + "functions": { + "type": "object", + "title": "UseFunctions", + "description": "The workflow's reusable functions.", + "additionalProperties": { + "$ref": "#/$defs/task" + } + }, + "retries": { + "type": "object", + "title": "UseRetries", + "description": "The workflow's reusable retry policies.", + "additionalProperties": { + "$ref": "#/$defs/retryPolicy" + } + }, + "secrets": { + "type": "array", + "title": "UseSecrets", + "description": "The workflow's reusable secrets.", + "items": { + "type": "string", + "description": "The workflow's secrets." + } + }, + "timeouts": { + "type": "object", + "title": "UseTimeouts", + "description": "The workflow's reusable timeouts.", + "additionalProperties": { + "$ref": "#/$defs/timeout" + } + } + } + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "Do", + "description": "Defines the task(s) the workflow must perform." + }, + "timeout": { + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TimeoutDefinition", + "description": "The workflow's timeout configuration, if any." + }, + { + "type": "string", + "title": "TimeoutReference", + "description": "The name of the workflow's timeout, if any." + } + ] + }, + "output": { + "$ref": "#/$defs/output", + "title": "Output", + "description": "Configures the workflow's output." + }, + "schedule": { + "type": "object", + "title": "Schedule", + "description": "Schedules the workflow.", + "unevaluatedProperties": false, + "properties": { + "every": { + "$ref": "#/$defs/duration", + "title": "ScheduleEvery", + "description": "Specifies the duration of the interval at which the workflow should be executed." + }, + "cron": { + "type": "string", + "title": "ScheduleCron", + "description": "Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight." + }, + "after": { + "$ref": "#/$defs/duration", + "title": "ScheduleAfter", + "description": "Specifies a delay duration that the workflow must wait before starting again after it completes." + }, + "on": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ScheduleOn", + "description": "Specifies the events that trigger the workflow execution." + } + } + } + }, + "$defs": { + "taskList": { + "title": "TaskList", + "description": "List of named tasks to perform.", + "type": "array", + "items": { + "type": "object", + "title": "TaskItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/task" + } + } + }, + "taskBase": { + "type": "object", + "title": "TaskBase", + "description": "An object inherited by all tasks.", + "properties": { + "if": { + "type": "string", + "title": "TaskBaseIf", + "description": "A runtime expression, if any, used to determine whether or not the task should be run." + }, + "input": { + "$ref": "#/$defs/input", + "title": "TaskBaseInput", + "description": "Configure the task's input." + }, + "output": { + "$ref": "#/$defs/output", + "title": "TaskBaseOutput", + "description": "Configure the task's output." + }, + "export": { + "$ref": "#/$defs/export", + "title": "TaskBaseExport", + "description": "Export task output to context." + }, + "timeout": { + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TaskTimeoutDefinition", + "description": "The task's timeout configuration, if any." + }, + { + "type": "string", + "title": "TaskTimeoutReference", + "description": "The name of the task's timeout, if any." + } + ] + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "TaskBaseThen", + "description": "The flow directive to be performed upon completion of the task." + }, + "metadata": { + "type": "object", + "title": "TaskMetadata", + "description": "Holds additional information about the task.", + "additionalProperties": true + } + } + }, + "task": { + "title": "Task", + "description": "A discrete unit of work that contributes to achieving the overall objectives defined by the workflow.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/callTask" + }, + { + "$ref": "#/$defs/doTask" + }, + { + "$ref": "#/$defs/forkTask" + }, + { + "$ref": "#/$defs/emitTask" + }, + { + "$ref": "#/$defs/forTask" + }, + { + "$ref": "#/$defs/listenTask" + }, + { + "$ref": "#/$defs/raiseTask" + }, + { + "$ref": "#/$defs/runTask" + }, + { + "$ref": "#/$defs/setTask" + }, + { + "$ref": "#/$defs/switchTask" + }, + { + "$ref": "#/$defs/tryTask" + }, + { + "$ref": "#/$defs/waitTask" + } + ] + }, + "callTask": { + "title": "CallTask", + "description": "Defines the call to perform.", + "oneOf": [ + { + "title": "CallAsyncAPI", + "description": "Defines the AsyncAPI call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "call", + "with" + ], + "unevaluatedProperties": false, + "properties": { + "call": { + "type": "string", + "const": "asyncapi" + }, + "with": { + "type": "object", + "title": "AsyncApiArguments", + "description": "The Async API call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "WithAsyncAPIDocument", + "description": "The document that defines the AsyncAPI operation to call." + }, + "operationRef": { + "type": "string", + "title": "WithAsyncAPIOperation", + "description": "A reference to the AsyncAPI operation to call." + }, + "server": { + "type": "string", + "title": "WithAsyncAPIServer", + "description": "A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel." + }, + "message": { + "type": "string", + "title": "WithAsyncAPIMessage", + "description": "The name of the message to use. If not set, defaults to the first message defined by the operation." + }, + "binding": { + "type": "string", + "title": "WithAsyncAPIBinding", + "description": "The name of the binding to use. If not set, defaults to the first binding defined by the operation." + }, + "payload": { + "type": "object", + "title": "WithAsyncAPIPayload", + "description": "The payload to call the AsyncAPI operation with, if any." + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithAsyncAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the AsyncAPI operation." + } + }, + "required": [ + "document", + "operationRef" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallGRPC", + "description": "Defines the GRPC call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "grpc" + }, + "with": { + "type": "object", + "title": "GRPCArguments", + "description": "The GRPC call arguments.", + "properties": { + "proto": { + "$ref": "#/$defs/externalResource", + "title": "WithGRPCProto", + "description": "The proto resource that describes the GRPC service to call." + }, + "service": { + "type": "object", + "title": "WithGRPCService", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "WithGRPCServiceName", + "description": "The name of the GRPC service to call." + }, + "host": { + "type": "string", + "title": "WithGRPCServiceHost", + "description": "The hostname of the GRPC service to call.", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$" + }, + "port": { + "type": "integer", + "title": "WithGRPCServicePost", + "description": "The port number of the GRPC service to call.", + "minimum": 0, + "maximum": 65535 + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithGRPCServiceAuthentication", + "description": "The endpoint's authentication policy, if any." + } + }, + "required": [ + "name", + "host" + ] + }, + "method": { + "type": "string", + "title": "WithGRPCMethod", + "description": "The name of the method to call on the defined GRPC service." + }, + "arguments": { + "type": "object", + "title": "WithGRPCArguments", + "description": "The arguments, if any, to call the method with.", + "additionalProperties": true + } + }, + "required": [ + "proto", + "service", + "method" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallHTTP", + "description": "Defines the HTTP call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "http" + }, + "with": { + "type": "object", + "title": "HTTPArguments", + "description": "The HTTP call arguments.", + "properties": { + "method": { + "type": "string", + "title": "WithHTTPMethod", + "description": "The HTTP method of the HTTP request to perform." + }, + "endpoint": { + "title": "WithHTTPEndpoint", + "description": "The HTTP endpoint to send the request to.", + "$ref": "#/$defs/endpoint" + }, + "headers": { + "type": "object", + "title": "WithHTTPHeaders", + "description": "A name/value mapping of the headers, if any, of the HTTP request to perform." + }, + "body": { + "title": "WithHTTPBody", + "description": "The body, if any, of the HTTP request to perform." + }, + "query": { + "type": "object", + "title": "WithHTTPQuery", + "description": "A name/value mapping of the query parameters, if any, of the HTTP request to perform.", + "additionalProperties": true + }, + "output": { + "type": "string", + "title": "WithHTTPOutput", + "description": "The http call output format. Defaults to 'content'.", + "enum": [ + "raw", + "content", + "response" + ] + } + }, + "required": [ + "method", + "endpoint" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallOpenAPI", + "description": "Defines the OpenAPI call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "openapi" + }, + "with": { + "type": "object", + "title": "OpenAPIArguments", + "description": "The OpenAPI call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "WithOpenAPIDocument", + "description": "The document that defines the OpenAPI operation to call." + }, + "operationId": { + "type": "string", + "title": "WithOpenAPIOperation", + "description": "The id of the OpenAPI operation to call." + }, + "parameters": { + "type": "object", + "title": "WithOpenAPIParameters", + "description": "A name/value mapping of the parameters of the OpenAPI operation to call.", + "additionalProperties": true + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithOpenAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the OpenAPI operation." + }, + "output": { + "type": "string", + "enum": [ + "raw", + "content", + "response" + ], + "title": "WithOpenAPIOutput", + "description": "The http call output format. Defaults to 'content'." + } + }, + "required": [ + "document", + "operationId" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallFunction", + "description": "Defines the function call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call" + ], + "properties": { + "call": { + "type": "string", + "not": { + "enum": [ + "asyncapi", + "grpc", + "http", + "openapi" + ] + }, + "description": "The name of the function to call." + }, + "with": { + "type": "object", + "title": "FunctionArguments", + "description": "A name/value mapping of the parameters, if any, to call the function with.", + "additionalProperties": true + } + } + } + ] + }, + "forkTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ForkTask", + "description": "Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output.", + "unevaluatedProperties": false, + "required": [ + "fork" + ], + "properties": { + "fork": { + "type": "object", + "title": "ForkTaskConfiguration", + "description": "The configuration of the branches to perform concurrently.", + "unevaluatedProperties": false, + "required": [ + "branches" + ], + "properties": { + "branches": { + "$ref": "#/$defs/taskList", + "title": "ForkBranches" + }, + "compete": { + "type": "boolean", + "title": "ForkCompete", + "description": "Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output.", + "default": false + } + } + } + } + }, + "doTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "DoTask", + "description": "Allows to execute a list of tasks in sequence.", + "unevaluatedProperties": false, + "required": [ + "do" + ], + "properties": { + "do": { + "$ref": "#/$defs/taskList", + "title": "DoTaskConfiguration", + "description": "The configuration of the tasks to perform sequentially." + } + } + }, + "emitTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "EmitTask", + "description": "Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services.", + "required": [ + "emit" + ], + "unevaluatedProperties": false, + "properties": { + "emit": { + "type": "object", + "title": "EmitTaskConfiguration", + "description": "The configuration of an event's emission.", + "unevaluatedProperties": false, + "properties": { + "event": { + "type": "object", + "title": "EmitEventDefinition", + "description": "The definition of the event to emit.", + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "title": "EmitEventWith", + "description": "Defines the properties of event to emit.", + "required": [ + "source", + "type" + ] + } + }, + "additionalProperties": true + } + }, + "required": [ + "event" + ] + } + } + }, + "forTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ForTask", + "description": "Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.", + "required": [ + "for", + "do" + ], + "unevaluatedProperties": false, + "properties": { + "for": { + "type": "object", + "title": "ForTaskConfiguration", + "description": "The definition of the loop that iterates over a range of values.", + "unevaluatedProperties": false, + "properties": { + "each": { + "type": "string", + "title": "ForEach", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "in": { + "type": "string", + "title": "ForIn", + "description": "A runtime expression used to get the collection to enumerate." + }, + "at": { + "type": "string", + "title": "ForAt", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + } + }, + "required": [ + "in" + ] + }, + "while": { + "type": "string", + "title": "While", + "description": "A runtime expression that represents the condition, if any, that must be met for the iteration to continue." + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "ForTaskDo" + } + } + }, + "listenTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ListenTask", + "description": "Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.", + "required": [ + "listen" + ], + "unevaluatedProperties": false, + "properties": { + "listen": { + "type": "object", + "title": "ListenTaskConfiguration", + "description": "The configuration of the listener to use.", + "unevaluatedProperties": false, + "properties": { + "to": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ListenTo", + "description": "Defines the event(s) to listen to." + } + }, + "required": [ + "to" + ] + } + } + }, + "raiseTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "RaiseTask", + "description": "Intentionally triggers and propagates errors.", + "required": [ + "raise" + ], + "unevaluatedProperties": false, + "properties": { + "raise": { + "type": "object", + "title": "RaiseTaskConfiguration", + "description": "The definition of the error to raise.", + "unevaluatedProperties": false, + "properties": { + "error": { + "oneOf": [ + { + "$ref": "#/$defs/error", + "title": "RaiseErrorDefinition", + "description": "Defines the error to raise." + }, + { + "type": "string", + "title": "RaiseErrorReference", + "description": "The name of the error to raise" + } + ] + } + }, + "required": [ + "error" + ] + } + } + }, + "runTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "RunTask", + "description": "Provides the capability to execute external containers, shell commands, scripts, or workflows.", + "required": [ + "run" + ], + "unevaluatedProperties": false, + "properties": { + "run": { + "type": "object", + "title": "RunTaskConfiguration", + "description": "The configuration of the process to execute.", + "unevaluatedProperties": false, + "properties": { + "await": { + "type": "boolean", + "default": true, + "title": "AwaitProcessCompletion", + "description": "Whether to await the process completion before continuing." + } + }, + "oneOf": [ + { + "title": "RunContainer", + "description": "Enables the execution of external processes encapsulated within a containerized environment.", + "properties": { + "container": { + "type": "object", + "title": "Container", + "description": "The configuration of the container to run.", + "unevaluatedProperties": false, + "properties": { + "image": { + "type": "string", + "title": "ContainerImage", + "description": "The name of the container image to run." + }, + "command": { + "type": "string", + "title": "ContainerCommand", + "description": "The command, if any, to execute on the container." + }, + "ports": { + "type": "object", + "title": "ContainerPorts", + "description": "The container's port mappings, if any." + }, + "volumes": { + "type": "object", + "title": "ContainerVolumes", + "description": "The container's volume mappings, if any." + }, + "environment": { + "type": "object", + "title": "ContainerEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + } + }, + "required": [ + "image" + ] + } + }, + "required": [ + "container" + ] + }, + { + "title": "RunScript", + "description": "Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages.", + "properties": { + "script": { + "type": "object", + "title": "Script", + "description": "The configuration of the script to run.", + "unevaluatedProperties": false, + "properties": { + "language": { + "type": "string", + "title": "ScriptLanguage", + "description": "The language of the script to run." + }, + "arguments": { + "type": "object", + "title": "ScriptArguments", + "description": "A key/value mapping of the arguments, if any, to use when running the configured script.", + "additionalProperties": true + }, + "environment": { + "type": "object", + "title": "ScriptEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured script process.", + "additionalProperties": true + } + }, + "oneOf": [ + { + "title": "InlineScript", + "type": "object", + "description": "The script's code.", + "properties": { + "code": { + "type": "string", + "title": "InlineScriptCode" + } + }, + "required": [ + "code" + ] + }, + { + "title": "ExternalScript", + "type": "object", + "description": "The script's resource.", + "properties": { + "source": { + "$ref": "#/$defs/externalResource", + "title": "ExternalScriptResource" + } + }, + "required": [ + "source" + ] + } + ], + "required": [ + "language" + ] + } + }, + "required": [ + "script" + ] + }, + { + "title": "RunShell", + "description": "Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks.", + "properties": { + "shell": { + "type": "object", + "title": "Shell", + "description": "The configuration of the shell command to run.", + "unevaluatedProperties": false, + "properties": { + "command": { + "type": "string", + "title": "ShellCommand", + "description": "The shell command to run." + }, + "arguments": { + "type": "object", + "title": "ShellArguments", + "description": "A list of the arguments of the shell command to run.", + "additionalProperties": true + }, + "environment": { + "type": "object", + "title": "ShellEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process.", + "additionalProperties": true + } + }, + "required": [ + "command" + ] + } + }, + "required": [ + "shell" + ] + }, + { + "title": "RunWorkflow", + "description": "Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units.", + "properties": { + "workflow": { + "type": "object", + "title": "SubflowConfiguration", + "description": "The configuration of the workflow to run.", + "unevaluatedProperties": false, + "properties": { + "namespace": { + "type": "string", + "title": "SubflowNamespace", + "description": "The namespace the workflow to run belongs to." + }, + "name": { + "type": "string", + "title": "SubflowName", + "description": "The name of the workflow to run." + }, + "version": { + "type": "string", + "default": "latest", + "title": "SubflowVersion", + "description": "The version of the workflow to run. Defaults to latest." + }, + "input": { + "type": "object", + "title": "SubflowInput", + "description": "The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified.", + "additionalProperties": true + } + }, + "required": [ + "namespace", + "name", + "version" + ] + } + }, + "required": [ + "workflow" + ] + } + ] + } + } + }, + "setTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "SetTask", + "description": "A task used to set data.", + "required": [ + "set" + ], + "unevaluatedProperties": false, + "properties": { + "set": { + "type": "object", + "title": "SetTaskConfiguration", + "description": "The data to set.", + "minProperties": 1, + "additionalProperties": true + } + } + }, + "switchTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "SwitchTask", + "description": "Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria.", + "required": [ + "switch" + ], + "unevaluatedProperties": false, + "properties": { + "switch": { + "type": "array", + "title": "SwitchTaskConfiguration", + "description": "The definition of the switch to use.", + "minItems": 1, + "items": { + "type": "object", + "title": "SwitchItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "type": "object", + "title": "SwitchCase", + "description": "The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met.", + "unevaluatedProperties": false, + "required": [ + "then" + ], + "properties": { + "when": { + "type": "string", + "title": "SwitchCaseCondition", + "description": "A runtime expression used to determine whether or not the case matches." + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "SwitchCaseOutcome", + "description": "The flow directive to execute when the case matches." + } + } + } + } + } + } + }, + "tryTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "TryTask", + "description": "Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones.", + "required": [ + "try", + "catch" + ], + "unevaluatedProperties": false, + "properties": { + "try": { + "$ref": "#/$defs/taskList", + "title": "TryTaskConfiguration", + "description": "The task(s) to perform." + }, + "catch": { + "type": "object", + "title": "TryTaskCatch", + "description": "The object used to define the errors to catch.", + "unevaluatedProperties": false, + "properties": { + "errors": { + "type": "object", + "title": "CatchErrors", + "description": "The configuration of a concept used to catch errors." + }, + "as": { + "type": "string", + "title": "CatchAs", + "description": "The name of the runtime expression variable to save the error as. Defaults to 'error'." + }, + "when": { + "type": "string", + "title": "CatchWhen", + "description": "A runtime expression used to determine whether or not to catch the filtered error." + }, + "exceptWhen": { + "type": "string", + "title": "CatchExceptWhen", + "description": "A runtime expression used to determine whether or not to catch the filtered error." + }, + "retry": { + "oneOf": [ + { + "$ref": "#/$defs/retryPolicy", + "title": "RetryPolicyDefinition", + "description": "The retry policy to use, if any, when catching errors." + }, + { + "type": "string", + "title": "RetryPolicyReference", + "description": "The name of the retry policy to use, if any, when catching errors." + } + ] + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "TryTaskCatchDo", + "description": "The definition of the task(s) to run when catching an error." + } + } + } + } + }, + "waitTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "WaitTask", + "description": "Allows workflows to pause or delay their execution for a specified period of time.", + "required": [ + "wait" + ], + "unevaluatedProperties": false, + "properties": { + "wait": { + "$ref": "#/$defs/duration", + "title": "WaitTaskConfiguration", + "description": "The amount of time to wait." + } + } + }, + "flowDirective": { + "title": "FlowDirective", + "description": "Represents different transition options for a workflow.", + "anyOf": [ + { + "type": "string", + "enum": [ + "continue", + "exit", + "end" + ], + "default": "continue" + }, + { + "type": "string" + } + ] + }, + "referenceableAuthenticationPolicy": { + "type": "object", + "title": "ReferenceableAuthenticationPolicy", + "description": "Represents a referenceable authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AuthenticationPolicyReference", + "description": "The reference of the authentication policy to use.", + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "ReferenceableAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + { + "$ref": "#/$defs/authenticationPolicy" + } + ] + }, + "secretBasedAuthenticationPolicy": { + "type": "object", + "title": "SecretBasedAuthenticationPolicy", + "description": "Represents an authentication policy based on secrets.", + "unevaluatedProperties": false, + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "SecretBasedAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + "authenticationPolicy": { + "type": "object", + "title": "AuthenticationPolicy", + "description": "Defines an authentication policy.", + "oneOf": [ + { + "title": "BasicAuthenticationPolicy", + "description": "Use basic authentication.", + "properties": { + "basic": { + "type": "object", + "title": "BasicAuthenticationPolicyConfiguration", + "description": "The configuration of the basic authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BasicAuthenticationProperties", + "description": "Inline configuration of the basic authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BasicAuthenticationPolicySecret", + "description": "Secret based configuration of the basic authentication policy." + } + ] + } + }, + "required": [ + "basic" + ] + }, + { + "title": "BearerAuthenticationPolicy", + "description": "Use bearer authentication.", + "properties": { + "bearer": { + "type": "object", + "title": "BearerAuthenticationPolicyConfiguration", + "description": "The configuration of the bearer authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BearerAuthenticationProperties", + "description": "Inline configuration of the bearer authentication policy.", + "properties": { + "token": { + "type": "string", + "description": "The bearer token to use." + } + }, + "required": [ + "token" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BearerAuthenticationPolicySecret", + "description": "Secret based configuration of the bearer authentication policy." + } + ] + } + }, + "required": [ + "bearer" + ] + }, + { + "title": "DigestAuthenticationPolicy", + "description": "Use digest authentication.", + "properties": { + "digest": { + "type": "object", + "title": "DigestAuthenticationPolicyConfiguration", + "description": "The configuration of the digest authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "DigestAuthenticationProperties", + "description": "Inline configuration of the digest authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "DigestAuthenticationPolicySecret", + "description": "Secret based configuration of the digest authentication policy." + } + ] + } + }, + "required": [ + "digest" + ] + }, + { + "title": "OAuth2AuthenticationPolicy", + "description": "Use OAuth2 authentication.", + "properties": { + "oauth2": { + "type": "object", + "title": "OAuth2AuthenticationPolicyConfiguration", + "description": "The configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "type": "object", + "title": "OAuth2ConnectAuthenticationProperties", + "description": "The inline configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties" + }, + { + "type": "object", + "properties": { + "endpoints": { + "type": "object", + "title": "OAuth2AuthenticationPropertiesEndpoints", + "description": "The endpoint configurations for OAuth2.", + "properties": { + "token": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/token", + "title": "OAuth2TokenEndpoint", + "description": "The relative path to the token endpoint. Defaults to `/oauth2/token`." + }, + "revocation": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/revoke", + "title": "OAuth2RevocationEndpoint", + "description": "The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`." + }, + "introspection": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/introspect", + "title": "OAuth2IntrospectionEndpoint", + "description": "The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`." + } + } + } + } + } + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OAuth2AuthenticationPolicySecret", + "description": "Secret based configuration of the OAuth2 authentication policy." + } + ] + } + }, + "required": [ + "oauth2" + ] + }, + { + "title": "OpenIdConnectAuthenticationPolicy", + "description": "Use OpenIdConnect authentication.", + "properties": { + "oidc": { + "type": "object", + "title": "OpenIdConnectAuthenticationPolicyConfiguration", + "description": "The configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties", + "title": "OpenIdConnectAuthenticationProperties", + "description": "The inline configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OpenIdConnectAuthenticationPolicySecret", + "description": "Secret based configuration of the OpenIdConnect authentication policy." + } + ] + } + }, + "required": [ + "oidc" + ] + } + ] + }, + "oauth2AuthenticationProperties": { + "type": "object", + "title": "OAuth2AutenthicationData", + "description": "Inline configuration of the OAuth2 authentication policy.", + "properties": { + "authority": { + "type": "string", + "format": "uri-template", + "title": "OAuth2AutenthicationDataAuthority", + "description": "The URI that references the OAuth2 authority to use." + }, + "grant": { + "type": "string", + "enum": [ + "authorization_code", + "client_credentials", + "password", + "refresh_token", + "urn:ietf:params:oauth:grant-type:token-exchange" + ], + "title": "OAuth2AutenthicationDataGrant", + "description": "The grant type to use." + }, + "client": { + "type": "object", + "title": "OAuth2AutenthicationDataClient", + "description": "The definition of an OAuth2 client.", + "unevaluatedProperties": false, + "properties": { + "id": { + "type": "string", + "title": "ClientId", + "description": "The client id to use." + }, + "secret": { + "type": "string", + "title": "ClientSecret", + "description": "The client secret to use, if any." + }, + "assertion": { + "type": "string", + "title": "ClientAssertion", + "description": "A JWT containing a signed assertion with your application credentials." + }, + "authentication": { + "type": "string", + "enum": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "default": "client_secret_post", + "title": "ClientAuthentication", + "description": "The authentication method to use to authenticate the client." + } + } + }, + "request": { + "type": "object", + "title": "OAuth2TokenRequest", + "description": "The configuration of an OAuth2 token request", + "properties": { + "encoding": { + "type": "string", + "enum": [ + "application/x-www-form-urlencoded", + "application/json" + ], + "default": "application/x-www-form-urlencoded", + "title": "Oauth2TokenRequestEncoding" + } + } + }, + "issuers": { + "type": "array", + "title": "OAuth2Issuers", + "description": "A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens.", + "items": { + "type": "string" + } + }, + "scopes": { + "type": "array", + "title": "OAuth2AutenthicationDataScopes", + "description": "The scopes, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "title": "OAuth2AutenthicationDataAudiences", + "description": "The audiences, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "username": { + "type": "string", + "title": "OAuth2AutenthicationDataUsername", + "description": "The username to use. Used only if the grant type is Password." + }, + "password": { + "type": "string", + "title": "OAuth2AutenthicationDataPassword", + "description": "The password to use. Used only if the grant type is Password." + }, + "subject": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AutenthicationDataSubject", + "description": "The security token that represents the identity of the party on behalf of whom the request is being made." + }, + "actor": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AutenthicationDataActor", + "description": "The security token that represents the identity of the acting party." + } + } + }, + "oauth2Token": { + "type": "object", + "title": "OAuth2TokenDefinition", + "description": "Represents an OAuth2 token.", + "unevaluatedProperties": false, + "properties": { + "token": { + "type": "string", + "title": "OAuth2Token", + "description": "The security token to use." + }, + "type": { + "type": "string", + "title": "OAuth2TokenType", + "description": "The type of the security token to use." + } + }, + "required": [ + "token", + "type" + ] + }, + "duration": { + "oneOf": [ + { + "type": "object", + "minProperties": 1, + "unevaluatedProperties": false, + "properties": { + "days": { + "type": "integer", + "title": "DurationDays", + "description": "Number of days, if any." + }, + "hours": { + "type": "integer", + "title": "DurationHours", + "description": "Number of days, if any." + }, + "minutes": { + "type": "integer", + "title": "DurationMinutes", + "description": "Number of minutes, if any." + }, + "seconds": { + "type": "integer", + "title": "DurationSeconds", + "description": "Number of seconds, if any." + }, + "milliseconds": { + "type": "integer", + "title": "DurationMilliseconds", + "description": "Number of milliseconds, if any." + } + }, + "title": "DurationInline", + "description": "The inline definition of a duration." + }, + { + "type": "string", + "pattern": "^P(?!$)(\\d+(?:\\.\\d+)?Y)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?W)?(\\d+(?:\\.\\d+)?D)?(T(?=\\d)(\\d+(?:\\.\\d+)?H)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?S)?)?$", + "title": "DurationExpression", + "description": "The ISO 8601 expression of a duration." + } + ] + }, + "error": { + "type": "object", + "title": "Error", + "description": "Represents an error.", + "unevaluatedProperties": false, + "properties": { + "type": { + "title": "ErrorType", + "description": "A URI reference that identifies the error type.", + "oneOf": [ + { + "title": "LiteralErrorType", + "description": "The literal error type.", + "type": "string", + "format": "uri-template" + }, + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorType", + "description": "An expression based error type." + } + ] + }, + "status": { + "type": "integer", + "title": "ErrorStatus", + "description": "The status code generated by the origin for this occurrence of the error." + }, + "instance": { + "title": "ErrorInstance", + "description": "A JSON Pointer used to reference the component the error originates from.", + "oneOf": [ + { + "title": "LiteralErrorInstance", + "description": "The literal error instance.", + "type": "string", + "format": "json-pointer" + }, + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorInstance", + "description": "An expression based error instance." + } + ] + }, + "title": { + "type": "string", + "title": "ErrorTitle", + "description": "A short, human-readable summary of the error." + }, + "detail": { + "type": "string", + "title": "ErrorDetails", + "description": "A human-readable explanation specific to this occurrence of the error." + } + }, + "required": [ + "type", + "status" + ] + }, + "endpoint": { + "title": "Endpoint", + "description": "Represents an endpoint.", + "oneOf": [ + { + "$ref": "#/$defs/runtimeExpression" + }, + { + "title": "LiteralEndpoint", + "type": "string", + "format": "uri-template" + }, + { + "title": "EndpointConfiguration", + "type": "object", + "unevaluatedProperties": false, + "properties": { + "uri": { + "title": "EndpointUri", + "description": "The endpoint's URI.", + "oneOf": [ + { + "title": "LiteralEndpointURI", + "description": "The literal endpoint's URI.", + "type": "string", + "format": "uri-template" + }, + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionEndpointURI", + "description": "An expression based endpoint's URI." + } + ] + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "EndpointAuthentication", + "description": "The authentication policy to use." + } + }, + "required": [ + "uri" + ] + } + ] + }, + "eventProperties": { + "type": "object", + "title": "EventProperties", + "description": "Describes the properties of an event.", + "properties": { + "id": { + "type": "string", + "title": "EventId", + "description": "The event's unique identifier." + }, + "source": { + "title": "EventSource", + "description": "Identifies the context in which an event happened.", + "oneOf": [ + { + "title": "LiteralSource", + "type": "string", + "format": "uri-template" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "type": { + "type": "string", + "title": "EventType", + "description": "This attribute contains a value describing the type of event related to the originating occurrence." + }, + "time": { + "title": "EventTime", + "description": "When the event occured.", + "oneOf": [ + { + "title": "LiteralTime", + "type": "string", + "format": "date-time" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "subject": { + "type": "string", + "title": "EventSubject", + "description": "The subject of the event." + }, + "datacontenttype": { + "type": "string", + "title": "EventDataContentType", + "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format." + }, + "dataschema": { + "title": "EventDataschema", + "description": "The schema describing the event format.", + "oneOf": [ + { + "title": "LiteralDataSchema", + "description": "The literal event data schema.", + "type": "string", + "format": "uri-template" + }, + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionDataSchema", + "description": "An expression based event data schema." + } + ] + } + }, + "additionalProperties": true + }, + "eventConsumptionStrategy": { + "type": "object", + "title": "EventConsumptionStrategy", + "description": "Describe the event consumption strategy to adopt.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AllEventConsumptionStrategy", + "properties": { + "all": { + "type": "array", + "title": "AllEventConsumptionStrategyConfiguration", + "description": "A list containing all the events that must be consumed.", + "items": { + "$ref": "#/$defs/eventFilter" + } + } + }, + "required": [ + "all" + ] + }, + { + "title": "AnyEventConsumptionStrategy", + "properties": { + "any": { + "type": "array", + "title": "AnyEventConsumptionStrategyConfiguration", + "description": "A list containing any of the events to consume.", + "items": { + "$ref": "#/$defs/eventFilter" + } + } + }, + "required": [ + "any" + ] + }, + { + "title": "OneEventConsumptionStrategy", + "properties": { + "one": { + "$ref": "#/$defs/eventFilter", + "title": "OneEventConsumptionStrategyConfiguration", + "description": "The single event to consume." + } + }, + "required": [ + "one" + ] + } + ] + }, + "eventFilter": { + "type": "object", + "title": "EventFilter", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.", + "unevaluatedProperties": false, + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "minProperties": 1, + "title": "WithEvent", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes." + }, + "correlate": { + "type": "object", + "title": "EventFilterCorrelate", + "description": "A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics.", + "additionalProperties": { + "type": "object", + "properties": { + "from": { + "type": "string", + "title": "CorrelateFrom", + "description": "A runtime expression used to extract the correlation value from the filtered event." + }, + "expect": { + "type": "string", + "title": "CorrelateExpect", + "description": "A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation." + } + }, + "required": [ + "from" + ] + } + } + }, + "required": [ + "with" + ] + }, + "extension": { + "type": "object", + "title": "Extension", + "description": "The definition of an extension.", + "unevaluatedProperties": false, + "properties": { + "extend": { + "type": "string", + "enum": [ + "call", + "composite", + "emit", + "for", + "listen", + "raise", + "run", + "set", + "switch", + "try", + "wait", + "all" + ], + "title": "ExtensionTarget", + "description": "The type of task to extend." + }, + "when": { + "type": "string", + "title": "ExtensionCondition", + "description": "A runtime expression, if any, used to determine whether or not the extension should apply in the specified context." + }, + "before": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoBefore", + "description": "The task(s) to execute before the extended task, if any." + }, + "after": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoAfter", + "description": "The task(s) to execute after the extended task, if any." + } + }, + "required": [ + "extend" + ] + }, + "externalResource": { + "type": "object", + "title": "ExternalResource", + "description": "Represents an external resource.", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "ExternalResourceName", + "description": "The name of the external resource, if any." + }, + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "ExternalResourceEndpoint", + "description": "The endpoint of the external resource." + } + }, + "required": [ + "endpoint" + ] + }, + "input": { + "type": "object", + "title": "Input", + "description": "Configures the input of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "InputSchema", + "description": "The schema used to describe and validate the input of the workflow or task." + }, + "from": { + "title": "InputFrom", + "description": "A runtime expression, if any, used to mutate and/or filter the input of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "output": { + "type": "object", + "title": "Output", + "description": "Configures the output of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "OutputSchema", + "description": "The schema used to describe and validate the output of the workflow or task." + }, + "as": { + "title": "OutputAs", + "description": "A runtime expression, if any, used to mutate and/or filter the output of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "export": { + "type": "object", + "title": "Export", + "description": "Set the content of the context. .", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "ExportSchema", + "description": "The schema used to describe and validate the workflow context." + }, + "as": { + "title": "ExportAs", + "description": "A runtime expression, if any, used to export the output data to the context.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "retryPolicy": { + "type": "object", + "title": "RetryPolicy", + "description": "Defines a retry policy.", + "unevaluatedProperties": false, + "properties": { + "when": { + "type": "string", + "title": "RetryWhen", + "description": "A runtime expression, if any, used to determine whether or not to retry running the task, in a given context." + }, + "exceptWhen": { + "type": "string", + "title": "RetryExcepWhen", + "description": "A runtime expression used to determine whether or not to retry running the task, in a given context." + }, + "delay": { + "$ref": "#/$defs/duration", + "title": "RetryDelay", + "description": "The duration to wait between retry attempts." + }, + "backoff": { + "type": "object", + "title": "RetryBackoff", + "description": "The retry duration backoff.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "ConstantBackoff", + "properties": { + "constant": { + "type": "object", + "description": "The definition of the constant backoff to use, if any." + } + }, + "required": [ + "constant" + ] + }, + { + "title": "ExponentialBackOff", + "properties": { + "exponential": { + "type": "object", + "description": "The definition of the exponential backoff to use, if any." + } + }, + "required": [ + "exponential" + ] + }, + { + "title": "LinearBackoff", + "properties": { + "linear": { + "type": "object", + "description": "The definition of the linear backoff to use, if any." + } + }, + "required": [ + "linear" + ] + } + ] + }, + "limit": { + "type": "object", + "title": "RetryLimit", + "unevaluatedProperties": false, + "properties": { + "attempt": { + "type": "object", + "title": "RetryLimitAttempt", + "unevaluatedProperties": false, + "properties": { + "count": { + "type": "integer", + "title": "RetryLimitAttemptCount", + "description": "The maximum amount of retry attempts, if any." + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitAttemptDuration", + "description": "The maximum duration for each retry attempt." + } + } + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitDuration", + "description": "The duration limit, if any, for all retry attempts." + } + }, + "description": "The retry limit, if any." + }, + "jitter": { + "type": "object", + "title": "RetryPolicyJitter", + "description": "The parameters, if any, that control the randomness or variability of the delay between retry attempts.", + "unevaluatedProperties": false, + "properties": { + "from": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterFrom", + "description": "The minimum duration of the jitter range." + }, + "to": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterTo", + "description": "The maximum duration of the jitter range." + } + }, + "required": [ + "from", + "to" + ] + } + } + }, + "schema": { + "type": "object", + "title": "Schema", + "description": "Represents the definition of a schema.", + "unevaluatedProperties": false, + "properties": { + "format": { + "type": "string", + "default": "json", + "title": "SchemaFormat", + "description": "The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`." + } + }, + "oneOf": [ + { + "title": "SchemaInline", + "properties": { + "document": { + "description": "The schema's inline definition." + } + }, + "required": [ + "document" + ] + }, + { + "title": "SchemaExternal", + "properties": { + "resource": { + "$ref": "#/$defs/externalResource", + "title": "SchemaExternalResource", + "description": "The schema's external resource." + } + }, + "required": [ + "resource" + ] + } + ] + }, + "timeout": { + "type": "object", + "title": "Timeout", + "description": "The definition of a timeout.", + "unevaluatedProperties": false, + "properties": { + "after": { + "$ref": "#/$defs/duration", + "title": "TimeoutAfter", + "description": "The duration after which to timeout." + } + }, + "required": [ + "after" + ] + }, + "runtimeExpression": { + "type": "string", + "title": "RuntimeExpression", + "description": "A runtime expression.", + "pattern": "^\\s*\\$\\{.+\\}\\s*$" + } + } +} \ No newline at end of file diff --git a/public/schemas/1.0.0-alpha3/workflow.yaml b/public/schemas/1.0.0-alpha3/workflow.yaml new file mode 100644 index 0000000..7874a49 --- /dev/null +++ b/public/schemas/1.0.0-alpha3/workflow.yaml @@ -0,0 +1,1489 @@ +$id: https://open-workflow-specification.org/schemas/1.0.0-alpha3/workflow.yaml +$schema: https://json-schema.org/draft/2020-12/schema +description: Open Workflow Specification DSL - Workflow Schema. +type: object +required: [ document, do ] +properties: + document: + type: object + title: Document + description: Documents the workflow. + unevaluatedProperties: false + properties: + dsl: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowDSL + description: The version of the DSL used by the workflow. + namespace: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowNamespace + description: The workflow's namespace. + name: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowName + description: The workflow's name. + version: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowVersion + description: The workflow's semantic version. + title: + type: string + title: WorkflowTitle + description: The workflow's title. + summary: + type: string + title: WorkflowSummary + description: The workflow's Markdown summary. + tags: + type: object + title: WorkflowTags + description: A key/value mapping of the workflow's tags, if any. + additionalProperties: true + metadata: + type: object + title: WorkflowMetadata + description: Holds additional information about the workflow. + additionalProperties: true + required: [ dsl, namespace, name, version ] + input: + $ref: '#/$defs/input' + title: Input + description: Configures the workflow's input. + use: + type: object + title: Use + description: Defines the workflow's reusable components. + unevaluatedProperties: false + properties: + authentications: + type: object + title: UseAuthentications + description: The workflow's reusable authentication policies. + additionalProperties: + $ref: '#/$defs/authenticationPolicy' + errors: + type: object + title: UseErrors + description: The workflow's reusable errors. + additionalProperties: + $ref: '#/$defs/error' + extensions: + type: array + title: UseExtensions + description: The workflow's extensions. + items: + type: object + title: ExtensionItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/extension' + functions: + type: object + title: UseFunctions + description: The workflow's reusable functions. + additionalProperties: + $ref: '#/$defs/task' + retries: + type: object + title: UseRetries + description: The workflow's reusable retry policies. + additionalProperties: + $ref: '#/$defs/retryPolicy' + secrets: + type: array + title: UseSecrets + description: The workflow's reusable secrets. + items: + type: string + description: The workflow's secrets. + timeouts: + type: object + title: UseTimeouts + description: The workflow's reusable timeouts. + additionalProperties: + $ref: '#/$defs/timeout' + do: + $ref: '#/$defs/taskList' + title: Do + description: Defines the task(s) the workflow must perform. + timeout: + oneOf: + - $ref: '#/$defs/timeout' + title: TimeoutDefinition + description: The workflow's timeout configuration, if any. + - type: string + title: TimeoutReference + description: The name of the workflow's timeout, if any. + output: + $ref: '#/$defs/output' + title: Output + description: Configures the workflow's output. + schedule: + type: object + title: Schedule + description: Schedules the workflow. + unevaluatedProperties: false + properties: + every: + $ref: '#/$defs/duration' + title: ScheduleEvery + description: Specifies the duration of the interval at which the workflow should be executed. + cron: + type: string + title: ScheduleCron + description: Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight. + after: + $ref: '#/$defs/duration' + title: ScheduleAfter + description: Specifies a delay duration that the workflow must wait before starting again after it completes. + on: + $ref: '#/$defs/eventConsumptionStrategy' + title: ScheduleOn + description: Specifies the events that trigger the workflow execution. +$defs: + taskList: + title: TaskList + description: List of named tasks to perform. + type: array + items: + type: object + title: TaskItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/task' + taskBase: + type: object + title: TaskBase + description: An object inherited by all tasks. + properties: + if: + type: string + title: TaskBaseIf + description: A runtime expression, if any, used to determine whether or not the task should be run. + input: + $ref: '#/$defs/input' + title: TaskBaseInput + description: Configure the task's input. + output: + $ref: '#/$defs/output' + title: TaskBaseOutput + description: Configure the task's output. + export: + $ref: '#/$defs/export' + title: TaskBaseExport + description: Export task output to context. + timeout: + oneOf: + - $ref: '#/$defs/timeout' + title: TaskTimeoutDefinition + description: The task's timeout configuration, if any. + - type: string + title: TaskTimeoutReference + description: The name of the task's timeout, if any. + then: + $ref: '#/$defs/flowDirective' + title: TaskBaseThen + description: The flow directive to be performed upon completion of the task. + metadata: + type: object + title: TaskMetadata + description: Holds additional information about the task. + additionalProperties: true + task: + title: Task + description: A discrete unit of work that contributes to achieving the overall objectives defined by the workflow. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/callTask' + - $ref: '#/$defs/doTask' + - $ref: '#/$defs/forkTask' + - $ref: '#/$defs/emitTask' + - $ref: '#/$defs/forTask' + - $ref: '#/$defs/listenTask' + - $ref: '#/$defs/raiseTask' + - $ref: '#/$defs/runTask' + - $ref: '#/$defs/setTask' + - $ref: '#/$defs/switchTask' + - $ref: '#/$defs/tryTask' + - $ref: '#/$defs/waitTask' + callTask: + title: CallTask + description: Defines the call to perform. + oneOf: + - title: CallAsyncAPI + description: Defines the AsyncAPI call to perform. + $ref: '#/$defs/taskBase' + type: object + required: [ call, with ] + unevaluatedProperties: false + properties: + call: + type: string + const: asyncapi + with: + type: object + title: AsyncApiArguments + description: The Async API call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: WithAsyncAPIDocument + description: The document that defines the AsyncAPI operation to call. + operationRef: + type: string + title: WithAsyncAPIOperation + description: A reference to the AsyncAPI operation to call. + server: + type: string + title: WithAsyncAPIServer + description: A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel. + message: + type: string + title: WithAsyncAPIMessage + description: The name of the message to use. If not set, defaults to the first message defined by the operation. + binding: + type: string + title: WithAsyncAPIBinding + description: The name of the binding to use. If not set, defaults to the first binding defined by the operation. + payload: + type: object + title: WithAsyncAPIPayload + description: The payload to call the AsyncAPI operation with, if any. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithAsyncAPIAuthentication + description: The authentication policy, if any, to use when calling the AsyncAPI operation. + required: [ document, operationRef ] + unevaluatedProperties: false + - title: CallGRPC + description: Defines the GRPC call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: grpc + with: + type: object + title: GRPCArguments + description: The GRPC call arguments. + properties: + proto: + $ref: '#/$defs/externalResource' + title: WithGRPCProto + description: The proto resource that describes the GRPC service to call. + service: + type: object + title: WithGRPCService + unevaluatedProperties: false + properties: + name: + type: string + title: WithGRPCServiceName + description: The name of the GRPC service to call. + host: + type: string + title: WithGRPCServiceHost + description: The hostname of the GRPC service to call. + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + port: + type: integer + title: WithGRPCServicePost + description: The port number of the GRPC service to call. + minimum: 0 + maximum: 65535 + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithGRPCServiceAuthentication + description: The endpoint's authentication policy, if any. + required: [ name, host ] + method: + type: string + title: WithGRPCMethod + description: The name of the method to call on the defined GRPC service. + arguments: + type: object + title: WithGRPCArguments + description: The arguments, if any, to call the method with. + additionalProperties: true + required: [ proto, service, method ] + unevaluatedProperties: false + - title: CallHTTP + description: Defines the HTTP call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: http + with: + type: object + title: HTTPArguments + description: The HTTP call arguments. + properties: + method: + type: string + title: WithHTTPMethod + description: The HTTP method of the HTTP request to perform. + endpoint: + title: WithHTTPEndpoint + description: The HTTP endpoint to send the request to. + $ref: '#/$defs/endpoint' + headers: + type: object + title: WithHTTPHeaders + description: A name/value mapping of the headers, if any, of the HTTP request to perform. + body: + title: WithHTTPBody + description: The body, if any, of the HTTP request to perform. + query: + type: object + title: WithHTTPQuery + description: A name/value mapping of the query parameters, if any, of the HTTP request to perform. + additionalProperties: true + output: + type: string + title: WithHTTPOutput + description: The http call output format. Defaults to 'content'. + enum: [ raw, content, response ] + required: [ method, endpoint ] + unevaluatedProperties: false + - title: CallOpenAPI + description: Defines the OpenAPI call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: openapi + with: + type: object + title: OpenAPIArguments + description: The OpenAPI call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: WithOpenAPIDocument + description: The document that defines the OpenAPI operation to call. + operationId: + type: string + title: WithOpenAPIOperation + description: The id of the OpenAPI operation to call. + parameters: + type: object + title: WithOpenAPIParameters + description: A name/value mapping of the parameters of the OpenAPI operation to call. + additionalProperties: true + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithOpenAPIAuthentication + description: The authentication policy, if any, to use when calling the OpenAPI operation. + output: + type: string + enum: [ raw, content, response ] + title: WithOpenAPIOutput + description: The http call output format. Defaults to 'content'. + required: [ document, operationId ] + unevaluatedProperties: false + - title: CallFunction + description: Defines the function call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call ] + properties: + call: + type: string + not: + enum: ["asyncapi", "grpc", "http", "openapi"] + description: The name of the function to call. + with: + type: object + title: FunctionArguments + description: A name/value mapping of the parameters, if any, to call the function with. + additionalProperties: true + forkTask: + type: object + $ref: '#/$defs/taskBase' + title: ForkTask + description: Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output. + unevaluatedProperties: false + required: [ fork ] + properties: + fork: + type: object + title: ForkTaskConfiguration + description: The configuration of the branches to perform concurrently. + unevaluatedProperties: false + required: [ branches ] + properties: + branches: + $ref: '#/$defs/taskList' + title: ForkBranches + compete: + type: boolean + title: ForkCompete + description: Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output. + default: false + doTask: + type: object + $ref: '#/$defs/taskBase' + title: DoTask + description: Allows to execute a list of tasks in sequence. + unevaluatedProperties: false + required: [ do ] + properties: + do: + $ref: '#/$defs/taskList' + title: DoTaskConfiguration + description: The configuration of the tasks to perform sequentially. + emitTask: + type: object + $ref: '#/$defs/taskBase' + title: EmitTask + description: Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services. + required: [ emit ] + unevaluatedProperties: false + properties: + emit: + type: object + title: EmitTaskConfiguration + description: The configuration of an event's emission. + unevaluatedProperties: false + properties: + event: + type: object + title: EmitEventDefinition + description: The definition of the event to emit. + properties: + with: + $ref: '#/$defs/eventProperties' + title: EmitEventWith + description: Defines the properties of event to emit. + required: [ source, type ] + additionalProperties: true + required: [ event ] + forTask: + type: object + $ref: '#/$defs/taskBase' + title: ForTask + description: Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets. + required: [ for, do ] + unevaluatedProperties: false + properties: + for: + type: object + title: ForTaskConfiguration + description: The definition of the loop that iterates over a range of values. + unevaluatedProperties: false + properties: + each: + type: string + title: ForEach + description: The name of the variable used to store the current item being enumerated. + default: item + in: + type: string + title: ForIn + description: A runtime expression used to get the collection to enumerate. + at: + type: string + title: ForAt + description: The name of the variable used to store the index of the current item being enumerated. + default: index + required: [ in ] + while: + type: string + title: While + description: A runtime expression that represents the condition, if any, that must be met for the iteration to continue. + do: + $ref: '#/$defs/taskList' + title: ForTaskDo + listenTask: + type: object + $ref: '#/$defs/taskBase' + title: ListenTask + description: Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems. + required: [ listen ] + unevaluatedProperties: false + properties: + listen: + type: object + title: ListenTaskConfiguration + description: The configuration of the listener to use. + unevaluatedProperties: false + properties: + to: + $ref: '#/$defs/eventConsumptionStrategy' + title: ListenTo + description: Defines the event(s) to listen to. + required: [ to ] + raiseTask: + type: object + $ref: '#/$defs/taskBase' + title: RaiseTask + description: Intentionally triggers and propagates errors. + required: [ raise ] + unevaluatedProperties: false + properties: + raise: + type: object + title: RaiseTaskConfiguration + description: The definition of the error to raise. + unevaluatedProperties: false + properties: + error: + oneOf: + - $ref: '#/$defs/error' + title: RaiseErrorDefinition + description: Defines the error to raise. + - type: string + title: RaiseErrorReference + description: The name of the error to raise + required: [ error ] + runTask: + type: object + $ref: '#/$defs/taskBase' + title: RunTask + description: Provides the capability to execute external containers, shell commands, scripts, or workflows. + required: [ run ] + unevaluatedProperties: false + properties: + run: + type: object + title: RunTaskConfiguration + description: The configuration of the process to execute. + unevaluatedProperties: false + properties: + await: + type: boolean + default: true + title: AwaitProcessCompletion + description: Whether to await the process completion before continuing. + oneOf: + - title: RunContainer + description: Enables the execution of external processes encapsulated within a containerized environment. + properties: + container: + type: object + title: Container + description: The configuration of the container to run. + unevaluatedProperties: false + properties: + image: + type: string + title: ContainerImage + description: The name of the container image to run. + command: + type: string + title: ContainerCommand + description: The command, if any, to execute on the container. + ports: + type: object + title: ContainerPorts + description: The container's port mappings, if any. + volumes: + type: object + title: ContainerVolumes + description: The container's volume mappings, if any. + environment: + type: object + title: ContainerEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + required: [ image ] + required: [ container ] + - title: RunScript + description: Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages. + properties: + script: + type: object + title: Script + description: The configuration of the script to run. + unevaluatedProperties: false + properties: + language: + type: string + title: ScriptLanguage + description: The language of the script to run. + arguments: + type: object + title: ScriptArguments + description: A key/value mapping of the arguments, if any, to use when running the configured script. + additionalProperties: true + environment: + type: object + title: ScriptEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured script process. + additionalProperties: true + oneOf: + - title: InlineScript + type: object + description: The script's code. + properties: + code: + type: string + title: InlineScriptCode + required: [ code ] + - title: ExternalScript + type: object + description: The script's resource. + properties: + source: + $ref: '#/$defs/externalResource' + title: ExternalScriptResource + required: [ source ] + required: [ language ] + required: [ script ] + - title: RunShell + description: Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks. + properties: + shell: + type: object + title: Shell + description: The configuration of the shell command to run. + unevaluatedProperties: false + properties: + command: + type: string + title: ShellCommand + description: The shell command to run. + arguments: + type: object + title: ShellArguments + description: A list of the arguments of the shell command to run. + additionalProperties: true + environment: + type: object + title: ShellEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + additionalProperties: true + required: [ command ] + required: [ shell ] + - title: RunWorkflow + description: Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units. + properties: + workflow: + type: object + title: SubflowConfiguration + description: The configuration of the workflow to run. + unevaluatedProperties: false + properties: + namespace: + type: string + title: SubflowNamespace + description: The namespace the workflow to run belongs to. + name: + type: string + title: SubflowName + description: The name of the workflow to run. + version: + type: string + default: latest + title: SubflowVersion + description: The version of the workflow to run. Defaults to latest. + input: + type: object + title: SubflowInput + description: The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified. + additionalProperties: true + required: [ namespace, name, version ] + required: [ workflow ] + setTask: + type: object + $ref: '#/$defs/taskBase' + title: SetTask + description: A task used to set data. + required: [ set ] + unevaluatedProperties: false + properties: + set: + type: object + title: SetTaskConfiguration + description: The data to set. + minProperties: 1 + additionalProperties: true + switchTask: + type: object + $ref: '#/$defs/taskBase' + title: SwitchTask + description: Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria. + required: [ switch ] + unevaluatedProperties: false + properties: + switch: + type: array + title: SwitchTaskConfiguration + description: The definition of the switch to use. + minItems: 1 + items: + type: object + title: SwitchItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + type: object + title: SwitchCase + description: The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met. + unevaluatedProperties: false + required: [ then ] + properties: + when: + type: string + title: SwitchCaseCondition + description: A runtime expression used to determine whether or not the case matches. + then: + $ref: '#/$defs/flowDirective' + title: SwitchCaseOutcome + description: The flow directive to execute when the case matches. + tryTask: + type: object + $ref: '#/$defs/taskBase' + title: TryTask + description: Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones. + required: [ try, catch ] + unevaluatedProperties: false + properties: + try: + $ref: '#/$defs/taskList' + title: TryTaskConfiguration + description: The task(s) to perform. + catch: + type: object + title: TryTaskCatch + description: The object used to define the errors to catch. + unevaluatedProperties: false + properties: + errors: + type: object + title: CatchErrors + description: The configuration of a concept used to catch errors. + as: + type: string + title: CatchAs + description: The name of the runtime expression variable to save the error as. Defaults to 'error'. + when: + type: string + title: CatchWhen + description: A runtime expression used to determine whether or not to catch the filtered error. + exceptWhen: + type: string + title: CatchExceptWhen + description: A runtime expression used to determine whether or not to catch the filtered error. + retry: + oneOf: + - $ref: '#/$defs/retryPolicy' + title: RetryPolicyDefinition + description: The retry policy to use, if any, when catching errors. + - type: string + title: RetryPolicyReference + description: The name of the retry policy to use, if any, when catching errors. + do: + $ref: '#/$defs/taskList' + title: TryTaskCatchDo + description: The definition of the task(s) to run when catching an error. + waitTask: + type: object + $ref: '#/$defs/taskBase' + title: WaitTask + description: Allows workflows to pause or delay their execution for a specified period of time. + required: [ wait ] + unevaluatedProperties: false + properties: + wait: + $ref: '#/$defs/duration' + title: WaitTaskConfiguration + description: The amount of time to wait. + flowDirective: + title: FlowDirective + description: Represents different transition options for a workflow. + anyOf: + - type: string + enum: [ continue, exit, end ] + default: continue + - type: string + referenceableAuthenticationPolicy: + type: object + title: ReferenceableAuthenticationPolicy + description: Represents a referenceable authentication policy. + unevaluatedProperties: false + oneOf: + - title: AuthenticationPolicyReference + description: The reference of the authentication policy to use. + properties: + use: + type: string + minLength: 1 + title: ReferenceableAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + - $ref: '#/$defs/authenticationPolicy' + secretBasedAuthenticationPolicy: + type: object + title: SecretBasedAuthenticationPolicy + description: Represents an authentication policy based on secrets. + unevaluatedProperties: false + properties: + use: + type: string + minLength: 1 + title: SecretBasedAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + authenticationPolicy: + type: object + title: AuthenticationPolicy + description: Defines an authentication policy. + oneOf: + - title: BasicAuthenticationPolicy + description: Use basic authentication. + properties: + basic: + type: object + title: BasicAuthenticationPolicyConfiguration + description: The configuration of the basic authentication policy. + unevaluatedProperties: false + oneOf: + - title: BasicAuthenticationProperties + description: Inline configuration of the basic authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BasicAuthenticationPolicySecret + description: Secret based configuration of the basic authentication policy. + required: [ basic ] + - title: BearerAuthenticationPolicy + description: Use bearer authentication. + properties: + bearer: + type: object + title: BearerAuthenticationPolicyConfiguration + description: The configuration of the bearer authentication policy. + unevaluatedProperties: false + oneOf: + - title: BearerAuthenticationProperties + description: Inline configuration of the bearer authentication policy. + properties: + token: + type: string + description: The bearer token to use. + required: [ token ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BearerAuthenticationPolicySecret + description: Secret based configuration of the bearer authentication policy. + required: [ bearer ] + - title: DigestAuthenticationPolicy + description: Use digest authentication. + properties: + digest: + type: object + title: DigestAuthenticationPolicyConfiguration + description: The configuration of the digest authentication policy. + unevaluatedProperties: false + oneOf: + - title: DigestAuthenticationProperties + description: Inline configuration of the digest authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: DigestAuthenticationPolicySecret + description: Secret based configuration of the digest authentication policy. + required: [ digest ] + - title: OAuth2AuthenticationPolicy + description: Use OAuth2 authentication. + properties: + oauth2: + type: object + title: OAuth2AuthenticationPolicyConfiguration + description: The configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + oneOf: + - type: object + title: OAuth2ConnectAuthenticationProperties + description: The inline configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + - type: object + properties: + endpoints: + type: object + title: OAuth2AuthenticationPropertiesEndpoints + description: The endpoint configurations for OAuth2. + properties: + token: + type: string + format: uri-template + default: /oauth2/token + title: OAuth2TokenEndpoint + description: The relative path to the token endpoint. Defaults to `/oauth2/token`. + revocation: + type: string + format: uri-template + default: /oauth2/revoke + title: OAuth2RevocationEndpoint + description: The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`. + introspection: + type: string + format: uri-template + default: /oauth2/introspect + title: OAuth2IntrospectionEndpoint + description: The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`. + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OAuth2AuthenticationPolicySecret + description: Secret based configuration of the OAuth2 authentication policy. + required: [ oauth2 ] + - title: OpenIdConnectAuthenticationPolicy + description: Use OpenIdConnect authentication. + properties: + oidc: + type: object + title: OpenIdConnectAuthenticationPolicyConfiguration + description: The configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + title: OpenIdConnectAuthenticationProperties + description: The inline configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OpenIdConnectAuthenticationPolicySecret + description: Secret based configuration of the OpenIdConnect authentication policy. + required: [ oidc ] + oauth2AuthenticationProperties: + type: object + title: OAuth2AutenthicationData + description: Inline configuration of the OAuth2 authentication policy. + properties: + authority: + type: string + format: uri-template + title: OAuth2AutenthicationDataAuthority + description: The URI that references the OAuth2 authority to use. + grant: + type: string + enum: [ authorization_code, client_credentials, password, refresh_token, 'urn:ietf:params:oauth:grant-type:token-exchange'] + title: OAuth2AutenthicationDataGrant + description: The grant type to use. + client: + type: object + title: OAuth2AutenthicationDataClient + description: The definition of an OAuth2 client. + unevaluatedProperties: false + properties: + id: + type: string + title: ClientId + description: The client id to use. + secret: + type: string + title: ClientSecret + description: The client secret to use, if any. + assertion: + type: string + title: ClientAssertion + description: A JWT containing a signed assertion with your application credentials. + authentication: + type: string + enum: [ client_secret_basic, client_secret_post, client_secret_jwt, private_key_jwt, none ] + default: client_secret_post + title: ClientAuthentication + description: The authentication method to use to authenticate the client. + request: + type: object + title: OAuth2TokenRequest + description: The configuration of an OAuth2 token request + properties: + encoding: + type: string + enum: [ 'application/x-www-form-urlencoded', 'application/json' ] + default: 'application/x-www-form-urlencoded' + title: Oauth2TokenRequestEncoding + issuers: + type: array + title: OAuth2Issuers + description: A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens. + items: + type: string + scopes: + type: array + title: OAuth2AutenthicationDataScopes + description: The scopes, if any, to request the token for. + items: + type: string + audiences: + type: array + title: OAuth2AutenthicationDataAudiences + description: The audiences, if any, to request the token for. + items: + type: string + username: + type: string + title: OAuth2AutenthicationDataUsername + description: The username to use. Used only if the grant type is Password. + password: + type: string + title: OAuth2AutenthicationDataPassword + description: The password to use. Used only if the grant type is Password. + subject: + $ref: '#/$defs/oauth2Token' + title: OAuth2AutenthicationDataSubject + description: The security token that represents the identity of the party on behalf of whom the request is being made. + actor: + $ref: '#/$defs/oauth2Token' + title: OAuth2AutenthicationDataActor + description: The security token that represents the identity of the acting party. + oauth2Token: + type: object + title: OAuth2TokenDefinition + description: Represents an OAuth2 token. + unevaluatedProperties: false + properties: + token: + type: string + title: OAuth2Token + description: The security token to use. + type: + type: string + title: OAuth2TokenType + description: The type of the security token to use. + required: [ token, type ] + duration: + oneOf: + - type: object + minProperties: 1 + unevaluatedProperties: false + properties: + days: + type: integer + title: DurationDays + description: Number of days, if any. + hours: + type: integer + title: DurationHours + description: Number of days, if any. + minutes: + type: integer + title: DurationMinutes + description: Number of minutes, if any. + seconds: + type: integer + title: DurationSeconds + description: Number of seconds, if any. + milliseconds: + type: integer + title: DurationMilliseconds + description: Number of milliseconds, if any. + title: DurationInline + description: The inline definition of a duration. + - type: string + pattern: '^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$' + title: DurationExpression + description: The ISO 8601 expression of a duration. + error: + type: object + title: Error + description: Represents an error. + unevaluatedProperties: false + properties: + type: + title: ErrorType + description: A URI reference that identifies the error type. + oneOf: + - title: LiteralErrorType + description: The literal error type. + type: string + format: uri-template + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorType + description: An expression based error type. + status: + type: integer + title: ErrorStatus + description: The status code generated by the origin for this occurrence of the error. + instance: + title: ErrorInstance + description: A JSON Pointer used to reference the component the error originates from. + oneOf: + - title: LiteralErrorInstance + description: The literal error instance. + type: string + format: json-pointer + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorInstance + description: An expression based error instance. + title: + type: string + title: ErrorTitle + description: A short, human-readable summary of the error. + detail: + type: string + title: ErrorDetails + description: A human-readable explanation specific to this occurrence of the error. + required: [ type, status ] + endpoint: + title: Endpoint + description: Represents an endpoint. + oneOf: + - $ref: '#/$defs/runtimeExpression' + - title: LiteralEndpoint + type: string + format: uri-template + - title: EndpointConfiguration + type: object + unevaluatedProperties: false + properties: + uri: + title: EndpointUri + description: The endpoint's URI. + oneOf: + - title: LiteralEndpointURI + description: The literal endpoint's URI. + type: string + format: uri-template + - $ref: '#/$defs/runtimeExpression' + title: ExpressionEndpointURI + description: An expression based endpoint's URI. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: EndpointAuthentication + description: The authentication policy to use. + required: [ uri ] + eventProperties: + type: object + title: EventProperties + description: Describes the properties of an event. + properties: + id: + type: string + title: EventId + description: The event's unique identifier. + source: + title: EventSource + description: Identifies the context in which an event happened. + oneOf: + - title: LiteralSource + type: string + format: uri-template + - $ref: '#/$defs/runtimeExpression' + type: + type: string + title: EventType + description: This attribute contains a value describing the type of event related to the originating occurrence. + time: + title: EventTime + description: When the event occured. + oneOf: + - title: LiteralTime + type: string + format: date-time + - $ref: '#/$defs/runtimeExpression' + subject: + type: string + title: EventSubject + description: The subject of the event. + datacontenttype: + type: string + title: EventDataContentType + description: Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format. + dataschema: + title: EventDataschema + description: The schema describing the event format. + oneOf: + - title: LiteralDataSchema + description: The literal event data schema. + type: string + format: uri-template + - $ref: '#/$defs/runtimeExpression' + title: ExpressionDataSchema + description: An expression based event data schema. + additionalProperties: true + eventConsumptionStrategy: + type: object + title: EventConsumptionStrategy + description: Describe the event consumption strategy to adopt. + unevaluatedProperties: false + oneOf: + - title: AllEventConsumptionStrategy + properties: + all: + type: array + title: AllEventConsumptionStrategyConfiguration + description: A list containing all the events that must be consumed. + items: + $ref: '#/$defs/eventFilter' + required: [ all ] + - title: AnyEventConsumptionStrategy + properties: + any: + type: array + title: AnyEventConsumptionStrategyConfiguration + description: A list containing any of the events to consume. + items: + $ref: '#/$defs/eventFilter' + required: [ any ] + - title: OneEventConsumptionStrategy + properties: + one: + $ref: '#/$defs/eventFilter' + title: OneEventConsumptionStrategyConfiguration + description: The single event to consume. + required: [ one ] + eventFilter: + type: object + title: EventFilter + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + unevaluatedProperties: false + properties: + with: + $ref: '#/$defs/eventProperties' + minProperties: 1 + title: WithEvent + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + correlate: + type: object + title: EventFilterCorrelate + description: A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics. + additionalProperties: + type: object + properties: + from: + type: string + title: CorrelateFrom + description: A runtime expression used to extract the correlation value from the filtered event. + expect: + type: string + title: CorrelateExpect + description: A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation. + required: [ from ] + required: [ with ] + extension: + type: object + title: Extension + description: The definition of an extension. + unevaluatedProperties: false + properties: + extend: + type: string + enum: [ call, composite, emit, for, listen, raise, run, set, switch, try, wait, all ] + title: ExtensionTarget + description: The type of task to extend. + when: + type: string + title: ExtensionCondition + description: A runtime expression, if any, used to determine whether or not the extension should apply in the specified context. + before: + $ref: '#/$defs/taskList' + title: ExtensionDoBefore + description: The task(s) to execute before the extended task, if any. + after: + $ref: '#/$defs/taskList' + title: ExtensionDoAfter + description: The task(s) to execute after the extended task, if any. + required: [ extend ] + externalResource: + type: object + title: ExternalResource + description: Represents an external resource. + unevaluatedProperties: false + properties: + name: + type: string + title: ExternalResourceName + description: The name of the external resource, if any. + endpoint: + $ref: '#/$defs/endpoint' + title: ExternalResourceEndpoint + description: The endpoint of the external resource. + required: [ endpoint ] + input: + type: object + title: Input + description: Configures the input of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: InputSchema + description: The schema used to describe and validate the input of the workflow or task. + from: + title: InputFrom + description: A runtime expression, if any, used to mutate and/or filter the input of the workflow or task. + oneOf: + - type: string + - type: object + output: + type: object + title: Output + description: Configures the output of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: OutputSchema + description: The schema used to describe and validate the output of the workflow or task. + as: + title: OutputAs + description: A runtime expression, if any, used to mutate and/or filter the output of the workflow or task. + oneOf: + - type: string + - type: object + export: + type: object + title: Export + description: Set the content of the context. . + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: ExportSchema + description: The schema used to describe and validate the workflow context. + as: + title: ExportAs + description: A runtime expression, if any, used to export the output data to the context. + oneOf: + - type: string + - type: object + retryPolicy: + type: object + title: RetryPolicy + description: Defines a retry policy. + unevaluatedProperties: false + properties: + when: + type: string + title: RetryWhen + description: A runtime expression, if any, used to determine whether or not to retry running the task, in a given context. + exceptWhen: + type: string + title: RetryExcepWhen + description: A runtime expression used to determine whether or not to retry running the task, in a given context. + delay: + $ref: '#/$defs/duration' + title: RetryDelay + description: The duration to wait between retry attempts. + backoff: + type: object + title: RetryBackoff + description: The retry duration backoff. + unevaluatedProperties: false + oneOf: + - title: ConstantBackoff + properties: + constant: + type: object + description: The definition of the constant backoff to use, if any. + required: [ constant ] + - title: ExponentialBackOff + properties: + exponential: + type: object + description: The definition of the exponential backoff to use, if any. + required: [ exponential ] + - title: LinearBackoff + properties: + linear: + type: object + description: The definition of the linear backoff to use, if any. + required: [ linear ] + limit: + type: object + title: RetryLimit + unevaluatedProperties: false + properties: + attempt: + type: object + title: RetryLimitAttempt + unevaluatedProperties: false + properties: + count: + type: integer + title: RetryLimitAttemptCount + description: The maximum amount of retry attempts, if any. + duration: + $ref: '#/$defs/duration' + title: RetryLimitAttemptDuration + description: The maximum duration for each retry attempt. + duration: + $ref: '#/$defs/duration' + title: RetryLimitDuration + description: The duration limit, if any, for all retry attempts. + description: The retry limit, if any. + jitter: + type: object + title: RetryPolicyJitter + description: The parameters, if any, that control the randomness or variability of the delay between retry attempts. + unevaluatedProperties: false + properties: + from: + $ref: '#/$defs/duration' + title: RetryPolicyJitterFrom + description: The minimum duration of the jitter range. + to: + $ref: '#/$defs/duration' + title: RetryPolicyJitterTo + description: The maximum duration of the jitter range. + required: [ from, to ] + schema: + type: object + title: Schema + description: Represents the definition of a schema. + unevaluatedProperties: false + properties: + format: + type: string + default: json + title: SchemaFormat + description: The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`. + oneOf: + - title: SchemaInline + properties: + document: + description: The schema's inline definition. + required: [ document ] + - title: SchemaExternal + properties: + resource: + $ref: '#/$defs/externalResource' + title: SchemaExternalResource + description: The schema's external resource. + required: [ resource ] + timeout: + type: object + title: Timeout + description: The definition of a timeout. + unevaluatedProperties: false + properties: + after: + $ref: '#/$defs/duration' + title: TimeoutAfter + description: The duration after which to timeout. + required: [ after ] + runtimeExpression: + type: string + title: RuntimeExpression + description: A runtime expression. + pattern: "^\\s*\\$\\{.+\\}\\s*$" diff --git a/public/schemas/1.0.0-alpha4/workflow.json b/public/schemas/1.0.0-alpha4/workflow.json new file mode 100644 index 0000000..ebe1618 --- /dev/null +++ b/public/schemas/1.0.0-alpha4/workflow.json @@ -0,0 +1,2255 @@ +{ + "$id": "https://open-workflow-specification.org/schemas/1.0.0-alpha4/workflow.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Open Workflow Specification DSL - Workflow Schema.", + "type": "object", + "required": [ + "document", + "do" + ], + "properties": { + "document": { + "type": "object", + "title": "Document", + "description": "Documents the workflow.", + "unevaluatedProperties": false, + "properties": { + "dsl": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowDSL", + "description": "The version of the DSL used by the workflow." + }, + "namespace": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowNamespace", + "description": "The workflow's namespace." + }, + "name": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowName", + "description": "The workflow's name." + }, + "version": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowVersion", + "description": "The workflow's semantic version." + }, + "title": { + "type": "string", + "title": "WorkflowTitle", + "description": "The workflow's title." + }, + "summary": { + "type": "string", + "title": "WorkflowSummary", + "description": "The workflow's Markdown summary." + }, + "tags": { + "type": "object", + "title": "WorkflowTags", + "description": "A key/value mapping of the workflow's tags, if any.", + "additionalProperties": true + }, + "metadata": { + "type": "object", + "title": "WorkflowMetadata", + "description": "Holds additional information about the workflow.", + "additionalProperties": true + } + }, + "required": [ + "dsl", + "namespace", + "name", + "version" + ] + }, + "input": { + "$ref": "#/$defs/input", + "title": "Input", + "description": "Configures the workflow's input." + }, + "use": { + "type": "object", + "title": "Use", + "description": "Defines the workflow's reusable components.", + "unevaluatedProperties": false, + "properties": { + "authentications": { + "type": "object", + "title": "UseAuthentications", + "description": "The workflow's reusable authentication policies.", + "additionalProperties": { + "$ref": "#/$defs/authenticationPolicy" + } + }, + "errors": { + "type": "object", + "title": "UseErrors", + "description": "The workflow's reusable errors.", + "additionalProperties": { + "$ref": "#/$defs/error" + } + }, + "extensions": { + "type": "array", + "title": "UseExtensions", + "description": "The workflow's extensions.", + "items": { + "type": "object", + "title": "ExtensionItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/extension" + } + } + }, + "functions": { + "type": "object", + "title": "UseFunctions", + "description": "The workflow's reusable functions.", + "additionalProperties": { + "$ref": "#/$defs/task" + } + }, + "retries": { + "type": "object", + "title": "UseRetries", + "description": "The workflow's reusable retry policies.", + "additionalProperties": { + "$ref": "#/$defs/retryPolicy" + } + }, + "secrets": { + "type": "array", + "title": "UseSecrets", + "description": "The workflow's reusable secrets.", + "items": { + "type": "string", + "description": "The workflow's secrets." + } + }, + "timeouts": { + "type": "object", + "title": "UseTimeouts", + "description": "The workflow's reusable timeouts.", + "additionalProperties": { + "$ref": "#/$defs/timeout" + } + } + } + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "Do", + "description": "Defines the task(s) the workflow must perform." + }, + "timeout": { + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TimeoutDefinition", + "description": "The workflow's timeout configuration, if any." + }, + { + "type": "string", + "title": "TimeoutReference", + "description": "The name of the workflow's timeout, if any." + } + ] + }, + "output": { + "$ref": "#/$defs/output", + "title": "Output", + "description": "Configures the workflow's output." + }, + "schedule": { + "type": "object", + "title": "Schedule", + "description": "Schedules the workflow.", + "unevaluatedProperties": false, + "properties": { + "every": { + "$ref": "#/$defs/duration", + "title": "ScheduleEvery", + "description": "Specifies the duration of the interval at which the workflow should be executed." + }, + "cron": { + "type": "string", + "title": "ScheduleCron", + "description": "Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight." + }, + "after": { + "$ref": "#/$defs/duration", + "title": "ScheduleAfter", + "description": "Specifies a delay duration that the workflow must wait before starting again after it completes." + }, + "on": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ScheduleOn", + "description": "Specifies the events that trigger the workflow execution." + } + } + } + }, + "$defs": { + "taskList": { + "title": "TaskList", + "description": "List of named tasks to perform.", + "type": "array", + "items": { + "type": "object", + "title": "TaskItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/task" + } + } + }, + "taskBase": { + "type": "object", + "title": "TaskBase", + "description": "An object inherited by all tasks.", + "properties": { + "if": { + "type": "string", + "title": "TaskBaseIf", + "description": "A runtime expression, if any, used to determine whether or not the task should be run." + }, + "input": { + "$ref": "#/$defs/input", + "title": "TaskBaseInput", + "description": "Configure the task's input." + }, + "output": { + "$ref": "#/$defs/output", + "title": "TaskBaseOutput", + "description": "Configure the task's output." + }, + "export": { + "$ref": "#/$defs/export", + "title": "TaskBaseExport", + "description": "Export task output to context." + }, + "timeout": { + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TaskTimeoutDefinition", + "description": "The task's timeout configuration, if any." + }, + { + "type": "string", + "title": "TaskTimeoutReference", + "description": "The name of the task's timeout, if any." + } + ] + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "TaskBaseThen", + "description": "The flow directive to be performed upon completion of the task." + }, + "metadata": { + "type": "object", + "title": "TaskMetadata", + "description": "Holds additional information about the task.", + "additionalProperties": true + } + } + }, + "task": { + "title": "Task", + "description": "A discrete unit of work that contributes to achieving the overall objectives defined by the workflow.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/callTask" + }, + { + "$ref": "#/$defs/doTask" + }, + { + "$ref": "#/$defs/forkTask" + }, + { + "$ref": "#/$defs/emitTask" + }, + { + "$ref": "#/$defs/forTask" + }, + { + "$ref": "#/$defs/listenTask" + }, + { + "$ref": "#/$defs/raiseTask" + }, + { + "$ref": "#/$defs/runTask" + }, + { + "$ref": "#/$defs/setTask" + }, + { + "$ref": "#/$defs/switchTask" + }, + { + "$ref": "#/$defs/tryTask" + }, + { + "$ref": "#/$defs/waitTask" + } + ] + }, + "callTask": { + "title": "CallTask", + "description": "Defines the call to perform.", + "oneOf": [ + { + "title": "CallAsyncAPI", + "description": "Defines the AsyncAPI call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "call", + "with" + ], + "unevaluatedProperties": false, + "properties": { + "call": { + "type": "string", + "const": "asyncapi" + }, + "with": { + "type": "object", + "title": "AsyncApiArguments", + "description": "The Async API call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "WithAsyncAPIDocument", + "description": "The document that defines the AsyncAPI operation to call." + }, + "operationRef": { + "type": "string", + "title": "WithAsyncAPIOperation", + "description": "A reference to the AsyncAPI operation to call." + }, + "server": { + "type": "string", + "title": "WithAsyncAPIServer", + "description": "A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel." + }, + "message": { + "type": "string", + "title": "WithAsyncAPIMessage", + "description": "The name of the message to use. If not set, defaults to the first message defined by the operation." + }, + "binding": { + "type": "string", + "title": "WithAsyncAPIBinding", + "description": "The name of the binding to use. If not set, defaults to the first binding defined by the operation." + }, + "payload": { + "type": "object", + "title": "WithAsyncAPIPayload", + "description": "The payload to call the AsyncAPI operation with, if any." + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithAsyncAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the AsyncAPI operation." + } + }, + "required": [ + "document", + "operationRef" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallGRPC", + "description": "Defines the GRPC call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "grpc" + }, + "with": { + "type": "object", + "title": "GRPCArguments", + "description": "The GRPC call arguments.", + "properties": { + "proto": { + "$ref": "#/$defs/externalResource", + "title": "WithGRPCProto", + "description": "The proto resource that describes the GRPC service to call." + }, + "service": { + "type": "object", + "title": "WithGRPCService", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "WithGRPCServiceName", + "description": "The name of the GRPC service to call." + }, + "host": { + "type": "string", + "title": "WithGRPCServiceHost", + "description": "The hostname of the GRPC service to call.", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$" + }, + "port": { + "type": "integer", + "title": "WithGRPCServicePost", + "description": "The port number of the GRPC service to call.", + "minimum": 0, + "maximum": 65535 + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithGRPCServiceAuthentication", + "description": "The endpoint's authentication policy, if any." + } + }, + "required": [ + "name", + "host" + ] + }, + "method": { + "type": "string", + "title": "WithGRPCMethod", + "description": "The name of the method to call on the defined GRPC service." + }, + "arguments": { + "type": "object", + "title": "WithGRPCArguments", + "description": "The arguments, if any, to call the method with.", + "additionalProperties": true + } + }, + "required": [ + "proto", + "service", + "method" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallHTTP", + "description": "Defines the HTTP call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "http" + }, + "with": { + "type": "object", + "title": "HTTPArguments", + "description": "The HTTP call arguments.", + "properties": { + "method": { + "type": "string", + "title": "WithHTTPMethod", + "description": "The HTTP method of the HTTP request to perform." + }, + "endpoint": { + "title": "WithHTTPEndpoint", + "description": "The HTTP endpoint to send the request to.", + "$ref": "#/$defs/endpoint" + }, + "headers": { + "type": "object", + "title": "WithHTTPHeaders", + "description": "A name/value mapping of the headers, if any, of the HTTP request to perform." + }, + "body": { + "title": "WithHTTPBody", + "description": "The body, if any, of the HTTP request to perform." + }, + "query": { + "type": "object", + "title": "WithHTTPQuery", + "description": "A name/value mapping of the query parameters, if any, of the HTTP request to perform.", + "additionalProperties": true + }, + "output": { + "type": "string", + "title": "WithHTTPOutput", + "description": "The http call output format. Defaults to 'content'.", + "enum": [ + "raw", + "content", + "response" + ] + } + }, + "required": [ + "method", + "endpoint" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallOpenAPI", + "description": "Defines the OpenAPI call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "openapi" + }, + "with": { + "type": "object", + "title": "OpenAPIArguments", + "description": "The OpenAPI call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "WithOpenAPIDocument", + "description": "The document that defines the OpenAPI operation to call." + }, + "operationId": { + "type": "string", + "title": "WithOpenAPIOperation", + "description": "The id of the OpenAPI operation to call." + }, + "parameters": { + "type": "object", + "title": "WithOpenAPIParameters", + "description": "A name/value mapping of the parameters of the OpenAPI operation to call.", + "additionalProperties": true + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithOpenAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the OpenAPI operation." + }, + "output": { + "type": "string", + "enum": [ + "raw", + "content", + "response" + ], + "title": "WithOpenAPIOutput", + "description": "The http call output format. Defaults to 'content'." + } + }, + "required": [ + "document", + "operationId" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallFunction", + "description": "Defines the function call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call" + ], + "properties": { + "call": { + "type": "string", + "not": { + "enum": [ + "asyncapi", + "grpc", + "http", + "openapi" + ] + }, + "description": "The name of the function to call." + }, + "with": { + "type": "object", + "title": "FunctionArguments", + "description": "A name/value mapping of the parameters, if any, to call the function with.", + "additionalProperties": true + } + } + } + ] + }, + "forkTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ForkTask", + "description": "Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output.", + "unevaluatedProperties": false, + "required": [ + "fork" + ], + "properties": { + "fork": { + "type": "object", + "title": "ForkTaskConfiguration", + "description": "The configuration of the branches to perform concurrently.", + "unevaluatedProperties": false, + "required": [ + "branches" + ], + "properties": { + "branches": { + "$ref": "#/$defs/taskList", + "title": "ForkBranches" + }, + "compete": { + "type": "boolean", + "title": "ForkCompete", + "description": "Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output.", + "default": false + } + } + } + } + }, + "doTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "DoTask", + "description": "Allows to execute a list of tasks in sequence.", + "unevaluatedProperties": false, + "required": [ + "do" + ], + "properties": { + "do": { + "$ref": "#/$defs/taskList", + "title": "DoTaskConfiguration", + "description": "The configuration of the tasks to perform sequentially." + } + } + }, + "emitTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "EmitTask", + "description": "Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services.", + "required": [ + "emit" + ], + "unevaluatedProperties": false, + "properties": { + "emit": { + "type": "object", + "title": "EmitTaskConfiguration", + "description": "The configuration of an event's emission.", + "unevaluatedProperties": false, + "properties": { + "event": { + "type": "object", + "title": "EmitEventDefinition", + "description": "The definition of the event to emit.", + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "title": "EmitEventWith", + "description": "Defines the properties of event to emit.", + "required": [ + "source", + "type" + ] + } + }, + "additionalProperties": true + } + }, + "required": [ + "event" + ] + } + } + }, + "forTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ForTask", + "description": "Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.", + "required": [ + "for", + "do" + ], + "unevaluatedProperties": false, + "properties": { + "for": { + "type": "object", + "title": "ForTaskConfiguration", + "description": "The definition of the loop that iterates over a range of values.", + "unevaluatedProperties": false, + "properties": { + "each": { + "type": "string", + "title": "ForEach", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "in": { + "type": "string", + "title": "ForIn", + "description": "A runtime expression used to get the collection to enumerate." + }, + "at": { + "type": "string", + "title": "ForAt", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + } + }, + "required": [ + "in" + ] + }, + "while": { + "type": "string", + "title": "While", + "description": "A runtime expression that represents the condition, if any, that must be met for the iteration to continue." + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "ForTaskDo" + } + } + }, + "listenTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ListenTask", + "description": "Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.", + "required": [ + "listen" + ], + "unevaluatedProperties": false, + "properties": { + "listen": { + "type": "object", + "title": "ListenTaskConfiguration", + "description": "The configuration of the listener to use.", + "unevaluatedProperties": false, + "properties": { + "to": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ListenTo", + "description": "Defines the event(s) to listen to." + } + }, + "required": [ + "to" + ] + } + } + }, + "raiseTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "RaiseTask", + "description": "Intentionally triggers and propagates errors.", + "required": [ + "raise" + ], + "unevaluatedProperties": false, + "properties": { + "raise": { + "type": "object", + "title": "RaiseTaskConfiguration", + "description": "The definition of the error to raise.", + "unevaluatedProperties": false, + "properties": { + "error": { + "oneOf": [ + { + "$ref": "#/$defs/error", + "title": "RaiseErrorDefinition", + "description": "Defines the error to raise." + }, + { + "type": "string", + "title": "RaiseErrorReference", + "description": "The name of the error to raise" + } + ] + } + }, + "required": [ + "error" + ] + } + } + }, + "runTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "RunTask", + "description": "Provides the capability to execute external containers, shell commands, scripts, or workflows.", + "required": [ + "run" + ], + "unevaluatedProperties": false, + "properties": { + "run": { + "type": "object", + "title": "RunTaskConfiguration", + "description": "The configuration of the process to execute.", + "unevaluatedProperties": false, + "properties": { + "await": { + "type": "boolean", + "default": true, + "title": "AwaitProcessCompletion", + "description": "Whether to await the process completion before continuing." + } + }, + "oneOf": [ + { + "title": "RunContainer", + "description": "Enables the execution of external processes encapsulated within a containerized environment.", + "properties": { + "container": { + "type": "object", + "title": "Container", + "description": "The configuration of the container to run.", + "unevaluatedProperties": false, + "properties": { + "image": { + "type": "string", + "title": "ContainerImage", + "description": "The name of the container image to run." + }, + "command": { + "type": "string", + "title": "ContainerCommand", + "description": "The command, if any, to execute on the container." + }, + "ports": { + "type": "object", + "title": "ContainerPorts", + "description": "The container's port mappings, if any." + }, + "volumes": { + "type": "object", + "title": "ContainerVolumes", + "description": "The container's volume mappings, if any." + }, + "environment": { + "type": "object", + "title": "ContainerEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + } + }, + "required": [ + "image" + ] + } + }, + "required": [ + "container" + ] + }, + { + "title": "RunScript", + "description": "Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages.", + "properties": { + "script": { + "type": "object", + "title": "Script", + "description": "The configuration of the script to run.", + "unevaluatedProperties": false, + "properties": { + "language": { + "type": "string", + "title": "ScriptLanguage", + "description": "The language of the script to run." + }, + "arguments": { + "type": "object", + "title": "ScriptArguments", + "description": "A key/value mapping of the arguments, if any, to use when running the configured script.", + "additionalProperties": true + }, + "environment": { + "type": "object", + "title": "ScriptEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured script process.", + "additionalProperties": true + } + }, + "oneOf": [ + { + "title": "InlineScript", + "type": "object", + "description": "The script's code.", + "properties": { + "code": { + "type": "string", + "title": "InlineScriptCode" + } + }, + "required": [ + "code" + ] + }, + { + "title": "ExternalScript", + "type": "object", + "description": "The script's resource.", + "properties": { + "source": { + "$ref": "#/$defs/externalResource", + "title": "ExternalScriptResource" + } + }, + "required": [ + "source" + ] + } + ], + "required": [ + "language" + ] + } + }, + "required": [ + "script" + ] + }, + { + "title": "RunShell", + "description": "Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks.", + "properties": { + "shell": { + "type": "object", + "title": "Shell", + "description": "The configuration of the shell command to run.", + "unevaluatedProperties": false, + "properties": { + "command": { + "type": "string", + "title": "ShellCommand", + "description": "The shell command to run." + }, + "arguments": { + "type": "object", + "title": "ShellArguments", + "description": "A list of the arguments of the shell command to run.", + "additionalProperties": true + }, + "environment": { + "type": "object", + "title": "ShellEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process.", + "additionalProperties": true + } + }, + "required": [ + "command" + ] + } + }, + "required": [ + "shell" + ] + }, + { + "title": "RunWorkflow", + "description": "Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units.", + "properties": { + "workflow": { + "type": "object", + "title": "SubflowConfiguration", + "description": "The configuration of the workflow to run.", + "unevaluatedProperties": false, + "properties": { + "namespace": { + "type": "string", + "title": "SubflowNamespace", + "description": "The namespace the workflow to run belongs to." + }, + "name": { + "type": "string", + "title": "SubflowName", + "description": "The name of the workflow to run." + }, + "version": { + "type": "string", + "default": "latest", + "title": "SubflowVersion", + "description": "The version of the workflow to run. Defaults to latest." + }, + "input": { + "type": "object", + "title": "SubflowInput", + "description": "The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified.", + "additionalProperties": true + } + }, + "required": [ + "namespace", + "name", + "version" + ] + } + }, + "required": [ + "workflow" + ] + } + ] + } + } + }, + "setTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "SetTask", + "description": "A task used to set data.", + "required": [ + "set" + ], + "unevaluatedProperties": false, + "properties": { + "set": { + "type": "object", + "title": "SetTaskConfiguration", + "description": "The data to set.", + "minProperties": 1, + "additionalProperties": true + } + } + }, + "switchTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "SwitchTask", + "description": "Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria.", + "required": [ + "switch" + ], + "unevaluatedProperties": false, + "properties": { + "switch": { + "type": "array", + "title": "SwitchTaskConfiguration", + "description": "The definition of the switch to use.", + "minItems": 1, + "items": { + "type": "object", + "title": "SwitchItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "type": "object", + "title": "SwitchCase", + "description": "The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met.", + "unevaluatedProperties": false, + "required": [ + "then" + ], + "properties": { + "when": { + "type": "string", + "title": "SwitchCaseCondition", + "description": "A runtime expression used to determine whether or not the case matches." + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "SwitchCaseOutcome", + "description": "The flow directive to execute when the case matches." + } + } + } + } + } + } + }, + "tryTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "TryTask", + "description": "Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones.", + "required": [ + "try", + "catch" + ], + "unevaluatedProperties": false, + "properties": { + "try": { + "$ref": "#/$defs/taskList", + "title": "TryTaskConfiguration", + "description": "The task(s) to perform." + }, + "catch": { + "type": "object", + "title": "TryTaskCatch", + "description": "The object used to define the errors to catch.", + "unevaluatedProperties": false, + "properties": { + "errors": { + "type": "object", + "title": "CatchErrors", + "description": "The configuration of a concept used to catch errors." + }, + "as": { + "type": "string", + "title": "CatchAs", + "description": "The name of the runtime expression variable to save the error as. Defaults to 'error'." + }, + "when": { + "type": "string", + "title": "CatchWhen", + "description": "A runtime expression used to determine whether or not to catch the filtered error." + }, + "exceptWhen": { + "type": "string", + "title": "CatchExceptWhen", + "description": "A runtime expression used to determine whether or not to catch the filtered error." + }, + "retry": { + "oneOf": [ + { + "$ref": "#/$defs/retryPolicy", + "title": "RetryPolicyDefinition", + "description": "The retry policy to use, if any, when catching errors." + }, + { + "type": "string", + "title": "RetryPolicyReference", + "description": "The name of the retry policy to use, if any, when catching errors." + } + ] + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "TryTaskCatchDo", + "description": "The definition of the task(s) to run when catching an error." + } + } + } + } + }, + "waitTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "WaitTask", + "description": "Allows workflows to pause or delay their execution for a specified period of time.", + "required": [ + "wait" + ], + "unevaluatedProperties": false, + "properties": { + "wait": { + "$ref": "#/$defs/duration", + "title": "WaitTaskConfiguration", + "description": "The amount of time to wait." + } + } + }, + "flowDirective": { + "title": "FlowDirective", + "description": "Represents different transition options for a workflow.", + "anyOf": [ + { + "type": "string", + "enum": [ + "continue", + "exit", + "end" + ], + "default": "continue" + }, + { + "type": "string" + } + ] + }, + "referenceableAuthenticationPolicy": { + "type": "object", + "title": "ReferenceableAuthenticationPolicy", + "description": "Represents a referenceable authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AuthenticationPolicyReference", + "description": "The reference of the authentication policy to use.", + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "ReferenceableAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + { + "$ref": "#/$defs/authenticationPolicy" + } + ] + }, + "secretBasedAuthenticationPolicy": { + "type": "object", + "title": "SecretBasedAuthenticationPolicy", + "description": "Represents an authentication policy based on secrets.", + "unevaluatedProperties": false, + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "SecretBasedAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + "authenticationPolicy": { + "type": "object", + "title": "AuthenticationPolicy", + "description": "Defines an authentication policy.", + "oneOf": [ + { + "title": "BasicAuthenticationPolicy", + "description": "Use basic authentication.", + "properties": { + "basic": { + "type": "object", + "title": "BasicAuthenticationPolicyConfiguration", + "description": "The configuration of the basic authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BasicAuthenticationProperties", + "description": "Inline configuration of the basic authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BasicAuthenticationPolicySecret", + "description": "Secret based configuration of the basic authentication policy." + } + ] + } + }, + "required": [ + "basic" + ] + }, + { + "title": "BearerAuthenticationPolicy", + "description": "Use bearer authentication.", + "properties": { + "bearer": { + "type": "object", + "title": "BearerAuthenticationPolicyConfiguration", + "description": "The configuration of the bearer authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BearerAuthenticationProperties", + "description": "Inline configuration of the bearer authentication policy.", + "properties": { + "token": { + "type": "string", + "description": "The bearer token to use." + } + }, + "required": [ + "token" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BearerAuthenticationPolicySecret", + "description": "Secret based configuration of the bearer authentication policy." + } + ] + } + }, + "required": [ + "bearer" + ] + }, + { + "title": "DigestAuthenticationPolicy", + "description": "Use digest authentication.", + "properties": { + "digest": { + "type": "object", + "title": "DigestAuthenticationPolicyConfiguration", + "description": "The configuration of the digest authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "DigestAuthenticationProperties", + "description": "Inline configuration of the digest authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "DigestAuthenticationPolicySecret", + "description": "Secret based configuration of the digest authentication policy." + } + ] + } + }, + "required": [ + "digest" + ] + }, + { + "title": "OAuth2AuthenticationPolicy", + "description": "Use OAuth2 authentication.", + "properties": { + "oauth2": { + "type": "object", + "title": "OAuth2AuthenticationPolicyConfiguration", + "description": "The configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "type": "object", + "title": "OAuth2ConnectAuthenticationProperties", + "description": "The inline configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties" + }, + { + "type": "object", + "properties": { + "endpoints": { + "type": "object", + "title": "OAuth2AuthenticationPropertiesEndpoints", + "description": "The endpoint configurations for OAuth2.", + "properties": { + "token": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/token", + "title": "OAuth2TokenEndpoint", + "description": "The relative path to the token endpoint. Defaults to `/oauth2/token`." + }, + "revocation": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/revoke", + "title": "OAuth2RevocationEndpoint", + "description": "The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`." + }, + "introspection": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/introspect", + "title": "OAuth2IntrospectionEndpoint", + "description": "The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`." + } + } + } + } + } + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OAuth2AuthenticationPolicySecret", + "description": "Secret based configuration of the OAuth2 authentication policy." + } + ] + } + }, + "required": [ + "oauth2" + ] + }, + { + "title": "OpenIdConnectAuthenticationPolicy", + "description": "Use OpenIdConnect authentication.", + "properties": { + "oidc": { + "type": "object", + "title": "OpenIdConnectAuthenticationPolicyConfiguration", + "description": "The configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties", + "title": "OpenIdConnectAuthenticationProperties", + "description": "The inline configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OpenIdConnectAuthenticationPolicySecret", + "description": "Secret based configuration of the OpenIdConnect authentication policy." + } + ] + } + }, + "required": [ + "oidc" + ] + } + ] + }, + "oauth2AuthenticationProperties": { + "type": "object", + "title": "OAuth2AutenthicationData", + "description": "Inline configuration of the OAuth2 authentication policy.", + "properties": { + "authority": { + "$ref": "#/$defs/uriTemplate", + "title": "OAuth2AutenthicationDataAuthority", + "description": "The URI that references the OAuth2 authority to use." + }, + "grant": { + "type": "string", + "enum": [ + "authorization_code", + "client_credentials", + "password", + "refresh_token", + "urn:ietf:params:oauth:grant-type:token-exchange" + ], + "title": "OAuth2AutenthicationDataGrant", + "description": "The grant type to use." + }, + "client": { + "type": "object", + "title": "OAuth2AutenthicationDataClient", + "description": "The definition of an OAuth2 client.", + "unevaluatedProperties": false, + "properties": { + "id": { + "type": "string", + "title": "ClientId", + "description": "The client id to use." + }, + "secret": { + "type": "string", + "title": "ClientSecret", + "description": "The client secret to use, if any." + }, + "assertion": { + "type": "string", + "title": "ClientAssertion", + "description": "A JWT containing a signed assertion with your application credentials." + }, + "authentication": { + "type": "string", + "enum": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "default": "client_secret_post", + "title": "ClientAuthentication", + "description": "The authentication method to use to authenticate the client." + } + } + }, + "request": { + "type": "object", + "title": "OAuth2TokenRequest", + "description": "The configuration of an OAuth2 token request", + "properties": { + "encoding": { + "type": "string", + "enum": [ + "application/x-www-form-urlencoded", + "application/json" + ], + "default": "application/x-www-form-urlencoded", + "title": "Oauth2TokenRequestEncoding" + } + } + }, + "issuers": { + "type": "array", + "title": "OAuth2Issuers", + "description": "A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens.", + "items": { + "type": "string" + } + }, + "scopes": { + "type": "array", + "title": "OAuth2AutenthicationDataScopes", + "description": "The scopes, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "title": "OAuth2AutenthicationDataAudiences", + "description": "The audiences, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "username": { + "type": "string", + "title": "OAuth2AutenthicationDataUsername", + "description": "The username to use. Used only if the grant type is Password." + }, + "password": { + "type": "string", + "title": "OAuth2AutenthicationDataPassword", + "description": "The password to use. Used only if the grant type is Password." + }, + "subject": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AutenthicationDataSubject", + "description": "The security token that represents the identity of the party on behalf of whom the request is being made." + }, + "actor": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AutenthicationDataActor", + "description": "The security token that represents the identity of the acting party." + } + } + }, + "oauth2Token": { + "type": "object", + "title": "OAuth2TokenDefinition", + "description": "Represents an OAuth2 token.", + "unevaluatedProperties": false, + "properties": { + "token": { + "type": "string", + "title": "OAuth2Token", + "description": "The security token to use." + }, + "type": { + "type": "string", + "title": "OAuth2TokenType", + "description": "The type of the security token to use." + } + }, + "required": [ + "token", + "type" + ] + }, + "duration": { + "oneOf": [ + { + "type": "object", + "minProperties": 1, + "unevaluatedProperties": false, + "properties": { + "days": { + "type": "integer", + "title": "DurationDays", + "description": "Number of days, if any." + }, + "hours": { + "type": "integer", + "title": "DurationHours", + "description": "Number of days, if any." + }, + "minutes": { + "type": "integer", + "title": "DurationMinutes", + "description": "Number of minutes, if any." + }, + "seconds": { + "type": "integer", + "title": "DurationSeconds", + "description": "Number of seconds, if any." + }, + "milliseconds": { + "type": "integer", + "title": "DurationMilliseconds", + "description": "Number of milliseconds, if any." + } + }, + "title": "DurationInline", + "description": "The inline definition of a duration." + }, + { + "type": "string", + "pattern": "^P(?!$)(\\d+(?:\\.\\d+)?Y)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?W)?(\\d+(?:\\.\\d+)?D)?(T(?=\\d)(\\d+(?:\\.\\d+)?H)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?S)?)?$", + "title": "DurationExpression", + "description": "The ISO 8601 expression of a duration." + } + ] + }, + "error": { + "type": "object", + "title": "Error", + "description": "Represents an error.", + "unevaluatedProperties": false, + "properties": { + "type": { + "title": "ErrorType", + "description": "A URI reference that identifies the error type.", + "oneOf": [ + { + "title": "LiteralErrorType", + "$ref": "#/$defs/uriTemplate", + "description": "The literal error type." + }, + { + "title": "ExpressionErrorType", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based error type." + } + ] + }, + "status": { + "type": "integer", + "title": "ErrorStatus", + "description": "The status code generated by the origin for this occurrence of the error." + }, + "instance": { + "title": "ErrorInstance", + "description": "A JSON Pointer used to reference the component the error originates from.", + "oneOf": [ + { + "title": "LiteralErrorInstance", + "description": "The literal error instance.", + "type": "string", + "format": "json-pointer" + }, + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorInstance", + "description": "An expression based error instance." + } + ] + }, + "title": { + "type": "string", + "title": "ErrorTitle", + "description": "A short, human-readable summary of the error." + }, + "detail": { + "type": "string", + "title": "ErrorDetails", + "description": "A human-readable explanation specific to this occurrence of the error." + } + }, + "required": [ + "type", + "status" + ] + }, + "uriTemplate": { + "title": "UriTemplate", + "anyOf": [ + { + "title": "LiteralUriTemplate", + "type": "string", + "format": "uri-template", + "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + }, + { + "title": "LiteralUri", + "type": "string", + "format": "uri", + "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + } + ] + }, + "endpoint": { + "title": "Endpoint", + "description": "Represents an endpoint.", + "oneOf": [ + { + "$ref": "#/$defs/runtimeExpression" + }, + { + "$ref": "#/$defs/uriTemplate" + }, + { + "title": "EndpointConfiguration", + "type": "object", + "unevaluatedProperties": false, + "properties": { + "uri": { + "title": "EndpointUri", + "description": "The endpoint's URI.", + "oneOf": [ + { + "title": "LiteralEndpointURI", + "description": "The literal endpoint's URI.", + "$ref": "#/$defs/uriTemplate" + }, + { + "title": "ExpressionEndpointURI", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based endpoint's URI." + } + ] + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "EndpointAuthentication", + "description": "The authentication policy to use." + } + }, + "required": [ + "uri" + ] + } + ] + }, + "eventProperties": { + "type": "object", + "title": "EventProperties", + "description": "Describes the properties of an event.", + "properties": { + "id": { + "type": "string", + "title": "EventId", + "description": "The event's unique identifier." + }, + "source": { + "title": "EventSource", + "description": "Identifies the context in which an event happened.", + "oneOf": [ + { + "$ref": "#/$defs/uriTemplate" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "type": { + "type": "string", + "title": "EventType", + "description": "This attribute contains a value describing the type of event related to the originating occurrence." + }, + "time": { + "title": "EventTime", + "description": "When the event occured.", + "oneOf": [ + { + "title": "LiteralTime", + "type": "string", + "format": "date-time" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "subject": { + "type": "string", + "title": "EventSubject", + "description": "The subject of the event." + }, + "datacontenttype": { + "type": "string", + "title": "EventDataContentType", + "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format." + }, + "dataschema": { + "title": "EventDataschema", + "description": "The schema describing the event format.", + "oneOf": [ + { + "title": "LiteralDataSchema", + "$ref": "#/$defs/uriTemplate", + "description": "The literal event data schema." + }, + { + "title": "ExpressionDataSchema", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based event data schema." + } + ] + } + }, + "additionalProperties": true + }, + "eventConsumptionStrategy": { + "type": "object", + "title": "EventConsumptionStrategy", + "description": "Describe the event consumption strategy to adopt.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AllEventConsumptionStrategy", + "properties": { + "all": { + "type": "array", + "title": "AllEventConsumptionStrategyConfiguration", + "description": "A list containing all the events that must be consumed.", + "items": { + "$ref": "#/$defs/eventFilter" + } + } + }, + "required": [ + "all" + ] + }, + { + "title": "AnyEventConsumptionStrategy", + "properties": { + "any": { + "type": "array", + "title": "AnyEventConsumptionStrategyConfiguration", + "description": "A list containing any of the events to consume.", + "items": { + "$ref": "#/$defs/eventFilter" + } + } + }, + "required": [ + "any" + ] + }, + { + "title": "OneEventConsumptionStrategy", + "properties": { + "one": { + "$ref": "#/$defs/eventFilter", + "title": "OneEventConsumptionStrategyConfiguration", + "description": "The single event to consume." + } + }, + "required": [ + "one" + ] + } + ] + }, + "eventFilter": { + "type": "object", + "title": "EventFilter", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.", + "unevaluatedProperties": false, + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "minProperties": 1, + "title": "WithEvent", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes." + }, + "correlate": { + "type": "object", + "title": "EventFilterCorrelate", + "description": "A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics.", + "additionalProperties": { + "type": "object", + "properties": { + "from": { + "type": "string", + "title": "CorrelateFrom", + "description": "A runtime expression used to extract the correlation value from the filtered event." + }, + "expect": { + "type": "string", + "title": "CorrelateExpect", + "description": "A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation." + } + }, + "required": [ + "from" + ] + } + } + }, + "required": [ + "with" + ] + }, + "extension": { + "type": "object", + "title": "Extension", + "description": "The definition of an extension.", + "unevaluatedProperties": false, + "properties": { + "extend": { + "type": "string", + "enum": [ + "call", + "composite", + "emit", + "for", + "listen", + "raise", + "run", + "set", + "switch", + "try", + "wait", + "all" + ], + "title": "ExtensionTarget", + "description": "The type of task to extend." + }, + "when": { + "type": "string", + "title": "ExtensionCondition", + "description": "A runtime expression, if any, used to determine whether or not the extension should apply in the specified context." + }, + "before": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoBefore", + "description": "The task(s) to execute before the extended task, if any." + }, + "after": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoAfter", + "description": "The task(s) to execute after the extended task, if any." + } + }, + "required": [ + "extend" + ] + }, + "externalResource": { + "type": "object", + "title": "ExternalResource", + "description": "Represents an external resource.", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "ExternalResourceName", + "description": "The name of the external resource, if any." + }, + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "ExternalResourceEndpoint", + "description": "The endpoint of the external resource." + } + }, + "required": [ + "endpoint" + ] + }, + "input": { + "type": "object", + "title": "Input", + "description": "Configures the input of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "InputSchema", + "description": "The schema used to describe and validate the input of the workflow or task." + }, + "from": { + "title": "InputFrom", + "description": "A runtime expression, if any, used to mutate and/or filter the input of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "output": { + "type": "object", + "title": "Output", + "description": "Configures the output of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "OutputSchema", + "description": "The schema used to describe and validate the output of the workflow or task." + }, + "as": { + "title": "OutputAs", + "description": "A runtime expression, if any, used to mutate and/or filter the output of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "export": { + "type": "object", + "title": "Export", + "description": "Set the content of the context. .", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "ExportSchema", + "description": "The schema used to describe and validate the workflow context." + }, + "as": { + "title": "ExportAs", + "description": "A runtime expression, if any, used to export the output data to the context.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "retryPolicy": { + "type": "object", + "title": "RetryPolicy", + "description": "Defines a retry policy.", + "unevaluatedProperties": false, + "properties": { + "when": { + "type": "string", + "title": "RetryWhen", + "description": "A runtime expression, if any, used to determine whether or not to retry running the task, in a given context." + }, + "exceptWhen": { + "type": "string", + "title": "RetryExcepWhen", + "description": "A runtime expression used to determine whether or not to retry running the task, in a given context." + }, + "delay": { + "$ref": "#/$defs/duration", + "title": "RetryDelay", + "description": "The duration to wait between retry attempts." + }, + "backoff": { + "type": "object", + "title": "RetryBackoff", + "description": "The retry duration backoff.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "ConstantBackoff", + "properties": { + "constant": { + "type": "object", + "description": "The definition of the constant backoff to use, if any." + } + }, + "required": [ + "constant" + ] + }, + { + "title": "ExponentialBackOff", + "properties": { + "exponential": { + "type": "object", + "description": "The definition of the exponential backoff to use, if any." + } + }, + "required": [ + "exponential" + ] + }, + { + "title": "LinearBackoff", + "properties": { + "linear": { + "type": "object", + "description": "The definition of the linear backoff to use, if any." + } + }, + "required": [ + "linear" + ] + } + ] + }, + "limit": { + "type": "object", + "title": "RetryLimit", + "unevaluatedProperties": false, + "properties": { + "attempt": { + "type": "object", + "title": "RetryLimitAttempt", + "unevaluatedProperties": false, + "properties": { + "count": { + "type": "integer", + "title": "RetryLimitAttemptCount", + "description": "The maximum amount of retry attempts, if any." + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitAttemptDuration", + "description": "The maximum duration for each retry attempt." + } + } + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitDuration", + "description": "The duration limit, if any, for all retry attempts." + } + }, + "description": "The retry limit, if any." + }, + "jitter": { + "type": "object", + "title": "RetryPolicyJitter", + "description": "The parameters, if any, that control the randomness or variability of the delay between retry attempts.", + "unevaluatedProperties": false, + "properties": { + "from": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterFrom", + "description": "The minimum duration of the jitter range." + }, + "to": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterTo", + "description": "The maximum duration of the jitter range." + } + }, + "required": [ + "from", + "to" + ] + } + } + }, + "schema": { + "type": "object", + "title": "Schema", + "description": "Represents the definition of a schema.", + "unevaluatedProperties": false, + "properties": { + "format": { + "type": "string", + "default": "json", + "title": "SchemaFormat", + "description": "The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`." + } + }, + "oneOf": [ + { + "title": "SchemaInline", + "properties": { + "document": { + "description": "The schema's inline definition." + } + }, + "required": [ + "document" + ] + }, + { + "title": "SchemaExternal", + "properties": { + "resource": { + "$ref": "#/$defs/externalResource", + "title": "SchemaExternalResource", + "description": "The schema's external resource." + } + }, + "required": [ + "resource" + ] + } + ] + }, + "timeout": { + "type": "object", + "title": "Timeout", + "description": "The definition of a timeout.", + "unevaluatedProperties": false, + "properties": { + "after": { + "$ref": "#/$defs/duration", + "title": "TimeoutAfter", + "description": "The duration after which to timeout." + } + }, + "required": [ + "after" + ] + }, + "runtimeExpression": { + "type": "string", + "title": "RuntimeExpression", + "description": "A runtime expression.", + "pattern": "^\\s*\\$\\{.+\\}\\s*$" + } + } +} \ No newline at end of file diff --git a/public/schemas/1.0.0-alpha4/workflow.yaml b/public/schemas/1.0.0-alpha4/workflow.yaml new file mode 100644 index 0000000..d8f3460 --- /dev/null +++ b/public/schemas/1.0.0-alpha4/workflow.yaml @@ -0,0 +1,1492 @@ +$id: https://open-workflow-specification.org/schemas/1.0.0-alpha4/workflow.yaml +$schema: https://json-schema.org/draft/2020-12/schema +description: Open Workflow Specification DSL - Workflow Schema. +type: object +required: [ document, do ] +properties: + document: + type: object + title: Document + description: Documents the workflow. + unevaluatedProperties: false + properties: + dsl: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowDSL + description: The version of the DSL used by the workflow. + namespace: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowNamespace + description: The workflow's namespace. + name: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowName + description: The workflow's name. + version: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowVersion + description: The workflow's semantic version. + title: + type: string + title: WorkflowTitle + description: The workflow's title. + summary: + type: string + title: WorkflowSummary + description: The workflow's Markdown summary. + tags: + type: object + title: WorkflowTags + description: A key/value mapping of the workflow's tags, if any. + additionalProperties: true + metadata: + type: object + title: WorkflowMetadata + description: Holds additional information about the workflow. + additionalProperties: true + required: [ dsl, namespace, name, version ] + input: + $ref: '#/$defs/input' + title: Input + description: Configures the workflow's input. + use: + type: object + title: Use + description: Defines the workflow's reusable components. + unevaluatedProperties: false + properties: + authentications: + type: object + title: UseAuthentications + description: The workflow's reusable authentication policies. + additionalProperties: + $ref: '#/$defs/authenticationPolicy' + errors: + type: object + title: UseErrors + description: The workflow's reusable errors. + additionalProperties: + $ref: '#/$defs/error' + extensions: + type: array + title: UseExtensions + description: The workflow's extensions. + items: + type: object + title: ExtensionItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/extension' + functions: + type: object + title: UseFunctions + description: The workflow's reusable functions. + additionalProperties: + $ref: '#/$defs/task' + retries: + type: object + title: UseRetries + description: The workflow's reusable retry policies. + additionalProperties: + $ref: '#/$defs/retryPolicy' + secrets: + type: array + title: UseSecrets + description: The workflow's reusable secrets. + items: + type: string + description: The workflow's secrets. + timeouts: + type: object + title: UseTimeouts + description: The workflow's reusable timeouts. + additionalProperties: + $ref: '#/$defs/timeout' + do: + $ref: '#/$defs/taskList' + title: Do + description: Defines the task(s) the workflow must perform. + timeout: + oneOf: + - $ref: '#/$defs/timeout' + title: TimeoutDefinition + description: The workflow's timeout configuration, if any. + - type: string + title: TimeoutReference + description: The name of the workflow's timeout, if any. + output: + $ref: '#/$defs/output' + title: Output + description: Configures the workflow's output. + schedule: + type: object + title: Schedule + description: Schedules the workflow. + unevaluatedProperties: false + properties: + every: + $ref: '#/$defs/duration' + title: ScheduleEvery + description: Specifies the duration of the interval at which the workflow should be executed. + cron: + type: string + title: ScheduleCron + description: Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight. + after: + $ref: '#/$defs/duration' + title: ScheduleAfter + description: Specifies a delay duration that the workflow must wait before starting again after it completes. + on: + $ref: '#/$defs/eventConsumptionStrategy' + title: ScheduleOn + description: Specifies the events that trigger the workflow execution. +$defs: + taskList: + title: TaskList + description: List of named tasks to perform. + type: array + items: + type: object + title: TaskItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/task' + taskBase: + type: object + title: TaskBase + description: An object inherited by all tasks. + properties: + if: + type: string + title: TaskBaseIf + description: A runtime expression, if any, used to determine whether or not the task should be run. + input: + $ref: '#/$defs/input' + title: TaskBaseInput + description: Configure the task's input. + output: + $ref: '#/$defs/output' + title: TaskBaseOutput + description: Configure the task's output. + export: + $ref: '#/$defs/export' + title: TaskBaseExport + description: Export task output to context. + timeout: + oneOf: + - $ref: '#/$defs/timeout' + title: TaskTimeoutDefinition + description: The task's timeout configuration, if any. + - type: string + title: TaskTimeoutReference + description: The name of the task's timeout, if any. + then: + $ref: '#/$defs/flowDirective' + title: TaskBaseThen + description: The flow directive to be performed upon completion of the task. + metadata: + type: object + title: TaskMetadata + description: Holds additional information about the task. + additionalProperties: true + task: + title: Task + description: A discrete unit of work that contributes to achieving the overall objectives defined by the workflow. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/callTask' + - $ref: '#/$defs/doTask' + - $ref: '#/$defs/forkTask' + - $ref: '#/$defs/emitTask' + - $ref: '#/$defs/forTask' + - $ref: '#/$defs/listenTask' + - $ref: '#/$defs/raiseTask' + - $ref: '#/$defs/runTask' + - $ref: '#/$defs/setTask' + - $ref: '#/$defs/switchTask' + - $ref: '#/$defs/tryTask' + - $ref: '#/$defs/waitTask' + callTask: + title: CallTask + description: Defines the call to perform. + oneOf: + - title: CallAsyncAPI + description: Defines the AsyncAPI call to perform. + $ref: '#/$defs/taskBase' + type: object + required: [ call, with ] + unevaluatedProperties: false + properties: + call: + type: string + const: asyncapi + with: + type: object + title: AsyncApiArguments + description: The Async API call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: WithAsyncAPIDocument + description: The document that defines the AsyncAPI operation to call. + operationRef: + type: string + title: WithAsyncAPIOperation + description: A reference to the AsyncAPI operation to call. + server: + type: string + title: WithAsyncAPIServer + description: A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel. + message: + type: string + title: WithAsyncAPIMessage + description: The name of the message to use. If not set, defaults to the first message defined by the operation. + binding: + type: string + title: WithAsyncAPIBinding + description: The name of the binding to use. If not set, defaults to the first binding defined by the operation. + payload: + type: object + title: WithAsyncAPIPayload + description: The payload to call the AsyncAPI operation with, if any. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithAsyncAPIAuthentication + description: The authentication policy, if any, to use when calling the AsyncAPI operation. + required: [ document, operationRef ] + unevaluatedProperties: false + - title: CallGRPC + description: Defines the GRPC call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: grpc + with: + type: object + title: GRPCArguments + description: The GRPC call arguments. + properties: + proto: + $ref: '#/$defs/externalResource' + title: WithGRPCProto + description: The proto resource that describes the GRPC service to call. + service: + type: object + title: WithGRPCService + unevaluatedProperties: false + properties: + name: + type: string + title: WithGRPCServiceName + description: The name of the GRPC service to call. + host: + type: string + title: WithGRPCServiceHost + description: The hostname of the GRPC service to call. + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + port: + type: integer + title: WithGRPCServicePost + description: The port number of the GRPC service to call. + minimum: 0 + maximum: 65535 + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithGRPCServiceAuthentication + description: The endpoint's authentication policy, if any. + required: [ name, host ] + method: + type: string + title: WithGRPCMethod + description: The name of the method to call on the defined GRPC service. + arguments: + type: object + title: WithGRPCArguments + description: The arguments, if any, to call the method with. + additionalProperties: true + required: [ proto, service, method ] + unevaluatedProperties: false + - title: CallHTTP + description: Defines the HTTP call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: http + with: + type: object + title: HTTPArguments + description: The HTTP call arguments. + properties: + method: + type: string + title: WithHTTPMethod + description: The HTTP method of the HTTP request to perform. + endpoint: + title: WithHTTPEndpoint + description: The HTTP endpoint to send the request to. + $ref: '#/$defs/endpoint' + headers: + type: object + title: WithHTTPHeaders + description: A name/value mapping of the headers, if any, of the HTTP request to perform. + body: + title: WithHTTPBody + description: The body, if any, of the HTTP request to perform. + query: + type: object + title: WithHTTPQuery + description: A name/value mapping of the query parameters, if any, of the HTTP request to perform. + additionalProperties: true + output: + type: string + title: WithHTTPOutput + description: The http call output format. Defaults to 'content'. + enum: [ raw, content, response ] + required: [ method, endpoint ] + unevaluatedProperties: false + - title: CallOpenAPI + description: Defines the OpenAPI call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: openapi + with: + type: object + title: OpenAPIArguments + description: The OpenAPI call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: WithOpenAPIDocument + description: The document that defines the OpenAPI operation to call. + operationId: + type: string + title: WithOpenAPIOperation + description: The id of the OpenAPI operation to call. + parameters: + type: object + title: WithOpenAPIParameters + description: A name/value mapping of the parameters of the OpenAPI operation to call. + additionalProperties: true + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithOpenAPIAuthentication + description: The authentication policy, if any, to use when calling the OpenAPI operation. + output: + type: string + enum: [ raw, content, response ] + title: WithOpenAPIOutput + description: The http call output format. Defaults to 'content'. + required: [ document, operationId ] + unevaluatedProperties: false + - title: CallFunction + description: Defines the function call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call ] + properties: + call: + type: string + not: + enum: ["asyncapi", "grpc", "http", "openapi"] + description: The name of the function to call. + with: + type: object + title: FunctionArguments + description: A name/value mapping of the parameters, if any, to call the function with. + additionalProperties: true + forkTask: + type: object + $ref: '#/$defs/taskBase' + title: ForkTask + description: Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output. + unevaluatedProperties: false + required: [ fork ] + properties: + fork: + type: object + title: ForkTaskConfiguration + description: The configuration of the branches to perform concurrently. + unevaluatedProperties: false + required: [ branches ] + properties: + branches: + $ref: '#/$defs/taskList' + title: ForkBranches + compete: + type: boolean + title: ForkCompete + description: Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output. + default: false + doTask: + type: object + $ref: '#/$defs/taskBase' + title: DoTask + description: Allows to execute a list of tasks in sequence. + unevaluatedProperties: false + required: [ do ] + properties: + do: + $ref: '#/$defs/taskList' + title: DoTaskConfiguration + description: The configuration of the tasks to perform sequentially. + emitTask: + type: object + $ref: '#/$defs/taskBase' + title: EmitTask + description: Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services. + required: [ emit ] + unevaluatedProperties: false + properties: + emit: + type: object + title: EmitTaskConfiguration + description: The configuration of an event's emission. + unevaluatedProperties: false + properties: + event: + type: object + title: EmitEventDefinition + description: The definition of the event to emit. + properties: + with: + $ref: '#/$defs/eventProperties' + title: EmitEventWith + description: Defines the properties of event to emit. + required: [ source, type ] + additionalProperties: true + required: [ event ] + forTask: + type: object + $ref: '#/$defs/taskBase' + title: ForTask + description: Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets. + required: [ for, do ] + unevaluatedProperties: false + properties: + for: + type: object + title: ForTaskConfiguration + description: The definition of the loop that iterates over a range of values. + unevaluatedProperties: false + properties: + each: + type: string + title: ForEach + description: The name of the variable used to store the current item being enumerated. + default: item + in: + type: string + title: ForIn + description: A runtime expression used to get the collection to enumerate. + at: + type: string + title: ForAt + description: The name of the variable used to store the index of the current item being enumerated. + default: index + required: [ in ] + while: + type: string + title: While + description: A runtime expression that represents the condition, if any, that must be met for the iteration to continue. + do: + $ref: '#/$defs/taskList' + title: ForTaskDo + listenTask: + type: object + $ref: '#/$defs/taskBase' + title: ListenTask + description: Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems. + required: [ listen ] + unevaluatedProperties: false + properties: + listen: + type: object + title: ListenTaskConfiguration + description: The configuration of the listener to use. + unevaluatedProperties: false + properties: + to: + $ref: '#/$defs/eventConsumptionStrategy' + title: ListenTo + description: Defines the event(s) to listen to. + required: [ to ] + raiseTask: + type: object + $ref: '#/$defs/taskBase' + title: RaiseTask + description: Intentionally triggers and propagates errors. + required: [ raise ] + unevaluatedProperties: false + properties: + raise: + type: object + title: RaiseTaskConfiguration + description: The definition of the error to raise. + unevaluatedProperties: false + properties: + error: + oneOf: + - $ref: '#/$defs/error' + title: RaiseErrorDefinition + description: Defines the error to raise. + - type: string + title: RaiseErrorReference + description: The name of the error to raise + required: [ error ] + runTask: + type: object + $ref: '#/$defs/taskBase' + title: RunTask + description: Provides the capability to execute external containers, shell commands, scripts, or workflows. + required: [ run ] + unevaluatedProperties: false + properties: + run: + type: object + title: RunTaskConfiguration + description: The configuration of the process to execute. + unevaluatedProperties: false + properties: + await: + type: boolean + default: true + title: AwaitProcessCompletion + description: Whether to await the process completion before continuing. + oneOf: + - title: RunContainer + description: Enables the execution of external processes encapsulated within a containerized environment. + properties: + container: + type: object + title: Container + description: The configuration of the container to run. + unevaluatedProperties: false + properties: + image: + type: string + title: ContainerImage + description: The name of the container image to run. + command: + type: string + title: ContainerCommand + description: The command, if any, to execute on the container. + ports: + type: object + title: ContainerPorts + description: The container's port mappings, if any. + volumes: + type: object + title: ContainerVolumes + description: The container's volume mappings, if any. + environment: + type: object + title: ContainerEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + required: [ image ] + required: [ container ] + - title: RunScript + description: Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages. + properties: + script: + type: object + title: Script + description: The configuration of the script to run. + unevaluatedProperties: false + properties: + language: + type: string + title: ScriptLanguage + description: The language of the script to run. + arguments: + type: object + title: ScriptArguments + description: A key/value mapping of the arguments, if any, to use when running the configured script. + additionalProperties: true + environment: + type: object + title: ScriptEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured script process. + additionalProperties: true + oneOf: + - title: InlineScript + type: object + description: The script's code. + properties: + code: + type: string + title: InlineScriptCode + required: [ code ] + - title: ExternalScript + type: object + description: The script's resource. + properties: + source: + $ref: '#/$defs/externalResource' + title: ExternalScriptResource + required: [ source ] + required: [ language ] + required: [ script ] + - title: RunShell + description: Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks. + properties: + shell: + type: object + title: Shell + description: The configuration of the shell command to run. + unevaluatedProperties: false + properties: + command: + type: string + title: ShellCommand + description: The shell command to run. + arguments: + type: object + title: ShellArguments + description: A list of the arguments of the shell command to run. + additionalProperties: true + environment: + type: object + title: ShellEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + additionalProperties: true + required: [ command ] + required: [ shell ] + - title: RunWorkflow + description: Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units. + properties: + workflow: + type: object + title: SubflowConfiguration + description: The configuration of the workflow to run. + unevaluatedProperties: false + properties: + namespace: + type: string + title: SubflowNamespace + description: The namespace the workflow to run belongs to. + name: + type: string + title: SubflowName + description: The name of the workflow to run. + version: + type: string + default: latest + title: SubflowVersion + description: The version of the workflow to run. Defaults to latest. + input: + type: object + title: SubflowInput + description: The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified. + additionalProperties: true + required: [ namespace, name, version ] + required: [ workflow ] + setTask: + type: object + $ref: '#/$defs/taskBase' + title: SetTask + description: A task used to set data. + required: [ set ] + unevaluatedProperties: false + properties: + set: + type: object + title: SetTaskConfiguration + description: The data to set. + minProperties: 1 + additionalProperties: true + switchTask: + type: object + $ref: '#/$defs/taskBase' + title: SwitchTask + description: Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria. + required: [ switch ] + unevaluatedProperties: false + properties: + switch: + type: array + title: SwitchTaskConfiguration + description: The definition of the switch to use. + minItems: 1 + items: + type: object + title: SwitchItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + type: object + title: SwitchCase + description: The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met. + unevaluatedProperties: false + required: [ then ] + properties: + when: + type: string + title: SwitchCaseCondition + description: A runtime expression used to determine whether or not the case matches. + then: + $ref: '#/$defs/flowDirective' + title: SwitchCaseOutcome + description: The flow directive to execute when the case matches. + tryTask: + type: object + $ref: '#/$defs/taskBase' + title: TryTask + description: Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones. + required: [ try, catch ] + unevaluatedProperties: false + properties: + try: + $ref: '#/$defs/taskList' + title: TryTaskConfiguration + description: The task(s) to perform. + catch: + type: object + title: TryTaskCatch + description: The object used to define the errors to catch. + unevaluatedProperties: false + properties: + errors: + type: object + title: CatchErrors + description: The configuration of a concept used to catch errors. + as: + type: string + title: CatchAs + description: The name of the runtime expression variable to save the error as. Defaults to 'error'. + when: + type: string + title: CatchWhen + description: A runtime expression used to determine whether or not to catch the filtered error. + exceptWhen: + type: string + title: CatchExceptWhen + description: A runtime expression used to determine whether or not to catch the filtered error. + retry: + oneOf: + - $ref: '#/$defs/retryPolicy' + title: RetryPolicyDefinition + description: The retry policy to use, if any, when catching errors. + - type: string + title: RetryPolicyReference + description: The name of the retry policy to use, if any, when catching errors. + do: + $ref: '#/$defs/taskList' + title: TryTaskCatchDo + description: The definition of the task(s) to run when catching an error. + waitTask: + type: object + $ref: '#/$defs/taskBase' + title: WaitTask + description: Allows workflows to pause or delay their execution for a specified period of time. + required: [ wait ] + unevaluatedProperties: false + properties: + wait: + $ref: '#/$defs/duration' + title: WaitTaskConfiguration + description: The amount of time to wait. + flowDirective: + title: FlowDirective + description: Represents different transition options for a workflow. + anyOf: + - type: string + enum: [ continue, exit, end ] + default: continue + - type: string + referenceableAuthenticationPolicy: + type: object + title: ReferenceableAuthenticationPolicy + description: Represents a referenceable authentication policy. + unevaluatedProperties: false + oneOf: + - title: AuthenticationPolicyReference + description: The reference of the authentication policy to use. + properties: + use: + type: string + minLength: 1 + title: ReferenceableAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + - $ref: '#/$defs/authenticationPolicy' + secretBasedAuthenticationPolicy: + type: object + title: SecretBasedAuthenticationPolicy + description: Represents an authentication policy based on secrets. + unevaluatedProperties: false + properties: + use: + type: string + minLength: 1 + title: SecretBasedAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + authenticationPolicy: + type: object + title: AuthenticationPolicy + description: Defines an authentication policy. + oneOf: + - title: BasicAuthenticationPolicy + description: Use basic authentication. + properties: + basic: + type: object + title: BasicAuthenticationPolicyConfiguration + description: The configuration of the basic authentication policy. + unevaluatedProperties: false + oneOf: + - title: BasicAuthenticationProperties + description: Inline configuration of the basic authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BasicAuthenticationPolicySecret + description: Secret based configuration of the basic authentication policy. + required: [ basic ] + - title: BearerAuthenticationPolicy + description: Use bearer authentication. + properties: + bearer: + type: object + title: BearerAuthenticationPolicyConfiguration + description: The configuration of the bearer authentication policy. + unevaluatedProperties: false + oneOf: + - title: BearerAuthenticationProperties + description: Inline configuration of the bearer authentication policy. + properties: + token: + type: string + description: The bearer token to use. + required: [ token ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BearerAuthenticationPolicySecret + description: Secret based configuration of the bearer authentication policy. + required: [ bearer ] + - title: DigestAuthenticationPolicy + description: Use digest authentication. + properties: + digest: + type: object + title: DigestAuthenticationPolicyConfiguration + description: The configuration of the digest authentication policy. + unevaluatedProperties: false + oneOf: + - title: DigestAuthenticationProperties + description: Inline configuration of the digest authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: DigestAuthenticationPolicySecret + description: Secret based configuration of the digest authentication policy. + required: [ digest ] + - title: OAuth2AuthenticationPolicy + description: Use OAuth2 authentication. + properties: + oauth2: + type: object + title: OAuth2AuthenticationPolicyConfiguration + description: The configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + oneOf: + - type: object + title: OAuth2ConnectAuthenticationProperties + description: The inline configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + - type: object + properties: + endpoints: + type: object + title: OAuth2AuthenticationPropertiesEndpoints + description: The endpoint configurations for OAuth2. + properties: + token: + type: string + format: uri-template + default: /oauth2/token + title: OAuth2TokenEndpoint + description: The relative path to the token endpoint. Defaults to `/oauth2/token`. + revocation: + type: string + format: uri-template + default: /oauth2/revoke + title: OAuth2RevocationEndpoint + description: The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`. + introspection: + type: string + format: uri-template + default: /oauth2/introspect + title: OAuth2IntrospectionEndpoint + description: The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`. + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OAuth2AuthenticationPolicySecret + description: Secret based configuration of the OAuth2 authentication policy. + required: [ oauth2 ] + - title: OpenIdConnectAuthenticationPolicy + description: Use OpenIdConnect authentication. + properties: + oidc: + type: object + title: OpenIdConnectAuthenticationPolicyConfiguration + description: The configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + title: OpenIdConnectAuthenticationProperties + description: The inline configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OpenIdConnectAuthenticationPolicySecret + description: Secret based configuration of the OpenIdConnect authentication policy. + required: [ oidc ] + oauth2AuthenticationProperties: + type: object + title: OAuth2AutenthicationData + description: Inline configuration of the OAuth2 authentication policy. + properties: + authority: + $ref: '#/$defs/uriTemplate' + title: OAuth2AutenthicationDataAuthority + description: The URI that references the OAuth2 authority to use. + grant: + type: string + enum: [ authorization_code, client_credentials, password, refresh_token, 'urn:ietf:params:oauth:grant-type:token-exchange'] + title: OAuth2AutenthicationDataGrant + description: The grant type to use. + client: + type: object + title: OAuth2AutenthicationDataClient + description: The definition of an OAuth2 client. + unevaluatedProperties: false + properties: + id: + type: string + title: ClientId + description: The client id to use. + secret: + type: string + title: ClientSecret + description: The client secret to use, if any. + assertion: + type: string + title: ClientAssertion + description: A JWT containing a signed assertion with your application credentials. + authentication: + type: string + enum: [ client_secret_basic, client_secret_post, client_secret_jwt, private_key_jwt, none ] + default: client_secret_post + title: ClientAuthentication + description: The authentication method to use to authenticate the client. + request: + type: object + title: OAuth2TokenRequest + description: The configuration of an OAuth2 token request + properties: + encoding: + type: string + enum: [ 'application/x-www-form-urlencoded', 'application/json' ] + default: 'application/x-www-form-urlencoded' + title: Oauth2TokenRequestEncoding + issuers: + type: array + title: OAuth2Issuers + description: A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens. + items: + type: string + scopes: + type: array + title: OAuth2AutenthicationDataScopes + description: The scopes, if any, to request the token for. + items: + type: string + audiences: + type: array + title: OAuth2AutenthicationDataAudiences + description: The audiences, if any, to request the token for. + items: + type: string + username: + type: string + title: OAuth2AutenthicationDataUsername + description: The username to use. Used only if the grant type is Password. + password: + type: string + title: OAuth2AutenthicationDataPassword + description: The password to use. Used only if the grant type is Password. + subject: + $ref: '#/$defs/oauth2Token' + title: OAuth2AutenthicationDataSubject + description: The security token that represents the identity of the party on behalf of whom the request is being made. + actor: + $ref: '#/$defs/oauth2Token' + title: OAuth2AutenthicationDataActor + description: The security token that represents the identity of the acting party. + oauth2Token: + type: object + title: OAuth2TokenDefinition + description: Represents an OAuth2 token. + unevaluatedProperties: false + properties: + token: + type: string + title: OAuth2Token + description: The security token to use. + type: + type: string + title: OAuth2TokenType + description: The type of the security token to use. + required: [ token, type ] + duration: + oneOf: + - type: object + minProperties: 1 + unevaluatedProperties: false + properties: + days: + type: integer + title: DurationDays + description: Number of days, if any. + hours: + type: integer + title: DurationHours + description: Number of days, if any. + minutes: + type: integer + title: DurationMinutes + description: Number of minutes, if any. + seconds: + type: integer + title: DurationSeconds + description: Number of seconds, if any. + milliseconds: + type: integer + title: DurationMilliseconds + description: Number of milliseconds, if any. + title: DurationInline + description: The inline definition of a duration. + - type: string + pattern: '^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$' + title: DurationExpression + description: The ISO 8601 expression of a duration. + error: + type: object + title: Error + description: Represents an error. + unevaluatedProperties: false + properties: + type: + title: ErrorType + description: A URI reference that identifies the error type. + oneOf: + - title: LiteralErrorType + $ref: '#/$defs/uriTemplate' + description: The literal error type. + - title: ExpressionErrorType + $ref: '#/$defs/runtimeExpression' + description: An expression based error type. + status: + type: integer + title: ErrorStatus + description: The status code generated by the origin for this occurrence of the error. + instance: + title: ErrorInstance + description: A JSON Pointer used to reference the component the error originates from. + oneOf: + - title: LiteralErrorInstance + description: The literal error instance. + type: string + format: json-pointer + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorInstance + description: An expression based error instance. + title: + type: string + title: ErrorTitle + description: A short, human-readable summary of the error. + detail: + type: string + title: ErrorDetails + description: A human-readable explanation specific to this occurrence of the error. + required: [ type, status ] + uriTemplate: + title: UriTemplate + anyOf: + - title: LiteralUriTemplate + type: string + format: uri-template + pattern: "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + - title: LiteralUri + type: string + format: uri + pattern: "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + endpoint: + title: Endpoint + description: Represents an endpoint. + oneOf: + - $ref: '#/$defs/runtimeExpression' + - $ref: '#/$defs/uriTemplate' + - title: EndpointConfiguration + type: object + unevaluatedProperties: false + properties: + uri: + title: EndpointUri + description: The endpoint's URI. + oneOf: + - title: LiteralEndpointURI + description: The literal endpoint's URI. + $ref: '#/$defs/uriTemplate' + - title: ExpressionEndpointURI + $ref: '#/$defs/runtimeExpression' + description: An expression based endpoint's URI. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: EndpointAuthentication + description: The authentication policy to use. + required: [ uri ] + eventProperties: + type: object + title: EventProperties + description: Describes the properties of an event. + properties: + id: + type: string + title: EventId + description: The event's unique identifier. + source: + title: EventSource + description: Identifies the context in which an event happened. + oneOf: + - $ref: '#/$defs/uriTemplate' + - $ref: '#/$defs/runtimeExpression' + type: + type: string + title: EventType + description: This attribute contains a value describing the type of event related to the originating occurrence. + time: + title: EventTime + description: When the event occured. + oneOf: + - title: LiteralTime + type: string + format: date-time + - $ref: '#/$defs/runtimeExpression' + subject: + type: string + title: EventSubject + description: The subject of the event. + datacontenttype: + type: string + title: EventDataContentType + description: Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format. + dataschema: + title: EventDataschema + description: The schema describing the event format. + oneOf: + - title: LiteralDataSchema + $ref: '#/$defs/uriTemplate' + description: The literal event data schema. + - title: ExpressionDataSchema + $ref: '#/$defs/runtimeExpression' + description: An expression based event data schema. + additionalProperties: true + eventConsumptionStrategy: + type: object + title: EventConsumptionStrategy + description: Describe the event consumption strategy to adopt. + unevaluatedProperties: false + oneOf: + - title: AllEventConsumptionStrategy + properties: + all: + type: array + title: AllEventConsumptionStrategyConfiguration + description: A list containing all the events that must be consumed. + items: + $ref: '#/$defs/eventFilter' + required: [ all ] + - title: AnyEventConsumptionStrategy + properties: + any: + type: array + title: AnyEventConsumptionStrategyConfiguration + description: A list containing any of the events to consume. + items: + $ref: '#/$defs/eventFilter' + required: [ any ] + - title: OneEventConsumptionStrategy + properties: + one: + $ref: '#/$defs/eventFilter' + title: OneEventConsumptionStrategyConfiguration + description: The single event to consume. + required: [ one ] + eventFilter: + type: object + title: EventFilter + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + unevaluatedProperties: false + properties: + with: + $ref: '#/$defs/eventProperties' + minProperties: 1 + title: WithEvent + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + correlate: + type: object + title: EventFilterCorrelate + description: A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics. + additionalProperties: + type: object + properties: + from: + type: string + title: CorrelateFrom + description: A runtime expression used to extract the correlation value from the filtered event. + expect: + type: string + title: CorrelateExpect + description: A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation. + required: [ from ] + required: [ with ] + extension: + type: object + title: Extension + description: The definition of an extension. + unevaluatedProperties: false + properties: + extend: + type: string + enum: [ call, composite, emit, for, listen, raise, run, set, switch, try, wait, all ] + title: ExtensionTarget + description: The type of task to extend. + when: + type: string + title: ExtensionCondition + description: A runtime expression, if any, used to determine whether or not the extension should apply in the specified context. + before: + $ref: '#/$defs/taskList' + title: ExtensionDoBefore + description: The task(s) to execute before the extended task, if any. + after: + $ref: '#/$defs/taskList' + title: ExtensionDoAfter + description: The task(s) to execute after the extended task, if any. + required: [ extend ] + externalResource: + type: object + title: ExternalResource + description: Represents an external resource. + unevaluatedProperties: false + properties: + name: + type: string + title: ExternalResourceName + description: The name of the external resource, if any. + endpoint: + $ref: '#/$defs/endpoint' + title: ExternalResourceEndpoint + description: The endpoint of the external resource. + required: [ endpoint ] + input: + type: object + title: Input + description: Configures the input of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: InputSchema + description: The schema used to describe and validate the input of the workflow or task. + from: + title: InputFrom + description: A runtime expression, if any, used to mutate and/or filter the input of the workflow or task. + oneOf: + - type: string + - type: object + output: + type: object + title: Output + description: Configures the output of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: OutputSchema + description: The schema used to describe and validate the output of the workflow or task. + as: + title: OutputAs + description: A runtime expression, if any, used to mutate and/or filter the output of the workflow or task. + oneOf: + - type: string + - type: object + export: + type: object + title: Export + description: Set the content of the context. . + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: ExportSchema + description: The schema used to describe and validate the workflow context. + as: + title: ExportAs + description: A runtime expression, if any, used to export the output data to the context. + oneOf: + - type: string + - type: object + retryPolicy: + type: object + title: RetryPolicy + description: Defines a retry policy. + unevaluatedProperties: false + properties: + when: + type: string + title: RetryWhen + description: A runtime expression, if any, used to determine whether or not to retry running the task, in a given context. + exceptWhen: + type: string + title: RetryExcepWhen + description: A runtime expression used to determine whether or not to retry running the task, in a given context. + delay: + $ref: '#/$defs/duration' + title: RetryDelay + description: The duration to wait between retry attempts. + backoff: + type: object + title: RetryBackoff + description: The retry duration backoff. + unevaluatedProperties: false + oneOf: + - title: ConstantBackoff + properties: + constant: + type: object + description: The definition of the constant backoff to use, if any. + required: [ constant ] + - title: ExponentialBackOff + properties: + exponential: + type: object + description: The definition of the exponential backoff to use, if any. + required: [ exponential ] + - title: LinearBackoff + properties: + linear: + type: object + description: The definition of the linear backoff to use, if any. + required: [ linear ] + limit: + type: object + title: RetryLimit + unevaluatedProperties: false + properties: + attempt: + type: object + title: RetryLimitAttempt + unevaluatedProperties: false + properties: + count: + type: integer + title: RetryLimitAttemptCount + description: The maximum amount of retry attempts, if any. + duration: + $ref: '#/$defs/duration' + title: RetryLimitAttemptDuration + description: The maximum duration for each retry attempt. + duration: + $ref: '#/$defs/duration' + title: RetryLimitDuration + description: The duration limit, if any, for all retry attempts. + description: The retry limit, if any. + jitter: + type: object + title: RetryPolicyJitter + description: The parameters, if any, that control the randomness or variability of the delay between retry attempts. + unevaluatedProperties: false + properties: + from: + $ref: '#/$defs/duration' + title: RetryPolicyJitterFrom + description: The minimum duration of the jitter range. + to: + $ref: '#/$defs/duration' + title: RetryPolicyJitterTo + description: The maximum duration of the jitter range. + required: [ from, to ] + schema: + type: object + title: Schema + description: Represents the definition of a schema. + unevaluatedProperties: false + properties: + format: + type: string + default: json + title: SchemaFormat + description: The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`. + oneOf: + - title: SchemaInline + properties: + document: + description: The schema's inline definition. + required: [ document ] + - title: SchemaExternal + properties: + resource: + $ref: '#/$defs/externalResource' + title: SchemaExternalResource + description: The schema's external resource. + required: [ resource ] + timeout: + type: object + title: Timeout + description: The definition of a timeout. + unevaluatedProperties: false + properties: + after: + $ref: '#/$defs/duration' + title: TimeoutAfter + description: The duration after which to timeout. + required: [ after ] + runtimeExpression: + type: string + title: RuntimeExpression + description: A runtime expression. + pattern: "^\\s*\\$\\{.+\\}\\s*$" \ No newline at end of file diff --git a/public/schemas/1.0.0-alpha5/workflow.json b/public/schemas/1.0.0-alpha5/workflow.json new file mode 100644 index 0000000..b706300 --- /dev/null +++ b/public/schemas/1.0.0-alpha5/workflow.json @@ -0,0 +1,2279 @@ +{ + "$id": "https://open-workflow-specification.org/schemas/1.0.0-alpha5/workflow.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Open Workflow Specification DSL - Workflow Schema.", + "type": "object", + "required": [ + "document", + "do" + ], + "properties": { + "document": { + "type": "object", + "title": "Document", + "description": "Documents the workflow.", + "unevaluatedProperties": false, + "properties": { + "dsl": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowDSL", + "description": "The version of the DSL used by the workflow." + }, + "namespace": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowNamespace", + "description": "The workflow's namespace." + }, + "name": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowName", + "description": "The workflow's name." + }, + "version": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowVersion", + "description": "The workflow's semantic version." + }, + "title": { + "type": "string", + "title": "WorkflowTitle", + "description": "The workflow's title." + }, + "summary": { + "type": "string", + "title": "WorkflowSummary", + "description": "The workflow's Markdown summary." + }, + "tags": { + "type": "object", + "title": "WorkflowTags", + "description": "A key/value mapping of the workflow's tags, if any.", + "additionalProperties": true + }, + "metadata": { + "type": "object", + "title": "WorkflowMetadata", + "description": "Holds additional information about the workflow.", + "additionalProperties": true + } + }, + "required": [ + "dsl", + "namespace", + "name", + "version" + ] + }, + "input": { + "$ref": "#/$defs/input", + "title": "Input", + "description": "Configures the workflow's input." + }, + "use": { + "type": "object", + "title": "Use", + "description": "Defines the workflow's reusable components.", + "unevaluatedProperties": false, + "properties": { + "authentications": { + "type": "object", + "title": "UseAuthentications", + "description": "The workflow's reusable authentication policies.", + "additionalProperties": { + "$ref": "#/$defs/authenticationPolicy" + } + }, + "errors": { + "type": "object", + "title": "UseErrors", + "description": "The workflow's reusable errors.", + "additionalProperties": { + "$ref": "#/$defs/error" + } + }, + "extensions": { + "type": "array", + "title": "UseExtensions", + "description": "The workflow's extensions.", + "items": { + "type": "object", + "title": "ExtensionItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/extension" + } + } + }, + "functions": { + "type": "object", + "title": "UseFunctions", + "description": "The workflow's reusable functions.", + "additionalProperties": { + "$ref": "#/$defs/task" + } + }, + "retries": { + "type": "object", + "title": "UseRetries", + "description": "The workflow's reusable retry policies.", + "additionalProperties": { + "$ref": "#/$defs/retryPolicy" + } + }, + "secrets": { + "type": "array", + "title": "UseSecrets", + "description": "The workflow's reusable secrets.", + "items": { + "type": "string", + "description": "The workflow's secrets." + } + }, + "timeouts": { + "type": "object", + "title": "UseTimeouts", + "description": "The workflow's reusable timeouts.", + "additionalProperties": { + "$ref": "#/$defs/timeout" + } + }, + "catalogs": { + "type": "object", + "title": "UseCatalogs", + "description": "The workflow's reusable catalogs.", + "additionalProperties": { + "$ref": "#/$defs/catalog" + } + } + } + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "Do", + "description": "Defines the task(s) the workflow must perform." + }, + "timeout": { + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TimeoutDefinition", + "description": "The workflow's timeout configuration, if any." + }, + { + "type": "string", + "title": "TimeoutReference", + "description": "The name of the workflow's timeout, if any." + } + ] + }, + "output": { + "$ref": "#/$defs/output", + "title": "Output", + "description": "Configures the workflow's output." + }, + "schedule": { + "type": "object", + "title": "Schedule", + "description": "Schedules the workflow.", + "unevaluatedProperties": false, + "properties": { + "every": { + "$ref": "#/$defs/duration", + "title": "ScheduleEvery", + "description": "Specifies the duration of the interval at which the workflow should be executed." + }, + "cron": { + "type": "string", + "title": "ScheduleCron", + "description": "Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight." + }, + "after": { + "$ref": "#/$defs/duration", + "title": "ScheduleAfter", + "description": "Specifies a delay duration that the workflow must wait before starting again after it completes." + }, + "on": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ScheduleOn", + "description": "Specifies the events that trigger the workflow execution." + } + } + } + }, + "$defs": { + "taskList": { + "title": "TaskList", + "description": "List of named tasks to perform.", + "type": "array", + "items": { + "type": "object", + "title": "TaskItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/task" + } + } + }, + "taskBase": { + "type": "object", + "title": "TaskBase", + "description": "An object inherited by all tasks.", + "properties": { + "if": { + "type": "string", + "title": "TaskBaseIf", + "description": "A runtime expression, if any, used to determine whether or not the task should be run." + }, + "input": { + "$ref": "#/$defs/input", + "title": "TaskBaseInput", + "description": "Configure the task's input." + }, + "output": { + "$ref": "#/$defs/output", + "title": "TaskBaseOutput", + "description": "Configure the task's output." + }, + "export": { + "$ref": "#/$defs/export", + "title": "TaskBaseExport", + "description": "Export task output to context." + }, + "timeout": { + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TaskTimeoutDefinition", + "description": "The task's timeout configuration, if any." + }, + { + "type": "string", + "title": "TaskTimeoutReference", + "description": "The name of the task's timeout, if any." + } + ] + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "TaskBaseThen", + "description": "The flow directive to be performed upon completion of the task." + }, + "metadata": { + "type": "object", + "title": "TaskMetadata", + "description": "Holds additional information about the task.", + "additionalProperties": true + } + } + }, + "task": { + "title": "Task", + "description": "A discrete unit of work that contributes to achieving the overall objectives defined by the workflow.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/callTask" + }, + { + "$ref": "#/$defs/doTask" + }, + { + "$ref": "#/$defs/forkTask" + }, + { + "$ref": "#/$defs/emitTask" + }, + { + "$ref": "#/$defs/forTask" + }, + { + "$ref": "#/$defs/listenTask" + }, + { + "$ref": "#/$defs/raiseTask" + }, + { + "$ref": "#/$defs/runTask" + }, + { + "$ref": "#/$defs/setTask" + }, + { + "$ref": "#/$defs/switchTask" + }, + { + "$ref": "#/$defs/tryTask" + }, + { + "$ref": "#/$defs/waitTask" + } + ] + }, + "callTask": { + "title": "CallTask", + "description": "Defines the call to perform.", + "oneOf": [ + { + "title": "CallAsyncAPI", + "description": "Defines the AsyncAPI call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "call", + "with" + ], + "unevaluatedProperties": false, + "properties": { + "call": { + "type": "string", + "const": "asyncapi" + }, + "with": { + "type": "object", + "title": "AsyncApiArguments", + "description": "The Async API call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "WithAsyncAPIDocument", + "description": "The document that defines the AsyncAPI operation to call." + }, + "operationRef": { + "type": "string", + "title": "WithAsyncAPIOperation", + "description": "A reference to the AsyncAPI operation to call." + }, + "server": { + "type": "string", + "title": "WithAsyncAPIServer", + "description": "A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel." + }, + "message": { + "type": "string", + "title": "WithAsyncAPIMessage", + "description": "The name of the message to use. If not set, defaults to the first message defined by the operation." + }, + "binding": { + "type": "string", + "title": "WithAsyncAPIBinding", + "description": "The name of the binding to use. If not set, defaults to the first binding defined by the operation." + }, + "payload": { + "type": "object", + "title": "WithAsyncAPIPayload", + "description": "The payload to call the AsyncAPI operation with, if any." + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithAsyncAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the AsyncAPI operation." + } + }, + "required": [ + "document", + "operationRef" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallGRPC", + "description": "Defines the GRPC call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "grpc" + }, + "with": { + "type": "object", + "title": "GRPCArguments", + "description": "The GRPC call arguments.", + "properties": { + "proto": { + "$ref": "#/$defs/externalResource", + "title": "WithGRPCProto", + "description": "The proto resource that describes the GRPC service to call." + }, + "service": { + "type": "object", + "title": "WithGRPCService", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "WithGRPCServiceName", + "description": "The name of the GRPC service to call." + }, + "host": { + "type": "string", + "title": "WithGRPCServiceHost", + "description": "The hostname of the GRPC service to call.", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$" + }, + "port": { + "type": "integer", + "title": "WithGRPCServicePost", + "description": "The port number of the GRPC service to call.", + "minimum": 0, + "maximum": 65535 + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithGRPCServiceAuthentication", + "description": "The endpoint's authentication policy, if any." + } + }, + "required": [ + "name", + "host" + ] + }, + "method": { + "type": "string", + "title": "WithGRPCMethod", + "description": "The name of the method to call on the defined GRPC service." + }, + "arguments": { + "type": "object", + "title": "WithGRPCArguments", + "description": "The arguments, if any, to call the method with.", + "additionalProperties": true + } + }, + "required": [ + "proto", + "service", + "method" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallHTTP", + "description": "Defines the HTTP call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "http" + }, + "with": { + "type": "object", + "title": "HTTPArguments", + "description": "The HTTP call arguments.", + "properties": { + "method": { + "type": "string", + "title": "WithHTTPMethod", + "description": "The HTTP method of the HTTP request to perform." + }, + "endpoint": { + "title": "WithHTTPEndpoint", + "description": "The HTTP endpoint to send the request to.", + "$ref": "#/$defs/endpoint" + }, + "headers": { + "type": "object", + "title": "WithHTTPHeaders", + "description": "A name/value mapping of the headers, if any, of the HTTP request to perform." + }, + "body": { + "title": "WithHTTPBody", + "description": "The body, if any, of the HTTP request to perform." + }, + "query": { + "type": "object", + "title": "WithHTTPQuery", + "description": "A name/value mapping of the query parameters, if any, of the HTTP request to perform.", + "additionalProperties": true + }, + "output": { + "type": "string", + "title": "WithHTTPOutput", + "description": "The http call output format. Defaults to 'content'.", + "enum": [ + "raw", + "content", + "response" + ] + } + }, + "required": [ + "method", + "endpoint" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallOpenAPI", + "description": "Defines the OpenAPI call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "openapi" + }, + "with": { + "type": "object", + "title": "OpenAPIArguments", + "description": "The OpenAPI call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "WithOpenAPIDocument", + "description": "The document that defines the OpenAPI operation to call." + }, + "operationId": { + "type": "string", + "title": "WithOpenAPIOperation", + "description": "The id of the OpenAPI operation to call." + }, + "parameters": { + "type": "object", + "title": "WithOpenAPIParameters", + "description": "A name/value mapping of the parameters of the OpenAPI operation to call.", + "additionalProperties": true + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithOpenAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the OpenAPI operation." + }, + "output": { + "type": "string", + "enum": [ + "raw", + "content", + "response" + ], + "title": "WithOpenAPIOutput", + "description": "The http call output format. Defaults to 'content'." + } + }, + "required": [ + "document", + "operationId" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallFunction", + "description": "Defines the function call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call" + ], + "properties": { + "call": { + "type": "string", + "not": { + "enum": [ + "asyncapi", + "grpc", + "http", + "openapi" + ] + }, + "description": "The name of the function to call." + }, + "with": { + "type": "object", + "title": "FunctionArguments", + "description": "A name/value mapping of the parameters, if any, to call the function with.", + "additionalProperties": true + } + } + } + ] + }, + "forkTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ForkTask", + "description": "Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output.", + "unevaluatedProperties": false, + "required": [ + "fork" + ], + "properties": { + "fork": { + "type": "object", + "title": "ForkTaskConfiguration", + "description": "The configuration of the branches to perform concurrently.", + "unevaluatedProperties": false, + "required": [ + "branches" + ], + "properties": { + "branches": { + "$ref": "#/$defs/taskList", + "title": "ForkBranches" + }, + "compete": { + "type": "boolean", + "title": "ForkCompete", + "description": "Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output.", + "default": false + } + } + } + } + }, + "doTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "DoTask", + "description": "Allows to execute a list of tasks in sequence.", + "unevaluatedProperties": false, + "required": [ + "do" + ], + "properties": { + "do": { + "$ref": "#/$defs/taskList", + "title": "DoTaskConfiguration", + "description": "The configuration of the tasks to perform sequentially." + } + } + }, + "emitTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "EmitTask", + "description": "Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services.", + "required": [ + "emit" + ], + "unevaluatedProperties": false, + "properties": { + "emit": { + "type": "object", + "title": "EmitTaskConfiguration", + "description": "The configuration of an event's emission.", + "unevaluatedProperties": false, + "properties": { + "event": { + "type": "object", + "title": "EmitEventDefinition", + "description": "The definition of the event to emit.", + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "title": "EmitEventWith", + "description": "Defines the properties of event to emit.", + "required": [ + "source", + "type" + ] + } + }, + "additionalProperties": true + } + }, + "required": [ + "event" + ] + } + } + }, + "forTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ForTask", + "description": "Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.", + "required": [ + "for", + "do" + ], + "unevaluatedProperties": false, + "properties": { + "for": { + "type": "object", + "title": "ForTaskConfiguration", + "description": "The definition of the loop that iterates over a range of values.", + "unevaluatedProperties": false, + "properties": { + "each": { + "type": "string", + "title": "ForEach", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "in": { + "type": "string", + "title": "ForIn", + "description": "A runtime expression used to get the collection to enumerate." + }, + "at": { + "type": "string", + "title": "ForAt", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + } + }, + "required": [ + "in" + ] + }, + "while": { + "type": "string", + "title": "While", + "description": "A runtime expression that represents the condition, if any, that must be met for the iteration to continue." + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "ForTaskDo" + } + } + }, + "listenTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ListenTask", + "description": "Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.", + "required": [ + "listen" + ], + "unevaluatedProperties": false, + "properties": { + "listen": { + "type": "object", + "title": "ListenTaskConfiguration", + "description": "The configuration of the listener to use.", + "unevaluatedProperties": false, + "properties": { + "to": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ListenTo", + "description": "Defines the event(s) to listen to." + } + }, + "required": [ + "to" + ] + } + } + }, + "raiseTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "RaiseTask", + "description": "Intentionally triggers and propagates errors.", + "required": [ + "raise" + ], + "unevaluatedProperties": false, + "properties": { + "raise": { + "type": "object", + "title": "RaiseTaskConfiguration", + "description": "The definition of the error to raise.", + "unevaluatedProperties": false, + "properties": { + "error": { + "oneOf": [ + { + "$ref": "#/$defs/error", + "title": "RaiseErrorDefinition", + "description": "Defines the error to raise." + }, + { + "type": "string", + "title": "RaiseErrorReference", + "description": "The name of the error to raise" + } + ] + } + }, + "required": [ + "error" + ] + } + } + }, + "runTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "RunTask", + "description": "Provides the capability to execute external containers, shell commands, scripts, or workflows.", + "required": [ + "run" + ], + "unevaluatedProperties": false, + "properties": { + "run": { + "type": "object", + "title": "RunTaskConfiguration", + "description": "The configuration of the process to execute.", + "unevaluatedProperties": false, + "properties": { + "await": { + "type": "boolean", + "default": true, + "title": "AwaitProcessCompletion", + "description": "Whether to await the process completion before continuing." + } + }, + "oneOf": [ + { + "title": "RunContainer", + "description": "Enables the execution of external processes encapsulated within a containerized environment.", + "properties": { + "container": { + "type": "object", + "title": "Container", + "description": "The configuration of the container to run.", + "unevaluatedProperties": false, + "properties": { + "image": { + "type": "string", + "title": "ContainerImage", + "description": "The name of the container image to run." + }, + "command": { + "type": "string", + "title": "ContainerCommand", + "description": "The command, if any, to execute on the container." + }, + "ports": { + "type": "object", + "title": "ContainerPorts", + "description": "The container's port mappings, if any." + }, + "volumes": { + "type": "object", + "title": "ContainerVolumes", + "description": "The container's volume mappings, if any." + }, + "environment": { + "type": "object", + "title": "ContainerEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + } + }, + "required": [ + "image" + ] + } + }, + "required": [ + "container" + ] + }, + { + "title": "RunScript", + "description": "Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages.", + "properties": { + "script": { + "type": "object", + "title": "Script", + "description": "The configuration of the script to run.", + "unevaluatedProperties": false, + "properties": { + "language": { + "type": "string", + "title": "ScriptLanguage", + "description": "The language of the script to run." + }, + "arguments": { + "type": "object", + "title": "ScriptArguments", + "description": "A key/value mapping of the arguments, if any, to use when running the configured script.", + "additionalProperties": true + }, + "environment": { + "type": "object", + "title": "ScriptEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured script process.", + "additionalProperties": true + } + }, + "oneOf": [ + { + "title": "InlineScript", + "type": "object", + "description": "The script's code.", + "properties": { + "code": { + "type": "string", + "title": "InlineScriptCode" + } + }, + "required": [ + "code" + ] + }, + { + "title": "ExternalScript", + "type": "object", + "description": "The script's resource.", + "properties": { + "source": { + "$ref": "#/$defs/externalResource", + "title": "ExternalScriptResource" + } + }, + "required": [ + "source" + ] + } + ], + "required": [ + "language" + ] + } + }, + "required": [ + "script" + ] + }, + { + "title": "RunShell", + "description": "Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks.", + "properties": { + "shell": { + "type": "object", + "title": "Shell", + "description": "The configuration of the shell command to run.", + "unevaluatedProperties": false, + "properties": { + "command": { + "type": "string", + "title": "ShellCommand", + "description": "The shell command to run." + }, + "arguments": { + "type": "object", + "title": "ShellArguments", + "description": "A list of the arguments of the shell command to run.", + "additionalProperties": true + }, + "environment": { + "type": "object", + "title": "ShellEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process.", + "additionalProperties": true + } + }, + "required": [ + "command" + ] + } + }, + "required": [ + "shell" + ] + }, + { + "title": "RunWorkflow", + "description": "Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units.", + "properties": { + "workflow": { + "type": "object", + "title": "SubflowConfiguration", + "description": "The configuration of the workflow to run.", + "unevaluatedProperties": false, + "properties": { + "namespace": { + "type": "string", + "title": "SubflowNamespace", + "description": "The namespace the workflow to run belongs to." + }, + "name": { + "type": "string", + "title": "SubflowName", + "description": "The name of the workflow to run." + }, + "version": { + "type": "string", + "default": "latest", + "title": "SubflowVersion", + "description": "The version of the workflow to run. Defaults to latest." + }, + "input": { + "type": "object", + "title": "SubflowInput", + "description": "The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified.", + "additionalProperties": true + } + }, + "required": [ + "namespace", + "name", + "version" + ] + } + }, + "required": [ + "workflow" + ] + } + ] + } + } + }, + "setTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "SetTask", + "description": "A task used to set data.", + "required": [ + "set" + ], + "unevaluatedProperties": false, + "properties": { + "set": { + "type": "object", + "title": "SetTaskConfiguration", + "description": "The data to set.", + "minProperties": 1, + "additionalProperties": true + } + } + }, + "switchTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "SwitchTask", + "description": "Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria.", + "required": [ + "switch" + ], + "unevaluatedProperties": false, + "properties": { + "switch": { + "type": "array", + "title": "SwitchTaskConfiguration", + "description": "The definition of the switch to use.", + "minItems": 1, + "items": { + "type": "object", + "title": "SwitchItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "type": "object", + "title": "SwitchCase", + "description": "The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met.", + "unevaluatedProperties": false, + "required": [ + "then" + ], + "properties": { + "when": { + "type": "string", + "title": "SwitchCaseCondition", + "description": "A runtime expression used to determine whether or not the case matches." + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "SwitchCaseOutcome", + "description": "The flow directive to execute when the case matches." + } + } + } + } + } + } + }, + "tryTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "TryTask", + "description": "Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones.", + "required": [ + "try", + "catch" + ], + "unevaluatedProperties": false, + "properties": { + "try": { + "$ref": "#/$defs/taskList", + "title": "TryTaskConfiguration", + "description": "The task(s) to perform." + }, + "catch": { + "type": "object", + "title": "TryTaskCatch", + "description": "The object used to define the errors to catch.", + "unevaluatedProperties": false, + "properties": { + "errors": { + "type": "object", + "title": "CatchErrors", + "description": "The configuration of a concept used to catch errors." + }, + "as": { + "type": "string", + "title": "CatchAs", + "description": "The name of the runtime expression variable to save the error as. Defaults to 'error'." + }, + "when": { + "type": "string", + "title": "CatchWhen", + "description": "A runtime expression used to determine whether or not to catch the filtered error." + }, + "exceptWhen": { + "type": "string", + "title": "CatchExceptWhen", + "description": "A runtime expression used to determine whether or not to catch the filtered error." + }, + "retry": { + "oneOf": [ + { + "$ref": "#/$defs/retryPolicy", + "title": "RetryPolicyDefinition", + "description": "The retry policy to use, if any, when catching errors." + }, + { + "type": "string", + "title": "RetryPolicyReference", + "description": "The name of the retry policy to use, if any, when catching errors." + } + ] + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "TryTaskCatchDo", + "description": "The definition of the task(s) to run when catching an error." + } + } + } + } + }, + "waitTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "WaitTask", + "description": "Allows workflows to pause or delay their execution for a specified period of time.", + "required": [ + "wait" + ], + "unevaluatedProperties": false, + "properties": { + "wait": { + "$ref": "#/$defs/duration", + "title": "WaitTaskConfiguration", + "description": "The amount of time to wait." + } + } + }, + "flowDirective": { + "title": "FlowDirective", + "description": "Represents different transition options for a workflow.", + "anyOf": [ + { + "type": "string", + "enum": [ + "continue", + "exit", + "end" + ], + "default": "continue" + }, + { + "type": "string" + } + ] + }, + "referenceableAuthenticationPolicy": { + "type": "object", + "title": "ReferenceableAuthenticationPolicy", + "description": "Represents a referenceable authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AuthenticationPolicyReference", + "description": "The reference of the authentication policy to use.", + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "ReferenceableAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + { + "$ref": "#/$defs/authenticationPolicy" + } + ] + }, + "secretBasedAuthenticationPolicy": { + "type": "object", + "title": "SecretBasedAuthenticationPolicy", + "description": "Represents an authentication policy based on secrets.", + "unevaluatedProperties": false, + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "SecretBasedAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + "authenticationPolicy": { + "type": "object", + "title": "AuthenticationPolicy", + "description": "Defines an authentication policy.", + "oneOf": [ + { + "title": "BasicAuthenticationPolicy", + "description": "Use basic authentication.", + "properties": { + "basic": { + "type": "object", + "title": "BasicAuthenticationPolicyConfiguration", + "description": "The configuration of the basic authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BasicAuthenticationProperties", + "description": "Inline configuration of the basic authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BasicAuthenticationPolicySecret", + "description": "Secret based configuration of the basic authentication policy." + } + ] + } + }, + "required": [ + "basic" + ] + }, + { + "title": "BearerAuthenticationPolicy", + "description": "Use bearer authentication.", + "properties": { + "bearer": { + "type": "object", + "title": "BearerAuthenticationPolicyConfiguration", + "description": "The configuration of the bearer authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BearerAuthenticationProperties", + "description": "Inline configuration of the bearer authentication policy.", + "properties": { + "token": { + "type": "string", + "description": "The bearer token to use." + } + }, + "required": [ + "token" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BearerAuthenticationPolicySecret", + "description": "Secret based configuration of the bearer authentication policy." + } + ] + } + }, + "required": [ + "bearer" + ] + }, + { + "title": "DigestAuthenticationPolicy", + "description": "Use digest authentication.", + "properties": { + "digest": { + "type": "object", + "title": "DigestAuthenticationPolicyConfiguration", + "description": "The configuration of the digest authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "DigestAuthenticationProperties", + "description": "Inline configuration of the digest authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "DigestAuthenticationPolicySecret", + "description": "Secret based configuration of the digest authentication policy." + } + ] + } + }, + "required": [ + "digest" + ] + }, + { + "title": "OAuth2AuthenticationPolicy", + "description": "Use OAuth2 authentication.", + "properties": { + "oauth2": { + "type": "object", + "title": "OAuth2AuthenticationPolicyConfiguration", + "description": "The configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "type": "object", + "title": "OAuth2ConnectAuthenticationProperties", + "description": "The inline configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties" + }, + { + "type": "object", + "properties": { + "endpoints": { + "type": "object", + "title": "OAuth2AuthenticationPropertiesEndpoints", + "description": "The endpoint configurations for OAuth2.", + "properties": { + "token": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/token", + "title": "OAuth2TokenEndpoint", + "description": "The relative path to the token endpoint. Defaults to `/oauth2/token`." + }, + "revocation": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/revoke", + "title": "OAuth2RevocationEndpoint", + "description": "The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`." + }, + "introspection": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/introspect", + "title": "OAuth2IntrospectionEndpoint", + "description": "The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`." + } + } + } + } + } + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OAuth2AuthenticationPolicySecret", + "description": "Secret based configuration of the OAuth2 authentication policy." + } + ] + } + }, + "required": [ + "oauth2" + ] + }, + { + "title": "OpenIdConnectAuthenticationPolicy", + "description": "Use OpenIdConnect authentication.", + "properties": { + "oidc": { + "type": "object", + "title": "OpenIdConnectAuthenticationPolicyConfiguration", + "description": "The configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties", + "title": "OpenIdConnectAuthenticationProperties", + "description": "The inline configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OpenIdConnectAuthenticationPolicySecret", + "description": "Secret based configuration of the OpenIdConnect authentication policy." + } + ] + } + }, + "required": [ + "oidc" + ] + } + ] + }, + "oauth2AuthenticationProperties": { + "type": "object", + "title": "OAuth2AutenthicationData", + "description": "Inline configuration of the OAuth2 authentication policy.", + "properties": { + "authority": { + "$ref": "#/$defs/uriTemplate", + "title": "OAuth2AutenthicationDataAuthority", + "description": "The URI that references the OAuth2 authority to use." + }, + "grant": { + "type": "string", + "enum": [ + "authorization_code", + "client_credentials", + "password", + "refresh_token", + "urn:ietf:params:oauth:grant-type:token-exchange" + ], + "title": "OAuth2AutenthicationDataGrant", + "description": "The grant type to use." + }, + "client": { + "type": "object", + "title": "OAuth2AutenthicationDataClient", + "description": "The definition of an OAuth2 client.", + "unevaluatedProperties": false, + "properties": { + "id": { + "type": "string", + "title": "ClientId", + "description": "The client id to use." + }, + "secret": { + "type": "string", + "title": "ClientSecret", + "description": "The client secret to use, if any." + }, + "assertion": { + "type": "string", + "title": "ClientAssertion", + "description": "A JWT containing a signed assertion with your application credentials." + }, + "authentication": { + "type": "string", + "enum": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "default": "client_secret_post", + "title": "ClientAuthentication", + "description": "The authentication method to use to authenticate the client." + } + } + }, + "request": { + "type": "object", + "title": "OAuth2TokenRequest", + "description": "The configuration of an OAuth2 token request", + "properties": { + "encoding": { + "type": "string", + "enum": [ + "application/x-www-form-urlencoded", + "application/json" + ], + "default": "application/x-www-form-urlencoded", + "title": "Oauth2TokenRequestEncoding" + } + } + }, + "issuers": { + "type": "array", + "title": "OAuth2Issuers", + "description": "A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens.", + "items": { + "type": "string" + } + }, + "scopes": { + "type": "array", + "title": "OAuth2AutenthicationDataScopes", + "description": "The scopes, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "title": "OAuth2AutenthicationDataAudiences", + "description": "The audiences, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "username": { + "type": "string", + "title": "OAuth2AutenthicationDataUsername", + "description": "The username to use. Used only if the grant type is Password." + }, + "password": { + "type": "string", + "title": "OAuth2AutenthicationDataPassword", + "description": "The password to use. Used only if the grant type is Password." + }, + "subject": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AutenthicationDataSubject", + "description": "The security token that represents the identity of the party on behalf of whom the request is being made." + }, + "actor": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AutenthicationDataActor", + "description": "The security token that represents the identity of the acting party." + } + } + }, + "oauth2Token": { + "type": "object", + "title": "OAuth2TokenDefinition", + "description": "Represents an OAuth2 token.", + "unevaluatedProperties": false, + "properties": { + "token": { + "type": "string", + "title": "OAuth2Token", + "description": "The security token to use." + }, + "type": { + "type": "string", + "title": "OAuth2TokenType", + "description": "The type of the security token to use." + } + }, + "required": [ + "token", + "type" + ] + }, + "duration": { + "oneOf": [ + { + "type": "object", + "minProperties": 1, + "unevaluatedProperties": false, + "properties": { + "days": { + "type": "integer", + "title": "DurationDays", + "description": "Number of days, if any." + }, + "hours": { + "type": "integer", + "title": "DurationHours", + "description": "Number of days, if any." + }, + "minutes": { + "type": "integer", + "title": "DurationMinutes", + "description": "Number of minutes, if any." + }, + "seconds": { + "type": "integer", + "title": "DurationSeconds", + "description": "Number of seconds, if any." + }, + "milliseconds": { + "type": "integer", + "title": "DurationMilliseconds", + "description": "Number of milliseconds, if any." + } + }, + "title": "DurationInline", + "description": "The inline definition of a duration." + }, + { + "type": "string", + "pattern": "^P(?!$)(\\d+(?:\\.\\d+)?Y)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?W)?(\\d+(?:\\.\\d+)?D)?(T(?=\\d)(\\d+(?:\\.\\d+)?H)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?S)?)?$", + "title": "DurationExpression", + "description": "The ISO 8601 expression of a duration." + } + ] + }, + "error": { + "type": "object", + "title": "Error", + "description": "Represents an error.", + "unevaluatedProperties": false, + "properties": { + "type": { + "title": "ErrorType", + "description": "A URI reference that identifies the error type.", + "oneOf": [ + { + "title": "LiteralErrorType", + "$ref": "#/$defs/uriTemplate", + "description": "The literal error type." + }, + { + "title": "ExpressionErrorType", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based error type." + } + ] + }, + "status": { + "type": "integer", + "title": "ErrorStatus", + "description": "The status code generated by the origin for this occurrence of the error." + }, + "instance": { + "title": "ErrorInstance", + "description": "A JSON Pointer used to reference the component the error originates from.", + "oneOf": [ + { + "title": "LiteralErrorInstance", + "description": "The literal error instance.", + "type": "string", + "format": "json-pointer" + }, + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorInstance", + "description": "An expression based error instance." + } + ] + }, + "title": { + "type": "string", + "title": "ErrorTitle", + "description": "A short, human-readable summary of the error." + }, + "detail": { + "type": "string", + "title": "ErrorDetails", + "description": "A human-readable explanation specific to this occurrence of the error." + } + }, + "required": [ + "type", + "status" + ] + }, + "uriTemplate": { + "title": "UriTemplate", + "anyOf": [ + { + "title": "LiteralUriTemplate", + "type": "string", + "format": "uri-template", + "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + }, + { + "title": "LiteralUri", + "type": "string", + "format": "uri", + "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + } + ] + }, + "endpoint": { + "title": "Endpoint", + "description": "Represents an endpoint.", + "oneOf": [ + { + "$ref": "#/$defs/runtimeExpression" + }, + { + "$ref": "#/$defs/uriTemplate" + }, + { + "title": "EndpointConfiguration", + "type": "object", + "unevaluatedProperties": false, + "properties": { + "uri": { + "title": "EndpointUri", + "description": "The endpoint's URI.", + "oneOf": [ + { + "title": "LiteralEndpointURI", + "description": "The literal endpoint's URI.", + "$ref": "#/$defs/uriTemplate" + }, + { + "title": "ExpressionEndpointURI", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based endpoint's URI." + } + ] + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "EndpointAuthentication", + "description": "The authentication policy to use." + } + }, + "required": [ + "uri" + ] + } + ] + }, + "eventProperties": { + "type": "object", + "title": "EventProperties", + "description": "Describes the properties of an event.", + "properties": { + "id": { + "type": "string", + "title": "EventId", + "description": "The event's unique identifier." + }, + "source": { + "title": "EventSource", + "description": "Identifies the context in which an event happened.", + "oneOf": [ + { + "$ref": "#/$defs/uriTemplate" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "type": { + "type": "string", + "title": "EventType", + "description": "This attribute contains a value describing the type of event related to the originating occurrence." + }, + "time": { + "title": "EventTime", + "description": "When the event occured.", + "oneOf": [ + { + "title": "LiteralTime", + "type": "string", + "format": "date-time" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "subject": { + "type": "string", + "title": "EventSubject", + "description": "The subject of the event." + }, + "datacontenttype": { + "type": "string", + "title": "EventDataContentType", + "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format." + }, + "dataschema": { + "title": "EventDataschema", + "description": "The schema describing the event format.", + "oneOf": [ + { + "title": "LiteralDataSchema", + "$ref": "#/$defs/uriTemplate", + "description": "The literal event data schema." + }, + { + "title": "ExpressionDataSchema", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based event data schema." + } + ] + } + }, + "additionalProperties": true + }, + "eventConsumptionStrategy": { + "type": "object", + "title": "EventConsumptionStrategy", + "description": "Describe the event consumption strategy to adopt.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AllEventConsumptionStrategy", + "properties": { + "all": { + "type": "array", + "title": "AllEventConsumptionStrategyConfiguration", + "description": "A list containing all the events that must be consumed.", + "items": { + "$ref": "#/$defs/eventFilter" + } + } + }, + "required": [ + "all" + ] + }, + { + "title": "AnyEventConsumptionStrategy", + "properties": { + "any": { + "type": "array", + "title": "AnyEventConsumptionStrategyConfiguration", + "description": "A list containing any of the events to consume.", + "items": { + "$ref": "#/$defs/eventFilter" + } + } + }, + "required": [ + "any" + ] + }, + { + "title": "OneEventConsumptionStrategy", + "properties": { + "one": { + "$ref": "#/$defs/eventFilter", + "title": "OneEventConsumptionStrategyConfiguration", + "description": "The single event to consume." + } + }, + "required": [ + "one" + ] + } + ] + }, + "eventFilter": { + "type": "object", + "title": "EventFilter", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.", + "unevaluatedProperties": false, + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "minProperties": 1, + "title": "WithEvent", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes." + }, + "correlate": { + "type": "object", + "title": "EventFilterCorrelate", + "description": "A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics.", + "additionalProperties": { + "type": "object", + "properties": { + "from": { + "type": "string", + "title": "CorrelateFrom", + "description": "A runtime expression used to extract the correlation value from the filtered event." + }, + "expect": { + "type": "string", + "title": "CorrelateExpect", + "description": "A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation." + } + }, + "required": [ + "from" + ] + } + } + }, + "required": [ + "with" + ] + }, + "extension": { + "type": "object", + "title": "Extension", + "description": "The definition of an extension.", + "unevaluatedProperties": false, + "properties": { + "extend": { + "type": "string", + "enum": [ + "call", + "composite", + "emit", + "for", + "listen", + "raise", + "run", + "set", + "switch", + "try", + "wait", + "all" + ], + "title": "ExtensionTarget", + "description": "The type of task to extend." + }, + "when": { + "type": "string", + "title": "ExtensionCondition", + "description": "A runtime expression, if any, used to determine whether or not the extension should apply in the specified context." + }, + "before": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoBefore", + "description": "The task(s) to execute before the extended task, if any." + }, + "after": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoAfter", + "description": "The task(s) to execute after the extended task, if any." + } + }, + "required": [ + "extend" + ] + }, + "externalResource": { + "type": "object", + "title": "ExternalResource", + "description": "Represents an external resource.", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "ExternalResourceName", + "description": "The name of the external resource, if any." + }, + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "ExternalResourceEndpoint", + "description": "The endpoint of the external resource." + } + }, + "required": [ + "endpoint" + ] + }, + "input": { + "type": "object", + "title": "Input", + "description": "Configures the input of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "InputSchema", + "description": "The schema used to describe and validate the input of the workflow or task." + }, + "from": { + "title": "InputFrom", + "description": "A runtime expression, if any, used to mutate and/or filter the input of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "output": { + "type": "object", + "title": "Output", + "description": "Configures the output of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "OutputSchema", + "description": "The schema used to describe and validate the output of the workflow or task." + }, + "as": { + "title": "OutputAs", + "description": "A runtime expression, if any, used to mutate and/or filter the output of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "export": { + "type": "object", + "title": "Export", + "description": "Set the content of the context. .", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "ExportSchema", + "description": "The schema used to describe and validate the workflow context." + }, + "as": { + "title": "ExportAs", + "description": "A runtime expression, if any, used to export the output data to the context.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "retryPolicy": { + "type": "object", + "title": "RetryPolicy", + "description": "Defines a retry policy.", + "unevaluatedProperties": false, + "properties": { + "when": { + "type": "string", + "title": "RetryWhen", + "description": "A runtime expression, if any, used to determine whether or not to retry running the task, in a given context." + }, + "exceptWhen": { + "type": "string", + "title": "RetryExcepWhen", + "description": "A runtime expression used to determine whether or not to retry running the task, in a given context." + }, + "delay": { + "$ref": "#/$defs/duration", + "title": "RetryDelay", + "description": "The duration to wait between retry attempts." + }, + "backoff": { + "type": "object", + "title": "RetryBackoff", + "description": "The retry duration backoff.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "ConstantBackoff", + "properties": { + "constant": { + "type": "object", + "description": "The definition of the constant backoff to use, if any." + } + }, + "required": [ + "constant" + ] + }, + { + "title": "ExponentialBackOff", + "properties": { + "exponential": { + "type": "object", + "description": "The definition of the exponential backoff to use, if any." + } + }, + "required": [ + "exponential" + ] + }, + { + "title": "LinearBackoff", + "properties": { + "linear": { + "type": "object", + "description": "The definition of the linear backoff to use, if any." + } + }, + "required": [ + "linear" + ] + } + ] + }, + "limit": { + "type": "object", + "title": "RetryLimit", + "unevaluatedProperties": false, + "properties": { + "attempt": { + "type": "object", + "title": "RetryLimitAttempt", + "unevaluatedProperties": false, + "properties": { + "count": { + "type": "integer", + "title": "RetryLimitAttemptCount", + "description": "The maximum amount of retry attempts, if any." + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitAttemptDuration", + "description": "The maximum duration for each retry attempt." + } + } + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitDuration", + "description": "The duration limit, if any, for all retry attempts." + } + }, + "description": "The retry limit, if any." + }, + "jitter": { + "type": "object", + "title": "RetryPolicyJitter", + "description": "The parameters, if any, that control the randomness or variability of the delay between retry attempts.", + "unevaluatedProperties": false, + "properties": { + "from": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterFrom", + "description": "The minimum duration of the jitter range." + }, + "to": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterTo", + "description": "The maximum duration of the jitter range." + } + }, + "required": [ + "from", + "to" + ] + } + } + }, + "schema": { + "type": "object", + "title": "Schema", + "description": "Represents the definition of a schema.", + "unevaluatedProperties": false, + "properties": { + "format": { + "type": "string", + "default": "json", + "title": "SchemaFormat", + "description": "The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`." + } + }, + "oneOf": [ + { + "title": "SchemaInline", + "properties": { + "document": { + "description": "The schema's inline definition." + } + }, + "required": [ + "document" + ] + }, + { + "title": "SchemaExternal", + "properties": { + "resource": { + "$ref": "#/$defs/externalResource", + "title": "SchemaExternalResource", + "description": "The schema's external resource." + } + }, + "required": [ + "resource" + ] + } + ] + }, + "timeout": { + "type": "object", + "title": "Timeout", + "description": "The definition of a timeout.", + "unevaluatedProperties": false, + "properties": { + "after": { + "$ref": "#/$defs/duration", + "title": "TimeoutAfter", + "description": "The duration after which to timeout." + } + }, + "required": [ + "after" + ] + }, + "catalog": { + "type": "object", + "title": "Catalog", + "description": "The definition of a resource catalog", + "unevaluatedProperties": false, + "properties": { + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "CatalogEndpoint", + "description": "The root URL where the catalog is hosted" + } + }, + "required": [ + "endpoint" + ] + }, + "runtimeExpression": { + "type": "string", + "title": "RuntimeExpression", + "description": "A runtime expression.", + "pattern": "^\\s*\\$\\{.+\\}\\s*$" + } + } +} \ No newline at end of file diff --git a/public/schemas/1.0.0-alpha5/workflow.yaml b/public/schemas/1.0.0-alpha5/workflow.yaml new file mode 100644 index 0000000..ad66f44 --- /dev/null +++ b/public/schemas/1.0.0-alpha5/workflow.yaml @@ -0,0 +1,1509 @@ +$id: https://open-workflow-specification.org/schemas/1.0.0-alpha5/workflow.yaml +$schema: https://json-schema.org/draft/2020-12/schema +description: Open Workflow Specification DSL - Workflow Schema. +type: object +required: [ document, do ] +properties: + document: + type: object + title: Document + description: Documents the workflow. + unevaluatedProperties: false + properties: + dsl: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowDSL + description: The version of the DSL used by the workflow. + namespace: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowNamespace + description: The workflow's namespace. + name: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowName + description: The workflow's name. + version: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowVersion + description: The workflow's semantic version. + title: + type: string + title: WorkflowTitle + description: The workflow's title. + summary: + type: string + title: WorkflowSummary + description: The workflow's Markdown summary. + tags: + type: object + title: WorkflowTags + description: A key/value mapping of the workflow's tags, if any. + additionalProperties: true + metadata: + type: object + title: WorkflowMetadata + description: Holds additional information about the workflow. + additionalProperties: true + required: [ dsl, namespace, name, version ] + input: + $ref: '#/$defs/input' + title: Input + description: Configures the workflow's input. + use: + type: object + title: Use + description: Defines the workflow's reusable components. + unevaluatedProperties: false + properties: + authentications: + type: object + title: UseAuthentications + description: The workflow's reusable authentication policies. + additionalProperties: + $ref: '#/$defs/authenticationPolicy' + errors: + type: object + title: UseErrors + description: The workflow's reusable errors. + additionalProperties: + $ref: '#/$defs/error' + extensions: + type: array + title: UseExtensions + description: The workflow's extensions. + items: + type: object + title: ExtensionItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/extension' + functions: + type: object + title: UseFunctions + description: The workflow's reusable functions. + additionalProperties: + $ref: '#/$defs/task' + retries: + type: object + title: UseRetries + description: The workflow's reusable retry policies. + additionalProperties: + $ref: '#/$defs/retryPolicy' + secrets: + type: array + title: UseSecrets + description: The workflow's reusable secrets. + items: + type: string + description: The workflow's secrets. + timeouts: + type: object + title: UseTimeouts + description: The workflow's reusable timeouts. + additionalProperties: + $ref: '#/$defs/timeout' + catalogs: + type: object + title: UseCatalogs + description: The workflow's reusable catalogs. + additionalProperties: + $ref: '#/$defs/catalog' + do: + $ref: '#/$defs/taskList' + title: Do + description: Defines the task(s) the workflow must perform. + timeout: + oneOf: + - $ref: '#/$defs/timeout' + title: TimeoutDefinition + description: The workflow's timeout configuration, if any. + - type: string + title: TimeoutReference + description: The name of the workflow's timeout, if any. + output: + $ref: '#/$defs/output' + title: Output + description: Configures the workflow's output. + schedule: + type: object + title: Schedule + description: Schedules the workflow. + unevaluatedProperties: false + properties: + every: + $ref: '#/$defs/duration' + title: ScheduleEvery + description: Specifies the duration of the interval at which the workflow should be executed. + cron: + type: string + title: ScheduleCron + description: Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight. + after: + $ref: '#/$defs/duration' + title: ScheduleAfter + description: Specifies a delay duration that the workflow must wait before starting again after it completes. + on: + $ref: '#/$defs/eventConsumptionStrategy' + title: ScheduleOn + description: Specifies the events that trigger the workflow execution. +$defs: + taskList: + title: TaskList + description: List of named tasks to perform. + type: array + items: + type: object + title: TaskItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/task' + taskBase: + type: object + title: TaskBase + description: An object inherited by all tasks. + properties: + if: + type: string + title: TaskBaseIf + description: A runtime expression, if any, used to determine whether or not the task should be run. + input: + $ref: '#/$defs/input' + title: TaskBaseInput + description: Configure the task's input. + output: + $ref: '#/$defs/output' + title: TaskBaseOutput + description: Configure the task's output. + export: + $ref: '#/$defs/export' + title: TaskBaseExport + description: Export task output to context. + timeout: + oneOf: + - $ref: '#/$defs/timeout' + title: TaskTimeoutDefinition + description: The task's timeout configuration, if any. + - type: string + title: TaskTimeoutReference + description: The name of the task's timeout, if any. + then: + $ref: '#/$defs/flowDirective' + title: TaskBaseThen + description: The flow directive to be performed upon completion of the task. + metadata: + type: object + title: TaskMetadata + description: Holds additional information about the task. + additionalProperties: true + task: + title: Task + description: A discrete unit of work that contributes to achieving the overall objectives defined by the workflow. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/callTask' + - $ref: '#/$defs/doTask' + - $ref: '#/$defs/forkTask' + - $ref: '#/$defs/emitTask' + - $ref: '#/$defs/forTask' + - $ref: '#/$defs/listenTask' + - $ref: '#/$defs/raiseTask' + - $ref: '#/$defs/runTask' + - $ref: '#/$defs/setTask' + - $ref: '#/$defs/switchTask' + - $ref: '#/$defs/tryTask' + - $ref: '#/$defs/waitTask' + callTask: + title: CallTask + description: Defines the call to perform. + oneOf: + - title: CallAsyncAPI + description: Defines the AsyncAPI call to perform. + $ref: '#/$defs/taskBase' + type: object + required: [ call, with ] + unevaluatedProperties: false + properties: + call: + type: string + const: asyncapi + with: + type: object + title: AsyncApiArguments + description: The Async API call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: WithAsyncAPIDocument + description: The document that defines the AsyncAPI operation to call. + operationRef: + type: string + title: WithAsyncAPIOperation + description: A reference to the AsyncAPI operation to call. + server: + type: string + title: WithAsyncAPIServer + description: A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel. + message: + type: string + title: WithAsyncAPIMessage + description: The name of the message to use. If not set, defaults to the first message defined by the operation. + binding: + type: string + title: WithAsyncAPIBinding + description: The name of the binding to use. If not set, defaults to the first binding defined by the operation. + payload: + type: object + title: WithAsyncAPIPayload + description: The payload to call the AsyncAPI operation with, if any. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithAsyncAPIAuthentication + description: The authentication policy, if any, to use when calling the AsyncAPI operation. + required: [ document, operationRef ] + unevaluatedProperties: false + - title: CallGRPC + description: Defines the GRPC call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: grpc + with: + type: object + title: GRPCArguments + description: The GRPC call arguments. + properties: + proto: + $ref: '#/$defs/externalResource' + title: WithGRPCProto + description: The proto resource that describes the GRPC service to call. + service: + type: object + title: WithGRPCService + unevaluatedProperties: false + properties: + name: + type: string + title: WithGRPCServiceName + description: The name of the GRPC service to call. + host: + type: string + title: WithGRPCServiceHost + description: The hostname of the GRPC service to call. + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + port: + type: integer + title: WithGRPCServicePost + description: The port number of the GRPC service to call. + minimum: 0 + maximum: 65535 + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithGRPCServiceAuthentication + description: The endpoint's authentication policy, if any. + required: [ name, host ] + method: + type: string + title: WithGRPCMethod + description: The name of the method to call on the defined GRPC service. + arguments: + type: object + title: WithGRPCArguments + description: The arguments, if any, to call the method with. + additionalProperties: true + required: [ proto, service, method ] + unevaluatedProperties: false + - title: CallHTTP + description: Defines the HTTP call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: http + with: + type: object + title: HTTPArguments + description: The HTTP call arguments. + properties: + method: + type: string + title: WithHTTPMethod + description: The HTTP method of the HTTP request to perform. + endpoint: + title: WithHTTPEndpoint + description: The HTTP endpoint to send the request to. + $ref: '#/$defs/endpoint' + headers: + type: object + title: WithHTTPHeaders + description: A name/value mapping of the headers, if any, of the HTTP request to perform. + body: + title: WithHTTPBody + description: The body, if any, of the HTTP request to perform. + query: + type: object + title: WithHTTPQuery + description: A name/value mapping of the query parameters, if any, of the HTTP request to perform. + additionalProperties: true + output: + type: string + title: WithHTTPOutput + description: The http call output format. Defaults to 'content'. + enum: [ raw, content, response ] + required: [ method, endpoint ] + unevaluatedProperties: false + - title: CallOpenAPI + description: Defines the OpenAPI call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: openapi + with: + type: object + title: OpenAPIArguments + description: The OpenAPI call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: WithOpenAPIDocument + description: The document that defines the OpenAPI operation to call. + operationId: + type: string + title: WithOpenAPIOperation + description: The id of the OpenAPI operation to call. + parameters: + type: object + title: WithOpenAPIParameters + description: A name/value mapping of the parameters of the OpenAPI operation to call. + additionalProperties: true + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithOpenAPIAuthentication + description: The authentication policy, if any, to use when calling the OpenAPI operation. + output: + type: string + enum: [ raw, content, response ] + title: WithOpenAPIOutput + description: The http call output format. Defaults to 'content'. + required: [ document, operationId ] + unevaluatedProperties: false + - title: CallFunction + description: Defines the function call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call ] + properties: + call: + type: string + not: + enum: ["asyncapi", "grpc", "http", "openapi"] + description: The name of the function to call. + with: + type: object + title: FunctionArguments + description: A name/value mapping of the parameters, if any, to call the function with. + additionalProperties: true + forkTask: + type: object + $ref: '#/$defs/taskBase' + title: ForkTask + description: Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output. + unevaluatedProperties: false + required: [ fork ] + properties: + fork: + type: object + title: ForkTaskConfiguration + description: The configuration of the branches to perform concurrently. + unevaluatedProperties: false + required: [ branches ] + properties: + branches: + $ref: '#/$defs/taskList' + title: ForkBranches + compete: + type: boolean + title: ForkCompete + description: Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output. + default: false + doTask: + type: object + $ref: '#/$defs/taskBase' + title: DoTask + description: Allows to execute a list of tasks in sequence. + unevaluatedProperties: false + required: [ do ] + properties: + do: + $ref: '#/$defs/taskList' + title: DoTaskConfiguration + description: The configuration of the tasks to perform sequentially. + emitTask: + type: object + $ref: '#/$defs/taskBase' + title: EmitTask + description: Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services. + required: [ emit ] + unevaluatedProperties: false + properties: + emit: + type: object + title: EmitTaskConfiguration + description: The configuration of an event's emission. + unevaluatedProperties: false + properties: + event: + type: object + title: EmitEventDefinition + description: The definition of the event to emit. + properties: + with: + $ref: '#/$defs/eventProperties' + title: EmitEventWith + description: Defines the properties of event to emit. + required: [ source, type ] + additionalProperties: true + required: [ event ] + forTask: + type: object + $ref: '#/$defs/taskBase' + title: ForTask + description: Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets. + required: [ for, do ] + unevaluatedProperties: false + properties: + for: + type: object + title: ForTaskConfiguration + description: The definition of the loop that iterates over a range of values. + unevaluatedProperties: false + properties: + each: + type: string + title: ForEach + description: The name of the variable used to store the current item being enumerated. + default: item + in: + type: string + title: ForIn + description: A runtime expression used to get the collection to enumerate. + at: + type: string + title: ForAt + description: The name of the variable used to store the index of the current item being enumerated. + default: index + required: [ in ] + while: + type: string + title: While + description: A runtime expression that represents the condition, if any, that must be met for the iteration to continue. + do: + $ref: '#/$defs/taskList' + title: ForTaskDo + listenTask: + type: object + $ref: '#/$defs/taskBase' + title: ListenTask + description: Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems. + required: [ listen ] + unevaluatedProperties: false + properties: + listen: + type: object + title: ListenTaskConfiguration + description: The configuration of the listener to use. + unevaluatedProperties: false + properties: + to: + $ref: '#/$defs/eventConsumptionStrategy' + title: ListenTo + description: Defines the event(s) to listen to. + required: [ to ] + raiseTask: + type: object + $ref: '#/$defs/taskBase' + title: RaiseTask + description: Intentionally triggers and propagates errors. + required: [ raise ] + unevaluatedProperties: false + properties: + raise: + type: object + title: RaiseTaskConfiguration + description: The definition of the error to raise. + unevaluatedProperties: false + properties: + error: + oneOf: + - $ref: '#/$defs/error' + title: RaiseErrorDefinition + description: Defines the error to raise. + - type: string + title: RaiseErrorReference + description: The name of the error to raise + required: [ error ] + runTask: + type: object + $ref: '#/$defs/taskBase' + title: RunTask + description: Provides the capability to execute external containers, shell commands, scripts, or workflows. + required: [ run ] + unevaluatedProperties: false + properties: + run: + type: object + title: RunTaskConfiguration + description: The configuration of the process to execute. + unevaluatedProperties: false + properties: + await: + type: boolean + default: true + title: AwaitProcessCompletion + description: Whether to await the process completion before continuing. + oneOf: + - title: RunContainer + description: Enables the execution of external processes encapsulated within a containerized environment. + properties: + container: + type: object + title: Container + description: The configuration of the container to run. + unevaluatedProperties: false + properties: + image: + type: string + title: ContainerImage + description: The name of the container image to run. + command: + type: string + title: ContainerCommand + description: The command, if any, to execute on the container. + ports: + type: object + title: ContainerPorts + description: The container's port mappings, if any. + volumes: + type: object + title: ContainerVolumes + description: The container's volume mappings, if any. + environment: + type: object + title: ContainerEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + required: [ image ] + required: [ container ] + - title: RunScript + description: Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages. + properties: + script: + type: object + title: Script + description: The configuration of the script to run. + unevaluatedProperties: false + properties: + language: + type: string + title: ScriptLanguage + description: The language of the script to run. + arguments: + type: object + title: ScriptArguments + description: A key/value mapping of the arguments, if any, to use when running the configured script. + additionalProperties: true + environment: + type: object + title: ScriptEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured script process. + additionalProperties: true + oneOf: + - title: InlineScript + type: object + description: The script's code. + properties: + code: + type: string + title: InlineScriptCode + required: [ code ] + - title: ExternalScript + type: object + description: The script's resource. + properties: + source: + $ref: '#/$defs/externalResource' + title: ExternalScriptResource + required: [ source ] + required: [ language ] + required: [ script ] + - title: RunShell + description: Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks. + properties: + shell: + type: object + title: Shell + description: The configuration of the shell command to run. + unevaluatedProperties: false + properties: + command: + type: string + title: ShellCommand + description: The shell command to run. + arguments: + type: object + title: ShellArguments + description: A list of the arguments of the shell command to run. + additionalProperties: true + environment: + type: object + title: ShellEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + additionalProperties: true + required: [ command ] + required: [ shell ] + - title: RunWorkflow + description: Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units. + properties: + workflow: + type: object + title: SubflowConfiguration + description: The configuration of the workflow to run. + unevaluatedProperties: false + properties: + namespace: + type: string + title: SubflowNamespace + description: The namespace the workflow to run belongs to. + name: + type: string + title: SubflowName + description: The name of the workflow to run. + version: + type: string + default: latest + title: SubflowVersion + description: The version of the workflow to run. Defaults to latest. + input: + type: object + title: SubflowInput + description: The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified. + additionalProperties: true + required: [ namespace, name, version ] + required: [ workflow ] + setTask: + type: object + $ref: '#/$defs/taskBase' + title: SetTask + description: A task used to set data. + required: [ set ] + unevaluatedProperties: false + properties: + set: + type: object + title: SetTaskConfiguration + description: The data to set. + minProperties: 1 + additionalProperties: true + switchTask: + type: object + $ref: '#/$defs/taskBase' + title: SwitchTask + description: Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria. + required: [ switch ] + unevaluatedProperties: false + properties: + switch: + type: array + title: SwitchTaskConfiguration + description: The definition of the switch to use. + minItems: 1 + items: + type: object + title: SwitchItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + type: object + title: SwitchCase + description: The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met. + unevaluatedProperties: false + required: [ then ] + properties: + when: + type: string + title: SwitchCaseCondition + description: A runtime expression used to determine whether or not the case matches. + then: + $ref: '#/$defs/flowDirective' + title: SwitchCaseOutcome + description: The flow directive to execute when the case matches. + tryTask: + type: object + $ref: '#/$defs/taskBase' + title: TryTask + description: Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones. + required: [ try, catch ] + unevaluatedProperties: false + properties: + try: + $ref: '#/$defs/taskList' + title: TryTaskConfiguration + description: The task(s) to perform. + catch: + type: object + title: TryTaskCatch + description: The object used to define the errors to catch. + unevaluatedProperties: false + properties: + errors: + type: object + title: CatchErrors + description: The configuration of a concept used to catch errors. + as: + type: string + title: CatchAs + description: The name of the runtime expression variable to save the error as. Defaults to 'error'. + when: + type: string + title: CatchWhen + description: A runtime expression used to determine whether or not to catch the filtered error. + exceptWhen: + type: string + title: CatchExceptWhen + description: A runtime expression used to determine whether or not to catch the filtered error. + retry: + oneOf: + - $ref: '#/$defs/retryPolicy' + title: RetryPolicyDefinition + description: The retry policy to use, if any, when catching errors. + - type: string + title: RetryPolicyReference + description: The name of the retry policy to use, if any, when catching errors. + do: + $ref: '#/$defs/taskList' + title: TryTaskCatchDo + description: The definition of the task(s) to run when catching an error. + waitTask: + type: object + $ref: '#/$defs/taskBase' + title: WaitTask + description: Allows workflows to pause or delay their execution for a specified period of time. + required: [ wait ] + unevaluatedProperties: false + properties: + wait: + $ref: '#/$defs/duration' + title: WaitTaskConfiguration + description: The amount of time to wait. + flowDirective: + title: FlowDirective + description: Represents different transition options for a workflow. + anyOf: + - type: string + enum: [ continue, exit, end ] + default: continue + - type: string + referenceableAuthenticationPolicy: + type: object + title: ReferenceableAuthenticationPolicy + description: Represents a referenceable authentication policy. + unevaluatedProperties: false + oneOf: + - title: AuthenticationPolicyReference + description: The reference of the authentication policy to use. + properties: + use: + type: string + minLength: 1 + title: ReferenceableAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + - $ref: '#/$defs/authenticationPolicy' + secretBasedAuthenticationPolicy: + type: object + title: SecretBasedAuthenticationPolicy + description: Represents an authentication policy based on secrets. + unevaluatedProperties: false + properties: + use: + type: string + minLength: 1 + title: SecretBasedAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + authenticationPolicy: + type: object + title: AuthenticationPolicy + description: Defines an authentication policy. + oneOf: + - title: BasicAuthenticationPolicy + description: Use basic authentication. + properties: + basic: + type: object + title: BasicAuthenticationPolicyConfiguration + description: The configuration of the basic authentication policy. + unevaluatedProperties: false + oneOf: + - title: BasicAuthenticationProperties + description: Inline configuration of the basic authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BasicAuthenticationPolicySecret + description: Secret based configuration of the basic authentication policy. + required: [ basic ] + - title: BearerAuthenticationPolicy + description: Use bearer authentication. + properties: + bearer: + type: object + title: BearerAuthenticationPolicyConfiguration + description: The configuration of the bearer authentication policy. + unevaluatedProperties: false + oneOf: + - title: BearerAuthenticationProperties + description: Inline configuration of the bearer authentication policy. + properties: + token: + type: string + description: The bearer token to use. + required: [ token ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BearerAuthenticationPolicySecret + description: Secret based configuration of the bearer authentication policy. + required: [ bearer ] + - title: DigestAuthenticationPolicy + description: Use digest authentication. + properties: + digest: + type: object + title: DigestAuthenticationPolicyConfiguration + description: The configuration of the digest authentication policy. + unevaluatedProperties: false + oneOf: + - title: DigestAuthenticationProperties + description: Inline configuration of the digest authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: DigestAuthenticationPolicySecret + description: Secret based configuration of the digest authentication policy. + required: [ digest ] + - title: OAuth2AuthenticationPolicy + description: Use OAuth2 authentication. + properties: + oauth2: + type: object + title: OAuth2AuthenticationPolicyConfiguration + description: The configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + oneOf: + - type: object + title: OAuth2ConnectAuthenticationProperties + description: The inline configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + - type: object + properties: + endpoints: + type: object + title: OAuth2AuthenticationPropertiesEndpoints + description: The endpoint configurations for OAuth2. + properties: + token: + type: string + format: uri-template + default: /oauth2/token + title: OAuth2TokenEndpoint + description: The relative path to the token endpoint. Defaults to `/oauth2/token`. + revocation: + type: string + format: uri-template + default: /oauth2/revoke + title: OAuth2RevocationEndpoint + description: The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`. + introspection: + type: string + format: uri-template + default: /oauth2/introspect + title: OAuth2IntrospectionEndpoint + description: The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`. + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OAuth2AuthenticationPolicySecret + description: Secret based configuration of the OAuth2 authentication policy. + required: [ oauth2 ] + - title: OpenIdConnectAuthenticationPolicy + description: Use OpenIdConnect authentication. + properties: + oidc: + type: object + title: OpenIdConnectAuthenticationPolicyConfiguration + description: The configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + title: OpenIdConnectAuthenticationProperties + description: The inline configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OpenIdConnectAuthenticationPolicySecret + description: Secret based configuration of the OpenIdConnect authentication policy. + required: [ oidc ] + oauth2AuthenticationProperties: + type: object + title: OAuth2AutenthicationData + description: Inline configuration of the OAuth2 authentication policy. + properties: + authority: + $ref: '#/$defs/uriTemplate' + title: OAuth2AutenthicationDataAuthority + description: The URI that references the OAuth2 authority to use. + grant: + type: string + enum: [ authorization_code, client_credentials, password, refresh_token, 'urn:ietf:params:oauth:grant-type:token-exchange'] + title: OAuth2AutenthicationDataGrant + description: The grant type to use. + client: + type: object + title: OAuth2AutenthicationDataClient + description: The definition of an OAuth2 client. + unevaluatedProperties: false + properties: + id: + type: string + title: ClientId + description: The client id to use. + secret: + type: string + title: ClientSecret + description: The client secret to use, if any. + assertion: + type: string + title: ClientAssertion + description: A JWT containing a signed assertion with your application credentials. + authentication: + type: string + enum: [ client_secret_basic, client_secret_post, client_secret_jwt, private_key_jwt, none ] + default: client_secret_post + title: ClientAuthentication + description: The authentication method to use to authenticate the client. + request: + type: object + title: OAuth2TokenRequest + description: The configuration of an OAuth2 token request + properties: + encoding: + type: string + enum: [ 'application/x-www-form-urlencoded', 'application/json' ] + default: 'application/x-www-form-urlencoded' + title: Oauth2TokenRequestEncoding + issuers: + type: array + title: OAuth2Issuers + description: A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens. + items: + type: string + scopes: + type: array + title: OAuth2AutenthicationDataScopes + description: The scopes, if any, to request the token for. + items: + type: string + audiences: + type: array + title: OAuth2AutenthicationDataAudiences + description: The audiences, if any, to request the token for. + items: + type: string + username: + type: string + title: OAuth2AutenthicationDataUsername + description: The username to use. Used only if the grant type is Password. + password: + type: string + title: OAuth2AutenthicationDataPassword + description: The password to use. Used only if the grant type is Password. + subject: + $ref: '#/$defs/oauth2Token' + title: OAuth2AutenthicationDataSubject + description: The security token that represents the identity of the party on behalf of whom the request is being made. + actor: + $ref: '#/$defs/oauth2Token' + title: OAuth2AutenthicationDataActor + description: The security token that represents the identity of the acting party. + oauth2Token: + type: object + title: OAuth2TokenDefinition + description: Represents an OAuth2 token. + unevaluatedProperties: false + properties: + token: + type: string + title: OAuth2Token + description: The security token to use. + type: + type: string + title: OAuth2TokenType + description: The type of the security token to use. + required: [ token, type ] + duration: + oneOf: + - type: object + minProperties: 1 + unevaluatedProperties: false + properties: + days: + type: integer + title: DurationDays + description: Number of days, if any. + hours: + type: integer + title: DurationHours + description: Number of days, if any. + minutes: + type: integer + title: DurationMinutes + description: Number of minutes, if any. + seconds: + type: integer + title: DurationSeconds + description: Number of seconds, if any. + milliseconds: + type: integer + title: DurationMilliseconds + description: Number of milliseconds, if any. + title: DurationInline + description: The inline definition of a duration. + - type: string + pattern: '^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$' + title: DurationExpression + description: The ISO 8601 expression of a duration. + error: + type: object + title: Error + description: Represents an error. + unevaluatedProperties: false + properties: + type: + title: ErrorType + description: A URI reference that identifies the error type. + oneOf: + - title: LiteralErrorType + $ref: '#/$defs/uriTemplate' + description: The literal error type. + - title: ExpressionErrorType + $ref: '#/$defs/runtimeExpression' + description: An expression based error type. + status: + type: integer + title: ErrorStatus + description: The status code generated by the origin for this occurrence of the error. + instance: + title: ErrorInstance + description: A JSON Pointer used to reference the component the error originates from. + oneOf: + - title: LiteralErrorInstance + description: The literal error instance. + type: string + format: json-pointer + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorInstance + description: An expression based error instance. + title: + type: string + title: ErrorTitle + description: A short, human-readable summary of the error. + detail: + type: string + title: ErrorDetails + description: A human-readable explanation specific to this occurrence of the error. + required: [ type, status ] + uriTemplate: + title: UriTemplate + anyOf: + - title: LiteralUriTemplate + type: string + format: uri-template + pattern: "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + - title: LiteralUri + type: string + format: uri + pattern: "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + endpoint: + title: Endpoint + description: Represents an endpoint. + oneOf: + - $ref: '#/$defs/runtimeExpression' + - $ref: '#/$defs/uriTemplate' + - title: EndpointConfiguration + type: object + unevaluatedProperties: false + properties: + uri: + title: EndpointUri + description: The endpoint's URI. + oneOf: + - title: LiteralEndpointURI + description: The literal endpoint's URI. + $ref: '#/$defs/uriTemplate' + - title: ExpressionEndpointURI + $ref: '#/$defs/runtimeExpression' + description: An expression based endpoint's URI. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: EndpointAuthentication + description: The authentication policy to use. + required: [ uri ] + eventProperties: + type: object + title: EventProperties + description: Describes the properties of an event. + properties: + id: + type: string + title: EventId + description: The event's unique identifier. + source: + title: EventSource + description: Identifies the context in which an event happened. + oneOf: + - $ref: '#/$defs/uriTemplate' + - $ref: '#/$defs/runtimeExpression' + type: + type: string + title: EventType + description: This attribute contains a value describing the type of event related to the originating occurrence. + time: + title: EventTime + description: When the event occured. + oneOf: + - title: LiteralTime + type: string + format: date-time + - $ref: '#/$defs/runtimeExpression' + subject: + type: string + title: EventSubject + description: The subject of the event. + datacontenttype: + type: string + title: EventDataContentType + description: Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format. + dataschema: + title: EventDataschema + description: The schema describing the event format. + oneOf: + - title: LiteralDataSchema + $ref: '#/$defs/uriTemplate' + description: The literal event data schema. + - title: ExpressionDataSchema + $ref: '#/$defs/runtimeExpression' + description: An expression based event data schema. + additionalProperties: true + eventConsumptionStrategy: + type: object + title: EventConsumptionStrategy + description: Describe the event consumption strategy to adopt. + unevaluatedProperties: false + oneOf: + - title: AllEventConsumptionStrategy + properties: + all: + type: array + title: AllEventConsumptionStrategyConfiguration + description: A list containing all the events that must be consumed. + items: + $ref: '#/$defs/eventFilter' + required: [ all ] + - title: AnyEventConsumptionStrategy + properties: + any: + type: array + title: AnyEventConsumptionStrategyConfiguration + description: A list containing any of the events to consume. + items: + $ref: '#/$defs/eventFilter' + required: [ any ] + - title: OneEventConsumptionStrategy + properties: + one: + $ref: '#/$defs/eventFilter' + title: OneEventConsumptionStrategyConfiguration + description: The single event to consume. + required: [ one ] + eventFilter: + type: object + title: EventFilter + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + unevaluatedProperties: false + properties: + with: + $ref: '#/$defs/eventProperties' + minProperties: 1 + title: WithEvent + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + correlate: + type: object + title: EventFilterCorrelate + description: A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics. + additionalProperties: + type: object + properties: + from: + type: string + title: CorrelateFrom + description: A runtime expression used to extract the correlation value from the filtered event. + expect: + type: string + title: CorrelateExpect + description: A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation. + required: [ from ] + required: [ with ] + extension: + type: object + title: Extension + description: The definition of an extension. + unevaluatedProperties: false + properties: + extend: + type: string + enum: [ call, composite, emit, for, listen, raise, run, set, switch, try, wait, all ] + title: ExtensionTarget + description: The type of task to extend. + when: + type: string + title: ExtensionCondition + description: A runtime expression, if any, used to determine whether or not the extension should apply in the specified context. + before: + $ref: '#/$defs/taskList' + title: ExtensionDoBefore + description: The task(s) to execute before the extended task, if any. + after: + $ref: '#/$defs/taskList' + title: ExtensionDoAfter + description: The task(s) to execute after the extended task, if any. + required: [ extend ] + externalResource: + type: object + title: ExternalResource + description: Represents an external resource. + unevaluatedProperties: false + properties: + name: + type: string + title: ExternalResourceName + description: The name of the external resource, if any. + endpoint: + $ref: '#/$defs/endpoint' + title: ExternalResourceEndpoint + description: The endpoint of the external resource. + required: [ endpoint ] + input: + type: object + title: Input + description: Configures the input of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: InputSchema + description: The schema used to describe and validate the input of the workflow or task. + from: + title: InputFrom + description: A runtime expression, if any, used to mutate and/or filter the input of the workflow or task. + oneOf: + - type: string + - type: object + output: + type: object + title: Output + description: Configures the output of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: OutputSchema + description: The schema used to describe and validate the output of the workflow or task. + as: + title: OutputAs + description: A runtime expression, if any, used to mutate and/or filter the output of the workflow or task. + oneOf: + - type: string + - type: object + export: + type: object + title: Export + description: Set the content of the context. . + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: ExportSchema + description: The schema used to describe and validate the workflow context. + as: + title: ExportAs + description: A runtime expression, if any, used to export the output data to the context. + oneOf: + - type: string + - type: object + retryPolicy: + type: object + title: RetryPolicy + description: Defines a retry policy. + unevaluatedProperties: false + properties: + when: + type: string + title: RetryWhen + description: A runtime expression, if any, used to determine whether or not to retry running the task, in a given context. + exceptWhen: + type: string + title: RetryExcepWhen + description: A runtime expression used to determine whether or not to retry running the task, in a given context. + delay: + $ref: '#/$defs/duration' + title: RetryDelay + description: The duration to wait between retry attempts. + backoff: + type: object + title: RetryBackoff + description: The retry duration backoff. + unevaluatedProperties: false + oneOf: + - title: ConstantBackoff + properties: + constant: + type: object + description: The definition of the constant backoff to use, if any. + required: [ constant ] + - title: ExponentialBackOff + properties: + exponential: + type: object + description: The definition of the exponential backoff to use, if any. + required: [ exponential ] + - title: LinearBackoff + properties: + linear: + type: object + description: The definition of the linear backoff to use, if any. + required: [ linear ] + limit: + type: object + title: RetryLimit + unevaluatedProperties: false + properties: + attempt: + type: object + title: RetryLimitAttempt + unevaluatedProperties: false + properties: + count: + type: integer + title: RetryLimitAttemptCount + description: The maximum amount of retry attempts, if any. + duration: + $ref: '#/$defs/duration' + title: RetryLimitAttemptDuration + description: The maximum duration for each retry attempt. + duration: + $ref: '#/$defs/duration' + title: RetryLimitDuration + description: The duration limit, if any, for all retry attempts. + description: The retry limit, if any. + jitter: + type: object + title: RetryPolicyJitter + description: The parameters, if any, that control the randomness or variability of the delay between retry attempts. + unevaluatedProperties: false + properties: + from: + $ref: '#/$defs/duration' + title: RetryPolicyJitterFrom + description: The minimum duration of the jitter range. + to: + $ref: '#/$defs/duration' + title: RetryPolicyJitterTo + description: The maximum duration of the jitter range. + required: [ from, to ] + schema: + type: object + title: Schema + description: Represents the definition of a schema. + unevaluatedProperties: false + properties: + format: + type: string + default: json + title: SchemaFormat + description: The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`. + oneOf: + - title: SchemaInline + properties: + document: + description: The schema's inline definition. + required: [ document ] + - title: SchemaExternal + properties: + resource: + $ref: '#/$defs/externalResource' + title: SchemaExternalResource + description: The schema's external resource. + required: [ resource ] + timeout: + type: object + title: Timeout + description: The definition of a timeout. + unevaluatedProperties: false + properties: + after: + $ref: '#/$defs/duration' + title: TimeoutAfter + description: The duration after which to timeout. + required: [ after ] + catalog: + type: object + title: Catalog + description: The definition of a resource catalog + unevaluatedProperties: false + properties: + endpoint: + $ref: '#/$defs/endpoint' + title: CatalogEndpoint + description: The root URL where the catalog is hosted + required: [ endpoint ] + runtimeExpression: + type: string + title: RuntimeExpression + description: A runtime expression. + pattern: "^\\s*\\$\\{.+\\}\\s*$" \ No newline at end of file diff --git a/public/schemas/1.0.0/workflow.json b/public/schemas/1.0.0/workflow.json new file mode 100644 index 0000000..67e8be4 --- /dev/null +++ b/public/schemas/1.0.0/workflow.json @@ -0,0 +1,2694 @@ +{ + "$id": "https://open-workflow-specification.org/schemas/1.0.0/workflow.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Open Workflow Specification DSL - Workflow Schema.", + "type": "object", + "required": [ + "document", + "do" + ], + "properties": { + "document": { + "type": "object", + "title": "Document", + "description": "Documents the workflow.", + "unevaluatedProperties": false, + "properties": { + "dsl": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowDSL", + "description": "The version of the DSL used by the workflow." + }, + "namespace": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowNamespace", + "description": "The workflow's namespace." + }, + "name": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowName", + "description": "The workflow's name." + }, + "version": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowVersion", + "description": "The workflow's semantic version." + }, + "title": { + "type": "string", + "title": "WorkflowTitle", + "description": "The workflow's title." + }, + "summary": { + "type": "string", + "title": "WorkflowSummary", + "description": "The workflow's Markdown summary." + }, + "tags": { + "type": "object", + "title": "WorkflowTags", + "description": "A key/value mapping of the workflow's tags, if any.", + "additionalProperties": true + }, + "metadata": { + "type": "object", + "title": "WorkflowMetadata", + "description": "Holds additional information about the workflow.", + "additionalProperties": true + } + }, + "required": [ + "dsl", + "namespace", + "name", + "version" + ] + }, + "input": { + "$ref": "#/$defs/input", + "title": "Input", + "description": "Configures the workflow's input." + }, + "use": { + "type": "object", + "title": "Use", + "description": "Defines the workflow's reusable components.", + "unevaluatedProperties": false, + "properties": { + "authentications": { + "type": "object", + "title": "UseAuthentications", + "description": "The workflow's reusable authentication policies.", + "additionalProperties": { + "$ref": "#/$defs/authenticationPolicy" + } + }, + "errors": { + "type": "object", + "title": "UseErrors", + "description": "The workflow's reusable errors.", + "additionalProperties": { + "$ref": "#/$defs/error" + } + }, + "extensions": { + "type": "array", + "title": "UseExtensions", + "description": "The workflow's extensions.", + "items": { + "type": "object", + "title": "ExtensionItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/extension" + } + } + }, + "functions": { + "type": "object", + "title": "UseFunctions", + "description": "The workflow's reusable functions.", + "additionalProperties": { + "$ref": "#/$defs/task" + } + }, + "retries": { + "type": "object", + "title": "UseRetries", + "description": "The workflow's reusable retry policies.", + "additionalProperties": { + "$ref": "#/$defs/retryPolicy" + } + }, + "secrets": { + "type": "array", + "title": "UseSecrets", + "description": "The workflow's reusable secrets.", + "items": { + "type": "string", + "description": "The workflow's secrets." + } + }, + "timeouts": { + "type": "object", + "title": "UseTimeouts", + "description": "The workflow's reusable timeouts.", + "additionalProperties": { + "$ref": "#/$defs/timeout" + } + }, + "catalogs": { + "type": "object", + "title": "UseCatalogs", + "description": "The workflow's reusable catalogs.", + "additionalProperties": { + "$ref": "#/$defs/catalog" + } + } + } + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "Do", + "description": "Defines the task(s) the workflow must perform." + }, + "timeout": { + "title": "DoTimeout", + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TimeoutDefinition", + "description": "The workflow's timeout configuration, if any." + }, + { + "type": "string", + "title": "TimeoutReference", + "description": "The name of the workflow's timeout, if any." + } + ] + }, + "output": { + "$ref": "#/$defs/output", + "title": "Output", + "description": "Configures the workflow's output." + }, + "schedule": { + "type": "object", + "title": "Schedule", + "description": "Schedules the workflow.", + "unevaluatedProperties": false, + "properties": { + "every": { + "$ref": "#/$defs/duration", + "title": "ScheduleEvery", + "description": "Specifies the duration of the interval at which the workflow should be executed." + }, + "cron": { + "type": "string", + "title": "ScheduleCron", + "description": "Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight." + }, + "after": { + "$ref": "#/$defs/duration", + "title": "ScheduleAfter", + "description": "Specifies a delay duration that the workflow must wait before starting again after it completes." + }, + "on": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ScheduleOn", + "description": "Specifies the events that trigger the workflow execution." + } + } + } + }, + "$defs": { + "taskList": { + "title": "TaskList", + "description": "List of named tasks to perform.", + "type": "array", + "items": { + "type": "object", + "title": "TaskItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/task" + } + } + }, + "taskBase": { + "type": "object", + "title": "TaskBase", + "description": "An object inherited by all tasks.", + "properties": { + "if": { + "type": "string", + "title": "TaskBaseIf", + "description": "A runtime expression, if any, used to determine whether or not the task should be run." + }, + "input": { + "$ref": "#/$defs/input", + "title": "TaskBaseInput", + "description": "Configure the task's input." + }, + "output": { + "$ref": "#/$defs/output", + "title": "TaskBaseOutput", + "description": "Configure the task's output." + }, + "export": { + "$ref": "#/$defs/export", + "title": "TaskBaseExport", + "description": "Export task output to context." + }, + "timeout": { + "title": "TaskTimeout", + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TaskTimeoutDefinition", + "description": "The task's timeout configuration, if any." + }, + { + "type": "string", + "title": "TaskTimeoutReference", + "description": "The name of the task's timeout, if any." + } + ] + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "TaskBaseThen", + "description": "The flow directive to be performed upon completion of the task." + }, + "metadata": { + "type": "object", + "title": "TaskMetadata", + "description": "Holds additional information about the task.", + "additionalProperties": true + } + } + }, + "task": { + "title": "Task", + "description": "A discrete unit of work that contributes to achieving the overall objectives defined by the workflow.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/callTask" + }, + { + "$ref": "#/$defs/doTask" + }, + { + "$ref": "#/$defs/forkTask" + }, + { + "$ref": "#/$defs/emitTask" + }, + { + "$ref": "#/$defs/forTask" + }, + { + "$ref": "#/$defs/listenTask" + }, + { + "$ref": "#/$defs/raiseTask" + }, + { + "$ref": "#/$defs/runTask" + }, + { + "$ref": "#/$defs/setTask" + }, + { + "$ref": "#/$defs/switchTask" + }, + { + "$ref": "#/$defs/tryTask" + }, + { + "$ref": "#/$defs/waitTask" + } + ] + }, + "callTask": { + "title": "CallTask", + "description": "Defines the call to perform.", + "oneOf": [ + { + "title": "CallAsyncAPI", + "description": "Defines the AsyncAPI call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "required": [ + "call", + "with" + ], + "unevaluatedProperties": false, + "properties": { + "call": { + "type": "string", + "const": "asyncapi" + }, + "with": { + "type": "object", + "title": "AsyncApiArguments", + "description": "The Async API call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "AsyncAPIDocument", + "description": "The document that defines the AsyncAPI operation to call." + }, + "channel": { + "type": "string", + "title": "With", + "description": "The name of the channel on which to perform the operation. Used only in case the referenced document uses AsyncAPI v2.6.0." + }, + "operation": { + "type": "string", + "title": "AsyncAPIOperation", + "description": "A reference to the AsyncAPI operation to call." + }, + "server": { + "$ref": "#/$defs/asyncApiServer", + "title": "AsyncAPIServer", + "description": "An object used to configure to the server to call the specified AsyncAPI operation on." + }, + "protocol": { + "type": "string", + "title": "AsyncApiProtocol", + "description": "The protocol to use to select the target server.", + "enum": [ + "amqp", + "amqp1", + "anypointmq", + "googlepubsub", + "http", + "ibmmq", + "jms", + "kafka", + "mercure", + "mqtt", + "mqtt5", + "nats", + "pulsar", + "redis", + "sns", + "solace", + "sqs", + "stomp", + "ws" + ] + }, + "message": { + "$ref": "#/$defs/asyncApiOutboundMessage", + "title": "AsyncApiMessage", + "description": "An object used to configure the message to publish using the target operation." + }, + "subscription": { + "$ref": "#/$defs/asyncApiSubscription", + "title": "AsyncApiSubscription", + "description": "An object used to configure the subscription to messages consumed using the target operation." + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "AsyncAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the AsyncAPI operation." + } + }, + "oneOf": [ + { + "required": [ + "document", + "operation", + "message" + ] + }, + { + "required": [ + "document", + "operation", + "subscription" + ] + }, + { + "required": [ + "document", + "channel", + "message" + ] + }, + { + "required": [ + "document", + "channel", + "subscription" + ] + } + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallGRPC", + "description": "Defines the GRPC call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "grpc" + }, + "with": { + "type": "object", + "title": "GRPCArguments", + "description": "The GRPC call arguments.", + "properties": { + "proto": { + "$ref": "#/$defs/externalResource", + "title": "WithGRPCProto", + "description": "The proto resource that describes the GRPC service to call." + }, + "service": { + "type": "object", + "title": "WithGRPCService", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "WithGRPCServiceName", + "description": "The name of the GRPC service to call." + }, + "host": { + "type": "string", + "title": "WithGRPCServiceHost", + "description": "The hostname of the GRPC service to call.", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$" + }, + "port": { + "type": "integer", + "title": "WithGRPCServicePost", + "description": "The port number of the GRPC service to call.", + "minimum": 0, + "maximum": 65535 + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithGRPCServiceAuthentication", + "description": "The endpoint's authentication policy, if any." + } + }, + "required": [ + "name", + "host" + ] + }, + "method": { + "type": "string", + "title": "WithGRPCMethod", + "description": "The name of the method to call on the defined GRPC service." + }, + "arguments": { + "type": "object", + "title": "WithGRPCArguments", + "description": "The arguments, if any, to call the method with.", + "additionalProperties": true + } + }, + "required": [ + "proto", + "service", + "method" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallHTTP", + "description": "Defines the HTTP call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "http" + }, + "with": { + "type": "object", + "title": "HTTPArguments", + "description": "The HTTP call arguments.", + "properties": { + "method": { + "type": "string", + "title": "HTTPMethod", + "description": "The HTTP method of the HTTP request to perform." + }, + "endpoint": { + "title": "HTTPEndpoint", + "description": "The HTTP endpoint to send the request to.", + "$ref": "#/$defs/endpoint" + }, + "headers": { + "type": "object", + "title": "HTTPHeaders", + "description": "A name/value mapping of the headers, if any, of the HTTP request to perform." + }, + "body": { + "title": "HTTPBody", + "description": "The body, if any, of the HTTP request to perform." + }, + "query": { + "type": "object", + "title": "HTTPQuery", + "description": "A name/value mapping of the query parameters, if any, of the HTTP request to perform.", + "additionalProperties": true + }, + "output": { + "type": "string", + "title": "HTTPOutput", + "description": "The http call output format. Defaults to 'content'.", + "enum": [ + "raw", + "content", + "response" + ] + }, + "redirect": { + "type": "boolean", + "title": "HttpRedirect", + "description": "Specifies whether redirection status codes (`300–399`) should be treated as errors." + } + }, + "required": [ + "method", + "endpoint" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallOpenAPI", + "description": "Defines the OpenAPI call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "properties": { + "call": { + "type": "string", + "const": "openapi" + }, + "with": { + "type": "object", + "title": "OpenAPIArguments", + "description": "The OpenAPI call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "WithOpenAPIDocument", + "description": "The document that defines the OpenAPI operation to call." + }, + "operationId": { + "type": "string", + "title": "WithOpenAPIOperation", + "description": "The id of the OpenAPI operation to call." + }, + "parameters": { + "type": "object", + "title": "WithOpenAPIParameters", + "description": "A name/value mapping of the parameters of the OpenAPI operation to call.", + "additionalProperties": true + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithOpenAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the OpenAPI operation." + }, + "output": { + "type": "string", + "enum": [ + "raw", + "content", + "response" + ], + "title": "WithOpenAPIOutput", + "description": "The http call output format. Defaults to 'content'." + }, + "redirect": { + "type": "boolean", + "title": "HttpRedirect", + "description": "Specifies whether redirection status codes (`300–399`) should be treated as errors." + } + }, + "required": [ + "document", + "operationId" + ], + "unevaluatedProperties": false + } + } + }, + { + "title": "CallFunction", + "description": "Defines the function call to perform.", + "$ref": "#/$defs/taskBase", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call" + ], + "properties": { + "call": { + "type": "string", + "not": { + "enum": [ + "asyncapi", + "grpc", + "http", + "openapi" + ] + }, + "description": "The name of the function to call." + }, + "with": { + "type": "object", + "title": "FunctionArguments", + "description": "A name/value mapping of the parameters, if any, to call the function with.", + "additionalProperties": true + } + } + } + ] + }, + "forkTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ForkTask", + "description": "Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output.", + "unevaluatedProperties": false, + "required": [ + "fork" + ], + "properties": { + "fork": { + "type": "object", + "title": "ForkTaskConfiguration", + "description": "The configuration of the branches to perform concurrently.", + "unevaluatedProperties": false, + "required": [ + "branches" + ], + "properties": { + "branches": { + "$ref": "#/$defs/taskList", + "title": "ForkBranches" + }, + "compete": { + "type": "boolean", + "title": "ForkCompete", + "description": "Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output.", + "default": false + } + } + } + } + }, + "doTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "DoTask", + "description": "Allows to execute a list of tasks in sequence.", + "unevaluatedProperties": false, + "required": [ + "do" + ], + "properties": { + "do": { + "$ref": "#/$defs/taskList", + "title": "DoTaskConfiguration", + "description": "The configuration of the tasks to perform sequentially." + } + } + }, + "emitTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "EmitTask", + "description": "Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services.", + "required": [ + "emit" + ], + "unevaluatedProperties": false, + "properties": { + "emit": { + "type": "object", + "title": "EmitTaskConfiguration", + "description": "The configuration of an event's emission.", + "unevaluatedProperties": false, + "properties": { + "event": { + "type": "object", + "title": "EmitEventDefinition", + "description": "The definition of the event to emit.", + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "title": "EmitEventWith", + "description": "Defines the properties of event to emit.", + "required": [ + "source", + "type" + ] + } + }, + "additionalProperties": true + } + }, + "required": [ + "event" + ] + } + } + }, + "forTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ForTask", + "description": "Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.", + "required": [ + "for", + "do" + ], + "unevaluatedProperties": false, + "properties": { + "for": { + "type": "object", + "title": "ForTaskConfiguration", + "description": "The definition of the loop that iterates over a range of values.", + "unevaluatedProperties": false, + "properties": { + "each": { + "type": "string", + "title": "ForEach", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "in": { + "type": "string", + "title": "ForIn", + "description": "A runtime expression used to get the collection to enumerate." + }, + "at": { + "type": "string", + "title": "ForAt", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + } + }, + "required": [ + "in" + ] + }, + "while": { + "type": "string", + "title": "While", + "description": "A runtime expression that represents the condition, if any, that must be met for the iteration to continue." + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "ForTaskDo" + } + } + }, + "listenTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "ListenTask", + "description": "Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.", + "required": [ + "listen" + ], + "unevaluatedProperties": false, + "properties": { + "listen": { + "type": "object", + "title": "ListenTaskConfiguration", + "description": "The configuration of the listener to use.", + "unevaluatedProperties": false, + "properties": { + "to": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ListenTo", + "description": "Defines the event(s) to listen to." + }, + "read": { + "type": "string", + "enum": [ + "data", + "envelope", + "raw" + ], + "default": "data", + "title": "ListenAndReadAs", + "description": "Specifies how events are read during the listen operation." + } + }, + "required": [ + "to" + ] + }, + "foreach": { + "$ref": "#/$defs/subscriptionIterator", + "title": "ListenIterator", + "description": "Configures the iterator, if any, for processing consumed event(s)." + } + } + }, + "raiseTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "RaiseTask", + "description": "Intentionally triggers and propagates errors.", + "required": [ + "raise" + ], + "unevaluatedProperties": false, + "properties": { + "raise": { + "type": "object", + "title": "RaiseTaskConfiguration", + "description": "The definition of the error to raise.", + "unevaluatedProperties": false, + "properties": { + "error": { + "title": "RaiseTaskError", + "oneOf": [ + { + "$ref": "#/$defs/error", + "title": "RaiseErrorDefinition", + "description": "Defines the error to raise." + }, + { + "type": "string", + "title": "RaiseErrorReference", + "description": "The name of the error to raise" + } + ] + } + }, + "required": [ + "error" + ] + } + } + }, + "runTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "RunTask", + "description": "Provides the capability to execute external containers, shell commands, scripts, or workflows.", + "required": [ + "run" + ], + "unevaluatedProperties": false, + "properties": { + "run": { + "type": "object", + "title": "RunTaskConfiguration", + "description": "The configuration of the process to execute.", + "unevaluatedProperties": false, + "properties": { + "await": { + "type": "boolean", + "default": true, + "title": "AwaitProcessCompletion", + "description": "Whether to await the process completion before continuing." + }, + "return": { + "type": "string", + "title": "ProcessReturnType", + "description": "Configures the output of the process.", + "enum": [ + "stdout", + "stderr", + "code", + "all", + "none" + ], + "default": "stdout" + } + }, + "oneOf": [ + { + "title": "RunContainer", + "description": "Enables the execution of external processes encapsulated within a containerized environment.", + "properties": { + "container": { + "type": "object", + "title": "Container", + "description": "The configuration of the container to run.", + "unevaluatedProperties": false, + "properties": { + "image": { + "type": "string", + "title": "ContainerImage", + "description": "The name of the container image to run." + }, + "name": { + "type": "string", + "title": "ContainerName", + "description": "A runtime expression, if any, used to give specific name to the container." + }, + "command": { + "type": "string", + "title": "ContainerCommand", + "description": "The command, if any, to execute on the container." + }, + "ports": { + "type": "object", + "title": "ContainerPorts", + "description": "The container's port mappings, if any." + }, + "volumes": { + "type": "object", + "title": "ContainerVolumes", + "description": "The container's volume mappings, if any." + }, + "environment": { + "type": "object", + "title": "ContainerEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + }, + "lifetime": { + "$ref": "#/$defs/containerLifetime", + "title": "ContainerLifetime", + "description": "An object, if any, used to configure the container's lifetime" + } + }, + "required": [ + "image" + ] + } + }, + "required": [ + "container" + ] + }, + { + "title": "RunScript", + "description": "Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages.", + "properties": { + "script": { + "type": "object", + "title": "Script", + "description": "The configuration of the script to run.", + "unevaluatedProperties": false, + "properties": { + "language": { + "type": "string", + "title": "ScriptLanguage", + "description": "The language of the script to run." + }, + "arguments": { + "type": "object", + "title": "ScriptArguments", + "description": "A key/value mapping of the arguments, if any, to use when running the configured script.", + "additionalProperties": true + }, + "environment": { + "type": "object", + "title": "ScriptEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured script process.", + "additionalProperties": true + } + }, + "oneOf": [ + { + "title": "InlineScript", + "type": "object", + "description": "The script's code.", + "properties": { + "code": { + "type": "string", + "title": "InlineScriptCode" + } + }, + "required": [ + "code" + ] + }, + { + "title": "ExternalScript", + "type": "object", + "description": "The script's resource.", + "properties": { + "source": { + "$ref": "#/$defs/externalResource", + "title": "ExternalScriptResource" + } + }, + "required": [ + "source" + ] + } + ], + "required": [ + "language" + ] + } + }, + "required": [ + "script" + ] + }, + { + "title": "RunShell", + "description": "Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks.", + "properties": { + "shell": { + "type": "object", + "title": "Shell", + "description": "The configuration of the shell command to run.", + "unevaluatedProperties": false, + "properties": { + "command": { + "type": "string", + "title": "ShellCommand", + "description": "The shell command to run." + }, + "arguments": { + "type": "object", + "title": "ShellArguments", + "description": "A list of the arguments of the shell command to run.", + "additionalProperties": true + }, + "environment": { + "type": "object", + "title": "ShellEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process.", + "additionalProperties": true + } + }, + "required": [ + "command" + ] + } + }, + "required": [ + "shell" + ] + }, + { + "title": "RunWorkflow", + "description": "Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units.", + "properties": { + "workflow": { + "type": "object", + "title": "SubflowConfiguration", + "description": "The configuration of the workflow to run.", + "unevaluatedProperties": false, + "properties": { + "namespace": { + "type": "string", + "title": "SubflowNamespace", + "description": "The namespace the workflow to run belongs to." + }, + "name": { + "type": "string", + "title": "SubflowName", + "description": "The name of the workflow to run." + }, + "version": { + "type": "string", + "default": "latest", + "title": "SubflowVersion", + "description": "The version of the workflow to run. Defaults to latest." + }, + "input": { + "type": "object", + "title": "SubflowInput", + "description": "The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified.", + "additionalProperties": true + } + }, + "required": [ + "namespace", + "name", + "version" + ] + } + }, + "required": [ + "workflow" + ] + } + ] + } + } + }, + "setTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "SetTask", + "description": "A task used to set data.", + "required": [ + "set" + ], + "unevaluatedProperties": false, + "properties": { + "set": { + "type": "object", + "title": "SetTaskConfiguration", + "description": "The data to set.", + "minProperties": 1, + "additionalProperties": true + } + } + }, + "switchTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "SwitchTask", + "description": "Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria.", + "required": [ + "switch" + ], + "unevaluatedProperties": false, + "properties": { + "switch": { + "type": "array", + "title": "SwitchTaskConfiguration", + "description": "The definition of the switch to use.", + "minItems": 1, + "items": { + "type": "object", + "title": "SwitchItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "type": "object", + "title": "SwitchCase", + "description": "The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met.", + "unevaluatedProperties": false, + "required": [ + "then" + ], + "properties": { + "when": { + "type": "string", + "title": "SwitchCaseCondition", + "description": "A runtime expression used to determine whether or not the case matches." + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "SwitchCaseOutcome", + "description": "The flow directive to execute when the case matches." + } + } + } + } + } + } + }, + "tryTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "TryTask", + "description": "Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones.", + "required": [ + "try", + "catch" + ], + "unevaluatedProperties": false, + "properties": { + "try": { + "$ref": "#/$defs/taskList", + "title": "TryTaskConfiguration", + "description": "The task(s) to perform." + }, + "catch": { + "type": "object", + "title": "TryTaskCatch", + "description": "The object used to define the errors to catch.", + "unevaluatedProperties": false, + "properties": { + "errors": { + "type": "object", + "title": "CatchErrors", + "properties": { + "with": { + "$ref": "#/$defs/errorFilter" + } + }, + "description": "static error filter" + }, + "as": { + "type": "string", + "title": "CatchAs", + "description": "The name of the runtime expression variable to save the error as. Defaults to 'error'." + }, + "when": { + "type": "string", + "title": "CatchWhen", + "description": "A runtime expression used to determine whether to catch the filtered error." + }, + "exceptWhen": { + "type": "string", + "title": "CatchExceptWhen", + "description": "A runtime expression used to determine whether not to catch the filtered error." + }, + "retry": { + "oneOf": [ + { + "$ref": "#/$defs/retryPolicy", + "title": "RetryPolicyDefinition", + "description": "The retry policy to use, if any, when catching errors." + }, + { + "type": "string", + "title": "RetryPolicyReference", + "description": "The name of the retry policy to use, if any, when catching errors." + } + ] + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "TryTaskCatchDo", + "description": "The definition of the task(s) to run when catching an error." + } + } + } + } + }, + "waitTask": { + "type": "object", + "$ref": "#/$defs/taskBase", + "title": "WaitTask", + "description": "Allows workflows to pause or delay their execution for a specified period of time.", + "required": [ + "wait" + ], + "unevaluatedProperties": false, + "properties": { + "wait": { + "$ref": "#/$defs/duration", + "title": "WaitTaskConfiguration", + "description": "The amount of time to wait." + } + } + }, + "flowDirective": { + "title": "FlowDirective", + "description": "Represents different transition options for a workflow.", + "anyOf": [ + { + "title": "FlowDirectiveEnum", + "type": "string", + "enum": [ + "continue", + "exit", + "end" + ], + "default": "continue" + }, + { + "type": "string" + } + ] + }, + "referenceableAuthenticationPolicy": { + "type": "object", + "title": "ReferenceableAuthenticationPolicy", + "description": "Represents a referenceable authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AuthenticationPolicyReference", + "description": "The reference of the authentication policy to use.", + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "ReferenceableAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + { + "$ref": "#/$defs/authenticationPolicy" + } + ] + }, + "secretBasedAuthenticationPolicy": { + "type": "object", + "title": "SecretBasedAuthenticationPolicy", + "description": "Represents an authentication policy based on secrets.", + "unevaluatedProperties": false, + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "SecretBasedAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + "authenticationPolicy": { + "type": "object", + "title": "AuthenticationPolicy", + "description": "Defines an authentication policy.", + "oneOf": [ + { + "title": "BasicAuthenticationPolicy", + "description": "Use basic authentication.", + "properties": { + "basic": { + "type": "object", + "title": "BasicAuthenticationPolicyConfiguration", + "description": "The configuration of the basic authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BasicAuthenticationProperties", + "description": "Inline configuration of the basic authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BasicAuthenticationPolicySecret", + "description": "Secret based configuration of the basic authentication policy." + } + ] + } + }, + "required": [ + "basic" + ] + }, + { + "title": "BearerAuthenticationPolicy", + "description": "Use bearer authentication.", + "properties": { + "bearer": { + "type": "object", + "title": "BearerAuthenticationPolicyConfiguration", + "description": "The configuration of the bearer authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BearerAuthenticationProperties", + "description": "Inline configuration of the bearer authentication policy.", + "properties": { + "token": { + "type": "string", + "description": "The bearer token to use." + } + }, + "required": [ + "token" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BearerAuthenticationPolicySecret", + "description": "Secret based configuration of the bearer authentication policy." + } + ] + } + }, + "required": [ + "bearer" + ] + }, + { + "title": "DigestAuthenticationPolicy", + "description": "Use digest authentication.", + "properties": { + "digest": { + "type": "object", + "title": "DigestAuthenticationPolicyConfiguration", + "description": "The configuration of the digest authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "DigestAuthenticationProperties", + "description": "Inline configuration of the digest authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "DigestAuthenticationPolicySecret", + "description": "Secret based configuration of the digest authentication policy." + } + ] + } + }, + "required": [ + "digest" + ] + }, + { + "title": "OAuth2AuthenticationPolicy", + "description": "Use OAuth2 authentication.", + "properties": { + "oauth2": { + "type": "object", + "title": "OAuth2AuthenticationPolicyConfiguration", + "description": "The configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "type": "object", + "title": "OAuth2ConnectAuthenticationProperties", + "description": "The inline configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties" + }, + { + "type": "object", + "properties": { + "endpoints": { + "type": "object", + "title": "OAuth2AuthenticationPropertiesEndpoints", + "description": "The endpoint configurations for OAuth2.", + "properties": { + "token": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/token", + "title": "OAuth2TokenEndpoint", + "description": "The relative path to the token endpoint. Defaults to `/oauth2/token`." + }, + "revocation": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/revoke", + "title": "OAuth2RevocationEndpoint", + "description": "The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`." + }, + "introspection": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/introspect", + "title": "OAuth2IntrospectionEndpoint", + "description": "The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`." + } + } + } + } + } + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OAuth2AuthenticationPolicySecret", + "description": "Secret based configuration of the OAuth2 authentication policy." + } + ] + } + }, + "required": [ + "oauth2" + ] + }, + { + "title": "OpenIdConnectAuthenticationPolicy", + "description": "Use OpenIdConnect authentication.", + "properties": { + "oidc": { + "type": "object", + "title": "OpenIdConnectAuthenticationPolicyConfiguration", + "description": "The configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties", + "title": "OpenIdConnectAuthenticationProperties", + "description": "The inline configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OpenIdConnectAuthenticationPolicySecret", + "description": "Secret based configuration of the OpenIdConnect authentication policy." + } + ] + } + }, + "required": [ + "oidc" + ] + } + ] + }, + "oauth2AuthenticationProperties": { + "type": "object", + "title": "OAuth2AutenthicationData", + "description": "Inline configuration of the OAuth2 authentication policy.", + "properties": { + "authority": { + "$ref": "#/$defs/uriTemplate", + "title": "OAuth2AutenthicationDataAuthority", + "description": "The URI that references the OAuth2 authority to use." + }, + "grant": { + "type": "string", + "enum": [ + "authorization_code", + "client_credentials", + "password", + "refresh_token", + "urn:ietf:params:oauth:grant-type:token-exchange" + ], + "title": "OAuth2AutenthicationDataGrant", + "description": "The grant type to use." + }, + "client": { + "type": "object", + "title": "OAuth2AutenthicationDataClient", + "description": "The definition of an OAuth2 client.", + "unevaluatedProperties": false, + "properties": { + "id": { + "type": "string", + "title": "ClientId", + "description": "The client id to use." + }, + "secret": { + "type": "string", + "title": "ClientSecret", + "description": "The client secret to use, if any." + }, + "assertion": { + "type": "string", + "title": "ClientAssertion", + "description": "A JWT containing a signed assertion with your application credentials." + }, + "authentication": { + "type": "string", + "enum": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "default": "client_secret_post", + "title": "ClientAuthentication", + "description": "The authentication method to use to authenticate the client." + } + } + }, + "request": { + "type": "object", + "title": "OAuth2TokenRequest", + "description": "The configuration of an OAuth2 token request", + "properties": { + "encoding": { + "type": "string", + "enum": [ + "application/x-www-form-urlencoded", + "application/json" + ], + "default": "application/x-www-form-urlencoded", + "title": "Oauth2TokenRequestEncoding" + } + } + }, + "issuers": { + "type": "array", + "title": "OAuth2Issuers", + "description": "A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens.", + "items": { + "type": "string" + } + }, + "scopes": { + "type": "array", + "title": "OAuth2AutenthicationDataScopes", + "description": "The scopes, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "title": "OAuth2AutenthicationDataAudiences", + "description": "The audiences, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "username": { + "type": "string", + "title": "OAuth2AutenthicationDataUsername", + "description": "The username to use. Used only if the grant type is Password." + }, + "password": { + "type": "string", + "title": "OAuth2AutenthicationDataPassword", + "description": "The password to use. Used only if the grant type is Password." + }, + "subject": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AutenthicationDataSubject", + "description": "The security token that represents the identity of the party on behalf of whom the request is being made." + }, + "actor": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AutenthicationDataActor", + "description": "The security token that represents the identity of the acting party." + } + } + }, + "oauth2Token": { + "type": "object", + "title": "OAuth2TokenDefinition", + "description": "Represents an OAuth2 token.", + "unevaluatedProperties": false, + "properties": { + "token": { + "type": "string", + "title": "OAuth2Token", + "description": "The security token to use." + }, + "type": { + "type": "string", + "title": "OAuth2TokenType", + "description": "The type of the security token to use." + } + }, + "required": [ + "token", + "type" + ] + }, + "duration": { + "oneOf": [ + { + "type": "object", + "minProperties": 1, + "unevaluatedProperties": false, + "properties": { + "days": { + "type": "integer", + "title": "DurationDays", + "description": "Number of days, if any." + }, + "hours": { + "type": "integer", + "title": "DurationHours", + "description": "Number of days, if any." + }, + "minutes": { + "type": "integer", + "title": "DurationMinutes", + "description": "Number of minutes, if any." + }, + "seconds": { + "type": "integer", + "title": "DurationSeconds", + "description": "Number of seconds, if any." + }, + "milliseconds": { + "type": "integer", + "title": "DurationMilliseconds", + "description": "Number of milliseconds, if any." + } + }, + "title": "DurationInline", + "description": "The inline definition of a duration." + }, + { + "type": "string", + "pattern": "^P(?!$)(\\d+(?:\\.\\d+)?Y)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?W)?(\\d+(?:\\.\\d+)?D)?(T(?=\\d)(\\d+(?:\\.\\d+)?H)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?S)?)?$", + "title": "DurationExpression", + "description": "The ISO 8601 expression of a duration." + } + ] + }, + "error": { + "type": "object", + "title": "Error", + "description": "Represents an error.", + "unevaluatedProperties": false, + "properties": { + "type": { + "title": "ErrorType", + "description": "A URI reference that identifies the error type.", + "oneOf": [ + { + "title": "LiteralErrorType", + "$ref": "#/$defs/uriTemplate", + "description": "The literal error type." + }, + { + "title": "ExpressionErrorType", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based error type." + } + ] + }, + "status": { + "type": "integer", + "title": "ErrorStatus", + "description": "The status code generated by the origin for this occurrence of the error." + }, + "instance": { + "title": "ErrorInstance", + "description": "A JSON Pointer used to reference the component the error originates from.", + "oneOf": [ + { + "title": "LiteralErrorInstance", + "description": "The literal error instance.", + "type": "string", + "format": "json-pointer" + }, + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorInstance", + "description": "An expression based error instance." + } + ] + }, + "title": { + "type": "string", + "title": "ErrorTitle", + "description": "A short, human-readable summary of the error." + }, + "detail": { + "type": "string", + "title": "ErrorDetails", + "description": "A human-readable explanation specific to this occurrence of the error." + } + }, + "required": [ + "type", + "status" + ] + }, + "errorFilter": { + "type": "object", + "title": "ErrorFilter", + "description": "Error filtering base on static values. For error filtering on dynamic values, use catch.when property", + "minProperties": 1, + "properties": { + "type": { + "type": "string", + "description": "if present, means this value should be used for filtering" + }, + "status": { + "type": "integer", + "description": "if present, means this value should be used for filtering" + }, + "instance": { + "type": "string", + "description": "if present, means this value should be used for filtering" + }, + "title": { + "type": "string", + "description": "if present, means this value should be used for filtering" + }, + "details": { + "type": "string", + "description": "if present, means this value should be used for filtering" + } + } + }, + "uriTemplate": { + "title": "UriTemplate", + "anyOf": [ + { + "title": "LiteralUriTemplate", + "type": "string", + "format": "uri-template", + "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + }, + { + "title": "LiteralUri", + "type": "string", + "format": "uri", + "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + } + ] + }, + "endpoint": { + "title": "Endpoint", + "description": "Represents an endpoint.", + "oneOf": [ + { + "$ref": "#/$defs/runtimeExpression" + }, + { + "$ref": "#/$defs/uriTemplate" + }, + { + "title": "EndpointConfiguration", + "type": "object", + "unevaluatedProperties": false, + "properties": { + "uri": { + "title": "EndpointUri", + "description": "The endpoint's URI.", + "oneOf": [ + { + "title": "LiteralEndpointURI", + "description": "The literal endpoint's URI.", + "$ref": "#/$defs/uriTemplate" + }, + { + "title": "ExpressionEndpointURI", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based endpoint's URI." + } + ] + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "EndpointAuthentication", + "description": "The authentication policy to use." + } + }, + "required": [ + "uri" + ] + } + ] + }, + "eventProperties": { + "type": "object", + "title": "EventProperties", + "description": "Describes the properties of an event.", + "properties": { + "id": { + "type": "string", + "title": "EventId", + "description": "The event's unique identifier." + }, + "source": { + "title": "EventSource", + "description": "Identifies the context in which an event happened.", + "oneOf": [ + { + "$ref": "#/$defs/uriTemplate" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "type": { + "type": "string", + "title": "EventType", + "description": "This attribute contains a value describing the type of event related to the originating occurrence." + }, + "time": { + "title": "EventTime", + "description": "When the event occured.", + "oneOf": [ + { + "title": "LiteralTime", + "type": "string", + "format": "date-time" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "subject": { + "type": "string", + "title": "EventSubject", + "description": "The subject of the event." + }, + "datacontenttype": { + "type": "string", + "title": "EventDataContentType", + "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format." + }, + "dataschema": { + "title": "EventDataschema", + "description": "The schema describing the event format.", + "oneOf": [ + { + "title": "LiteralDataSchema", + "$ref": "#/$defs/uriTemplate", + "description": "The literal event data schema." + }, + { + "title": "ExpressionDataSchema", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based event data schema." + } + ] + }, + "data": { + "title": "EventData", + "description": "The event's payload data", + "anyOf": [ + { + "$ref": "#/$defs/runtimeExpression" + }, + {} + ] + } + }, + "additionalProperties": true + }, + "eventConsumptionStrategy": { + "type": "object", + "title": "EventConsumptionStrategy", + "description": "Describe the event consumption strategy to adopt.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AllEventConsumptionStrategy", + "properties": { + "all": { + "type": "array", + "title": "AllEventConsumptionStrategyConfiguration", + "description": "A list containing all the events that must be consumed.", + "items": { + "$ref": "#/$defs/eventFilter" + } + } + }, + "required": [ + "all" + ] + }, + { + "title": "AnyEventConsumptionStrategy", + "properties": { + "any": { + "type": "array", + "title": "AnyEventConsumptionStrategyConfiguration", + "description": "A list containing any of the events to consume.", + "items": { + "$ref": "#/$defs/eventFilter" + } + }, + "until": { + "oneOf": [ + { + "type": "string", + "title": "AnyEventUntilCondition", + "description": "A runtime expression condition evaluated after consuming an event and which determines whether or not to continue listening." + }, + { + "allOf": [ + { + "$ref": "#/$defs/eventConsumptionStrategy", + "description": "The strategy that defines the event(s) to consume to stop listening." + }, + { + "properties": { + "until": false + } + } + ], + "title": "AnyEventUntilConsumed" + } + ] + } + }, + "required": [ + "any" + ] + }, + { + "title": "OneEventConsumptionStrategy", + "properties": { + "one": { + "$ref": "#/$defs/eventFilter", + "title": "OneEventConsumptionStrategyConfiguration", + "description": "The single event to consume." + } + }, + "required": [ + "one" + ] + } + ] + }, + "eventFilter": { + "type": "object", + "title": "EventFilter", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.", + "unevaluatedProperties": false, + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "minProperties": 1, + "title": "WithEvent", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes." + }, + "correlate": { + "type": "object", + "title": "EventFilterCorrelate", + "description": "A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics.", + "additionalProperties": { + "type": "object", + "properties": { + "from": { + "type": "string", + "title": "CorrelateFrom", + "description": "A runtime expression used to extract the correlation value from the filtered event." + }, + "expect": { + "type": "string", + "title": "CorrelateExpect", + "description": "A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation." + } + }, + "required": [ + "from" + ] + } + } + }, + "required": [ + "with" + ] + }, + "extension": { + "type": "object", + "title": "Extension", + "description": "The definition of an extension.", + "unevaluatedProperties": false, + "properties": { + "extend": { + "type": "string", + "enum": [ + "call", + "composite", + "emit", + "for", + "listen", + "raise", + "run", + "set", + "switch", + "try", + "wait", + "all" + ], + "title": "ExtensionTarget", + "description": "The type of task to extend." + }, + "when": { + "type": "string", + "title": "ExtensionCondition", + "description": "A runtime expression, if any, used to determine whether or not the extension should apply in the specified context." + }, + "before": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoBefore", + "description": "The task(s) to execute before the extended task, if any." + }, + "after": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoAfter", + "description": "The task(s) to execute after the extended task, if any." + } + }, + "required": [ + "extend" + ] + }, + "externalResource": { + "type": "object", + "title": "ExternalResource", + "description": "Represents an external resource.", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "ExternalResourceName", + "description": "The name of the external resource, if any." + }, + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "ExternalResourceEndpoint", + "description": "The endpoint of the external resource." + } + }, + "required": [ + "endpoint" + ] + }, + "input": { + "type": "object", + "title": "Input", + "description": "Configures the input of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "InputSchema", + "description": "The schema used to describe and validate the input of the workflow or task." + }, + "from": { + "title": "InputFrom", + "description": "A runtime expression, if any, used to mutate and/or filter the input of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "output": { + "type": "object", + "title": "Output", + "description": "Configures the output of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "OutputSchema", + "description": "The schema used to describe and validate the output of the workflow or task." + }, + "as": { + "title": "OutputAs", + "description": "A runtime expression, if any, used to mutate and/or filter the output of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "export": { + "type": "object", + "title": "Export", + "description": "Set the content of the context. .", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "ExportSchema", + "description": "The schema used to describe and validate the workflow context." + }, + "as": { + "title": "ExportAs", + "description": "A runtime expression, if any, used to export the output data to the context.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "retryPolicy": { + "type": "object", + "title": "RetryPolicy", + "description": "Defines a retry policy.", + "unevaluatedProperties": false, + "properties": { + "when": { + "type": "string", + "title": "RetryWhen", + "description": "A runtime expression, if any, used to determine whether or not to retry running the task, in a given context." + }, + "exceptWhen": { + "type": "string", + "title": "RetryExcepWhen", + "description": "A runtime expression used to determine whether or not to retry running the task, in a given context." + }, + "delay": { + "$ref": "#/$defs/duration", + "title": "RetryDelay", + "description": "The duration to wait between retry attempts." + }, + "backoff": { + "type": "object", + "title": "RetryBackoff", + "description": "The retry duration backoff.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "ConstantBackoff", + "properties": { + "constant": { + "type": "object", + "description": "The definition of the constant backoff to use, if any." + } + }, + "required": [ + "constant" + ] + }, + { + "title": "ExponentialBackOff", + "properties": { + "exponential": { + "type": "object", + "description": "The definition of the exponential backoff to use, if any." + } + }, + "required": [ + "exponential" + ] + }, + { + "title": "LinearBackoff", + "properties": { + "linear": { + "type": "object", + "description": "The definition of the linear backoff to use, if any." + } + }, + "required": [ + "linear" + ] + } + ] + }, + "limit": { + "type": "object", + "title": "RetryLimit", + "unevaluatedProperties": false, + "properties": { + "attempt": { + "type": "object", + "title": "RetryLimitAttempt", + "unevaluatedProperties": false, + "properties": { + "count": { + "type": "integer", + "title": "RetryLimitAttemptCount", + "description": "The maximum amount of retry attempts, if any." + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitAttemptDuration", + "description": "The maximum duration for each retry attempt." + } + } + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitDuration", + "description": "The duration limit, if any, for all retry attempts." + } + }, + "description": "The retry limit, if any." + }, + "jitter": { + "type": "object", + "title": "RetryPolicyJitter", + "description": "The parameters, if any, that control the randomness or variability of the delay between retry attempts.", + "unevaluatedProperties": false, + "properties": { + "from": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterFrom", + "description": "The minimum duration of the jitter range." + }, + "to": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterTo", + "description": "The maximum duration of the jitter range." + } + }, + "required": [ + "from", + "to" + ] + } + } + }, + "schema": { + "type": "object", + "title": "Schema", + "description": "Represents the definition of a schema.", + "unevaluatedProperties": false, + "properties": { + "format": { + "type": "string", + "default": "json", + "title": "SchemaFormat", + "description": "The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`." + } + }, + "oneOf": [ + { + "title": "SchemaInline", + "properties": { + "document": { + "description": "The schema's inline definition." + } + }, + "required": [ + "document" + ] + }, + { + "title": "SchemaExternal", + "properties": { + "resource": { + "$ref": "#/$defs/externalResource", + "title": "SchemaExternalResource", + "description": "The schema's external resource." + } + }, + "required": [ + "resource" + ] + } + ] + }, + "timeout": { + "type": "object", + "title": "Timeout", + "description": "The definition of a timeout.", + "unevaluatedProperties": false, + "properties": { + "after": { + "$ref": "#/$defs/duration", + "title": "TimeoutAfter", + "description": "The duration after which to timeout." + } + }, + "required": [ + "after" + ] + }, + "catalog": { + "type": "object", + "title": "Catalog", + "description": "The definition of a resource catalog.", + "unevaluatedProperties": false, + "properties": { + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "CatalogEndpoint", + "description": "The root URL where the catalog is hosted." + } + }, + "required": [ + "endpoint" + ] + }, + "runtimeExpression": { + "type": "string", + "title": "RuntimeExpression", + "description": "A runtime expression.", + "pattern": "^\\s*\\$\\{.+\\}\\s*$" + }, + "containerLifetime": { + "type": "object", + "title": "ContainerLifetime", + "description": "The configuration of a container's lifetime", + "unevaluatedProperties": false, + "properties": { + "cleanup": { + "type": "string", + "title": "ContainerCleanupPolicy", + "description": "The container cleanup policy to use", + "enum": [ + "always", + "never", + "eventually" + ], + "default": "never" + }, + "after": { + "$ref": "#/$defs/duration", + "title": "ContainerLifetimeDuration", + "description": "The duration after which to cleanup the container, in case the cleanup policy has been set to 'eventually'" + } + }, + "required": [ + "cleanup" + ], + "if": { + "properties": { + "cleanup": { + "const": "eventually" + } + } + }, + "then": { + "required": [ + "after" + ] + }, + "else": { + "not": { + "required": [ + "after" + ] + } + } + }, + "processResult": { + "type": "object", + "title": "ProcessResult", + "description": "The object returned by a run task when its return type has been set 'all'.", + "unevaluatedProperties": false, + "properties": { + "code": { + "type": "integer", + "title": "ProcessExitCode", + "description": "The process's exit code." + }, + "stdout": { + "type": "string", + "title": "ProcessStandardOutput", + "description": "The content of the process's STDOUT." + }, + "stderr": { + "type": "string", + "title": "ProcessStandardError", + "description": "The content of the process's STDERR." + } + }, + "required": [ + "code", + "stdout", + "stderr" + ] + }, + "asyncApiServer": { + "type": "object", + "title": "AsyncApiServer", + "description": "Configures the target server of an AsyncAPI operation.", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "AsyncApiServerName", + "description": "The target server's name." + }, + "variables": { + "type": "object", + "title": "AsyncApiServerVariables", + "description": "The target server's variables, if any." + } + }, + "required": [ + "name" + ] + }, + "asyncApiOutboundMessage": { + "type": "object", + "title": "AsyncApiOutboundMessage", + "description": "An object used to configure the message to publish using the target operation.", + "unevaluatedProperties": false, + "properties": { + "payload": { + "type": "object", + "title": "AsyncApiMessagePayload", + "description": "The message's payload, if any.", + "additionalProperties": true + }, + "headers": { + "type": "object", + "title": "AsyncApiMessageHeaders", + "description": "The message's headers, if any.", + "additionalProperties": true + } + } + }, + "asyncApiInboundMessage": { + "type": "object", + "title": "AsyncApiInboundMessage", + "description": "Represents a message counsumed by an AsyncAPI subscription.", + "allOf": [ + { + "$ref": "#/$defs/asyncApiOutboundMessage" + } + ], + "properties": { + "correlationId": { + "type": "string", + "title": "AsyncApiMessageCorrelationId", + "description": "The message's correlation id, if any." + } + } + }, + "asyncApiSubscription": { + "type": "object", + "title": "AsyncApiSubscription", + "description": "An object used to configure the subscription to messages consumed using the target operation.", + "unevaluatedProperties": false, + "properties": { + "filter": { + "$ref": "#/$defs/runtimeExpression", + "title": "AsyncApiSubscriptionCorrelation", + "description": "A runtime expression, if any, used to filter consumed messages." + }, + "consume": { + "$ref": "#/$defs/asyncApiMessageConsumptionPolicy", + "title": "AsyncApiMessageConsumptionPolicy", + "description": "An object used to configure the subscription's message consumption policy." + }, + "foreach": { + "$ref": "#/$defs/subscriptionIterator", + "title": "AsyncApiSubscriptionIterator", + "description": "Configures the iterator, if any, for processing consumed messages(s)." + } + }, + "required": [ + "consume" + ] + }, + "asyncApiMessageConsumptionPolicy": { + "type": "object", + "title": "AsyncApiMessageConsumptionPolicy", + "description": "An object used to configure a subscription's message consumption policy.", + "unevaluatedProperties": false, + "properties": { + "for": { + "$ref": "#/$defs/duration", + "title": "AsyncApiMessageConsumptionPolicyFor", + "description": "Specifies the time period over which messages will be consumed." + } + }, + "oneOf": [ + { + "properties": { + "amount": { + "type": "integer", + "description": "The amount of (filtered) messages to consume before disposing of the subscription." + } + }, + "title": "AsyncApiMessageConsumptionPolicyAmount", + "required": [ + "amount" + ] + }, + { + "properties": { + "while": { + "$ref": "#/$defs/runtimeExpression", + "description": "A runtime expression evaluated after each consumed (filtered) message to decide if message consumption should continue." + } + }, + "title": "AsyncApiMessageConsumptionPolicyWhile", + "required": [ + "while" + ] + }, + { + "properties": { + "until": { + "$ref": "#/$defs/runtimeExpression", + "description": "A runtime expression evaluated before each consumed (filtered) message to decide if message consumption should continue." + } + }, + "title": "AsyncApiMessageConsumptionPolicyUntil", + "required": [ + "until" + ] + } + ] + }, + "subscriptionIterator": { + "type": "object", + "title": "SubscriptionIterator", + "description": "Configures the iteration over each item (event or message) consumed by a subscription.", + "unevaluatedProperties": false, + "properties": { + "item": { + "type": "string", + "title": "SubscriptionIteratorItem", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "at": { + "type": "string", + "title": "SubscriptionIteratorIndex", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "SubscriptionIteratorTasks", + "description": "The tasks to perform for each consumed item." + }, + "output": { + "$ref": "#/$defs/output", + "title": "SubscriptionIteratorOutput", + "description": "An object, if any, used to customize the item's output and to document its schema." + }, + "export": { + "$ref": "#/$defs/export", + "title": "SubscriptionIteratorExport", + "description": "An object, if any, used to customize the content of the workflow context." + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/1.0.0/workflow.yaml b/public/schemas/1.0.0/workflow.yaml new file mode 100644 index 0000000..31b4f48 --- /dev/null +++ b/public/schemas/1.0.0/workflow.yaml @@ -0,0 +1,1758 @@ +$id: https://open-workflow-specification.org/schemas/1.0.0/workflow.yaml +$schema: https://json-schema.org/draft/2020-12/schema +description: Open Workflow Specification DSL - Workflow Schema. +type: object +required: [ document, do ] +properties: + document: + type: object + title: Document + description: Documents the workflow. + unevaluatedProperties: false + properties: + dsl: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowDSL + description: The version of the DSL used by the workflow. + namespace: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowNamespace + description: The workflow's namespace. + name: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowName + description: The workflow's name. + version: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowVersion + description: The workflow's semantic version. + title: + type: string + title: WorkflowTitle + description: The workflow's title. + summary: + type: string + title: WorkflowSummary + description: The workflow's Markdown summary. + tags: + type: object + title: WorkflowTags + description: A key/value mapping of the workflow's tags, if any. + additionalProperties: true + metadata: + type: object + title: WorkflowMetadata + description: Holds additional information about the workflow. + additionalProperties: true + required: [ dsl, namespace, name, version ] + input: + $ref: '#/$defs/input' + title: Input + description: Configures the workflow's input. + use: + type: object + title: Use + description: Defines the workflow's reusable components. + unevaluatedProperties: false + properties: + authentications: + type: object + title: UseAuthentications + description: The workflow's reusable authentication policies. + additionalProperties: + $ref: '#/$defs/authenticationPolicy' + errors: + type: object + title: UseErrors + description: The workflow's reusable errors. + additionalProperties: + $ref: '#/$defs/error' + extensions: + type: array + title: UseExtensions + description: The workflow's extensions. + items: + type: object + title: ExtensionItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/extension' + functions: + type: object + title: UseFunctions + description: The workflow's reusable functions. + additionalProperties: + $ref: '#/$defs/task' + retries: + type: object + title: UseRetries + description: The workflow's reusable retry policies. + additionalProperties: + $ref: '#/$defs/retryPolicy' + secrets: + type: array + title: UseSecrets + description: The workflow's reusable secrets. + items: + type: string + description: The workflow's secrets. + timeouts: + type: object + title: UseTimeouts + description: The workflow's reusable timeouts. + additionalProperties: + $ref: '#/$defs/timeout' + catalogs: + type: object + title: UseCatalogs + description: The workflow's reusable catalogs. + additionalProperties: + $ref: '#/$defs/catalog' + do: + $ref: '#/$defs/taskList' + title: Do + description: Defines the task(s) the workflow must perform. + timeout: + title: DoTimeout + oneOf: + - $ref: '#/$defs/timeout' + title: TimeoutDefinition + description: The workflow's timeout configuration, if any. + - type: string + title: TimeoutReference + description: The name of the workflow's timeout, if any. + output: + $ref: '#/$defs/output' + title: Output + description: Configures the workflow's output. + schedule: + type: object + title: Schedule + description: Schedules the workflow. + unevaluatedProperties: false + properties: + every: + $ref: '#/$defs/duration' + title: ScheduleEvery + description: Specifies the duration of the interval at which the workflow should be executed. + cron: + type: string + title: ScheduleCron + description: Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight. + after: + $ref: '#/$defs/duration' + title: ScheduleAfter + description: Specifies a delay duration that the workflow must wait before starting again after it completes. + on: + $ref: '#/$defs/eventConsumptionStrategy' + title: ScheduleOn + description: Specifies the events that trigger the workflow execution. +$defs: + taskList: + title: TaskList + description: List of named tasks to perform. + type: array + items: + type: object + title: TaskItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/task' + taskBase: + type: object + title: TaskBase + description: An object inherited by all tasks. + properties: + if: + type: string + title: TaskBaseIf + description: A runtime expression, if any, used to determine whether or not the task should be run. + input: + $ref: '#/$defs/input' + title: TaskBaseInput + description: Configure the task's input. + output: + $ref: '#/$defs/output' + title: TaskBaseOutput + description: Configure the task's output. + export: + $ref: '#/$defs/export' + title: TaskBaseExport + description: Export task output to context. + timeout: + title: TaskTimeout + oneOf: + - $ref: '#/$defs/timeout' + title: TaskTimeoutDefinition + description: The task's timeout configuration, if any. + - type: string + title: TaskTimeoutReference + description: The name of the task's timeout, if any. + then: + $ref: '#/$defs/flowDirective' + title: TaskBaseThen + description: The flow directive to be performed upon completion of the task. + metadata: + type: object + title: TaskMetadata + description: Holds additional information about the task. + additionalProperties: true + task: + title: Task + description: A discrete unit of work that contributes to achieving the overall objectives defined by the workflow. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/callTask' + - $ref: '#/$defs/doTask' + - $ref: '#/$defs/forkTask' + - $ref: '#/$defs/emitTask' + - $ref: '#/$defs/forTask' + - $ref: '#/$defs/listenTask' + - $ref: '#/$defs/raiseTask' + - $ref: '#/$defs/runTask' + - $ref: '#/$defs/setTask' + - $ref: '#/$defs/switchTask' + - $ref: '#/$defs/tryTask' + - $ref: '#/$defs/waitTask' + callTask: + title: CallTask + description: Defines the call to perform. + oneOf: + - title: CallAsyncAPI + description: Defines the AsyncAPI call to perform. + $ref: '#/$defs/taskBase' + type: object + required: [ call, with ] + unevaluatedProperties: false + properties: + call: + type: string + const: asyncapi + with: + type: object + title: AsyncApiArguments + description: The Async API call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: AsyncAPIDocument + description: The document that defines the AsyncAPI operation to call. + channel: + type: string + title: With + description: The name of the channel on which to perform the operation. Used only in case the referenced document uses AsyncAPI v2.6.0. + operation: + type: string + title: AsyncAPIOperation + description: A reference to the AsyncAPI operation to call. + server: + $ref: '#/$defs/asyncApiServer' + title: AsyncAPIServer + description: An object used to configure to the server to call the specified AsyncAPI operation on. + protocol: + type: string + title: AsyncApiProtocol + description: The protocol to use to select the target server. + enum: [ amqp, amqp1, anypointmq, googlepubsub, http, ibmmq, jms, kafka, mercure, mqtt, mqtt5, nats, pulsar, redis, sns, solace, sqs, stomp, ws ] + message: + $ref: '#/$defs/asyncApiOutboundMessage' + title: AsyncApiMessage + description: An object used to configure the message to publish using the target operation. + subscription: + $ref: '#/$defs/asyncApiSubscription' + title: AsyncApiSubscription + description: An object used to configure the subscription to messages consumed using the target operation. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: AsyncAPIAuthentication + description: The authentication policy, if any, to use when calling the AsyncAPI operation. + oneOf: + - required: [ document, operation, message ] + - required: [ document, operation, subscription ] + - required: [ document, channel, message ] + - required: [ document, channel, subscription ] + unevaluatedProperties: false + - title: CallGRPC + description: Defines the GRPC call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: grpc + with: + type: object + title: GRPCArguments + description: The GRPC call arguments. + properties: + proto: + $ref: '#/$defs/externalResource' + title: WithGRPCProto + description: The proto resource that describes the GRPC service to call. + service: + type: object + title: WithGRPCService + unevaluatedProperties: false + properties: + name: + type: string + title: WithGRPCServiceName + description: The name of the GRPC service to call. + host: + type: string + title: WithGRPCServiceHost + description: The hostname of the GRPC service to call. + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + port: + type: integer + title: WithGRPCServicePost + description: The port number of the GRPC service to call. + minimum: 0 + maximum: 65535 + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithGRPCServiceAuthentication + description: The endpoint's authentication policy, if any. + required: [ name, host ] + method: + type: string + title: WithGRPCMethod + description: The name of the method to call on the defined GRPC service. + arguments: + type: object + title: WithGRPCArguments + description: The arguments, if any, to call the method with. + additionalProperties: true + required: [ proto, service, method ] + unevaluatedProperties: false + - title: CallHTTP + description: Defines the HTTP call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: http + with: + type: object + title: HTTPArguments + description: The HTTP call arguments. + properties: + method: + type: string + title: HTTPMethod + description: The HTTP method of the HTTP request to perform. + endpoint: + title: HTTPEndpoint + description: The HTTP endpoint to send the request to. + $ref: '#/$defs/endpoint' + headers: + type: object + title: HTTPHeaders + description: A name/value mapping of the headers, if any, of the HTTP request to perform. + body: + title: HTTPBody + description: The body, if any, of the HTTP request to perform. + query: + type: object + title: HTTPQuery + description: A name/value mapping of the query parameters, if any, of the HTTP request to perform. + additionalProperties: true + output: + type: string + title: HTTPOutput + description: The http call output format. Defaults to 'content'. + enum: [ raw, content, response ] + redirect: + type: boolean + title: HttpRedirect + description: Specifies whether redirection status codes (`300–399`) should be treated as errors. + required: [ method, endpoint ] + unevaluatedProperties: false + - title: CallOpenAPI + description: Defines the OpenAPI call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call, with ] + properties: + call: + type: string + const: openapi + with: + type: object + title: OpenAPIArguments + description: The OpenAPI call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: WithOpenAPIDocument + description: The document that defines the OpenAPI operation to call. + operationId: + type: string + title: WithOpenAPIOperation + description: The id of the OpenAPI operation to call. + parameters: + type: object + title: WithOpenAPIParameters + description: A name/value mapping of the parameters of the OpenAPI operation to call. + additionalProperties: true + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithOpenAPIAuthentication + description: The authentication policy, if any, to use when calling the OpenAPI operation. + output: + type: string + enum: [ raw, content, response ] + title: WithOpenAPIOutput + description: The http call output format. Defaults to 'content'. + redirect: + type: boolean + title: HttpRedirect + description: Specifies whether redirection status codes (`300–399`) should be treated as errors. + required: [ document, operationId ] + unevaluatedProperties: false + - title: CallFunction + description: Defines the function call to perform. + $ref: '#/$defs/taskBase' + type: object + unevaluatedProperties: false + required: [ call ] + properties: + call: + type: string + not: + enum: ["asyncapi", "grpc", "http", "openapi"] + description: The name of the function to call. + with: + type: object + title: FunctionArguments + description: A name/value mapping of the parameters, if any, to call the function with. + additionalProperties: true + forkTask: + type: object + $ref: '#/$defs/taskBase' + title: ForkTask + description: Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output. + unevaluatedProperties: false + required: [ fork ] + properties: + fork: + type: object + title: ForkTaskConfiguration + description: The configuration of the branches to perform concurrently. + unevaluatedProperties: false + required: [ branches ] + properties: + branches: + $ref: '#/$defs/taskList' + title: ForkBranches + compete: + type: boolean + title: ForkCompete + description: Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output. + default: false + doTask: + type: object + $ref: '#/$defs/taskBase' + title: DoTask + description: Allows to execute a list of tasks in sequence. + unevaluatedProperties: false + required: [ do ] + properties: + do: + $ref: '#/$defs/taskList' + title: DoTaskConfiguration + description: The configuration of the tasks to perform sequentially. + emitTask: + type: object + $ref: '#/$defs/taskBase' + title: EmitTask + description: Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services. + required: [ emit ] + unevaluatedProperties: false + properties: + emit: + type: object + title: EmitTaskConfiguration + description: The configuration of an event's emission. + unevaluatedProperties: false + properties: + event: + type: object + title: EmitEventDefinition + description: The definition of the event to emit. + properties: + with: + $ref: '#/$defs/eventProperties' + title: EmitEventWith + description: Defines the properties of event to emit. + required: [ source, type ] + additionalProperties: true + required: [ event ] + forTask: + type: object + $ref: '#/$defs/taskBase' + title: ForTask + description: Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets. + required: [ for, do ] + unevaluatedProperties: false + properties: + for: + type: object + title: ForTaskConfiguration + description: The definition of the loop that iterates over a range of values. + unevaluatedProperties: false + properties: + each: + type: string + title: ForEach + description: The name of the variable used to store the current item being enumerated. + default: item + in: + type: string + title: ForIn + description: A runtime expression used to get the collection to enumerate. + at: + type: string + title: ForAt + description: The name of the variable used to store the index of the current item being enumerated. + default: index + required: [ in ] + while: + type: string + title: While + description: A runtime expression that represents the condition, if any, that must be met for the iteration to continue. + do: + $ref: '#/$defs/taskList' + title: ForTaskDo + listenTask: + type: object + $ref: '#/$defs/taskBase' + title: ListenTask + description: Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems. + required: [ listen ] + unevaluatedProperties: false + properties: + listen: + type: object + title: ListenTaskConfiguration + description: The configuration of the listener to use. + unevaluatedProperties: false + properties: + to: + $ref: '#/$defs/eventConsumptionStrategy' + title: ListenTo + description: Defines the event(s) to listen to. + read: + type: string + enum: [ data, envelope, raw ] + default: data + title: ListenAndReadAs + description: Specifies how events are read during the listen operation. + required: [ to ] + foreach: + $ref: '#/$defs/subscriptionIterator' + title: ListenIterator + description: Configures the iterator, if any, for processing consumed event(s). + raiseTask: + type: object + $ref: '#/$defs/taskBase' + title: RaiseTask + description: Intentionally triggers and propagates errors. + required: [ raise ] + unevaluatedProperties: false + properties: + raise: + type: object + title: RaiseTaskConfiguration + description: The definition of the error to raise. + unevaluatedProperties: false + properties: + error: + title: RaiseTaskError + oneOf: + - $ref: '#/$defs/error' + title: RaiseErrorDefinition + description: Defines the error to raise. + - type: string + title: RaiseErrorReference + description: The name of the error to raise + required: [ error ] + runTask: + type: object + $ref: '#/$defs/taskBase' + title: RunTask + description: Provides the capability to execute external containers, shell commands, scripts, or workflows. + required: [ run ] + unevaluatedProperties: false + properties: + run: + type: object + title: RunTaskConfiguration + description: The configuration of the process to execute. + unevaluatedProperties: false + properties: + await: + type: boolean + default: true + title: AwaitProcessCompletion + description: Whether to await the process completion before continuing. + return: + type: string + title: ProcessReturnType + description: Configures the output of the process. + enum: [ stdout, stderr, code, all, none ] + default: stdout + oneOf: + - title: RunContainer + description: Enables the execution of external processes encapsulated within a containerized environment. + properties: + container: + type: object + title: Container + description: The configuration of the container to run. + unevaluatedProperties: false + properties: + image: + type: string + title: ContainerImage + description: The name of the container image to run. + name: + type: string + title: ContainerName + description: A runtime expression, if any, used to give specific name to the container. + command: + type: string + title: ContainerCommand + description: The command, if any, to execute on the container. + ports: + type: object + title: ContainerPorts + description: The container's port mappings, if any. + volumes: + type: object + title: ContainerVolumes + description: The container's volume mappings, if any. + environment: + type: object + title: ContainerEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + lifetime: + $ref: '#/$defs/containerLifetime' + title: ContainerLifetime + description: An object, if any, used to configure the container's lifetime + required: [ image ] + required: [ container ] + - title: RunScript + description: Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages. + properties: + script: + type: object + title: Script + description: The configuration of the script to run. + unevaluatedProperties: false + properties: + language: + type: string + title: ScriptLanguage + description: The language of the script to run. + arguments: + type: object + title: ScriptArguments + description: A key/value mapping of the arguments, if any, to use when running the configured script. + additionalProperties: true + environment: + type: object + title: ScriptEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured script process. + additionalProperties: true + oneOf: + - title: InlineScript + type: object + description: The script's code. + properties: + code: + type: string + title: InlineScriptCode + required: [ code ] + - title: ExternalScript + type: object + description: The script's resource. + properties: + source: + $ref: '#/$defs/externalResource' + title: ExternalScriptResource + required: [ source ] + required: [ language ] + required: [ script ] + - title: RunShell + description: Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks. + properties: + shell: + type: object + title: Shell + description: The configuration of the shell command to run. + unevaluatedProperties: false + properties: + command: + type: string + title: ShellCommand + description: The shell command to run. + arguments: + type: object + title: ShellArguments + description: A list of the arguments of the shell command to run. + additionalProperties: true + environment: + type: object + title: ShellEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + additionalProperties: true + required: [ command ] + required: [ shell ] + - title: RunWorkflow + description: Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units. + properties: + workflow: + type: object + title: SubflowConfiguration + description: The configuration of the workflow to run. + unevaluatedProperties: false + properties: + namespace: + type: string + title: SubflowNamespace + description: The namespace the workflow to run belongs to. + name: + type: string + title: SubflowName + description: The name of the workflow to run. + version: + type: string + default: latest + title: SubflowVersion + description: The version of the workflow to run. Defaults to latest. + input: + type: object + title: SubflowInput + description: The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified. + additionalProperties: true + required: [ namespace, name, version ] + required: [ workflow ] + setTask: + type: object + $ref: '#/$defs/taskBase' + title: SetTask + description: A task used to set data. + required: [ set ] + unevaluatedProperties: false + properties: + set: + type: object + title: SetTaskConfiguration + description: The data to set. + minProperties: 1 + additionalProperties: true + switchTask: + type: object + $ref: '#/$defs/taskBase' + title: SwitchTask + description: Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria. + required: [ switch ] + unevaluatedProperties: false + properties: + switch: + type: array + title: SwitchTaskConfiguration + description: The definition of the switch to use. + minItems: 1 + items: + type: object + title: SwitchItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + type: object + title: SwitchCase + description: The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met. + unevaluatedProperties: false + required: [ then ] + properties: + when: + type: string + title: SwitchCaseCondition + description: A runtime expression used to determine whether or not the case matches. + then: + $ref: '#/$defs/flowDirective' + title: SwitchCaseOutcome + description: The flow directive to execute when the case matches. + tryTask: + type: object + $ref: '#/$defs/taskBase' + title: TryTask + description: Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones. + required: [ try, catch ] + unevaluatedProperties: false + properties: + try: + $ref: '#/$defs/taskList' + title: TryTaskConfiguration + description: The task(s) to perform. + catch: + type: object + title: TryTaskCatch + description: The object used to define the errors to catch. + unevaluatedProperties: false + properties: + errors: + type: object + title: CatchErrors + properties: + with: + $ref: '#/$defs/errorFilter' + description: static error filter + as: + type: string + title: CatchAs + description: The name of the runtime expression variable to save the error as. Defaults to 'error'. + when: + type: string + title: CatchWhen + description: A runtime expression used to determine whether to catch the filtered error. + exceptWhen: + type: string + title: CatchExceptWhen + description: A runtime expression used to determine whether not to catch the filtered error. + retry: + oneOf: + - $ref: '#/$defs/retryPolicy' + title: RetryPolicyDefinition + description: The retry policy to use, if any, when catching errors. + - type: string + title: RetryPolicyReference + description: The name of the retry policy to use, if any, when catching errors. + do: + $ref: '#/$defs/taskList' + title: TryTaskCatchDo + description: The definition of the task(s) to run when catching an error. + waitTask: + type: object + $ref: '#/$defs/taskBase' + title: WaitTask + description: Allows workflows to pause or delay their execution for a specified period of time. + required: [ wait ] + unevaluatedProperties: false + properties: + wait: + $ref: '#/$defs/duration' + title: WaitTaskConfiguration + description: The amount of time to wait. + flowDirective: + title: FlowDirective + description: Represents different transition options for a workflow. + anyOf: + - title: FlowDirectiveEnum + type: string + enum: [ continue, exit, end ] + default: continue + - type: string + referenceableAuthenticationPolicy: + type: object + title: ReferenceableAuthenticationPolicy + description: Represents a referenceable authentication policy. + unevaluatedProperties: false + oneOf: + - title: AuthenticationPolicyReference + description: The reference of the authentication policy to use. + properties: + use: + type: string + minLength: 1 + title: ReferenceableAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + - $ref: '#/$defs/authenticationPolicy' + secretBasedAuthenticationPolicy: + type: object + title: SecretBasedAuthenticationPolicy + description: Represents an authentication policy based on secrets. + unevaluatedProperties: false + properties: + use: + type: string + minLength: 1 + title: SecretBasedAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + authenticationPolicy: + type: object + title: AuthenticationPolicy + description: Defines an authentication policy. + oneOf: + - title: BasicAuthenticationPolicy + description: Use basic authentication. + properties: + basic: + type: object + title: BasicAuthenticationPolicyConfiguration + description: The configuration of the basic authentication policy. + unevaluatedProperties: false + oneOf: + - title: BasicAuthenticationProperties + description: Inline configuration of the basic authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BasicAuthenticationPolicySecret + description: Secret based configuration of the basic authentication policy. + required: [ basic ] + - title: BearerAuthenticationPolicy + description: Use bearer authentication. + properties: + bearer: + type: object + title: BearerAuthenticationPolicyConfiguration + description: The configuration of the bearer authentication policy. + unevaluatedProperties: false + oneOf: + - title: BearerAuthenticationProperties + description: Inline configuration of the bearer authentication policy. + properties: + token: + type: string + description: The bearer token to use. + required: [ token ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BearerAuthenticationPolicySecret + description: Secret based configuration of the bearer authentication policy. + required: [ bearer ] + - title: DigestAuthenticationPolicy + description: Use digest authentication. + properties: + digest: + type: object + title: DigestAuthenticationPolicyConfiguration + description: The configuration of the digest authentication policy. + unevaluatedProperties: false + oneOf: + - title: DigestAuthenticationProperties + description: Inline configuration of the digest authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: DigestAuthenticationPolicySecret + description: Secret based configuration of the digest authentication policy. + required: [ digest ] + - title: OAuth2AuthenticationPolicy + description: Use OAuth2 authentication. + properties: + oauth2: + type: object + title: OAuth2AuthenticationPolicyConfiguration + description: The configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + oneOf: + - type: object + title: OAuth2ConnectAuthenticationProperties + description: The inline configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + - type: object + properties: + endpoints: + type: object + title: OAuth2AuthenticationPropertiesEndpoints + description: The endpoint configurations for OAuth2. + properties: + token: + type: string + format: uri-template + default: /oauth2/token + title: OAuth2TokenEndpoint + description: The relative path to the token endpoint. Defaults to `/oauth2/token`. + revocation: + type: string + format: uri-template + default: /oauth2/revoke + title: OAuth2RevocationEndpoint + description: The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`. + introspection: + type: string + format: uri-template + default: /oauth2/introspect + title: OAuth2IntrospectionEndpoint + description: The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`. + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OAuth2AuthenticationPolicySecret + description: Secret based configuration of the OAuth2 authentication policy. + required: [ oauth2 ] + - title: OpenIdConnectAuthenticationPolicy + description: Use OpenIdConnect authentication. + properties: + oidc: + type: object + title: OpenIdConnectAuthenticationPolicyConfiguration + description: The configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + title: OpenIdConnectAuthenticationProperties + description: The inline configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OpenIdConnectAuthenticationPolicySecret + description: Secret based configuration of the OpenIdConnect authentication policy. + required: [ oidc ] + oauth2AuthenticationProperties: + type: object + title: OAuth2AutenthicationData + description: Inline configuration of the OAuth2 authentication policy. + properties: + authority: + $ref: '#/$defs/uriTemplate' + title: OAuth2AutenthicationDataAuthority + description: The URI that references the OAuth2 authority to use. + grant: + type: string + enum: [ authorization_code, client_credentials, password, refresh_token, 'urn:ietf:params:oauth:grant-type:token-exchange'] + title: OAuth2AutenthicationDataGrant + description: The grant type to use. + client: + type: object + title: OAuth2AutenthicationDataClient + description: The definition of an OAuth2 client. + unevaluatedProperties: false + properties: + id: + type: string + title: ClientId + description: The client id to use. + secret: + type: string + title: ClientSecret + description: The client secret to use, if any. + assertion: + type: string + title: ClientAssertion + description: A JWT containing a signed assertion with your application credentials. + authentication: + type: string + enum: [ client_secret_basic, client_secret_post, client_secret_jwt, private_key_jwt, none ] + default: client_secret_post + title: ClientAuthentication + description: The authentication method to use to authenticate the client. + request: + type: object + title: OAuth2TokenRequest + description: The configuration of an OAuth2 token request + properties: + encoding: + type: string + enum: [ 'application/x-www-form-urlencoded', 'application/json' ] + default: 'application/x-www-form-urlencoded' + title: Oauth2TokenRequestEncoding + issuers: + type: array + title: OAuth2Issuers + description: A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens. + items: + type: string + scopes: + type: array + title: OAuth2AutenthicationDataScopes + description: The scopes, if any, to request the token for. + items: + type: string + audiences: + type: array + title: OAuth2AutenthicationDataAudiences + description: The audiences, if any, to request the token for. + items: + type: string + username: + type: string + title: OAuth2AutenthicationDataUsername + description: The username to use. Used only if the grant type is Password. + password: + type: string + title: OAuth2AutenthicationDataPassword + description: The password to use. Used only if the grant type is Password. + subject: + $ref: '#/$defs/oauth2Token' + title: OAuth2AutenthicationDataSubject + description: The security token that represents the identity of the party on behalf of whom the request is being made. + actor: + $ref: '#/$defs/oauth2Token' + title: OAuth2AutenthicationDataActor + description: The security token that represents the identity of the acting party. + oauth2Token: + type: object + title: OAuth2TokenDefinition + description: Represents an OAuth2 token. + unevaluatedProperties: false + properties: + token: + type: string + title: OAuth2Token + description: The security token to use. + type: + type: string + title: OAuth2TokenType + description: The type of the security token to use. + required: [ token, type ] + duration: + oneOf: + - type: object + minProperties: 1 + unevaluatedProperties: false + properties: + days: + type: integer + title: DurationDays + description: Number of days, if any. + hours: + type: integer + title: DurationHours + description: Number of days, if any. + minutes: + type: integer + title: DurationMinutes + description: Number of minutes, if any. + seconds: + type: integer + title: DurationSeconds + description: Number of seconds, if any. + milliseconds: + type: integer + title: DurationMilliseconds + description: Number of milliseconds, if any. + title: DurationInline + description: The inline definition of a duration. + - type: string + pattern: '^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$' + title: DurationExpression + description: The ISO 8601 expression of a duration. + error: + type: object + title: Error + description: Represents an error. + unevaluatedProperties: false + properties: + type: + title: ErrorType + description: A URI reference that identifies the error type. + oneOf: + - title: LiteralErrorType + $ref: '#/$defs/uriTemplate' + description: The literal error type. + - title: ExpressionErrorType + $ref: '#/$defs/runtimeExpression' + description: An expression based error type. + status: + type: integer + title: ErrorStatus + description: The status code generated by the origin for this occurrence of the error. + instance: + title: ErrorInstance + description: A JSON Pointer used to reference the component the error originates from. + oneOf: + - title: LiteralErrorInstance + description: The literal error instance. + type: string + format: json-pointer + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorInstance + description: An expression based error instance. + title: + type: string + title: ErrorTitle + description: A short, human-readable summary of the error. + detail: + type: string + title: ErrorDetails + description: A human-readable explanation specific to this occurrence of the error. + required: [ type, status ] + errorFilter: + type: object + title: ErrorFilter + description: Error filtering base on static values. For error filtering on dynamic values, use catch.when property + minProperties: 1 + properties: + type: + type: string + description: if present, means this value should be used for filtering + status: + type: integer + description: if present, means this value should be used for filtering + instance: + type: string + description: if present, means this value should be used for filtering + title: + type: string + description: if present, means this value should be used for filtering + details: + type: string + description: if present, means this value should be used for filtering + uriTemplate: + title: UriTemplate + anyOf: + - title: LiteralUriTemplate + type: string + format: uri-template + pattern: "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + - title: LiteralUri + type: string + format: uri + pattern: "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + endpoint: + title: Endpoint + description: Represents an endpoint. + oneOf: + - $ref: '#/$defs/runtimeExpression' + - $ref: '#/$defs/uriTemplate' + - title: EndpointConfiguration + type: object + unevaluatedProperties: false + properties: + uri: + title: EndpointUri + description: The endpoint's URI. + oneOf: + - title: LiteralEndpointURI + description: The literal endpoint's URI. + $ref: '#/$defs/uriTemplate' + - title: ExpressionEndpointURI + $ref: '#/$defs/runtimeExpression' + description: An expression based endpoint's URI. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: EndpointAuthentication + description: The authentication policy to use. + required: [ uri ] + eventProperties: + type: object + title: EventProperties + description: Describes the properties of an event. + properties: + id: + type: string + title: EventId + description: The event's unique identifier. + source: + title: EventSource + description: Identifies the context in which an event happened. + oneOf: + - $ref: '#/$defs/uriTemplate' + - $ref: '#/$defs/runtimeExpression' + type: + type: string + title: EventType + description: This attribute contains a value describing the type of event related to the originating occurrence. + time: + title: EventTime + description: When the event occured. + oneOf: + - title: LiteralTime + type: string + format: date-time + - $ref: '#/$defs/runtimeExpression' + subject: + type: string + title: EventSubject + description: The subject of the event. + datacontenttype: + type: string + title: EventDataContentType + description: Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format. + dataschema: + title: EventDataschema + description: The schema describing the event format. + oneOf: + - title: LiteralDataSchema + $ref: '#/$defs/uriTemplate' + description: The literal event data schema. + - title: ExpressionDataSchema + $ref: '#/$defs/runtimeExpression' + description: An expression based event data schema. + data: + title: EventData + description: The event's payload data + anyOf: + - $ref: '#/$defs/runtimeExpression' + - {} + additionalProperties: true + eventConsumptionStrategy: + type: object + title: EventConsumptionStrategy + description: Describe the event consumption strategy to adopt. + unevaluatedProperties: false + oneOf: + - title: AllEventConsumptionStrategy + properties: + all: + type: array + title: AllEventConsumptionStrategyConfiguration + description: A list containing all the events that must be consumed. + items: + $ref: '#/$defs/eventFilter' + required: [ all ] + - title: AnyEventConsumptionStrategy + properties: + any: + type: array + title: AnyEventConsumptionStrategyConfiguration + description: A list containing any of the events to consume. + items: + $ref: '#/$defs/eventFilter' + until: + oneOf: + - type: string + title: AnyEventUntilCondition + description: A runtime expression condition evaluated after consuming an event and which determines whether or not to continue listening. + - allOf: + - $ref: '#/$defs/eventConsumptionStrategy' + description: The strategy that defines the event(s) to consume to stop listening. + - properties: + until: false + title: AnyEventUntilConsumed + required: [ any ] + - title: OneEventConsumptionStrategy + properties: + one: + $ref: '#/$defs/eventFilter' + title: OneEventConsumptionStrategyConfiguration + description: The single event to consume. + required: [ one ] + eventFilter: + type: object + title: EventFilter + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + unevaluatedProperties: false + properties: + with: + $ref: '#/$defs/eventProperties' + minProperties: 1 + title: WithEvent + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + correlate: + type: object + title: EventFilterCorrelate + description: A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics. + additionalProperties: + type: object + properties: + from: + type: string + title: CorrelateFrom + description: A runtime expression used to extract the correlation value from the filtered event. + expect: + type: string + title: CorrelateExpect + description: A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation. + required: [ from ] + required: [ with ] + extension: + type: object + title: Extension + description: The definition of an extension. + unevaluatedProperties: false + properties: + extend: + type: string + enum: [ call, composite, emit, for, listen, raise, run, set, switch, try, wait, all ] + title: ExtensionTarget + description: The type of task to extend. + when: + type: string + title: ExtensionCondition + description: A runtime expression, if any, used to determine whether or not the extension should apply in the specified context. + before: + $ref: '#/$defs/taskList' + title: ExtensionDoBefore + description: The task(s) to execute before the extended task, if any. + after: + $ref: '#/$defs/taskList' + title: ExtensionDoAfter + description: The task(s) to execute after the extended task, if any. + required: [ extend ] + externalResource: + type: object + title: ExternalResource + description: Represents an external resource. + unevaluatedProperties: false + properties: + name: + type: string + title: ExternalResourceName + description: The name of the external resource, if any. + endpoint: + $ref: '#/$defs/endpoint' + title: ExternalResourceEndpoint + description: The endpoint of the external resource. + required: [ endpoint ] + input: + type: object + title: Input + description: Configures the input of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: InputSchema + description: The schema used to describe and validate the input of the workflow or task. + from: + title: InputFrom + description: A runtime expression, if any, used to mutate and/or filter the input of the workflow or task. + oneOf: + - type: string + - type: object + output: + type: object + title: Output + description: Configures the output of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: OutputSchema + description: The schema used to describe and validate the output of the workflow or task. + as: + title: OutputAs + description: A runtime expression, if any, used to mutate and/or filter the output of the workflow or task. + oneOf: + - type: string + - type: object + export: + type: object + title: Export + description: Set the content of the context. . + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: ExportSchema + description: The schema used to describe and validate the workflow context. + as: + title: ExportAs + description: A runtime expression, if any, used to export the output data to the context. + oneOf: + - type: string + - type: object + retryPolicy: + type: object + title: RetryPolicy + description: Defines a retry policy. + unevaluatedProperties: false + properties: + when: + type: string + title: RetryWhen + description: A runtime expression, if any, used to determine whether or not to retry running the task, in a given context. + exceptWhen: + type: string + title: RetryExcepWhen + description: A runtime expression used to determine whether or not to retry running the task, in a given context. + delay: + $ref: '#/$defs/duration' + title: RetryDelay + description: The duration to wait between retry attempts. + backoff: + type: object + title: RetryBackoff + description: The retry duration backoff. + unevaluatedProperties: false + oneOf: + - title: ConstantBackoff + properties: + constant: + type: object + description: The definition of the constant backoff to use, if any. + required: [ constant ] + - title: ExponentialBackOff + properties: + exponential: + type: object + description: The definition of the exponential backoff to use, if any. + required: [ exponential ] + - title: LinearBackoff + properties: + linear: + type: object + description: The definition of the linear backoff to use, if any. + required: [ linear ] + limit: + type: object + title: RetryLimit + unevaluatedProperties: false + properties: + attempt: + type: object + title: RetryLimitAttempt + unevaluatedProperties: false + properties: + count: + type: integer + title: RetryLimitAttemptCount + description: The maximum amount of retry attempts, if any. + duration: + $ref: '#/$defs/duration' + title: RetryLimitAttemptDuration + description: The maximum duration for each retry attempt. + duration: + $ref: '#/$defs/duration' + title: RetryLimitDuration + description: The duration limit, if any, for all retry attempts. + description: The retry limit, if any. + jitter: + type: object + title: RetryPolicyJitter + description: The parameters, if any, that control the randomness or variability of the delay between retry attempts. + unevaluatedProperties: false + properties: + from: + $ref: '#/$defs/duration' + title: RetryPolicyJitterFrom + description: The minimum duration of the jitter range. + to: + $ref: '#/$defs/duration' + title: RetryPolicyJitterTo + description: The maximum duration of the jitter range. + required: [ from, to ] + schema: + type: object + title: Schema + description: Represents the definition of a schema. + unevaluatedProperties: false + properties: + format: + type: string + default: json + title: SchemaFormat + description: The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`. + oneOf: + - title: SchemaInline + properties: + document: + description: The schema's inline definition. + required: [ document ] + - title: SchemaExternal + properties: + resource: + $ref: '#/$defs/externalResource' + title: SchemaExternalResource + description: The schema's external resource. + required: [ resource ] + timeout: + type: object + title: Timeout + description: The definition of a timeout. + unevaluatedProperties: false + properties: + after: + $ref: '#/$defs/duration' + title: TimeoutAfter + description: The duration after which to timeout. + required: [ after ] + catalog: + type: object + title: Catalog + description: The definition of a resource catalog. + unevaluatedProperties: false + properties: + endpoint: + $ref: '#/$defs/endpoint' + title: CatalogEndpoint + description: The root URL where the catalog is hosted. + required: [ endpoint ] + runtimeExpression: + type: string + title: RuntimeExpression + description: A runtime expression. + pattern: "^\\s*\\$\\{.+\\}\\s*$" + containerLifetime: + type: object + title: ContainerLifetime + description: The configuration of a container's lifetime + unevaluatedProperties: false + properties: + cleanup: + type: string + title: ContainerCleanupPolicy + description: The container cleanup policy to use + enum: [ always, never, eventually ] + default: never + after: + $ref: '#/$defs/duration' + title: ContainerLifetimeDuration + description: The duration after which to cleanup the container, in case the cleanup policy has been set to 'eventually' + required: [ cleanup ] + if: + properties: + cleanup: + const: eventually + then: + required: [ after ] + else: + not: + required: [ after ] + processResult: + type: object + title: ProcessResult + description: The object returned by a run task when its return type has been set 'all'. + unevaluatedProperties: false + properties: + code: + type: integer + title: ProcessExitCode + description: The process's exit code. + stdout: + type: string + title: ProcessStandardOutput + description: The content of the process's STDOUT. + stderr: + type: string + title: ProcessStandardError + description: The content of the process's STDERR. + required: [ code, stdout, stderr ] + asyncApiServer: + type: object + title: AsyncApiServer + description: Configures the target server of an AsyncAPI operation. + unevaluatedProperties: false + properties: + name: + type: string + title: AsyncApiServerName + description: The target server's name. + variables: + type: object + title: AsyncApiServerVariables + description: The target server's variables, if any. + required: [ name ] + asyncApiOutboundMessage: + type: object + title: AsyncApiOutboundMessage + description: An object used to configure the message to publish using the target operation. + unevaluatedProperties: false + properties: + payload: + type: object + title: AsyncApiMessagePayload + description: The message's payload, if any. + additionalProperties: true + headers: + type: object + title: AsyncApiMessageHeaders + description: The message's headers, if any. + additionalProperties: true + asyncApiInboundMessage: + type: object + title: AsyncApiInboundMessage + description: Represents a message counsumed by an AsyncAPI subscription. + allOf: + - $ref: '#/$defs/asyncApiOutboundMessage' + properties: + correlationId: + type: string + title: AsyncApiMessageCorrelationId + description: The message's correlation id, if any. + asyncApiSubscription: + type: object + title: AsyncApiSubscription + description: An object used to configure the subscription to messages consumed using the target operation. + unevaluatedProperties: false + properties: + filter: + $ref: '#/$defs/runtimeExpression' + title: AsyncApiSubscriptionCorrelation + description: A runtime expression, if any, used to filter consumed messages. + consume: + $ref: '#/$defs/asyncApiMessageConsumptionPolicy' + title: AsyncApiMessageConsumptionPolicy + description: An object used to configure the subscription's message consumption policy. + foreach: + $ref: '#/$defs/subscriptionIterator' + title: AsyncApiSubscriptionIterator + description: Configures the iterator, if any, for processing consumed messages(s). + required: [ consume ] + asyncApiMessageConsumptionPolicy: + type: object + title: AsyncApiMessageConsumptionPolicy + description: An object used to configure a subscription's message consumption policy. + unevaluatedProperties: false + properties: + for: + $ref: '#/$defs/duration' + title: AsyncApiMessageConsumptionPolicyFor + description: Specifies the time period over which messages will be consumed. + oneOf: + - properties: + amount: + type: integer + description: The amount of (filtered) messages to consume before disposing of the subscription. + title: AsyncApiMessageConsumptionPolicyAmount + required: [ amount ] + - properties: + while: + $ref: '#/$defs/runtimeExpression' + description: A runtime expression evaluated after each consumed (filtered) message to decide if message consumption should continue. + title: AsyncApiMessageConsumptionPolicyWhile + required: [ while ] + - properties: + until: + $ref: '#/$defs/runtimeExpression' + description: A runtime expression evaluated before each consumed (filtered) message to decide if message consumption should continue. + title: AsyncApiMessageConsumptionPolicyUntil + required: [ until ] + subscriptionIterator: + type: object + title: SubscriptionIterator + description: Configures the iteration over each item (event or message) consumed by a subscription. + unevaluatedProperties: false + properties: + item: + type: string + title: SubscriptionIteratorItem + description: The name of the variable used to store the current item being enumerated. + default: item + at: + type: string + title: SubscriptionIteratorIndex + description: The name of the variable used to store the index of the current item being enumerated. + default: index + do: + $ref: '#/$defs/taskList' + title: SubscriptionIteratorTasks + description: The tasks to perform for each consumed item. + output: + $ref: '#/$defs/output' + title: SubscriptionIteratorOutput + description: An object, if any, used to customize the item's output and to document its schema. + export: + $ref: '#/$defs/export' + title: SubscriptionIteratorExport + description: An object, if any, used to customize the content of the workflow context. \ No newline at end of file diff --git a/public/schemas/1.0.1/workflow.json b/public/schemas/1.0.1/workflow.json new file mode 100644 index 0000000..c156348 --- /dev/null +++ b/public/schemas/1.0.1/workflow.json @@ -0,0 +1,2904 @@ +{ + "$id": "https://open-workflow-specification.org/schemas/1.0.1/workflow.yaml", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Open Workflow Specification DSL - Workflow Schema.", + "type": "object", + "required": [ + "document", + "do" + ], + "properties": { + "document": { + "type": "object", + "title": "Document", + "description": "Documents the workflow.", + "unevaluatedProperties": false, + "properties": { + "dsl": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowDSL", + "description": "The version of the DSL used by the workflow." + }, + "namespace": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowNamespace", + "description": "The workflow's namespace." + }, + "name": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowName", + "description": "The workflow's name." + }, + "version": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowVersion", + "description": "The workflow's semantic version." + }, + "title": { + "type": "string", + "title": "WorkflowTitle", + "description": "The workflow's title." + }, + "summary": { + "type": "string", + "title": "WorkflowSummary", + "description": "The workflow's Markdown summary." + }, + "tags": { + "type": "object", + "title": "WorkflowTags", + "description": "A key/value mapping of the workflow's tags, if any.", + "additionalProperties": true + }, + "metadata": { + "type": "object", + "title": "WorkflowMetadata", + "description": "Holds additional information about the workflow.", + "additionalProperties": true + } + }, + "required": [ + "dsl", + "namespace", + "name", + "version" + ] + }, + "input": { + "$ref": "#/$defs/input", + "title": "Input", + "description": "Configures the workflow's input." + }, + "use": { + "type": "object", + "title": "Use", + "description": "Defines the workflow's reusable components.", + "unevaluatedProperties": false, + "properties": { + "authentications": { + "type": "object", + "title": "UseAuthentications", + "description": "The workflow's reusable authentication policies.", + "additionalProperties": { + "$ref": "#/$defs/authenticationPolicy" + } + }, + "errors": { + "type": "object", + "title": "UseErrors", + "description": "The workflow's reusable errors.", + "additionalProperties": { + "$ref": "#/$defs/error" + } + }, + "extensions": { + "type": "array", + "title": "UseExtensions", + "description": "The workflow's extensions.", + "items": { + "type": "object", + "title": "ExtensionItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/extension" + } + } + }, + "functions": { + "type": "object", + "title": "UseFunctions", + "description": "The workflow's reusable functions.", + "additionalProperties": { + "$ref": "#/$defs/task" + } + }, + "retries": { + "type": "object", + "title": "UseRetries", + "description": "The workflow's reusable retry policies.", + "additionalProperties": { + "$ref": "#/$defs/retryPolicy" + } + }, + "secrets": { + "type": "array", + "title": "UseSecrets", + "description": "The workflow's reusable secrets.", + "items": { + "type": "string", + "description": "The workflow's secrets." + } + }, + "timeouts": { + "type": "object", + "title": "UseTimeouts", + "description": "The workflow's reusable timeouts.", + "additionalProperties": { + "$ref": "#/$defs/timeout" + } + }, + "catalogs": { + "type": "object", + "title": "UseCatalogs", + "description": "The workflow's reusable catalogs.", + "additionalProperties": { + "$ref": "#/$defs/catalog" + } + } + } + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "Do", + "description": "Defines the task(s) the workflow must perform." + }, + "timeout": { + "title": "DoTimeout", + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TimeoutDefinition", + "description": "The workflow's timeout configuration, if any." + }, + { + "type": "string", + "title": "TimeoutReference", + "description": "The name of the workflow's timeout, if any." + } + ] + }, + "output": { + "$ref": "#/$defs/output", + "title": "Output", + "description": "Configures the workflow's output." + }, + "schedule": { + "type": "object", + "title": "Schedule", + "description": "Schedules the workflow.", + "unevaluatedProperties": false, + "properties": { + "every": { + "$ref": "#/$defs/duration", + "title": "ScheduleEvery", + "description": "Specifies the duration of the interval at which the workflow should be executed." + }, + "cron": { + "type": "string", + "title": "ScheduleCron", + "description": "Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight." + }, + "after": { + "$ref": "#/$defs/duration", + "title": "ScheduleAfter", + "description": "Specifies a delay duration that the workflow must wait before starting again after it completes." + }, + "on": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ScheduleOn", + "description": "Specifies the events that trigger the workflow execution." + } + } + } + }, + "$defs": { + "taskList": { + "title": "TaskList", + "description": "List of named tasks to perform.", + "type": "array", + "items": { + "type": "object", + "title": "TaskItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/task" + } + } + }, + "taskBase": { + "type": "object", + "title": "TaskBase", + "description": "An object inherited by all tasks.", + "properties": { + "if": { + "type": "string", + "title": "TaskBaseIf", + "description": "A runtime expression, if any, used to determine whether or not the task should be run." + }, + "input": { + "$ref": "#/$defs/input", + "title": "TaskBaseInput", + "description": "Configure the task's input." + }, + "output": { + "$ref": "#/$defs/output", + "title": "TaskBaseOutput", + "description": "Configure the task's output." + }, + "export": { + "$ref": "#/$defs/export", + "title": "TaskBaseExport", + "description": "Export task output to context." + }, + "timeout": { + "title": "TaskTimeout", + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TaskTimeoutDefinition", + "description": "The task's timeout configuration, if any." + }, + { + "type": "string", + "title": "TaskTimeoutReference", + "description": "The name of the task's timeout, if any." + } + ] + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "TaskBaseThen", + "description": "The flow directive to be performed upon completion of the task." + }, + "metadata": { + "type": "object", + "title": "TaskMetadata", + "description": "Holds additional information about the task.", + "additionalProperties": true + } + } + }, + "task": { + "title": "Task", + "description": "A discrete unit of work that contributes to achieving the overall objectives defined by the workflow.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/callTask" + }, + { + "$ref": "#/$defs/doTask" + }, + { + "$ref": "#/$defs/forkTask" + }, + { + "$ref": "#/$defs/emitTask" + }, + { + "$ref": "#/$defs/forTask" + }, + { + "$ref": "#/$defs/listenTask" + }, + { + "$ref": "#/$defs/raiseTask" + }, + { + "$ref": "#/$defs/runTask" + }, + { + "$ref": "#/$defs/setTask" + }, + { + "$ref": "#/$defs/switchTask" + }, + { + "$ref": "#/$defs/tryTask" + }, + { + "$ref": "#/$defs/waitTask" + } + ] + }, + "callTask": { + "title": "CallTask", + "description": "Defines the call to perform.", + "oneOf": [ + { + "title": "CallAsyncAPI", + "description": "Defines the AsyncAPI call to perform.", + "type": "object", + "required": [ + "call", + "with" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "asyncapi" + }, + "with": { + "type": "object", + "title": "AsyncApiArguments", + "description": "The Async API call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "AsyncAPIDocument", + "description": "The document that defines the AsyncAPI operation to call." + }, + "channel": { + "type": "string", + "title": "With", + "description": "The name of the channel on which to perform the operation. Used only in case the referenced document uses AsyncAPI v2.6.0." + }, + "operation": { + "type": "string", + "title": "AsyncAPIOperation", + "description": "A reference to the AsyncAPI operation to call." + }, + "server": { + "$ref": "#/$defs/asyncApiServer", + "title": "AsyncAPIServer", + "description": "An object used to configure to the server to call the specified AsyncAPI operation on." + }, + "protocol": { + "type": "string", + "title": "AsyncApiProtocol", + "description": "The protocol to use to select the target server.", + "enum": [ + "amqp", + "amqp1", + "anypointmq", + "googlepubsub", + "http", + "ibmmq", + "jms", + "kafka", + "mercure", + "mqtt", + "mqtt5", + "nats", + "pulsar", + "redis", + "sns", + "solace", + "sqs", + "stomp", + "ws" + ] + }, + "message": { + "$ref": "#/$defs/asyncApiOutboundMessage", + "title": "AsyncApiMessage", + "description": "An object used to configure the message to publish using the target operation." + }, + "subscription": { + "$ref": "#/$defs/asyncApiSubscription", + "title": "AsyncApiSubscription", + "description": "An object used to configure the subscription to messages consumed using the target operation." + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "AsyncAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the AsyncAPI operation." + } + }, + "oneOf": [ + { + "required": [ + "document", + "operation", + "message" + ] + }, + { + "required": [ + "document", + "operation", + "subscription" + ] + }, + { + "required": [ + "document", + "channel", + "message" + ] + }, + { + "required": [ + "document", + "channel", + "subscription" + ] + } + ], + "unevaluatedProperties": false + } + } + } + ] + }, + { + "title": "CallGRPC", + "description": "Defines the GRPC call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "grpc" + }, + "with": { + "type": "object", + "title": "GRPCArguments", + "description": "The GRPC call arguments.", + "properties": { + "proto": { + "$ref": "#/$defs/externalResource", + "title": "WithGRPCProto", + "description": "The proto resource that describes the GRPC service to call." + }, + "service": { + "type": "object", + "title": "WithGRPCService", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "WithGRPCServiceName", + "description": "The name of the GRPC service to call." + }, + "host": { + "type": "string", + "title": "WithGRPCServiceHost", + "description": "The hostname of the GRPC service to call.", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-.]{0,61}[a-zA-Z0-9])?$" + }, + "port": { + "type": "integer", + "title": "WithGRPCServicePort", + "description": "The port number of the GRPC service to call.", + "minimum": 0, + "maximum": 65535 + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithGRPCServiceAuthentication", + "description": "The endpoint's authentication policy, if any." + } + }, + "required": [ + "name", + "host" + ] + }, + "method": { + "type": "string", + "title": "WithGRPCMethod", + "description": "The name of the method to call on the defined GRPC service." + }, + "arguments": { + "type": "object", + "title": "WithGRPCArguments", + "description": "The arguments, if any, to call the method with.", + "additionalProperties": true + } + }, + "required": [ + "proto", + "service", + "method" + ], + "unevaluatedProperties": false + } + } + } + ] + }, + { + "title": "CallHTTP", + "description": "Defines the HTTP call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "http" + }, + "with": { + "type": "object", + "title": "HTTPArguments", + "description": "The HTTP call arguments.", + "properties": { + "method": { + "type": "string", + "title": "HTTPMethod", + "description": "The HTTP method of the HTTP request to perform." + }, + "endpoint": { + "title": "HTTPEndpoint", + "description": "The HTTP endpoint to send the request to.", + "$ref": "#/$defs/endpoint" + }, + "headers": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ], + "title": "HTTPHeaders", + "description": "A name/value mapping of the headers, if any, of the HTTP request to perform." + }, + "body": { + "title": "HTTPBody", + "description": "The body, if any, of the HTTP request to perform." + }, + "query": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ], + "title": "HTTPQuery", + "description": "A name/value mapping of the query parameters, if any, of the HTTP request to perform.", + "additionalProperties": true + }, + "output": { + "type": "string", + "title": "HTTPOutput", + "description": "The http call output format. Defaults to 'content'.", + "enum": [ + "raw", + "content", + "response" + ] + }, + "redirect": { + "type": "boolean", + "title": "HttpRedirect", + "description": "Specifies whether redirection status codes (`300–399`) should be treated as errors." + } + }, + "required": [ + "method", + "endpoint" + ], + "unevaluatedProperties": false + } + } + } + ] + }, + { + "title": "CallOpenAPI", + "description": "Defines the OpenAPI call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "openapi" + }, + "with": { + "type": "object", + "title": "OpenAPIArguments", + "description": "The OpenAPI call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "WithOpenAPIDocument", + "description": "The document that defines the OpenAPI operation to call." + }, + "operationId": { + "type": "string", + "title": "WithOpenAPIOperation", + "description": "The id of the OpenAPI operation to call." + }, + "parameters": { + "type": "object", + "title": "WithOpenAPIParameters", + "description": "A name/value mapping of the parameters of the OpenAPI operation to call.", + "additionalProperties": true + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithOpenAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the OpenAPI operation." + }, + "output": { + "type": "string", + "enum": [ + "raw", + "content", + "response" + ], + "title": "WithOpenAPIOutput", + "description": "The http call output format. Defaults to 'content'." + }, + "redirect": { + "type": "boolean", + "title": "HttpRedirect", + "description": "Specifies whether redirection status codes (`300–399`) should be treated as errors." + } + }, + "required": [ + "document", + "operationId" + ], + "unevaluatedProperties": false + } + } + } + ] + }, + { + "title": "CallA2A", + "description": "Defines the A2A call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "a2a" + }, + "with": { + "type": "object", + "title": "A2AArguments", + "description": "The A2A call arguments.", + "properties": { + "agentCard": { + "$ref": "#/$defs/externalResource", + "title": "WithA2AAgentCard", + "description": "The Agent Card that defines the agent to call." + }, + "server": { + "title": "A2AServer", + "description": "The server endpoint to send the request to.", + "$ref": "#/$defs/endpoint" + }, + "method": { + "type": "string", + "title": "WithA2AMethod", + "description": "The A2A method to send.", + "enum": [ + "message/send", + "message/stream", + "tasks/get", + "tasks/list", + "tasks/cancel", + "tasks/resubscribe", + "tasks/pushNotificationConfig/set", + "tasks/pushNotificationConfig/get", + "tasks/pushNotificationConfig/list", + "tasks/pushNotificationConfig/delete", + "agent/getAuthenticatedExtendedCard" + ] + }, + "parameters": { + "oneOf": [ + { + "type": "object", + "minProperties": 1, + "additionalProperties": true + }, + { + "type": "string" + } + ], + "title": "WithA2AParameters", + "description": "The parameters object to send with the A2A method." + } + }, + "required": [ + "method" + ], + "unevaluatedProperties": false + } + } + } + ] + }, + { + "title": "CallFunction", + "description": "Defines the function call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "not": { + "enum": [ + "asyncapi", + "grpc", + "http", + "openapi", + "a2a" + ] + }, + "description": "The name of the function to call." + }, + "with": { + "type": "object", + "title": "FunctionArguments", + "description": "A name/value mapping of the parameters, if any, to call the function with.", + "additionalProperties": true + } + } + } + ] + } + ] + }, + "forkTask": { + "type": "object", + "title": "ForkTask", + "description": "Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output.", + "unevaluatedProperties": false, + "required": [ + "fork" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "fork": { + "type": "object", + "title": "ForkTaskConfiguration", + "description": "The configuration of the branches to perform concurrently.", + "unevaluatedProperties": false, + "required": [ + "branches" + ], + "properties": { + "branches": { + "$ref": "#/$defs/taskList", + "title": "ForkBranches" + }, + "compete": { + "type": "boolean", + "title": "ForkCompete", + "description": "Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output.", + "default": false + } + } + } + } + } + ] + }, + "doTask": { + "type": "object", + "title": "DoTask", + "description": "Allows to execute a list of tasks in sequence.", + "unevaluatedProperties": false, + "required": [ + "do" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "do": { + "$ref": "#/$defs/taskList", + "title": "DoTaskConfiguration", + "description": "The configuration of the tasks to perform sequentially." + } + } + } + ] + }, + "emitTask": { + "type": "object", + "title": "EmitTask", + "description": "Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services.", + "required": [ + "emit" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "emit": { + "type": "object", + "title": "EmitTaskConfiguration", + "description": "The configuration of an event's emission.", + "unevaluatedProperties": false, + "properties": { + "event": { + "type": "object", + "title": "EmitEventDefinition", + "description": "The definition of the event to emit.", + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "title": "EmitEventWith", + "description": "Defines the properties of event to emit.", + "required": [ + "source", + "type" + ] + } + }, + "additionalProperties": true + } + }, + "required": [ + "event" + ] + } + } + } + ] + }, + "forTask": { + "type": "object", + "title": "ForTask", + "description": "Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.", + "required": [ + "for", + "do" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "for": { + "type": "object", + "title": "ForTaskConfiguration", + "description": "The definition of the loop that iterates over a range of values.", + "unevaluatedProperties": false, + "properties": { + "each": { + "type": "string", + "title": "ForEach", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "in": { + "type": "string", + "title": "ForIn", + "description": "A runtime expression used to get the collection to enumerate." + }, + "at": { + "type": "string", + "title": "ForAt", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + } + }, + "required": [ + "in" + ] + }, + "while": { + "type": "string", + "title": "While", + "description": "A runtime expression that represents the condition, if any, that must be met for the iteration to continue." + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "ForTaskDo" + } + } + } + ] + }, + "listenTask": { + "type": "object", + "title": "ListenTask", + "description": "Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.", + "required": [ + "listen" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "listen": { + "type": "object", + "title": "ListenTaskConfiguration", + "description": "The configuration of the listener to use.", + "unevaluatedProperties": false, + "properties": { + "to": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ListenTo", + "description": "Defines the event(s) to listen to." + }, + "read": { + "type": "string", + "enum": [ + "data", + "envelope", + "raw" + ], + "default": "data", + "title": "ListenAndReadAs", + "description": "Specifies how events are read during the listen operation." + } + }, + "required": [ + "to" + ] + }, + "foreach": { + "$ref": "#/$defs/subscriptionIterator", + "title": "ListenIterator", + "description": "Configures the iterator, if any, for processing consumed event(s)." + } + } + } + ] + }, + "raiseTask": { + "type": "object", + "title": "RaiseTask", + "description": "Intentionally triggers and propagates errors.", + "required": [ + "raise" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "raise": { + "type": "object", + "title": "RaiseTaskConfiguration", + "description": "The definition of the error to raise.", + "unevaluatedProperties": false, + "properties": { + "error": { + "title": "RaiseTaskError", + "oneOf": [ + { + "$ref": "#/$defs/error", + "title": "RaiseErrorDefinition", + "description": "Defines the error to raise." + }, + { + "type": "string", + "title": "RaiseErrorReference", + "description": "The name of the error to raise" + } + ] + } + }, + "required": [ + "error" + ] + } + } + } + ] + }, + "runTask": { + "type": "object", + "title": "RunTask", + "description": "Provides the capability to execute external containers, shell commands, scripts, or workflows.", + "required": [ + "run" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "run": { + "type": "object", + "title": "RunTaskConfiguration", + "description": "The configuration of the process to execute.", + "unevaluatedProperties": false, + "properties": { + "await": { + "type": "boolean", + "default": true, + "title": "AwaitProcessCompletion", + "description": "Whether to await the process completion before continuing." + }, + "return": { + "type": "string", + "title": "ProcessReturnType", + "description": "Configures the output of the process.", + "enum": [ + "stdout", + "stderr", + "code", + "all", + "none" + ], + "default": "stdout" + } + }, + "oneOf": [ + { + "title": "RunContainer", + "description": "Enables the execution of external processes encapsulated within a containerized environment.", + "properties": { + "container": { + "type": "object", + "title": "Container", + "description": "The configuration of the container to run.", + "unevaluatedProperties": false, + "properties": { + "image": { + "type": "string", + "title": "ContainerImage", + "description": "The name of the container image to run." + }, + "name": { + "type": "string", + "title": "ContainerName", + "description": "A runtime expression, if any, used to give specific name to the container." + }, + "command": { + "type": "string", + "title": "ContainerCommand", + "description": "The command, if any, to execute on the container." + }, + "ports": { + "type": "object", + "title": "ContainerPorts", + "description": "The container's port mappings, if any." + }, + "volumes": { + "type": "object", + "title": "ContainerVolumes", + "description": "The container's volume mappings, if any." + }, + "environment": { + "type": "object", + "title": "ContainerEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + }, + "lifetime": { + "$ref": "#/$defs/containerLifetime", + "title": "ContainerLifetime", + "description": "An object, if any, used to configure the container's lifetime" + } + }, + "required": [ + "image" + ] + } + }, + "required": [ + "container" + ] + }, + { + "title": "RunScript", + "description": "Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages.", + "properties": { + "script": { + "type": "object", + "title": "Script", + "description": "The configuration of the script to run.", + "unevaluatedProperties": false, + "properties": { + "language": { + "type": "string", + "title": "ScriptLanguage", + "description": "The language of the script to run." + }, + "arguments": { + "type": "object", + "title": "ScriptArguments", + "description": "A key/value mapping of the arguments, if any, to use when running the configured script.", + "additionalProperties": true + }, + "environment": { + "type": "object", + "title": "ScriptEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured script process.", + "additionalProperties": true + } + }, + "oneOf": [ + { + "title": "InlineScript", + "type": "object", + "description": "The script's code.", + "properties": { + "code": { + "type": "string", + "title": "InlineScriptCode" + } + }, + "required": [ + "code" + ] + }, + { + "title": "ExternalScript", + "type": "object", + "description": "The script's resource.", + "properties": { + "source": { + "$ref": "#/$defs/externalResource", + "title": "ExternalScriptResource" + } + }, + "required": [ + "source" + ] + } + ], + "required": [ + "language" + ] + } + }, + "required": [ + "script" + ] + }, + { + "title": "RunShell", + "description": "Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks.", + "properties": { + "shell": { + "type": "object", + "title": "Shell", + "description": "The configuration of the shell command to run.", + "unevaluatedProperties": false, + "properties": { + "command": { + "type": "string", + "title": "ShellCommand", + "description": "The shell command to run." + }, + "arguments": { + "type": "object", + "title": "ShellArguments", + "description": "A list of the arguments of the shell command to run.", + "additionalProperties": true + }, + "environment": { + "type": "object", + "title": "ShellEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process.", + "additionalProperties": true + } + }, + "required": [ + "command" + ] + } + }, + "required": [ + "shell" + ] + }, + { + "title": "RunWorkflow", + "description": "Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units.", + "properties": { + "workflow": { + "type": "object", + "title": "SubflowConfiguration", + "description": "The configuration of the workflow to run.", + "unevaluatedProperties": false, + "properties": { + "namespace": { + "type": "string", + "title": "SubflowNamespace", + "description": "The namespace the workflow to run belongs to." + }, + "name": { + "type": "string", + "title": "SubflowName", + "description": "The name of the workflow to run." + }, + "version": { + "type": "string", + "default": "latest", + "title": "SubflowVersion", + "description": "The version of the workflow to run. Defaults to latest." + }, + "input": { + "type": "object", + "title": "SubflowInput", + "description": "The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified.", + "additionalProperties": true + } + }, + "required": [ + "namespace", + "name", + "version" + ] + } + }, + "required": [ + "workflow" + ] + } + ] + } + } + } + ] + }, + "setTask": { + "type": "object", + "title": "SetTask", + "description": "A task used to set data.", + "required": [ + "set" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "set": { + "oneOf": [ + { + "type": "object", + "minProperties": 1, + "additionalProperties": true + }, + { + "type": "string" + } + ], + "title": "SetTaskConfiguration", + "description": "The data to set." + } + } + } + ] + }, + "switchTask": { + "type": "object", + "title": "SwitchTask", + "description": "Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria.", + "required": [ + "switch" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "switch": { + "type": "array", + "title": "SwitchTaskConfiguration", + "description": "The definition of the switch to use.", + "minItems": 1, + "items": { + "type": "object", + "title": "SwitchItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "type": "object", + "title": "SwitchCase", + "description": "The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met.", + "unevaluatedProperties": false, + "required": [ + "then" + ], + "properties": { + "when": { + "type": "string", + "title": "SwitchCaseCondition", + "description": "A runtime expression used to determine whether or not the case matches." + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "SwitchCaseOutcome", + "description": "The flow directive to execute when the case matches." + } + } + } + } + } + } + } + ] + }, + "tryTask": { + "type": "object", + "title": "TryTask", + "description": "Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones.", + "required": [ + "try", + "catch" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "try": { + "$ref": "#/$defs/taskList", + "title": "TryTaskConfiguration", + "description": "The task(s) to perform." + }, + "catch": { + "type": "object", + "title": "TryTaskCatch", + "description": "The object used to define the errors to catch.", + "unevaluatedProperties": false, + "properties": { + "errors": { + "type": "object", + "title": "CatchErrors", + "properties": { + "with": { + "$ref": "#/$defs/errorFilter" + } + }, + "description": "static error filter" + }, + "as": { + "type": "string", + "title": "CatchAs", + "description": "The name of the runtime expression variable to save the error as. Defaults to 'error'." + }, + "when": { + "type": "string", + "title": "CatchWhen", + "description": "A runtime expression used to determine whether to catch the filtered error." + }, + "exceptWhen": { + "type": "string", + "title": "CatchExceptWhen", + "description": "A runtime expression used to determine whether not to catch the filtered error." + }, + "retry": { + "oneOf": [ + { + "$ref": "#/$defs/retryPolicy", + "title": "RetryPolicyDefinition", + "description": "The retry policy to use, if any, when catching errors." + }, + { + "type": "string", + "title": "RetryPolicyReference", + "description": "The name of the retry policy to use, if any, when catching errors." + } + ] + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "TryTaskCatchDo", + "description": "The definition of the task(s) to run when catching an error." + } + } + } + } + } + ] + }, + "waitTask": { + "type": "object", + "title": "WaitTask", + "description": "Allows workflows to pause or delay their execution for a specified period of time.", + "required": [ + "wait" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "wait": { + "$ref": "#/$defs/duration", + "title": "WaitTaskConfiguration", + "description": "The amount of time to wait." + } + } + } + ] + }, + "flowDirective": { + "title": "FlowDirective", + "description": "Represents different transition options for a workflow.", + "anyOf": [ + { + "title": "FlowDirectiveEnum", + "type": "string", + "enum": [ + "continue", + "exit", + "end" + ], + "default": "continue" + }, + { + "type": "string" + } + ] + }, + "referenceableAuthenticationPolicy": { + "type": "object", + "title": "ReferenceableAuthenticationPolicy", + "description": "Represents a referenceable authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AuthenticationPolicyReference", + "description": "The reference of the authentication policy to use.", + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "ReferenceableAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + { + "$ref": "#/$defs/authenticationPolicy" + } + ] + }, + "secretBasedAuthenticationPolicy": { + "type": "object", + "title": "SecretBasedAuthenticationPolicy", + "description": "Represents an authentication policy based on secrets.", + "unevaluatedProperties": false, + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "SecretBasedAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + "authenticationPolicy": { + "type": "object", + "title": "AuthenticationPolicy", + "description": "Defines an authentication policy.", + "oneOf": [ + { + "title": "BasicAuthenticationPolicy", + "description": "Use basic authentication.", + "properties": { + "basic": { + "type": "object", + "title": "BasicAuthenticationPolicyConfiguration", + "description": "The configuration of the basic authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BasicAuthenticationProperties", + "description": "Inline configuration of the basic authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BasicAuthenticationPolicySecret", + "description": "Secret based configuration of the basic authentication policy." + } + ] + } + }, + "required": [ + "basic" + ] + }, + { + "title": "BearerAuthenticationPolicy", + "description": "Use bearer authentication.", + "properties": { + "bearer": { + "type": "object", + "title": "BearerAuthenticationPolicyConfiguration", + "description": "The configuration of the bearer authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BearerAuthenticationProperties", + "description": "Inline configuration of the bearer authentication policy.", + "properties": { + "token": { + "type": "string", + "description": "The bearer token to use." + } + }, + "required": [ + "token" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BearerAuthenticationPolicySecret", + "description": "Secret based configuration of the bearer authentication policy." + } + ] + } + }, + "required": [ + "bearer" + ] + }, + { + "title": "DigestAuthenticationPolicy", + "description": "Use digest authentication.", + "properties": { + "digest": { + "type": "object", + "title": "DigestAuthenticationPolicyConfiguration", + "description": "The configuration of the digest authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "DigestAuthenticationProperties", + "description": "Inline configuration of the digest authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "DigestAuthenticationPolicySecret", + "description": "Secret based configuration of the digest authentication policy." + } + ] + } + }, + "required": [ + "digest" + ] + }, + { + "title": "OAuth2AuthenticationPolicy", + "description": "Use OAuth2 authentication.", + "properties": { + "oauth2": { + "type": "object", + "title": "OAuth2AuthenticationPolicyConfiguration", + "description": "The configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties", + "type": "object", + "title": "OAuth2ConnectAuthenticationProperties", + "description": "The inline configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "properties": { + "endpoints": { + "type": "object", + "title": "OAuth2AuthenticationPropertiesEndpoints", + "description": "The endpoint configurations for OAuth2.", + "properties": { + "token": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/token", + "title": "OAuth2TokenEndpoint", + "description": "The relative path to the token endpoint. Defaults to `/oauth2/token`." + }, + "revocation": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/revoke", + "title": "OAuth2RevocationEndpoint", + "description": "The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`." + }, + "introspection": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/introspect", + "title": "OAuth2IntrospectionEndpoint", + "description": "The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`." + } + } + } + } + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OAuth2AuthenticationPolicySecret", + "description": "Secret based configuration of the OAuth2 authentication policy." + } + ] + } + }, + "required": [ + "oauth2" + ] + }, + { + "title": "OpenIdConnectAuthenticationPolicy", + "description": "Use OpenIdConnect authentication.", + "properties": { + "oidc": { + "type": "object", + "title": "OpenIdConnectAuthenticationPolicyConfiguration", + "description": "The configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties", + "title": "OpenIdConnectAuthenticationProperties", + "description": "The inline configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OpenIdConnectAuthenticationPolicySecret", + "description": "Secret based configuration of the OpenIdConnect authentication policy." + } + ] + } + }, + "required": [ + "oidc" + ] + } + ] + }, + "oauth2AuthenticationProperties": { + "type": "object", + "title": "OAuth2AuthenticationData", + "description": "Inline configuration of the OAuth2 authentication policy.", + "properties": { + "authority": { + "$ref": "#/$defs/uriTemplate", + "title": "OAuth2AuthenticationDataAuthority", + "description": "The URI that references the OAuth2 authority to use." + }, + "grant": { + "type": "string", + "enum": [ + "authorization_code", + "client_credentials", + "password", + "refresh_token", + "urn:ietf:params:oauth:grant-type:token-exchange" + ], + "title": "OAuth2AuthenticationDataGrant", + "description": "The grant type to use." + }, + "client": { + "type": "object", + "title": "OAuth2AuthenticationDataClient", + "description": "The definition of an OAuth2 client.", + "unevaluatedProperties": false, + "properties": { + "id": { + "type": "string", + "title": "ClientId", + "description": "The client id to use." + }, + "secret": { + "type": "string", + "title": "ClientSecret", + "description": "The client secret to use, if any." + }, + "assertion": { + "type": "string", + "title": "ClientAssertion", + "description": "A JWT containing a signed assertion with your application credentials." + }, + "authentication": { + "type": "string", + "enum": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "default": "client_secret_post", + "title": "ClientAuthentication", + "description": "The authentication method to use to authenticate the client." + } + } + }, + "request": { + "type": "object", + "title": "OAuth2TokenRequest", + "description": "The configuration of an OAuth2 token request", + "properties": { + "encoding": { + "type": "string", + "enum": [ + "application/x-www-form-urlencoded", + "application/json" + ], + "default": "application/x-www-form-urlencoded", + "title": "Oauth2TokenRequestEncoding" + } + } + }, + "issuers": { + "type": "array", + "title": "OAuth2Issuers", + "description": "A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens.", + "items": { + "type": "string" + } + }, + "scopes": { + "type": "array", + "title": "OAuth2AuthenticationDataScopes", + "description": "The scopes, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "title": "OAuth2AuthenticationDataAudiences", + "description": "The audiences, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "username": { + "type": "string", + "title": "OAuth2AuthenticationDataUsername", + "description": "The username to use. Used only if the grant type is Password." + }, + "password": { + "type": "string", + "title": "OAuth2AuthenticationDataPassword", + "description": "The password to use. Used only if the grant type is Password." + }, + "subject": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AuthenticationDataSubject", + "description": "The security token that represents the identity of the party on behalf of whom the request is being made." + }, + "actor": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AuthenticationDataActor", + "description": "The security token that represents the identity of the acting party." + } + } + }, + "oauth2Token": { + "type": "object", + "title": "OAuth2TokenDefinition", + "description": "Represents an OAuth2 token.", + "unevaluatedProperties": false, + "properties": { + "token": { + "type": "string", + "title": "OAuth2Token", + "description": "The security token to use." + }, + "type": { + "type": "string", + "title": "OAuth2TokenType", + "description": "The type of the security token to use." + } + }, + "required": [ + "token", + "type" + ] + }, + "duration": { + "oneOf": [ + { + "type": "object", + "minProperties": 1, + "unevaluatedProperties": false, + "properties": { + "days": { + "type": "integer", + "title": "DurationDays", + "description": "Number of days, if any." + }, + "hours": { + "type": "integer", + "title": "DurationHours", + "description": "Number of days, if any." + }, + "minutes": { + "type": "integer", + "title": "DurationMinutes", + "description": "Number of minutes, if any." + }, + "seconds": { + "type": "integer", + "title": "DurationSeconds", + "description": "Number of seconds, if any." + }, + "milliseconds": { + "type": "integer", + "title": "DurationMilliseconds", + "description": "Number of milliseconds, if any." + } + }, + "title": "DurationInline", + "description": "The inline definition of a duration." + }, + { + "type": "string", + "pattern": "^P(?!$)(\\d+(?:\\.\\d+)?Y)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?W)?(\\d+(?:\\.\\d+)?D)?(T(?=\\d)(\\d+(?:\\.\\d+)?H)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?S)?)?$", + "title": "DurationExpression", + "description": "The ISO 8601 expression of a duration." + } + ] + }, + "error": { + "type": "object", + "title": "Error", + "description": "Represents an error.", + "unevaluatedProperties": false, + "properties": { + "type": { + "title": "ErrorType", + "description": "A URI reference that identifies the error type.", + "oneOf": [ + { + "title": "LiteralErrorType", + "$ref": "#/$defs/uriTemplate", + "description": "The literal error type." + }, + { + "title": "ExpressionErrorType", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based error type." + } + ] + }, + "status": { + "type": "integer", + "title": "ErrorStatus", + "description": "The status code generated by the origin for this occurrence of the error." + }, + "instance": { + "title": "ErrorInstance", + "description": "A JSON Pointer used to reference the component the error originates from.", + "oneOf": [ + { + "title": "LiteralErrorInstance", + "description": "The literal error instance.", + "type": "string", + "format": "json-pointer" + }, + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorInstance", + "description": "An expression based error instance." + } + ] + }, + "title": { + "description": "A short, human-readable summary of the error.", + "title": "ErrorTitle", + "anyOf": [ + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorTitle" + }, + { + "type": "string", + "title": "LiteralErrorTitle" + } + ] + }, + "detail": { + "title": "ErrorDetails", + "description": "A human-readable explanation specific to this occurrence of the error.", + "anyOf": [ + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorDetails" + }, + { + "type": "string", + "title": "LiteralErrorDetails" + } + ] + } + }, + "required": [ + "type", + "status" + ] + }, + "errorFilter": { + "type": "object", + "title": "ErrorFilter", + "description": "Error filtering base on static values. For error filtering on dynamic values, use catch.when property", + "minProperties": 1, + "properties": { + "type": { + "type": "string", + "description": "if present, means this value should be used for filtering" + }, + "status": { + "type": "integer", + "description": "if present, means this value should be used for filtering" + }, + "instance": { + "type": "string", + "description": "if present, means this value should be used for filtering" + }, + "title": { + "type": "string", + "description": "if present, means this value should be used for filtering" + }, + "details": { + "type": "string", + "description": "if present, means this value should be used for filtering" + } + } + }, + "uriTemplate": { + "title": "UriTemplate", + "anyOf": [ + { + "title": "LiteralUriTemplate", + "type": "string", + "format": "uri-template", + "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + }, + { + "title": "LiteralUri", + "type": "string", + "format": "uri", + "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + } + ] + }, + "endpoint": { + "title": "Endpoint", + "description": "Represents an endpoint.", + "oneOf": [ + { + "$ref": "#/$defs/runtimeExpression" + }, + { + "$ref": "#/$defs/uriTemplate" + }, + { + "title": "EndpointConfiguration", + "type": "object", + "unevaluatedProperties": false, + "properties": { + "uri": { + "title": "EndpointUri", + "description": "The endpoint's URI.", + "oneOf": [ + { + "title": "LiteralEndpointURI", + "description": "The literal endpoint's URI.", + "$ref": "#/$defs/uriTemplate" + }, + { + "title": "ExpressionEndpointURI", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based endpoint's URI." + } + ] + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "EndpointAuthentication", + "description": "The authentication policy to use." + } + }, + "required": [ + "uri" + ] + } + ] + }, + "eventProperties": { + "type": "object", + "title": "EventProperties", + "description": "Describes the properties of an event.", + "properties": { + "id": { + "type": "string", + "title": "EventId", + "description": "The event's unique identifier." + }, + "source": { + "title": "EventSource", + "description": "Identifies the context in which an event happened.", + "oneOf": [ + { + "$ref": "#/$defs/uriTemplate" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "type": { + "type": "string", + "title": "EventType", + "description": "This attribute contains a value describing the type of event related to the originating occurrence." + }, + "time": { + "title": "EventTime", + "description": "When the event occured.", + "oneOf": [ + { + "title": "LiteralTime", + "type": "string", + "format": "date-time" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "subject": { + "type": "string", + "title": "EventSubject", + "description": "The subject of the event." + }, + "datacontenttype": { + "type": "string", + "title": "EventDataContentType", + "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format." + }, + "dataschema": { + "title": "EventDataschema", + "description": "The schema describing the event format.", + "oneOf": [ + { + "title": "LiteralDataSchema", + "$ref": "#/$defs/uriTemplate", + "description": "The literal event data schema." + }, + { + "title": "ExpressionDataSchema", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based event data schema." + } + ] + }, + "data": { + "title": "EventData", + "description": "The event's payload data", + "anyOf": [ + { + "$ref": "#/$defs/runtimeExpression" + }, + {} + ] + } + }, + "additionalProperties": true + }, + "eventConsumptionStrategy": { + "type": "object", + "title": "EventConsumptionStrategy", + "description": "Describe the event consumption strategy to adopt.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AllEventConsumptionStrategy", + "properties": { + "all": { + "type": "array", + "title": "AllEventConsumptionStrategyConfiguration", + "description": "A list containing all the events that must be consumed.", + "items": { + "$ref": "#/$defs/eventFilter" + } + } + }, + "required": [ + "all" + ] + }, + { + "title": "AnyEventConsumptionStrategy", + "properties": { + "any": { + "type": "array", + "title": "AnyEventConsumptionStrategyConfiguration", + "description": "A list containing any of the events to consume.", + "items": { + "$ref": "#/$defs/eventFilter" + } + }, + "until": { + "oneOf": [ + { + "type": "string", + "title": "AnyEventUntilCondition", + "description": "A runtime expression condition evaluated after consuming an event and which determines whether or not to continue listening." + }, + { + "allOf": [ + { + "$ref": "#/$defs/eventConsumptionStrategy", + "description": "The strategy that defines the event(s) to consume to stop listening." + }, + { + "properties": { + "until": false + } + } + ], + "title": "AnyEventUntilConsumed" + } + ] + } + }, + "required": [ + "any" + ] + }, + { + "title": "OneEventConsumptionStrategy", + "properties": { + "one": { + "$ref": "#/$defs/eventFilter", + "title": "OneEventConsumptionStrategyConfiguration", + "description": "The single event to consume." + } + }, + "required": [ + "one" + ] + } + ] + }, + "eventFilter": { + "type": "object", + "title": "EventFilter", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.", + "unevaluatedProperties": false, + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "minProperties": 1, + "title": "WithEvent", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes." + }, + "correlate": { + "type": "object", + "title": "EventFilterCorrelate", + "description": "A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics.", + "additionalProperties": { + "type": "object", + "properties": { + "from": { + "type": "string", + "title": "CorrelateFrom", + "description": "A runtime expression used to extract the correlation value from the filtered event." + }, + "expect": { + "type": "string", + "title": "CorrelateExpect", + "description": "A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation." + } + }, + "required": [ + "from" + ] + } + } + }, + "required": [ + "with" + ] + }, + "extension": { + "type": "object", + "title": "Extension", + "description": "The definition of an extension.", + "unevaluatedProperties": false, + "properties": { + "extend": { + "type": "string", + "enum": [ + "call", + "composite", + "emit", + "for", + "listen", + "raise", + "run", + "set", + "switch", + "try", + "wait", + "all" + ], + "title": "ExtensionTarget", + "description": "The type of task to extend." + }, + "when": { + "type": "string", + "title": "ExtensionCondition", + "description": "A runtime expression, if any, used to determine whether or not the extension should apply in the specified context." + }, + "before": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoBefore", + "description": "The task(s) to execute before the extended task, if any." + }, + "after": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoAfter", + "description": "The task(s) to execute after the extended task, if any." + } + }, + "required": [ + "extend" + ] + }, + "externalResource": { + "type": "object", + "title": "ExternalResource", + "description": "Represents an external resource.", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "ExternalResourceName", + "description": "The name of the external resource, if any." + }, + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "ExternalResourceEndpoint", + "description": "The endpoint of the external resource." + } + }, + "required": [ + "endpoint" + ] + }, + "input": { + "type": "object", + "title": "Input", + "description": "Configures the input of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "InputSchema", + "description": "The schema used to describe and validate the input of the workflow or task." + }, + "from": { + "title": "InputFrom", + "description": "A runtime expression, if any, used to mutate and/or filter the input of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "output": { + "type": "object", + "title": "Output", + "description": "Configures the output of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "OutputSchema", + "description": "The schema used to describe and validate the output of the workflow or task." + }, + "as": { + "title": "OutputAs", + "description": "A runtime expression, if any, used to mutate and/or filter the output of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "export": { + "type": "object", + "title": "Export", + "description": "Set the content of the context. .", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "ExportSchema", + "description": "The schema used to describe and validate the workflow context." + }, + "as": { + "title": "ExportAs", + "description": "A runtime expression, if any, used to export the output data to the context.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "retryPolicy": { + "type": "object", + "title": "RetryPolicy", + "description": "Defines a retry policy.", + "unevaluatedProperties": false, + "properties": { + "when": { + "type": "string", + "title": "RetryWhen", + "description": "A runtime expression, if any, used to determine whether or not to retry running the task, in a given context." + }, + "exceptWhen": { + "type": "string", + "title": "RetryExcepWhen", + "description": "A runtime expression used to determine whether or not to retry running the task, in a given context." + }, + "delay": { + "$ref": "#/$defs/duration", + "title": "RetryDelay", + "description": "The duration to wait between retry attempts." + }, + "backoff": { + "type": "object", + "title": "RetryBackoff", + "description": "The retry duration backoff.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "ConstantBackoff", + "properties": { + "constant": { + "type": "object", + "description": "The definition of the constant backoff to use, if any." + } + }, + "required": [ + "constant" + ] + }, + { + "title": "ExponentialBackOff", + "properties": { + "exponential": { + "type": "object", + "description": "The definition of the exponential backoff to use, if any." + } + }, + "required": [ + "exponential" + ] + }, + { + "title": "LinearBackoff", + "properties": { + "linear": { + "type": "object", + "description": "The definition of the linear backoff to use, if any." + } + }, + "required": [ + "linear" + ] + } + ] + }, + "limit": { + "type": "object", + "title": "RetryLimit", + "unevaluatedProperties": false, + "properties": { + "attempt": { + "type": "object", + "title": "RetryLimitAttempt", + "unevaluatedProperties": false, + "properties": { + "count": { + "type": "integer", + "title": "RetryLimitAttemptCount", + "description": "The maximum amount of retry attempts, if any." + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitAttemptDuration", + "description": "The maximum duration for each retry attempt." + } + } + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitDuration", + "description": "The duration limit, if any, for all retry attempts." + } + }, + "description": "The retry limit, if any." + }, + "jitter": { + "type": "object", + "title": "RetryPolicyJitter", + "description": "The parameters, if any, that control the randomness or variability of the delay between retry attempts.", + "unevaluatedProperties": false, + "properties": { + "from": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterFrom", + "description": "The minimum duration of the jitter range." + }, + "to": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterTo", + "description": "The maximum duration of the jitter range." + } + }, + "required": [ + "from", + "to" + ] + } + } + }, + "schema": { + "type": "object", + "title": "Schema", + "description": "Represents the definition of a schema.", + "unevaluatedProperties": false, + "properties": { + "format": { + "type": "string", + "default": "json", + "title": "SchemaFormat", + "description": "The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`." + } + }, + "oneOf": [ + { + "title": "SchemaInline", + "properties": { + "document": { + "description": "The schema's inline definition." + } + }, + "required": [ + "document" + ] + }, + { + "title": "SchemaExternal", + "properties": { + "resource": { + "$ref": "#/$defs/externalResource", + "title": "SchemaExternalResource", + "description": "The schema's external resource." + } + }, + "required": [ + "resource" + ] + } + ] + }, + "timeout": { + "type": "object", + "title": "Timeout", + "description": "The definition of a timeout.", + "unevaluatedProperties": false, + "properties": { + "after": { + "$ref": "#/$defs/duration", + "title": "TimeoutAfter", + "description": "The duration after which to timeout." + } + }, + "required": [ + "after" + ] + }, + "catalog": { + "type": "object", + "title": "Catalog", + "description": "The definition of a resource catalog.", + "unevaluatedProperties": false, + "properties": { + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "CatalogEndpoint", + "description": "The root URL where the catalog is hosted." + } + }, + "required": [ + "endpoint" + ] + }, + "runtimeExpression": { + "type": "string", + "title": "RuntimeExpression", + "description": "A runtime expression.", + "pattern": "^\\s*\\$\\{.+\\}\\s*$" + }, + "containerLifetime": { + "type": "object", + "title": "ContainerLifetime", + "description": "The configuration of a container's lifetime", + "unevaluatedProperties": false, + "properties": { + "cleanup": { + "type": "string", + "title": "ContainerCleanupPolicy", + "description": "The container cleanup policy to use", + "enum": [ + "always", + "never", + "eventually" + ], + "default": "never" + }, + "after": { + "$ref": "#/$defs/duration", + "title": "ContainerLifetimeDuration", + "description": "The duration after which to cleanup the container, in case the cleanup policy has been set to 'eventually'" + } + }, + "required": [ + "cleanup" + ], + "if": { + "properties": { + "cleanup": { + "const": "eventually" + } + } + }, + "then": { + "required": [ + "after" + ] + }, + "else": { + "not": { + "required": [ + "after" + ] + } + } + }, + "processResult": { + "type": "object", + "title": "ProcessResult", + "description": "The object returned by a run task when its return type has been set 'all'.", + "unevaluatedProperties": false, + "properties": { + "code": { + "type": "integer", + "title": "ProcessExitCode", + "description": "The process's exit code." + }, + "stdout": { + "type": "string", + "title": "ProcessStandardOutput", + "description": "The content of the process's STDOUT." + }, + "stderr": { + "type": "string", + "title": "ProcessStandardError", + "description": "The content of the process's STDERR." + } + }, + "required": [ + "code", + "stdout", + "stderr" + ] + }, + "asyncApiServer": { + "type": "object", + "title": "AsyncApiServer", + "description": "Configures the target server of an AsyncAPI operation.", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "AsyncApiServerName", + "description": "The target server's name." + }, + "variables": { + "type": "object", + "title": "AsyncApiServerVariables", + "description": "The target server's variables, if any." + } + }, + "required": [ + "name" + ] + }, + "asyncApiOutboundMessage": { + "type": "object", + "title": "AsyncApiOutboundMessage", + "description": "An object used to configure the message to publish using the target operation.", + "unevaluatedProperties": false, + "properties": { + "payload": { + "type": "object", + "title": "AsyncApiMessagePayload", + "description": "The message's payload, if any." + }, + "headers": { + "type": "object", + "title": "AsyncApiMessageHeaders", + "description": "The message's headers, if any." + } + } + }, + "asyncApiInboundMessage": { + "title": "AsyncApiInboundMessage", + "description": "Represents a message counsumed by an AsyncAPI subscription.", + "allOf": [ + { + "$ref": "#/$defs/asyncApiOutboundMessage" + }, + { + "properties": { + "correlationId": { + "type": "string", + "title": "AsyncApiMessageCorrelationId", + "description": "The message's correlation id, if any." + } + } + } + ] + }, + "asyncApiSubscription": { + "type": "object", + "title": "AsyncApiSubscription", + "description": "An object used to configure the subscription to messages consumed using the target operation.", + "unevaluatedProperties": false, + "properties": { + "filter": { + "$ref": "#/$defs/runtimeExpression", + "title": "AsyncApiSubscriptionCorrelation", + "description": "A runtime expression, if any, used to filter consumed messages." + }, + "consume": { + "$ref": "#/$defs/asyncApiMessageConsumptionPolicy", + "title": "AsyncApiMessageConsumptionPolicy", + "description": "An object used to configure the subscription's message consumption policy." + }, + "foreach": { + "$ref": "#/$defs/subscriptionIterator", + "title": "AsyncApiSubscriptionIterator", + "description": "Configures the iterator, if any, for processing consumed messages(s)." + } + }, + "required": [ + "consume" + ] + }, + "asyncApiMessageConsumptionPolicy": { + "type": "object", + "title": "AsyncApiMessageConsumptionPolicy", + "description": "An object used to configure a subscription's message consumption policy.", + "unevaluatedProperties": false, + "properties": { + "for": { + "$ref": "#/$defs/duration", + "title": "AsyncApiMessageConsumptionPolicyFor", + "description": "Specifies the time period over which messages will be consumed." + } + }, + "oneOf": [ + { + "properties": { + "amount": { + "type": "integer", + "description": "The amount of (filtered) messages to consume before disposing of the subscription." + } + }, + "title": "AsyncApiMessageConsumptionPolicyAmount", + "required": [ + "amount" + ] + }, + { + "properties": { + "while": { + "$ref": "#/$defs/runtimeExpression", + "description": "A runtime expression evaluated after each consumed (filtered) message to decide if message consumption should continue." + } + }, + "title": "AsyncApiMessageConsumptionPolicyWhile", + "required": [ + "while" + ] + }, + { + "properties": { + "until": { + "$ref": "#/$defs/runtimeExpression", + "description": "A runtime expression evaluated before each consumed (filtered) message to decide if message consumption should continue." + } + }, + "title": "AsyncApiMessageConsumptionPolicyUntil", + "required": [ + "until" + ] + } + ] + }, + "subscriptionIterator": { + "type": "object", + "title": "SubscriptionIterator", + "description": "Configures the iteration over each item (event or message) consumed by a subscription.", + "unevaluatedProperties": false, + "properties": { + "item": { + "type": "string", + "title": "SubscriptionIteratorItem", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "at": { + "type": "string", + "title": "SubscriptionIteratorIndex", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "SubscriptionIteratorTasks", + "description": "The tasks to perform for each consumed item." + }, + "output": { + "$ref": "#/$defs/output", + "title": "SubscriptionIteratorOutput", + "description": "An object, if any, used to customize the item's output and to document its schema." + }, + "export": { + "$ref": "#/$defs/export", + "title": "SubscriptionIteratorExport", + "description": "An object, if any, used to customize the content of the workflow context." + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/1.0.1/workflow.yaml b/public/schemas/1.0.1/workflow.yaml new file mode 100644 index 0000000..0148f80 --- /dev/null +++ b/public/schemas/1.0.1/workflow.yaml @@ -0,0 +1,1826 @@ +$id: https://open-workflow-specification.org/schemas/1.0.1/workflow.yaml +$schema: https://json-schema.org/draft/2020-12/schema +description: Open Workflow Specification DSL - Workflow Schema. +type: object +required: [ document, do ] +properties: + document: + type: object + title: Document + description: Documents the workflow. + unevaluatedProperties: false + properties: + dsl: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowDSL + description: The version of the DSL used by the workflow. + namespace: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowNamespace + description: The workflow's namespace. + name: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowName + description: The workflow's name. + version: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowVersion + description: The workflow's semantic version. + title: + type: string + title: WorkflowTitle + description: The workflow's title. + summary: + type: string + title: WorkflowSummary + description: The workflow's Markdown summary. + tags: + type: object + title: WorkflowTags + description: A key/value mapping of the workflow's tags, if any. + additionalProperties: true + metadata: + type: object + title: WorkflowMetadata + description: Holds additional information about the workflow. + additionalProperties: true + required: [ dsl, namespace, name, version ] + input: + $ref: '#/$defs/input' + title: Input + description: Configures the workflow's input. + use: + type: object + title: Use + description: Defines the workflow's reusable components. + unevaluatedProperties: false + properties: + authentications: + type: object + title: UseAuthentications + description: The workflow's reusable authentication policies. + additionalProperties: + $ref: '#/$defs/authenticationPolicy' + errors: + type: object + title: UseErrors + description: The workflow's reusable errors. + additionalProperties: + $ref: '#/$defs/error' + extensions: + type: array + title: UseExtensions + description: The workflow's extensions. + items: + type: object + title: ExtensionItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/extension' + functions: + type: object + title: UseFunctions + description: The workflow's reusable functions. + additionalProperties: + $ref: '#/$defs/task' + retries: + type: object + title: UseRetries + description: The workflow's reusable retry policies. + additionalProperties: + $ref: '#/$defs/retryPolicy' + secrets: + type: array + title: UseSecrets + description: The workflow's reusable secrets. + items: + type: string + description: The workflow's secrets. + timeouts: + type: object + title: UseTimeouts + description: The workflow's reusable timeouts. + additionalProperties: + $ref: '#/$defs/timeout' + catalogs: + type: object + title: UseCatalogs + description: The workflow's reusable catalogs. + additionalProperties: + $ref: '#/$defs/catalog' + do: + $ref: '#/$defs/taskList' + title: Do + description: Defines the task(s) the workflow must perform. + timeout: + title: DoTimeout + oneOf: + - $ref: '#/$defs/timeout' + title: TimeoutDefinition + description: The workflow's timeout configuration, if any. + - type: string + title: TimeoutReference + description: The name of the workflow's timeout, if any. + output: + $ref: '#/$defs/output' + title: Output + description: Configures the workflow's output. + schedule: + type: object + title: Schedule + description: Schedules the workflow. + unevaluatedProperties: false + properties: + every: + $ref: '#/$defs/duration' + title: ScheduleEvery + description: Specifies the duration of the interval at which the workflow should be executed. + cron: + type: string + title: ScheduleCron + description: Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight. + after: + $ref: '#/$defs/duration' + title: ScheduleAfter + description: Specifies a delay duration that the workflow must wait before starting again after it completes. + on: + $ref: '#/$defs/eventConsumptionStrategy' + title: ScheduleOn + description: Specifies the events that trigger the workflow execution. +$defs: + taskList: + title: TaskList + description: List of named tasks to perform. + type: array + items: + type: object + title: TaskItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/task' + taskBase: + type: object + title: TaskBase + description: An object inherited by all tasks. + properties: + if: + type: string + title: TaskBaseIf + description: A runtime expression, if any, used to determine whether or not the task should be run. + input: + $ref: '#/$defs/input' + title: TaskBaseInput + description: Configure the task's input. + output: + $ref: '#/$defs/output' + title: TaskBaseOutput + description: Configure the task's output. + export: + $ref: '#/$defs/export' + title: TaskBaseExport + description: Export task output to context. + timeout: + title: TaskTimeout + oneOf: + - $ref: '#/$defs/timeout' + title: TaskTimeoutDefinition + description: The task's timeout configuration, if any. + - type: string + title: TaskTimeoutReference + description: The name of the task's timeout, if any. + then: + $ref: '#/$defs/flowDirective' + title: TaskBaseThen + description: The flow directive to be performed upon completion of the task. + metadata: + type: object + title: TaskMetadata + description: Holds additional information about the task. + additionalProperties: true + task: + title: Task + description: A discrete unit of work that contributes to achieving the overall objectives defined by the workflow. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/callTask' + - $ref: '#/$defs/doTask' + - $ref: '#/$defs/forkTask' + - $ref: '#/$defs/emitTask' + - $ref: '#/$defs/forTask' + - $ref: '#/$defs/listenTask' + - $ref: '#/$defs/raiseTask' + - $ref: '#/$defs/runTask' + - $ref: '#/$defs/setTask' + - $ref: '#/$defs/switchTask' + - $ref: '#/$defs/tryTask' + - $ref: '#/$defs/waitTask' + callTask: + title: CallTask + description: Defines the call to perform. + oneOf: + - title: CallAsyncAPI + description: Defines the AsyncAPI call to perform. + type: object + required: [ call, with ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: asyncapi + with: + type: object + title: AsyncApiArguments + description: The Async API call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: AsyncAPIDocument + description: The document that defines the AsyncAPI operation to call. + channel: + type: string + title: With + description: The name of the channel on which to perform the operation. Used only in case the referenced document uses AsyncAPI v2.6.0. + operation: + type: string + title: AsyncAPIOperation + description: A reference to the AsyncAPI operation to call. + server: + $ref: '#/$defs/asyncApiServer' + title: AsyncAPIServer + description: An object used to configure to the server to call the specified AsyncAPI operation on. + protocol: + type: string + title: AsyncApiProtocol + description: The protocol to use to select the target server. + enum: [ amqp, amqp1, anypointmq, googlepubsub, http, ibmmq, jms, kafka, mercure, mqtt, mqtt5, nats, pulsar, redis, sns, solace, sqs, stomp, ws ] + message: + $ref: '#/$defs/asyncApiOutboundMessage' + title: AsyncApiMessage + description: An object used to configure the message to publish using the target operation. + subscription: + $ref: '#/$defs/asyncApiSubscription' + title: AsyncApiSubscription + description: An object used to configure the subscription to messages consumed using the target operation. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: AsyncAPIAuthentication + description: The authentication policy, if any, to use when calling the AsyncAPI operation. + oneOf: + - required: [ document, operation, message ] + - required: [ document, operation, subscription ] + - required: [ document, channel, message ] + - required: [ document, channel, subscription ] + unevaluatedProperties: false + - title: CallGRPC + description: Defines the GRPC call to perform. + type: object + unevaluatedProperties: false + required: [ call, with ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: grpc + with: + type: object + title: GRPCArguments + description: The GRPC call arguments. + properties: + proto: + $ref: '#/$defs/externalResource' + title: WithGRPCProto + description: The proto resource that describes the GRPC service to call. + service: + type: object + title: WithGRPCService + unevaluatedProperties: false + properties: + name: + type: string + title: WithGRPCServiceName + description: The name of the GRPC service to call. + host: + type: string + title: WithGRPCServiceHost + description: The hostname of the GRPC service to call. + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-.]{0,61}[a-zA-Z0-9])?$ + port: + type: integer + title: WithGRPCServicePort + description: The port number of the GRPC service to call. + minimum: 0 + maximum: 65535 + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithGRPCServiceAuthentication + description: The endpoint's authentication policy, if any. + required: [ name, host ] + method: + type: string + title: WithGRPCMethod + description: The name of the method to call on the defined GRPC service. + arguments: + type: object + title: WithGRPCArguments + description: The arguments, if any, to call the method with. + additionalProperties: true + required: [ proto, service, method ] + unevaluatedProperties: false + - title: CallHTTP + description: Defines the HTTP call to perform. + type: object + unevaluatedProperties: false + required: [ call, with ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: http + with: + type: object + title: HTTPArguments + description: The HTTP call arguments. + properties: + method: + type: string + title: HTTPMethod + description: The HTTP method of the HTTP request to perform. + endpoint: + title: HTTPEndpoint + description: The HTTP endpoint to send the request to. + $ref: '#/$defs/endpoint' + headers: + oneOf: + - type: object + additionalProperties: + type: string + - $ref: '#/$defs/runtimeExpression' + title: HTTPHeaders + description: A name/value mapping of the headers, if any, of the HTTP request to perform. + body: + title: HTTPBody + description: The body, if any, of the HTTP request to perform. + query: + oneOf: + - type: object + additionalProperties: + type: string + - $ref: '#/$defs/runtimeExpression' + title: HTTPQuery + description: A name/value mapping of the query parameters, if any, of the HTTP request to perform. + additionalProperties: true + output: + type: string + title: HTTPOutput + description: The http call output format. Defaults to 'content'. + enum: [ raw, content, response ] + redirect: + type: boolean + title: HttpRedirect + description: Specifies whether redirection status codes (`300–399`) should be treated as errors. + required: [ method, endpoint ] + unevaluatedProperties: false + - title: CallOpenAPI + description: Defines the OpenAPI call to perform. + type: object + unevaluatedProperties: false + required: [ call, with ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: openapi + with: + type: object + title: OpenAPIArguments + description: The OpenAPI call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: WithOpenAPIDocument + description: The document that defines the OpenAPI operation to call. + operationId: + type: string + title: WithOpenAPIOperation + description: The id of the OpenAPI operation to call. + parameters: + type: object + title: WithOpenAPIParameters + description: A name/value mapping of the parameters of the OpenAPI operation to call. + additionalProperties: true + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithOpenAPIAuthentication + description: The authentication policy, if any, to use when calling the OpenAPI operation. + output: + type: string + enum: [ raw, content, response ] + title: WithOpenAPIOutput + description: The http call output format. Defaults to 'content'. + redirect: + type: boolean + title: HttpRedirect + description: Specifies whether redirection status codes (`300–399`) should be treated as errors. + required: [ document, operationId ] + unevaluatedProperties: false + - title: CallA2A + description: Defines the A2A call to perform. + type: object + unevaluatedProperties: false + required: [ call, with ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: a2a + with: + type: object + title: A2AArguments + description: The A2A call arguments. + properties: + agentCard: + $ref: '#/$defs/externalResource' + title: WithA2AAgentCard + description: The Agent Card that defines the agent to call. + server: + title: A2AServer + description: The server endpoint to send the request to. + $ref: '#/$defs/endpoint' + method: + type: string + title: WithA2AMethod + description: The A2A method to send. + enum: [ 'message/send', 'message/stream', 'tasks/get', 'tasks/list', 'tasks/cancel', 'tasks/resubscribe', 'tasks/pushNotificationConfig/set', 'tasks/pushNotificationConfig/get', 'tasks/pushNotificationConfig/list', 'tasks/pushNotificationConfig/delete', 'agent/getAuthenticatedExtendedCard' ] + parameters: + oneOf: + - type: object + minProperties: 1 + additionalProperties: true + - type: string + title: WithA2AParameters + description: The parameters object to send with the A2A method. + required: [ method ] + unevaluatedProperties: false + - title: CallFunction + description: Defines the function call to perform. + type: object + unevaluatedProperties: false + required: [ call ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + not: + enum: ["asyncapi", "grpc", "http", "openapi", "a2a"] + description: The name of the function to call. + with: + type: object + title: FunctionArguments + description: A name/value mapping of the parameters, if any, to call the function with. + additionalProperties: true + forkTask: + type: object + title: ForkTask + description: Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output. + unevaluatedProperties: false + required: [ fork ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + fork: + type: object + title: ForkTaskConfiguration + description: The configuration of the branches to perform concurrently. + unevaluatedProperties: false + required: [ branches ] + properties: + branches: + $ref: '#/$defs/taskList' + title: ForkBranches + compete: + type: boolean + title: ForkCompete + description: Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output. + default: false + doTask: + type: object + title: DoTask + description: Allows to execute a list of tasks in sequence. + unevaluatedProperties: false + required: [ do ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + do: + $ref: '#/$defs/taskList' + title: DoTaskConfiguration + description: The configuration of the tasks to perform sequentially. + emitTask: + type: object + title: EmitTask + description: Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services. + required: [ emit ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + emit: + type: object + title: EmitTaskConfiguration + description: The configuration of an event's emission. + unevaluatedProperties: false + properties: + event: + type: object + title: EmitEventDefinition + description: The definition of the event to emit. + properties: + with: + $ref: '#/$defs/eventProperties' + title: EmitEventWith + description: Defines the properties of event to emit. + required: [ source, type ] + additionalProperties: true + required: [ event ] + forTask: + type: object + title: ForTask + description: Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets. + required: [ for, do ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + for: + type: object + title: ForTaskConfiguration + description: The definition of the loop that iterates over a range of values. + unevaluatedProperties: false + properties: + each: + type: string + title: ForEach + description: The name of the variable used to store the current item being enumerated. + default: item + in: + type: string + title: ForIn + description: A runtime expression used to get the collection to enumerate. + at: + type: string + title: ForAt + description: The name of the variable used to store the index of the current item being enumerated. + default: index + required: [ in ] + while: + type: string + title: While + description: A runtime expression that represents the condition, if any, that must be met for the iteration to continue. + do: + $ref: '#/$defs/taskList' + title: ForTaskDo + listenTask: + type: object + title: ListenTask + description: Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems. + required: [ listen ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + listen: + type: object + title: ListenTaskConfiguration + description: The configuration of the listener to use. + unevaluatedProperties: false + properties: + to: + $ref: '#/$defs/eventConsumptionStrategy' + title: ListenTo + description: Defines the event(s) to listen to. + read: + type: string + enum: [ data, envelope, raw ] + default: data + title: ListenAndReadAs + description: Specifies how events are read during the listen operation. + required: [ to ] + foreach: + $ref: '#/$defs/subscriptionIterator' + title: ListenIterator + description: Configures the iterator, if any, for processing consumed event(s). + raiseTask: + type: object + title: RaiseTask + description: Intentionally triggers and propagates errors. + required: [ raise ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + raise: + type: object + title: RaiseTaskConfiguration + description: The definition of the error to raise. + unevaluatedProperties: false + properties: + error: + title: RaiseTaskError + oneOf: + - $ref: '#/$defs/error' + title: RaiseErrorDefinition + description: Defines the error to raise. + - type: string + title: RaiseErrorReference + description: The name of the error to raise + required: [ error ] + runTask: + type: object + title: RunTask + description: Provides the capability to execute external containers, shell commands, scripts, or workflows. + required: [ run ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + run: + type: object + title: RunTaskConfiguration + description: The configuration of the process to execute. + unevaluatedProperties: false + properties: + await: + type: boolean + default: true + title: AwaitProcessCompletion + description: Whether to await the process completion before continuing. + return: + type: string + title: ProcessReturnType + description: Configures the output of the process. + enum: [ stdout, stderr, code, all, none ] + default: stdout + oneOf: + - title: RunContainer + description: Enables the execution of external processes encapsulated within a containerized environment. + properties: + container: + type: object + title: Container + description: The configuration of the container to run. + unevaluatedProperties: false + properties: + image: + type: string + title: ContainerImage + description: The name of the container image to run. + name: + type: string + title: ContainerName + description: A runtime expression, if any, used to give specific name to the container. + command: + type: string + title: ContainerCommand + description: The command, if any, to execute on the container. + ports: + type: object + title: ContainerPorts + description: The container's port mappings, if any. + volumes: + type: object + title: ContainerVolumes + description: The container's volume mappings, if any. + environment: + type: object + title: ContainerEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + lifetime: + $ref: '#/$defs/containerLifetime' + title: ContainerLifetime + description: An object, if any, used to configure the container's lifetime + required: [ image ] + required: [ container ] + - title: RunScript + description: Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages. + properties: + script: + type: object + title: Script + description: The configuration of the script to run. + unevaluatedProperties: false + properties: + language: + type: string + title: ScriptLanguage + description: The language of the script to run. + arguments: + type: object + title: ScriptArguments + description: A key/value mapping of the arguments, if any, to use when running the configured script. + additionalProperties: true + environment: + type: object + title: ScriptEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured script process. + additionalProperties: true + oneOf: + - title: InlineScript + type: object + description: The script's code. + properties: + code: + type: string + title: InlineScriptCode + required: [ code ] + - title: ExternalScript + type: object + description: The script's resource. + properties: + source: + $ref: '#/$defs/externalResource' + title: ExternalScriptResource + required: [ source ] + required: [ language ] + required: [ script ] + - title: RunShell + description: Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks. + properties: + shell: + type: object + title: Shell + description: The configuration of the shell command to run. + unevaluatedProperties: false + properties: + command: + type: string + title: ShellCommand + description: The shell command to run. + arguments: + type: object + title: ShellArguments + description: A list of the arguments of the shell command to run. + additionalProperties: true + environment: + type: object + title: ShellEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + additionalProperties: true + required: [ command ] + required: [ shell ] + - title: RunWorkflow + description: Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units. + properties: + workflow: + type: object + title: SubflowConfiguration + description: The configuration of the workflow to run. + unevaluatedProperties: false + properties: + namespace: + type: string + title: SubflowNamespace + description: The namespace the workflow to run belongs to. + name: + type: string + title: SubflowName + description: The name of the workflow to run. + version: + type: string + default: latest + title: SubflowVersion + description: The version of the workflow to run. Defaults to latest. + input: + type: object + title: SubflowInput + description: The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified. + additionalProperties: true + required: [ namespace, name, version ] + required: [ workflow ] + setTask: + type: object + title: SetTask + description: A task used to set data. + required: [ set ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + set: + oneOf: + - type: object + minProperties: 1 + additionalProperties: true + - type: string + title: SetTaskConfiguration + description: The data to set. + switchTask: + type: object + title: SwitchTask + description: Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria. + required: [ switch ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + switch: + type: array + title: SwitchTaskConfiguration + description: The definition of the switch to use. + minItems: 1 + items: + type: object + title: SwitchItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + type: object + title: SwitchCase + description: The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met. + unevaluatedProperties: false + required: [ then ] + properties: + when: + type: string + title: SwitchCaseCondition + description: A runtime expression used to determine whether or not the case matches. + then: + $ref: '#/$defs/flowDirective' + title: SwitchCaseOutcome + description: The flow directive to execute when the case matches. + tryTask: + type: object + title: TryTask + description: Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones. + required: [ try, catch ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + try: + $ref: '#/$defs/taskList' + title: TryTaskConfiguration + description: The task(s) to perform. + catch: + type: object + title: TryTaskCatch + description: The object used to define the errors to catch. + unevaluatedProperties: false + properties: + errors: + type: object + title: CatchErrors + properties: + with: + $ref: '#/$defs/errorFilter' + description: static error filter + as: + type: string + title: CatchAs + description: The name of the runtime expression variable to save the error as. Defaults to 'error'. + when: + type: string + title: CatchWhen + description: A runtime expression used to determine whether to catch the filtered error. + exceptWhen: + type: string + title: CatchExceptWhen + description: A runtime expression used to determine whether not to catch the filtered error. + retry: + oneOf: + - $ref: '#/$defs/retryPolicy' + title: RetryPolicyDefinition + description: The retry policy to use, if any, when catching errors. + - type: string + title: RetryPolicyReference + description: The name of the retry policy to use, if any, when catching errors. + do: + $ref: '#/$defs/taskList' + title: TryTaskCatchDo + description: The definition of the task(s) to run when catching an error. + waitTask: + type: object + title: WaitTask + description: Allows workflows to pause or delay their execution for a specified period of time. + required: [ wait ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + wait: + $ref: '#/$defs/duration' + title: WaitTaskConfiguration + description: The amount of time to wait. + flowDirective: + title: FlowDirective + description: Represents different transition options for a workflow. + anyOf: + - title: FlowDirectiveEnum + type: string + enum: [ continue, exit, end ] + default: continue + - type: string + referenceableAuthenticationPolicy: + type: object + title: ReferenceableAuthenticationPolicy + description: Represents a referenceable authentication policy. + unevaluatedProperties: false + oneOf: + - title: AuthenticationPolicyReference + description: The reference of the authentication policy to use. + properties: + use: + type: string + minLength: 1 + title: ReferenceableAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + - $ref: '#/$defs/authenticationPolicy' + secretBasedAuthenticationPolicy: + type: object + title: SecretBasedAuthenticationPolicy + description: Represents an authentication policy based on secrets. + unevaluatedProperties: false + properties: + use: + type: string + minLength: 1 + title: SecretBasedAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + authenticationPolicy: + type: object + title: AuthenticationPolicy + description: Defines an authentication policy. + oneOf: + - title: BasicAuthenticationPolicy + description: Use basic authentication. + properties: + basic: + type: object + title: BasicAuthenticationPolicyConfiguration + description: The configuration of the basic authentication policy. + unevaluatedProperties: false + oneOf: + - title: BasicAuthenticationProperties + description: Inline configuration of the basic authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BasicAuthenticationPolicySecret + description: Secret based configuration of the basic authentication policy. + required: [ basic ] + - title: BearerAuthenticationPolicy + description: Use bearer authentication. + properties: + bearer: + type: object + title: BearerAuthenticationPolicyConfiguration + description: The configuration of the bearer authentication policy. + unevaluatedProperties: false + oneOf: + - title: BearerAuthenticationProperties + description: Inline configuration of the bearer authentication policy. + properties: + token: + type: string + description: The bearer token to use. + required: [ token ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BearerAuthenticationPolicySecret + description: Secret based configuration of the bearer authentication policy. + required: [ bearer ] + - title: DigestAuthenticationPolicy + description: Use digest authentication. + properties: + digest: + type: object + title: DigestAuthenticationPolicyConfiguration + description: The configuration of the digest authentication policy. + unevaluatedProperties: false + oneOf: + - title: DigestAuthenticationProperties + description: Inline configuration of the digest authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: DigestAuthenticationPolicySecret + description: Secret based configuration of the digest authentication policy. + required: [ digest ] + - title: OAuth2AuthenticationPolicy + description: Use OAuth2 authentication. + properties: + oauth2: + type: object + title: OAuth2AuthenticationPolicyConfiguration + description: The configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + type: object + title: OAuth2ConnectAuthenticationProperties + description: The inline configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + properties: + endpoints: + type: object + title: OAuth2AuthenticationPropertiesEndpoints + description: The endpoint configurations for OAuth2. + properties: + token: + type: string + format: uri-template + default: /oauth2/token + title: OAuth2TokenEndpoint + description: The relative path to the token endpoint. Defaults to `/oauth2/token`. + revocation: + type: string + format: uri-template + default: /oauth2/revoke + title: OAuth2RevocationEndpoint + description: The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`. + introspection: + type: string + format: uri-template + default: /oauth2/introspect + title: OAuth2IntrospectionEndpoint + description: The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`. + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OAuth2AuthenticationPolicySecret + description: Secret based configuration of the OAuth2 authentication policy. + required: [ oauth2 ] + - title: OpenIdConnectAuthenticationPolicy + description: Use OpenIdConnect authentication. + properties: + oidc: + type: object + title: OpenIdConnectAuthenticationPolicyConfiguration + description: The configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + title: OpenIdConnectAuthenticationProperties + description: The inline configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OpenIdConnectAuthenticationPolicySecret + description: Secret based configuration of the OpenIdConnect authentication policy. + required: [ oidc ] + oauth2AuthenticationProperties: + type: object + title: OAuth2AuthenticationData + description: Inline configuration of the OAuth2 authentication policy. + properties: + authority: + $ref: '#/$defs/uriTemplate' + title: OAuth2AuthenticationDataAuthority + description: The URI that references the OAuth2 authority to use. + grant: + type: string + enum: [ authorization_code, client_credentials, password, refresh_token, 'urn:ietf:params:oauth:grant-type:token-exchange'] + title: OAuth2AuthenticationDataGrant + description: The grant type to use. + client: + type: object + title: OAuth2AuthenticationDataClient + description: The definition of an OAuth2 client. + unevaluatedProperties: false + properties: + id: + type: string + title: ClientId + description: The client id to use. + secret: + type: string + title: ClientSecret + description: The client secret to use, if any. + assertion: + type: string + title: ClientAssertion + description: A JWT containing a signed assertion with your application credentials. + authentication: + type: string + enum: [ client_secret_basic, client_secret_post, client_secret_jwt, private_key_jwt, none ] + default: client_secret_post + title: ClientAuthentication + description: The authentication method to use to authenticate the client. + request: + type: object + title: OAuth2TokenRequest + description: The configuration of an OAuth2 token request + properties: + encoding: + type: string + enum: [ 'application/x-www-form-urlencoded', 'application/json' ] + default: 'application/x-www-form-urlencoded' + title: Oauth2TokenRequestEncoding + issuers: + type: array + title: OAuth2Issuers + description: A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens. + items: + type: string + scopes: + type: array + title: OAuth2AuthenticationDataScopes + description: The scopes, if any, to request the token for. + items: + type: string + audiences: + type: array + title: OAuth2AuthenticationDataAudiences + description: The audiences, if any, to request the token for. + items: + type: string + username: + type: string + title: OAuth2AuthenticationDataUsername + description: The username to use. Used only if the grant type is Password. + password: + type: string + title: OAuth2AuthenticationDataPassword + description: The password to use. Used only if the grant type is Password. + subject: + $ref: '#/$defs/oauth2Token' + title: OAuth2AuthenticationDataSubject + description: The security token that represents the identity of the party on behalf of whom the request is being made. + actor: + $ref: '#/$defs/oauth2Token' + title: OAuth2AuthenticationDataActor + description: The security token that represents the identity of the acting party. + oauth2Token: + type: object + title: OAuth2TokenDefinition + description: Represents an OAuth2 token. + unevaluatedProperties: false + properties: + token: + type: string + title: OAuth2Token + description: The security token to use. + type: + type: string + title: OAuth2TokenType + description: The type of the security token to use. + required: [ token, type ] + duration: + oneOf: + - type: object + minProperties: 1 + unevaluatedProperties: false + properties: + days: + type: integer + title: DurationDays + description: Number of days, if any. + hours: + type: integer + title: DurationHours + description: Number of days, if any. + minutes: + type: integer + title: DurationMinutes + description: Number of minutes, if any. + seconds: + type: integer + title: DurationSeconds + description: Number of seconds, if any. + milliseconds: + type: integer + title: DurationMilliseconds + description: Number of milliseconds, if any. + title: DurationInline + description: The inline definition of a duration. + - type: string + pattern: '^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$' + title: DurationExpression + description: The ISO 8601 expression of a duration. + error: + type: object + title: Error + description: Represents an error. + unevaluatedProperties: false + properties: + type: + title: ErrorType + description: A URI reference that identifies the error type. + oneOf: + - title: LiteralErrorType + $ref: '#/$defs/uriTemplate' + description: The literal error type. + - title: ExpressionErrorType + $ref: '#/$defs/runtimeExpression' + description: An expression based error type. + status: + type: integer + title: ErrorStatus + description: The status code generated by the origin for this occurrence of the error. + instance: + title: ErrorInstance + description: A JSON Pointer used to reference the component the error originates from. + oneOf: + - title: LiteralErrorInstance + description: The literal error instance. + type: string + format: json-pointer + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorInstance + description: An expression based error instance. + title: + description: A short, human-readable summary of the error. + title: ErrorTitle + anyOf: + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorTitle + - type: string + title: LiteralErrorTitle + detail: + title: ErrorDetails + description: A human-readable explanation specific to this occurrence of the error. + anyOf: + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorDetails + - type: string + title: LiteralErrorDetails + required: [ type, status ] + errorFilter: + type: object + title: ErrorFilter + description: Error filtering base on static values. For error filtering on dynamic values, use catch.when property + minProperties: 1 + properties: + type: + type: string + description: if present, means this value should be used for filtering + status: + type: integer + description: if present, means this value should be used for filtering + instance: + type: string + description: if present, means this value should be used for filtering + title: + type: string + description: if present, means this value should be used for filtering + details: + type: string + description: if present, means this value should be used for filtering + uriTemplate: + title: UriTemplate + anyOf: + - title: LiteralUriTemplate + type: string + format: uri-template + pattern: "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + - title: LiteralUri + type: string + format: uri + pattern: "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + endpoint: + title: Endpoint + description: Represents an endpoint. + oneOf: + - $ref: '#/$defs/runtimeExpression' + - $ref: '#/$defs/uriTemplate' + - title: EndpointConfiguration + type: object + unevaluatedProperties: false + properties: + uri: + title: EndpointUri + description: The endpoint's URI. + oneOf: + - title: LiteralEndpointURI + description: The literal endpoint's URI. + $ref: '#/$defs/uriTemplate' + - title: ExpressionEndpointURI + $ref: '#/$defs/runtimeExpression' + description: An expression based endpoint's URI. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: EndpointAuthentication + description: The authentication policy to use. + required: [ uri ] + eventProperties: + type: object + title: EventProperties + description: Describes the properties of an event. + properties: + id: + type: string + title: EventId + description: The event's unique identifier. + source: + title: EventSource + description: Identifies the context in which an event happened. + oneOf: + - $ref: '#/$defs/uriTemplate' + - $ref: '#/$defs/runtimeExpression' + type: + type: string + title: EventType + description: This attribute contains a value describing the type of event related to the originating occurrence. + time: + title: EventTime + description: When the event occured. + oneOf: + - title: LiteralTime + type: string + format: date-time + - $ref: '#/$defs/runtimeExpression' + subject: + type: string + title: EventSubject + description: The subject of the event. + datacontenttype: + type: string + title: EventDataContentType + description: Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format. + dataschema: + title: EventDataschema + description: The schema describing the event format. + oneOf: + - title: LiteralDataSchema + $ref: '#/$defs/uriTemplate' + description: The literal event data schema. + - title: ExpressionDataSchema + $ref: '#/$defs/runtimeExpression' + description: An expression based event data schema. + data: + title: EventData + description: The event's payload data + anyOf: + - $ref: '#/$defs/runtimeExpression' + - {} + additionalProperties: true + eventConsumptionStrategy: + type: object + title: EventConsumptionStrategy + description: Describe the event consumption strategy to adopt. + unevaluatedProperties: false + oneOf: + - title: AllEventConsumptionStrategy + properties: + all: + type: array + title: AllEventConsumptionStrategyConfiguration + description: A list containing all the events that must be consumed. + items: + $ref: '#/$defs/eventFilter' + required: [ all ] + - title: AnyEventConsumptionStrategy + properties: + any: + type: array + title: AnyEventConsumptionStrategyConfiguration + description: A list containing any of the events to consume. + items: + $ref: '#/$defs/eventFilter' + until: + oneOf: + - type: string + title: AnyEventUntilCondition + description: A runtime expression condition evaluated after consuming an event and which determines whether or not to continue listening. + - allOf: + - $ref: '#/$defs/eventConsumptionStrategy' + description: The strategy that defines the event(s) to consume to stop listening. + - properties: + until: false + title: AnyEventUntilConsumed + required: [ any ] + - title: OneEventConsumptionStrategy + properties: + one: + $ref: '#/$defs/eventFilter' + title: OneEventConsumptionStrategyConfiguration + description: The single event to consume. + required: [ one ] + eventFilter: + type: object + title: EventFilter + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + unevaluatedProperties: false + properties: + with: + $ref: '#/$defs/eventProperties' + minProperties: 1 + title: WithEvent + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + correlate: + type: object + title: EventFilterCorrelate + description: A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics. + additionalProperties: + type: object + properties: + from: + type: string + title: CorrelateFrom + description: A runtime expression used to extract the correlation value from the filtered event. + expect: + type: string + title: CorrelateExpect + description: A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation. + required: [ from ] + required: [ with ] + extension: + type: object + title: Extension + description: The definition of an extension. + unevaluatedProperties: false + properties: + extend: + type: string + enum: [ call, composite, emit, for, listen, raise, run, set, switch, try, wait, all ] + title: ExtensionTarget + description: The type of task to extend. + when: + type: string + title: ExtensionCondition + description: A runtime expression, if any, used to determine whether or not the extension should apply in the specified context. + before: + $ref: '#/$defs/taskList' + title: ExtensionDoBefore + description: The task(s) to execute before the extended task, if any. + after: + $ref: '#/$defs/taskList' + title: ExtensionDoAfter + description: The task(s) to execute after the extended task, if any. + required: [ extend ] + externalResource: + type: object + title: ExternalResource + description: Represents an external resource. + unevaluatedProperties: false + properties: + name: + type: string + title: ExternalResourceName + description: The name of the external resource, if any. + endpoint: + $ref: '#/$defs/endpoint' + title: ExternalResourceEndpoint + description: The endpoint of the external resource. + required: [ endpoint ] + input: + type: object + title: Input + description: Configures the input of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: InputSchema + description: The schema used to describe and validate the input of the workflow or task. + from: + title: InputFrom + description: A runtime expression, if any, used to mutate and/or filter the input of the workflow or task. + oneOf: + - type: string + - type: object + output: + type: object + title: Output + description: Configures the output of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: OutputSchema + description: The schema used to describe and validate the output of the workflow or task. + as: + title: OutputAs + description: A runtime expression, if any, used to mutate and/or filter the output of the workflow or task. + oneOf: + - type: string + - type: object + export: + type: object + title: Export + description: Set the content of the context. . + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: ExportSchema + description: The schema used to describe and validate the workflow context. + as: + title: ExportAs + description: A runtime expression, if any, used to export the output data to the context. + oneOf: + - type: string + - type: object + retryPolicy: + type: object + title: RetryPolicy + description: Defines a retry policy. + unevaluatedProperties: false + properties: + when: + type: string + title: RetryWhen + description: A runtime expression, if any, used to determine whether or not to retry running the task, in a given context. + exceptWhen: + type: string + title: RetryExcepWhen + description: A runtime expression used to determine whether or not to retry running the task, in a given context. + delay: + $ref: '#/$defs/duration' + title: RetryDelay + description: The duration to wait between retry attempts. + backoff: + type: object + title: RetryBackoff + description: The retry duration backoff. + unevaluatedProperties: false + oneOf: + - title: ConstantBackoff + properties: + constant: + type: object + description: The definition of the constant backoff to use, if any. + required: [ constant ] + - title: ExponentialBackOff + properties: + exponential: + type: object + description: The definition of the exponential backoff to use, if any. + required: [ exponential ] + - title: LinearBackoff + properties: + linear: + type: object + description: The definition of the linear backoff to use, if any. + required: [ linear ] + limit: + type: object + title: RetryLimit + unevaluatedProperties: false + properties: + attempt: + type: object + title: RetryLimitAttempt + unevaluatedProperties: false + properties: + count: + type: integer + title: RetryLimitAttemptCount + description: The maximum amount of retry attempts, if any. + duration: + $ref: '#/$defs/duration' + title: RetryLimitAttemptDuration + description: The maximum duration for each retry attempt. + duration: + $ref: '#/$defs/duration' + title: RetryLimitDuration + description: The duration limit, if any, for all retry attempts. + description: The retry limit, if any. + jitter: + type: object + title: RetryPolicyJitter + description: The parameters, if any, that control the randomness or variability of the delay between retry attempts. + unevaluatedProperties: false + properties: + from: + $ref: '#/$defs/duration' + title: RetryPolicyJitterFrom + description: The minimum duration of the jitter range. + to: + $ref: '#/$defs/duration' + title: RetryPolicyJitterTo + description: The maximum duration of the jitter range. + required: [ from, to ] + schema: + type: object + title: Schema + description: Represents the definition of a schema. + unevaluatedProperties: false + properties: + format: + type: string + default: json + title: SchemaFormat + description: The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`. + oneOf: + - title: SchemaInline + properties: + document: + description: The schema's inline definition. + required: [ document ] + - title: SchemaExternal + properties: + resource: + $ref: '#/$defs/externalResource' + title: SchemaExternalResource + description: The schema's external resource. + required: [ resource ] + timeout: + type: object + title: Timeout + description: The definition of a timeout. + unevaluatedProperties: false + properties: + after: + $ref: '#/$defs/duration' + title: TimeoutAfter + description: The duration after which to timeout. + required: [ after ] + catalog: + type: object + title: Catalog + description: The definition of a resource catalog. + unevaluatedProperties: false + properties: + endpoint: + $ref: '#/$defs/endpoint' + title: CatalogEndpoint + description: The root URL where the catalog is hosted. + required: [ endpoint ] + runtimeExpression: + type: string + title: RuntimeExpression + description: A runtime expression. + pattern: "^\\s*\\$\\{.+\\}\\s*$" + containerLifetime: + type: object + title: ContainerLifetime + description: The configuration of a container's lifetime + unevaluatedProperties: false + properties: + cleanup: + type: string + title: ContainerCleanupPolicy + description: The container cleanup policy to use + enum: [ always, never, eventually ] + default: never + after: + $ref: '#/$defs/duration' + title: ContainerLifetimeDuration + description: The duration after which to cleanup the container, in case the cleanup policy has been set to 'eventually' + required: [ cleanup ] + if: + properties: + cleanup: + const: eventually + then: + required: [ after ] + else: + not: + required: [ after ] + processResult: + type: object + title: ProcessResult + description: The object returned by a run task when its return type has been set 'all'. + unevaluatedProperties: false + properties: + code: + type: integer + title: ProcessExitCode + description: The process's exit code. + stdout: + type: string + title: ProcessStandardOutput + description: The content of the process's STDOUT. + stderr: + type: string + title: ProcessStandardError + description: The content of the process's STDERR. + required: [ code, stdout, stderr ] + asyncApiServer: + type: object + title: AsyncApiServer + description: Configures the target server of an AsyncAPI operation. + unevaluatedProperties: false + properties: + name: + type: string + title: AsyncApiServerName + description: The target server's name. + variables: + type: object + title: AsyncApiServerVariables + description: The target server's variables, if any. + required: [ name ] + asyncApiOutboundMessage: + type: object + title: AsyncApiOutboundMessage + description: An object used to configure the message to publish using the target operation. + unevaluatedProperties: false + properties: + payload: + type: object + title: AsyncApiMessagePayload + description: The message's payload, if any. + headers: + type: object + title: AsyncApiMessageHeaders + description: The message's headers, if any. + asyncApiInboundMessage: + title: AsyncApiInboundMessage + description: Represents a message counsumed by an AsyncAPI subscription. + allOf: + - $ref: '#/$defs/asyncApiOutboundMessage' + - properties: + correlationId: + type: string + title: AsyncApiMessageCorrelationId + description: The message's correlation id, if any. + asyncApiSubscription: + type: object + title: AsyncApiSubscription + description: An object used to configure the subscription to messages consumed using the target operation. + unevaluatedProperties: false + properties: + filter: + $ref: '#/$defs/runtimeExpression' + title: AsyncApiSubscriptionCorrelation + description: A runtime expression, if any, used to filter consumed messages. + consume: + $ref: '#/$defs/asyncApiMessageConsumptionPolicy' + title: AsyncApiMessageConsumptionPolicy + description: An object used to configure the subscription's message consumption policy. + foreach: + $ref: '#/$defs/subscriptionIterator' + title: AsyncApiSubscriptionIterator + description: Configures the iterator, if any, for processing consumed messages(s). + required: [ consume ] + asyncApiMessageConsumptionPolicy: + type: object + title: AsyncApiMessageConsumptionPolicy + description: An object used to configure a subscription's message consumption policy. + unevaluatedProperties: false + properties: + for: + $ref: '#/$defs/duration' + title: AsyncApiMessageConsumptionPolicyFor + description: Specifies the time period over which messages will be consumed. + oneOf: + - properties: + amount: + type: integer + description: The amount of (filtered) messages to consume before disposing of the subscription. + title: AsyncApiMessageConsumptionPolicyAmount + required: [ amount ] + - properties: + while: + $ref: '#/$defs/runtimeExpression' + description: A runtime expression evaluated after each consumed (filtered) message to decide if message consumption should continue. + title: AsyncApiMessageConsumptionPolicyWhile + required: [ while ] + - properties: + until: + $ref: '#/$defs/runtimeExpression' + description: A runtime expression evaluated before each consumed (filtered) message to decide if message consumption should continue. + title: AsyncApiMessageConsumptionPolicyUntil + required: [ until ] + subscriptionIterator: + type: object + title: SubscriptionIterator + description: Configures the iteration over each item (event or message) consumed by a subscription. + unevaluatedProperties: false + properties: + item: + type: string + title: SubscriptionIteratorItem + description: The name of the variable used to store the current item being enumerated. + default: item + at: + type: string + title: SubscriptionIteratorIndex + description: The name of the variable used to store the index of the current item being enumerated. + default: index + do: + $ref: '#/$defs/taskList' + title: SubscriptionIteratorTasks + description: The tasks to perform for each consumed item. + output: + $ref: '#/$defs/output' + title: SubscriptionIteratorOutput + description: An object, if any, used to customize the item's output and to document its schema. + export: + $ref: '#/$defs/export' + title: SubscriptionIteratorExport + description: An object, if any, used to customize the content of the workflow context. \ No newline at end of file diff --git a/public/schemas/1.0.3/workflow.json b/public/schemas/1.0.3/workflow.json new file mode 100644 index 0000000..63f23a1 --- /dev/null +++ b/public/schemas/1.0.3/workflow.json @@ -0,0 +1,3119 @@ +{ + "$id": "https://open-workflow-specification.org/schemas/1.0.3/workflow.yaml", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Open Workflow Specification DSL - Workflow Schema.", + "type": "object", + "required": [ + "document", + "do" + ], + "properties": { + "document": { + "type": "object", + "title": "Document", + "description": "Documents the workflow.", + "unevaluatedProperties": false, + "properties": { + "dsl": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowDSL", + "description": "The version of the DSL used by the workflow." + }, + "namespace": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowNamespace", + "description": "The workflow's namespace." + }, + "name": { + "type": "string", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$", + "title": "WorkflowName", + "description": "The workflow's name." + }, + "version": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "title": "WorkflowVersion", + "description": "The workflow's semantic version." + }, + "title": { + "type": "string", + "title": "WorkflowTitle", + "description": "The workflow's title." + }, + "summary": { + "type": "string", + "title": "WorkflowSummary", + "description": "The workflow's Markdown summary." + }, + "tags": { + "type": "object", + "title": "WorkflowTags", + "description": "A key/value mapping of the workflow's tags, if any.", + "additionalProperties": true + }, + "metadata": { + "type": "object", + "title": "WorkflowMetadata", + "description": "Holds additional information about the workflow.", + "additionalProperties": true + } + }, + "required": [ + "dsl", + "namespace", + "name", + "version" + ] + }, + "input": { + "$ref": "#/$defs/input", + "title": "Input", + "description": "Configures the workflow's input." + }, + "use": { + "type": "object", + "title": "Use", + "description": "Defines the workflow's reusable components.", + "unevaluatedProperties": false, + "properties": { + "authentications": { + "type": "object", + "title": "UseAuthentications", + "description": "The workflow's reusable authentication policies.", + "additionalProperties": { + "$ref": "#/$defs/authenticationPolicy" + } + }, + "errors": { + "type": "object", + "title": "UseErrors", + "description": "The workflow's reusable errors.", + "additionalProperties": { + "$ref": "#/$defs/error" + } + }, + "extensions": { + "type": "array", + "title": "UseExtensions", + "description": "The workflow's extensions.", + "items": { + "type": "object", + "title": "ExtensionItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/extension" + } + } + }, + "functions": { + "type": "object", + "title": "UseFunctions", + "description": "The workflow's reusable functions.", + "additionalProperties": { + "$ref": "#/$defs/task" + } + }, + "retries": { + "type": "object", + "title": "UseRetries", + "description": "The workflow's reusable retry policies.", + "additionalProperties": { + "$ref": "#/$defs/retryPolicy" + } + }, + "secrets": { + "type": "array", + "title": "UseSecrets", + "description": "The workflow's reusable secrets.", + "items": { + "type": "string", + "description": "The workflow's secrets." + } + }, + "timeouts": { + "type": "object", + "title": "UseTimeouts", + "description": "The workflow's reusable timeouts.", + "additionalProperties": { + "$ref": "#/$defs/timeout" + } + }, + "catalogs": { + "type": "object", + "title": "UseCatalogs", + "description": "The workflow's reusable catalogs.", + "additionalProperties": { + "$ref": "#/$defs/catalog" + } + } + } + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "Do", + "description": "Defines the task(s) the workflow must perform." + }, + "timeout": { + "title": "DoTimeout", + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TimeoutDefinition", + "description": "The workflow's timeout configuration, if any." + }, + { + "type": "string", + "title": "TimeoutReference", + "description": "The name of the workflow's timeout, if any." + } + ] + }, + "output": { + "$ref": "#/$defs/output", + "title": "Output", + "description": "Configures the workflow's output." + }, + "schedule": { + "type": "object", + "title": "Schedule", + "description": "Schedules the workflow.", + "unevaluatedProperties": false, + "properties": { + "every": { + "$ref": "#/$defs/duration", + "title": "ScheduleEvery", + "description": "Specifies the duration of the interval at which the workflow should be executed." + }, + "cron": { + "type": "string", + "title": "ScheduleCron", + "description": "Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight." + }, + "after": { + "$ref": "#/$defs/duration", + "title": "ScheduleAfter", + "description": "Specifies a delay duration that the workflow must wait before starting again after it completes." + }, + "on": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ScheduleOn", + "description": "Specifies the events that trigger the workflow execution." + } + } + } + }, + "$defs": { + "taskList": { + "title": "TaskList", + "description": "List of named tasks to perform.", + "type": "array", + "items": { + "type": "object", + "title": "TaskItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/task" + } + } + }, + "taskBase": { + "type": "object", + "title": "TaskBase", + "description": "An object inherited by all tasks.", + "properties": { + "if": { + "type": "string", + "title": "TaskBaseIf", + "description": "A runtime expression, if any, used to determine whether or not the task should be run." + }, + "input": { + "$ref": "#/$defs/input", + "title": "TaskBaseInput", + "description": "Configure the task's input." + }, + "output": { + "$ref": "#/$defs/output", + "title": "TaskBaseOutput", + "description": "Configure the task's output." + }, + "export": { + "$ref": "#/$defs/export", + "title": "TaskBaseExport", + "description": "Export task output to context." + }, + "timeout": { + "title": "TaskTimeout", + "oneOf": [ + { + "$ref": "#/$defs/timeout", + "title": "TaskTimeoutDefinition", + "description": "The task's timeout configuration, if any." + }, + { + "type": "string", + "title": "TaskTimeoutReference", + "description": "The name of the task's timeout, if any." + } + ] + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "TaskBaseThen", + "description": "The flow directive to be performed upon completion of the task." + }, + "metadata": { + "type": "object", + "title": "TaskMetadata", + "description": "Holds additional information about the task.", + "additionalProperties": true + } + } + }, + "task": { + "title": "Task", + "description": "A discrete unit of work that contributes to achieving the overall objectives defined by the workflow.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/callTask" + }, + { + "$ref": "#/$defs/doTask" + }, + { + "$ref": "#/$defs/forkTask" + }, + { + "$ref": "#/$defs/emitTask" + }, + { + "$ref": "#/$defs/forTask" + }, + { + "$ref": "#/$defs/listenTask" + }, + { + "$ref": "#/$defs/raiseTask" + }, + { + "$ref": "#/$defs/runTask" + }, + { + "$ref": "#/$defs/setTask" + }, + { + "$ref": "#/$defs/switchTask" + }, + { + "$ref": "#/$defs/tryTask" + }, + { + "$ref": "#/$defs/waitTask" + } + ] + }, + "callTask": { + "title": "CallTask", + "description": "Defines the call to perform.", + "oneOf": [ + { + "title": "CallAsyncAPI", + "description": "Defines the AsyncAPI call to perform.", + "type": "object", + "required": [ + "call", + "with" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "asyncapi" + }, + "with": { + "type": "object", + "title": "AsyncApiArguments", + "description": "The Async API call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "AsyncAPIDocument", + "description": "The document that defines the AsyncAPI operation to call." + }, + "channel": { + "type": "string", + "title": "With", + "description": "The name of the channel on which to perform the operation. Used only in case the referenced document uses AsyncAPI v2.6.0." + }, + "operation": { + "type": "string", + "title": "AsyncAPIOperation", + "description": "A reference to the AsyncAPI operation to call." + }, + "server": { + "$ref": "#/$defs/asyncApiServer", + "title": "AsyncAPIServer", + "description": "An object used to configure to the server to call the specified AsyncAPI operation on." + }, + "protocol": { + "type": "string", + "title": "AsyncApiProtocol", + "description": "The protocol to use to select the target server.", + "enum": [ + "amqp", + "amqp1", + "anypointmq", + "googlepubsub", + "http", + "ibmmq", + "jms", + "kafka", + "mercure", + "mqtt", + "mqtt5", + "nats", + "pulsar", + "redis", + "sns", + "solace", + "sqs", + "stomp", + "ws" + ] + }, + "message": { + "$ref": "#/$defs/asyncApiOutboundMessage", + "title": "AsyncApiMessage", + "description": "An object used to configure the message to publish using the target operation." + }, + "subscription": { + "$ref": "#/$defs/asyncApiSubscription", + "title": "AsyncApiSubscription", + "description": "An object used to configure the subscription to messages consumed using the target operation." + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "AsyncAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the AsyncAPI operation." + } + }, + "oneOf": [ + { + "required": [ + "document", + "operation", + "message" + ] + }, + { + "required": [ + "document", + "operation", + "subscription" + ] + }, + { + "required": [ + "document", + "channel", + "message" + ] + }, + { + "required": [ + "document", + "channel", + "subscription" + ] + } + ], + "unevaluatedProperties": false + } + } + } + ] + }, + { + "title": "CallGRPC", + "description": "Defines the GRPC call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "grpc" + }, + "with": { + "type": "object", + "title": "GRPCArguments", + "description": "The GRPC call arguments.", + "properties": { + "proto": { + "$ref": "#/$defs/externalResource", + "title": "WithGRPCProto", + "description": "The proto resource that describes the GRPC service to call." + }, + "service": { + "type": "object", + "title": "WithGRPCService", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "WithGRPCServiceName", + "description": "The name of the GRPC service to call." + }, + "host": { + "type": "string", + "title": "WithGRPCServiceHost", + "description": "The hostname of the GRPC service to call.", + "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-.]{0,61}[a-zA-Z0-9])?$" + }, + "port": { + "type": "integer", + "title": "WithGRPCServicePort", + "description": "The port number of the GRPC service to call.", + "minimum": 0, + "maximum": 65535 + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithGRPCServiceAuthentication", + "description": "The endpoint's authentication policy, if any." + } + }, + "required": [ + "name", + "host" + ] + }, + "method": { + "type": "string", + "title": "WithGRPCMethod", + "description": "The name of the method to call on the defined GRPC service." + }, + "arguments": { + "type": "object", + "title": "WithGRPCArguments", + "description": "The arguments, if any, to call the method with.", + "additionalProperties": true + } + }, + "required": [ + "proto", + "service", + "method" + ], + "unevaluatedProperties": false + } + } + } + ] + }, + { + "title": "CallHTTP", + "description": "Defines the HTTP call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "http" + }, + "with": { + "type": "object", + "title": "HTTPArguments", + "description": "The HTTP call arguments.", + "properties": { + "method": { + "type": "string", + "title": "HTTPMethod", + "description": "The HTTP method of the HTTP request to perform." + }, + "endpoint": { + "title": "HTTPEndpoint", + "description": "The HTTP endpoint to send the request to.", + "$ref": "#/$defs/endpoint" + }, + "headers": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ], + "title": "HTTPHeaders", + "description": "A name/value mapping of the headers, if any, of the HTTP request to perform." + }, + "body": { + "title": "HTTPBody", + "description": "The body, if any, of the HTTP request to perform." + }, + "query": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ], + "title": "HTTPQuery", + "description": "A name/value mapping of the query parameters, if any, of the HTTP request to perform.", + "additionalProperties": true + }, + "output": { + "type": "string", + "title": "HTTPOutput", + "description": "The http call output format. Defaults to 'content'.", + "enum": [ + "raw", + "content", + "response" + ] + }, + "redirect": { + "type": "boolean", + "title": "HttpRedirect", + "description": "Specifies whether redirection status codes (`300–399`) should be treated as errors." + } + }, + "required": [ + "method", + "endpoint" + ], + "unevaluatedProperties": false + } + } + } + ] + }, + { + "title": "CallOpenAPI", + "description": "Defines the OpenAPI call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "openapi" + }, + "with": { + "type": "object", + "title": "OpenAPIArguments", + "description": "The OpenAPI call arguments.", + "properties": { + "document": { + "$ref": "#/$defs/externalResource", + "title": "WithOpenAPIDocument", + "description": "The document that defines the OpenAPI operation to call." + }, + "operationId": { + "type": "string", + "title": "WithOpenAPIOperation", + "description": "The id of the OpenAPI operation to call." + }, + "parameters": { + "type": "object", + "title": "WithOpenAPIParameters", + "description": "A name/value mapping of the parameters of the OpenAPI operation to call.", + "additionalProperties": true + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "WithOpenAPIAuthentication", + "description": "The authentication policy, if any, to use when calling the OpenAPI operation." + }, + "output": { + "type": "string", + "enum": [ + "raw", + "content", + "response" + ], + "title": "WithOpenAPIOutput", + "description": "The http call output format. Defaults to 'content'." + }, + "redirect": { + "type": "boolean", + "title": "HttpRedirect", + "description": "Specifies whether redirection status codes (`300–399`) should be treated as errors." + } + }, + "required": [ + "document", + "operationId" + ], + "unevaluatedProperties": false + } + } + } + ] + }, + { + "title": "CallA2A", + "description": "Defines the A2A call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "a2a" + }, + "with": { + "type": "object", + "title": "A2AArguments", + "description": "The A2A call arguments.", + "properties": { + "agentCard": { + "$ref": "#/$defs/externalResource", + "title": "WithA2AAgentCard", + "description": "The Agent Card that defines the agent to call." + }, + "server": { + "title": "A2AServer", + "description": "The server endpoint to send the request to.", + "$ref": "#/$defs/endpoint" + }, + "method": { + "type": "string", + "title": "WithA2AMethod", + "description": "The A2A method to send.", + "enum": [ + "message/send", + "message/stream", + "tasks/get", + "tasks/list", + "tasks/cancel", + "tasks/resubscribe", + "tasks/pushNotificationConfig/set", + "tasks/pushNotificationConfig/get", + "tasks/pushNotificationConfig/list", + "tasks/pushNotificationConfig/delete", + "agent/getAuthenticatedExtendedCard" + ] + }, + "parameters": { + "oneOf": [ + { + "type": "object", + "minProperties": 1, + "additionalProperties": true + }, + { + "type": "string" + } + ], + "title": "WithA2AParameters", + "description": "The parameters object to send with the A2A method." + } + }, + "required": [ + "method" + ], + "unevaluatedProperties": false + } + } + } + ] + }, + { + "title": "CallMCP", + "description": "Defines the MCP call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call", + "with" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "const": "mcp" + }, + "with": { + "type": "object", + "title": "MCPArguments", + "description": "The MCP call arguments.", + "properties": { + "protocolVersion": { + "type": "string", + "default": "2025-06-18", + "title": "McpProtocolVersion", + "description": "The version of the MCP protocol to use." + }, + "method": { + "type": "string", + "enum": [ + "tools/list", + "tools/call", + "prompts/list", + "prompts/get", + "resources/list", + "resources/read", + "resources/templates/list" + ], + "title": "McpMethod", + "description": "The MCP method to call." + }, + "parameters": { + "oneOf": [ + { + "type": "object", + "additionalProperties": true + }, + { + "type": "string" + } + ], + "title": "McpMethodParameters", + "description": "The MCP method parameters." + }, + "timeout": { + "$ref": "#/$defs/duration", + "title": "McpCallTimeout", + "description": "The duration after which the MCP call times out." + }, + "transport": { + "type": "object", + "title": "McpCallTransport", + "description": "The transport to use to perform the MCP call.", + "properties": { + "http": { + "type": "object", + "title": "McpHttpTransport", + "description": "The definition of the HTTP transport to use.", + "properties": { + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "McpHttpTransportEndpoint", + "description": "The MCP server endpoint to connect to." + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "McpHttpTransportHeaders", + "description": "A key/value mapping of the HTTP headers to send with requests, if any." + } + }, + "required": [ + "endpoint" + ] + }, + "stdio": { + "type": "object", + "title": "McpStdioTransport", + "description": "The definition of the STDIO transport to use.", + "properties": { + "command": { + "type": "string", + "title": "McpStdioTransportCommand", + "description": "The command used to run the MCP server." + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "title": "McpStdioTransportArguments", + "description": "An optional list of arguments to pass to the command." + }, + "environment": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "McpStdioTransportEnvironment", + "description": "A key/value mapping, if any, of environment variables used to configure the MCP server." + } + }, + "required": [ + "command" + ] + }, + "options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "oneOf": [ + { + "required": [ + "http" + ] + }, + { + "required": [ + "stdio" + ] + } + ] + }, + "client": { + "type": "object", + "title": "McpClient", + "description": "Describes the client used to perform the MCP call.", + "properties": { + "name": { + "type": "string", + "title": "McpClientName", + "description": "The name of the client used to connect to the MCP server." + }, + "description": { + "type": "string", + "title": "McpClientVersion", + "description": "The version of the client used to connect to the MCP server." + } + }, + "required": [ + "name", + "version" + ] + } + }, + "required": [ + "method", + "transport" + ] + } + } + } + ] + }, + { + "title": "CallFunction", + "description": "Defines the function call to perform.", + "type": "object", + "unevaluatedProperties": false, + "required": [ + "call" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "call": { + "type": "string", + "not": { + "enum": [ + "asyncapi", + "grpc", + "http", + "openapi", + "a2a", + "mcp" + ] + }, + "description": "The name of the function to call." + }, + "with": { + "type": "object", + "title": "FunctionArguments", + "description": "A name/value mapping of the parameters, if any, to call the function with.", + "additionalProperties": true + } + } + } + ] + } + ] + }, + "forkTask": { + "type": "object", + "title": "ForkTask", + "description": "Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output.", + "unevaluatedProperties": false, + "required": [ + "fork" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "fork": { + "type": "object", + "title": "ForkTaskConfiguration", + "description": "The configuration of the branches to perform concurrently.", + "unevaluatedProperties": false, + "required": [ + "branches" + ], + "properties": { + "branches": { + "$ref": "#/$defs/taskList", + "title": "ForkBranches" + }, + "compete": { + "type": "boolean", + "title": "ForkCompete", + "description": "Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output.", + "default": false + } + } + } + } + } + ] + }, + "doTask": { + "type": "object", + "title": "DoTask", + "description": "Allows to execute a list of tasks in sequence.", + "unevaluatedProperties": false, + "required": [ + "do" + ], + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "do": { + "$ref": "#/$defs/taskList", + "title": "DoTaskConfiguration", + "description": "The configuration of the tasks to perform sequentially." + } + } + } + ] + }, + "emitTask": { + "type": "object", + "title": "EmitTask", + "description": "Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services.", + "required": [ + "emit" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "emit": { + "type": "object", + "title": "EmitTaskConfiguration", + "description": "The configuration of an event's emission.", + "unevaluatedProperties": false, + "properties": { + "event": { + "type": "object", + "title": "EmitEventDefinition", + "description": "The definition of the event to emit.", + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "title": "EmitEventWith", + "description": "Defines the properties of event to emit.", + "required": [ + "source", + "type" + ] + } + }, + "additionalProperties": true + } + }, + "required": [ + "event" + ] + } + } + } + ] + }, + "forTask": { + "type": "object", + "title": "ForTask", + "description": "Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.", + "required": [ + "for", + "do" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "for": { + "type": "object", + "title": "ForTaskConfiguration", + "description": "The definition of the loop that iterates over a range of values.", + "unevaluatedProperties": false, + "properties": { + "each": { + "type": "string", + "title": "ForEach", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "in": { + "type": "string", + "title": "ForIn", + "description": "A runtime expression used to get the collection to enumerate." + }, + "at": { + "type": "string", + "title": "ForAt", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + } + }, + "required": [ + "in" + ] + }, + "while": { + "type": "string", + "title": "While", + "description": "A runtime expression that represents the condition, if any, that must be met for the iteration to continue." + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "ForTaskDo" + } + } + } + ] + }, + "listenTask": { + "type": "object", + "title": "ListenTask", + "description": "Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.", + "required": [ + "listen" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "listen": { + "type": "object", + "title": "ListenTaskConfiguration", + "description": "The configuration of the listener to use.", + "unevaluatedProperties": false, + "properties": { + "to": { + "$ref": "#/$defs/eventConsumptionStrategy", + "title": "ListenTo", + "description": "Defines the event(s) to listen to." + }, + "read": { + "type": "string", + "enum": [ + "data", + "envelope", + "raw" + ], + "default": "data", + "title": "ListenAndReadAs", + "description": "Specifies how events are read during the listen operation." + } + }, + "required": [ + "to" + ] + }, + "foreach": { + "$ref": "#/$defs/subscriptionIterator", + "title": "ListenIterator", + "description": "Configures the iterator, if any, for processing consumed event(s)." + } + } + } + ] + }, + "raiseTask": { + "type": "object", + "title": "RaiseTask", + "description": "Intentionally triggers and propagates errors.", + "required": [ + "raise" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "raise": { + "type": "object", + "title": "RaiseTaskConfiguration", + "description": "The definition of the error to raise.", + "unevaluatedProperties": false, + "properties": { + "error": { + "title": "RaiseTaskError", + "oneOf": [ + { + "$ref": "#/$defs/error", + "title": "RaiseErrorDefinition", + "description": "Defines the error to raise." + }, + { + "type": "string", + "title": "RaiseErrorReference", + "description": "The name of the error to raise" + } + ] + } + }, + "required": [ + "error" + ] + } + } + } + ] + }, + "runTask": { + "type": "object", + "title": "RunTask", + "description": "Provides the capability to execute external containers, shell commands, scripts, or workflows.", + "required": [ + "run" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "run": { + "type": "object", + "title": "RunTaskConfiguration", + "description": "The configuration of the process to execute.", + "unevaluatedProperties": false, + "properties": { + "await": { + "type": "boolean", + "default": true, + "title": "AwaitProcessCompletion", + "description": "Whether to await the process completion before continuing." + }, + "return": { + "type": "string", + "title": "ProcessReturnType", + "description": "Configures the output of the process.", + "enum": [ + "stdout", + "stderr", + "code", + "all", + "none" + ], + "default": "stdout" + } + }, + "oneOf": [ + { + "title": "RunContainer", + "description": "Enables the execution of external processes encapsulated within a containerized environment.", + "properties": { + "container": { + "type": "object", + "title": "Container", + "description": "The configuration of the container to run.", + "unevaluatedProperties": false, + "properties": { + "image": { + "type": "string", + "title": "ContainerImage", + "description": "The name of the container image to run." + }, + "name": { + "type": "string", + "title": "ContainerName", + "description": "A runtime expression, if any, used to give specific name to the container." + }, + "command": { + "type": "string", + "title": "ContainerCommand", + "description": "The command, if any, to execute on the container." + }, + "ports": { + "type": "object", + "title": "ContainerPorts", + "description": "The container's port mappings, if any." + }, + "volumes": { + "type": "object", + "title": "ContainerVolumes", + "description": "The container's volume mappings, if any." + }, + "environment": { + "type": "object", + "title": "ContainerEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process." + }, + "stdin": { + "type": "string", + "title": "ContainerStdin", + "description": "A runtime expression, if any, passed as standard input (stdin) to the command or default container CMD" + }, + "arguments": { + "type": "array", + "title": "ContainerArguments", + "description": "A list of the arguments, if any, passed as argv to the command or default container CMD", + "items": { + "type": "string" + } + }, + "lifetime": { + "$ref": "#/$defs/containerLifetime", + "title": "ContainerLifetime", + "description": "An object, if any, used to configure the container's lifetime" + }, + "pullPolicy": { + "type": "string", + "title": "ContainerPullPolicy", + "description": "Policy that controls how the container's image should be pulled from the registry. Defaults to `ifNotPresent`", + "enum": [ + "ifNotPresent", + "always", + "never" + ] + } + }, + "required": [ + "image" + ] + } + }, + "required": [ + "container" + ] + }, + { + "title": "RunScript", + "description": "Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages.", + "properties": { + "script": { + "type": "object", + "title": "Script", + "description": "The configuration of the script to run.", + "unevaluatedProperties": false, + "properties": { + "language": { + "type": "string", + "title": "ScriptLanguage", + "description": "The language of the script to run." + }, + "stdin": { + "type": "string", + "title": "ScriptStdin", + "description": "A runtime expression, if any, to the script as standard input (stdin)." + }, + "arguments": { + "type": "array", + "title": "ScriptArguments", + "description": "A list of the arguments, if any, to the script as argv", + "items": { + "type": "string" + } + }, + "environment": { + "type": "object", + "title": "ScriptEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured script process.", + "additionalProperties": true + } + }, + "oneOf": [ + { + "title": "InlineScript", + "type": "object", + "description": "The script's code.", + "properties": { + "code": { + "type": "string", + "title": "InlineScriptCode" + } + }, + "required": [ + "code" + ] + }, + { + "title": "ExternalScript", + "type": "object", + "description": "The script's resource.", + "properties": { + "source": { + "$ref": "#/$defs/externalResource", + "title": "ExternalScriptResource" + } + }, + "required": [ + "source" + ] + } + ], + "required": [ + "language" + ] + } + }, + "required": [ + "script" + ] + }, + { + "title": "RunShell", + "description": "Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks.", + "properties": { + "shell": { + "type": "object", + "title": "Shell", + "description": "The configuration of the shell command to run.", + "unevaluatedProperties": false, + "properties": { + "command": { + "type": "string", + "title": "ShellCommand", + "description": "The shell command to run." + }, + "stdin": { + "type": "string", + "title": "ShellStdin", + "description": "A runtime expression, if any, to the shell command as standard input (stdin)." + }, + "arguments": { + "type": "array", + "title": "ShellArguments", + "description": "A list of the arguments, if any, to the shell command as argv", + "items": { + "type": "string" + } + }, + "environment": { + "type": "object", + "title": "ShellEnvironment", + "description": "A key/value mapping of the environment variables, if any, to use when running the configured process.", + "additionalProperties": true + } + }, + "required": [ + "command" + ] + } + }, + "required": [ + "shell" + ] + }, + { + "title": "RunWorkflow", + "description": "Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units.", + "properties": { + "workflow": { + "type": "object", + "title": "SubflowConfiguration", + "description": "The configuration of the workflow to run.", + "unevaluatedProperties": false, + "properties": { + "namespace": { + "type": "string", + "title": "SubflowNamespace", + "description": "The namespace the workflow to run belongs to." + }, + "name": { + "type": "string", + "title": "SubflowName", + "description": "The name of the workflow to run." + }, + "version": { + "type": "string", + "default": "latest", + "title": "SubflowVersion", + "description": "The version of the workflow to run. Defaults to latest." + }, + "input": { + "type": "object", + "title": "SubflowInput", + "description": "The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified.", + "additionalProperties": true + } + }, + "required": [ + "namespace", + "name", + "version" + ] + } + }, + "required": [ + "workflow" + ] + } + ] + } + } + } + ] + }, + "setTask": { + "type": "object", + "title": "SetTask", + "description": "A task used to set data.", + "required": [ + "set" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "set": { + "oneOf": [ + { + "type": "object", + "minProperties": 1, + "additionalProperties": true + }, + { + "type": "string" + } + ], + "title": "SetTaskConfiguration", + "description": "The data to set." + } + } + } + ] + }, + "switchTask": { + "type": "object", + "title": "SwitchTask", + "description": "Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria.", + "required": [ + "switch" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "switch": { + "type": "array", + "title": "SwitchTaskConfiguration", + "description": "The definition of the switch to use.", + "minItems": 1, + "items": { + "type": "object", + "title": "SwitchItem", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "type": "object", + "title": "SwitchCase", + "description": "The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met.", + "unevaluatedProperties": false, + "required": [ + "then" + ], + "properties": { + "when": { + "type": "string", + "title": "SwitchCaseCondition", + "description": "A runtime expression used to determine whether or not the case matches." + }, + "then": { + "$ref": "#/$defs/flowDirective", + "title": "SwitchCaseOutcome", + "description": "The flow directive to execute when the case matches." + } + } + } + } + } + } + } + ] + }, + "tryTask": { + "type": "object", + "title": "TryTask", + "description": "Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones.", + "required": [ + "try", + "catch" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "try": { + "$ref": "#/$defs/taskList", + "title": "TryTaskConfiguration", + "description": "The task(s) to perform." + }, + "catch": { + "type": "object", + "title": "TryTaskCatch", + "description": "The object used to define the errors to catch.", + "unevaluatedProperties": false, + "properties": { + "errors": { + "type": "object", + "title": "CatchErrors", + "properties": { + "with": { + "$ref": "#/$defs/errorFilter" + } + }, + "description": "static error filter" + }, + "as": { + "type": "string", + "title": "CatchAs", + "description": "The name of the runtime expression variable to save the error as. Defaults to 'error'." + }, + "when": { + "type": "string", + "title": "CatchWhen", + "description": "A runtime expression used to determine whether to catch the filtered error." + }, + "exceptWhen": { + "type": "string", + "title": "CatchExceptWhen", + "description": "A runtime expression used to determine whether not to catch the filtered error." + }, + "retry": { + "oneOf": [ + { + "$ref": "#/$defs/retryPolicy", + "title": "RetryPolicyDefinition", + "description": "The retry policy to use, if any, when catching errors." + }, + { + "type": "string", + "title": "RetryPolicyReference", + "description": "The name of the retry policy to use, if any, when catching errors." + } + ] + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "TryTaskCatchDo", + "description": "The definition of the task(s) to run when catching an error." + } + } + } + } + } + ] + }, + "waitTask": { + "type": "object", + "title": "WaitTask", + "description": "Allows workflows to pause or delay their execution for a specified period of time.", + "required": [ + "wait" + ], + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "#/$defs/taskBase" + }, + { + "properties": { + "wait": { + "$ref": "#/$defs/duration", + "title": "WaitTaskConfiguration", + "description": "The amount of time to wait." + } + } + } + ] + }, + "flowDirective": { + "title": "FlowDirective", + "description": "Represents different transition options for a workflow.", + "anyOf": [ + { + "title": "FlowDirectiveEnum", + "type": "string", + "enum": [ + "continue", + "exit", + "end" + ], + "default": "continue" + }, + { + "type": "string" + } + ] + }, + "referenceableAuthenticationPolicy": { + "type": "object", + "title": "ReferenceableAuthenticationPolicy", + "description": "Represents a referenceable authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AuthenticationPolicyReference", + "description": "The reference of the authentication policy to use.", + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "ReferenceableAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + { + "$ref": "#/$defs/authenticationPolicy" + } + ] + }, + "secretBasedAuthenticationPolicy": { + "type": "object", + "title": "SecretBasedAuthenticationPolicy", + "description": "Represents an authentication policy based on secrets.", + "unevaluatedProperties": false, + "properties": { + "use": { + "type": "string", + "minLength": 1, + "title": "SecretBasedAuthenticationPolicyName", + "description": "The name of the authentication policy to use." + } + }, + "required": [ + "use" + ] + }, + "authenticationPolicy": { + "type": "object", + "title": "AuthenticationPolicy", + "description": "Defines an authentication policy.", + "oneOf": [ + { + "title": "BasicAuthenticationPolicy", + "description": "Use basic authentication.", + "properties": { + "basic": { + "type": "object", + "title": "BasicAuthenticationPolicyConfiguration", + "description": "The configuration of the basic authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BasicAuthenticationProperties", + "description": "Inline configuration of the basic authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BasicAuthenticationPolicySecret", + "description": "Secret based configuration of the basic authentication policy." + } + ] + } + }, + "required": [ + "basic" + ] + }, + { + "title": "BearerAuthenticationPolicy", + "description": "Use bearer authentication.", + "properties": { + "bearer": { + "type": "object", + "title": "BearerAuthenticationPolicyConfiguration", + "description": "The configuration of the bearer authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "BearerAuthenticationProperties", + "description": "Inline configuration of the bearer authentication policy.", + "properties": { + "token": { + "type": "string", + "description": "The bearer token to use." + } + }, + "required": [ + "token" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "BearerAuthenticationPolicySecret", + "description": "Secret based configuration of the bearer authentication policy." + } + ] + } + }, + "required": [ + "bearer" + ] + }, + { + "title": "DigestAuthenticationPolicy", + "description": "Use digest authentication.", + "properties": { + "digest": { + "type": "object", + "title": "DigestAuthenticationPolicyConfiguration", + "description": "The configuration of the digest authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "DigestAuthenticationProperties", + "description": "Inline configuration of the digest authentication policy.", + "properties": { + "username": { + "type": "string", + "description": "The username to use." + }, + "password": { + "type": "string", + "description": "The password to use." + } + }, + "required": [ + "username", + "password" + ] + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "DigestAuthenticationPolicySecret", + "description": "Secret based configuration of the digest authentication policy." + } + ] + } + }, + "required": [ + "digest" + ] + }, + { + "title": "OAuth2AuthenticationPolicy", + "description": "Use OAuth2 authentication.", + "properties": { + "oauth2": { + "type": "object", + "title": "OAuth2AuthenticationPolicyConfiguration", + "description": "The configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties", + "type": "object", + "title": "OAuth2ConnectAuthenticationProperties", + "description": "The inline configuration of the OAuth2 authentication policy.", + "unevaluatedProperties": false, + "properties": { + "endpoints": { + "type": "object", + "title": "OAuth2AuthenticationPropertiesEndpoints", + "description": "The endpoint configurations for OAuth2.", + "properties": { + "token": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/token", + "title": "OAuth2TokenEndpoint", + "description": "The relative path to the token endpoint. Defaults to `/oauth2/token`." + }, + "revocation": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/revoke", + "title": "OAuth2RevocationEndpoint", + "description": "The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`." + }, + "introspection": { + "type": "string", + "format": "uri-template", + "default": "/oauth2/introspect", + "title": "OAuth2IntrospectionEndpoint", + "description": "The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`." + } + } + } + } + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OAuth2AuthenticationPolicySecret", + "description": "Secret based configuration of the OAuth2 authentication policy." + } + ] + } + }, + "required": [ + "oauth2" + ] + }, + { + "title": "OpenIdConnectAuthenticationPolicy", + "description": "Use OpenIdConnect authentication.", + "properties": { + "oidc": { + "type": "object", + "title": "OpenIdConnectAuthenticationPolicyConfiguration", + "description": "The configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false, + "oneOf": [ + { + "$ref": "#/$defs/oauth2AuthenticationProperties", + "title": "OpenIdConnectAuthenticationProperties", + "description": "The inline configuration of the OpenIdConnect authentication policy.", + "unevaluatedProperties": false + }, + { + "$ref": "#/$defs/secretBasedAuthenticationPolicy", + "title": "OpenIdConnectAuthenticationPolicySecret", + "description": "Secret based configuration of the OpenIdConnect authentication policy." + } + ] + } + }, + "required": [ + "oidc" + ] + } + ] + }, + "oauth2AuthenticationProperties": { + "type": "object", + "title": "OAuth2AuthenticationData", + "description": "Inline configuration of the OAuth2 authentication policy.", + "properties": { + "authority": { + "$ref": "#/$defs/uriTemplate", + "title": "OAuth2AuthenticationDataAuthority", + "description": "The URI that references the OAuth2 authority to use." + }, + "grant": { + "type": "string", + "enum": [ + "authorization_code", + "client_credentials", + "password", + "refresh_token", + "urn:ietf:params:oauth:grant-type:token-exchange" + ], + "title": "OAuth2AuthenticationDataGrant", + "description": "The grant type to use." + }, + "client": { + "type": "object", + "title": "OAuth2AuthenticationDataClient", + "description": "The definition of an OAuth2 client.", + "unevaluatedProperties": false, + "properties": { + "id": { + "type": "string", + "title": "ClientId", + "description": "The client id to use." + }, + "secret": { + "type": "string", + "title": "ClientSecret", + "description": "The client secret to use, if any." + }, + "assertion": { + "type": "string", + "title": "ClientAssertion", + "description": "A JWT containing a signed assertion with your application credentials." + }, + "authentication": { + "type": "string", + "enum": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "default": "client_secret_post", + "title": "ClientAuthentication", + "description": "The authentication method to use to authenticate the client." + } + } + }, + "request": { + "type": "object", + "title": "OAuth2TokenRequest", + "description": "The configuration of an OAuth2 token request", + "properties": { + "encoding": { + "type": "string", + "enum": [ + "application/x-www-form-urlencoded", + "application/json" + ], + "default": "application/x-www-form-urlencoded", + "title": "Oauth2TokenRequestEncoding" + } + } + }, + "issuers": { + "type": "array", + "title": "OAuth2Issuers", + "description": "A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens.", + "items": { + "type": "string" + } + }, + "scopes": { + "type": "array", + "title": "OAuth2AuthenticationDataScopes", + "description": "The scopes, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "title": "OAuth2AuthenticationDataAudiences", + "description": "The audiences, if any, to request the token for.", + "items": { + "type": "string" + } + }, + "username": { + "type": "string", + "title": "OAuth2AuthenticationDataUsername", + "description": "The username to use. Used only if the grant type is Password." + }, + "password": { + "type": "string", + "title": "OAuth2AuthenticationDataPassword", + "description": "The password to use. Used only if the grant type is Password." + }, + "subject": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AuthenticationDataSubject", + "description": "The security token that represents the identity of the party on behalf of whom the request is being made." + }, + "actor": { + "$ref": "#/$defs/oauth2Token", + "title": "OAuth2AuthenticationDataActor", + "description": "The security token that represents the identity of the acting party." + } + } + }, + "oauth2Token": { + "type": "object", + "title": "OAuth2TokenDefinition", + "description": "Represents an OAuth2 token.", + "unevaluatedProperties": false, + "properties": { + "token": { + "type": "string", + "title": "OAuth2Token", + "description": "The security token to use." + }, + "type": { + "type": "string", + "title": "OAuth2TokenType", + "description": "The type of the security token to use." + } + }, + "required": [ + "token", + "type" + ] + }, + "duration": { + "oneOf": [ + { + "type": "object", + "minProperties": 1, + "unevaluatedProperties": false, + "properties": { + "days": { + "type": "integer", + "title": "DurationDays", + "description": "Number of days, if any." + }, + "hours": { + "type": "integer", + "title": "DurationHours", + "description": "Number of days, if any." + }, + "minutes": { + "type": "integer", + "title": "DurationMinutes", + "description": "Number of minutes, if any." + }, + "seconds": { + "type": "integer", + "title": "DurationSeconds", + "description": "Number of seconds, if any." + }, + "milliseconds": { + "type": "integer", + "title": "DurationMilliseconds", + "description": "Number of milliseconds, if any." + } + }, + "title": "DurationInline", + "description": "The inline definition of a duration." + }, + { + "$ref": "#/$defs/runtimeExpression", + "title": "DurationExpression", + "description": "Runtime expression that generates an ISO 8601" + }, + { + "type": "string", + "pattern": "^P(?!$)(\\d+(?:\\.\\d+)?Y)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?W)?(\\d+(?:\\.\\d+)?D)?(T(?=\\d)(\\d+(?:\\.\\d+)?H)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?S)?)?$", + "title": "DurationLiteral", + "description": "The Literal ISO 8601 representation of a duration." + } + ] + }, + "error": { + "type": "object", + "title": "Error", + "description": "Represents an error.", + "unevaluatedProperties": false, + "properties": { + "type": { + "title": "ErrorType", + "description": "A URI reference that identifies the error type.", + "oneOf": [ + { + "title": "LiteralErrorType", + "$ref": "#/$defs/uriTemplate", + "description": "The literal error type." + }, + { + "title": "ExpressionErrorType", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based error type." + } + ] + }, + "status": { + "type": "integer", + "title": "ErrorStatus", + "description": "The status code generated by the origin for this occurrence of the error." + }, + "instance": { + "title": "ErrorInstance", + "description": "A JSON Pointer used to reference the component the error originates from.", + "oneOf": [ + { + "title": "LiteralErrorInstance", + "description": "The literal error instance.", + "type": "string", + "format": "json-pointer" + }, + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorInstance", + "description": "An expression based error instance." + } + ] + }, + "title": { + "description": "A short, human-readable summary of the error.", + "title": "ErrorTitle", + "anyOf": [ + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorTitle" + }, + { + "type": "string", + "title": "LiteralErrorTitle" + } + ] + }, + "detail": { + "title": "ErrorDetails", + "description": "A human-readable explanation specific to this occurrence of the error.", + "anyOf": [ + { + "$ref": "#/$defs/runtimeExpression", + "title": "ExpressionErrorDetails" + }, + { + "type": "string", + "title": "LiteralErrorDetails" + } + ] + } + }, + "required": [ + "type", + "status" + ] + }, + "errorFilter": { + "type": "object", + "title": "ErrorFilter", + "description": "Error filtering base on static values. For error filtering on dynamic values, use catch.when property", + "minProperties": 1, + "properties": { + "type": { + "type": "string", + "description": "if present, means this value should be used for filtering" + }, + "status": { + "type": "integer", + "description": "if present, means this value should be used for filtering" + }, + "instance": { + "type": "string", + "description": "if present, means this value should be used for filtering" + }, + "title": { + "type": "string", + "description": "if present, means this value should be used for filtering" + }, + "details": { + "type": "string", + "description": "if present, means this value should be used for filtering" + } + } + }, + "uriTemplate": { + "title": "UriTemplate", + "anyOf": [ + { + "title": "LiteralUriTemplate", + "type": "string", + "format": "uri-template", + "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + }, + { + "title": "LiteralUri", + "type": "string", + "format": "uri", + "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + } + ] + }, + "endpoint": { + "title": "Endpoint", + "description": "Represents an endpoint.", + "oneOf": [ + { + "$ref": "#/$defs/runtimeExpression" + }, + { + "$ref": "#/$defs/uriTemplate" + }, + { + "title": "EndpointConfiguration", + "type": "object", + "unevaluatedProperties": false, + "properties": { + "uri": { + "title": "EndpointUri", + "description": "The endpoint's URI.", + "oneOf": [ + { + "title": "LiteralEndpointURI", + "description": "The literal endpoint's URI.", + "$ref": "#/$defs/uriTemplate" + }, + { + "title": "ExpressionEndpointURI", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based endpoint's URI." + } + ] + }, + "authentication": { + "$ref": "#/$defs/referenceableAuthenticationPolicy", + "title": "EndpointAuthentication", + "description": "The authentication policy to use." + } + }, + "required": [ + "uri" + ] + } + ] + }, + "eventProperties": { + "type": "object", + "title": "EventProperties", + "description": "Describes the properties of an event.", + "properties": { + "id": { + "type": "string", + "title": "EventId", + "description": "The event's unique identifier." + }, + "source": { + "title": "EventSource", + "description": "Identifies the context in which an event happened.", + "oneOf": [ + { + "$ref": "#/$defs/uriTemplate" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "type": { + "type": "string", + "title": "EventType", + "description": "This attribute contains a value describing the type of event related to the originating occurrence." + }, + "time": { + "title": "EventTime", + "description": "When the event occured.", + "oneOf": [ + { + "title": "LiteralTime", + "type": "string", + "format": "date-time" + }, + { + "$ref": "#/$defs/runtimeExpression" + } + ] + }, + "subject": { + "type": "string", + "title": "EventSubject", + "description": "The subject of the event." + }, + "datacontenttype": { + "type": "string", + "title": "EventDataContentType", + "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format." + }, + "dataschema": { + "title": "EventDataschema", + "description": "The schema describing the event format.", + "oneOf": [ + { + "title": "LiteralDataSchema", + "$ref": "#/$defs/uriTemplate", + "description": "The literal event data schema." + }, + { + "title": "ExpressionDataSchema", + "$ref": "#/$defs/runtimeExpression", + "description": "An expression based event data schema." + } + ] + }, + "data": { + "title": "EventData", + "description": "The event's payload data", + "anyOf": [ + { + "$ref": "#/$defs/runtimeExpression" + }, + {} + ] + } + }, + "additionalProperties": true + }, + "eventConsumptionStrategy": { + "type": "object", + "title": "EventConsumptionStrategy", + "description": "Describe the event consumption strategy to adopt.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "AllEventConsumptionStrategy", + "properties": { + "all": { + "type": "array", + "title": "AllEventConsumptionStrategyConfiguration", + "description": "A list containing all the events that must be consumed.", + "items": { + "$ref": "#/$defs/eventFilter" + } + } + }, + "required": [ + "all" + ] + }, + { + "title": "AnyEventConsumptionStrategy", + "properties": { + "any": { + "type": "array", + "title": "AnyEventConsumptionStrategyConfiguration", + "description": "A list containing any of the events to consume.", + "items": { + "$ref": "#/$defs/eventFilter" + } + }, + "until": { + "oneOf": [ + { + "type": "string", + "title": "AnyEventUntilCondition", + "description": "A runtime expression condition evaluated after consuming an event and which determines whether or not to continue listening." + }, + { + "allOf": [ + { + "$ref": "#/$defs/eventConsumptionStrategy", + "description": "The strategy that defines the event(s) to consume to stop listening." + }, + { + "properties": { + "until": false + } + } + ], + "title": "AnyEventUntilConsumed" + } + ] + } + }, + "required": [ + "any" + ] + }, + { + "title": "OneEventConsumptionStrategy", + "properties": { + "one": { + "$ref": "#/$defs/eventFilter", + "title": "OneEventConsumptionStrategyConfiguration", + "description": "The single event to consume." + } + }, + "required": [ + "one" + ] + } + ] + }, + "eventFilter": { + "type": "object", + "title": "EventFilter", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.", + "unevaluatedProperties": false, + "properties": { + "with": { + "$ref": "#/$defs/eventProperties", + "minProperties": 1, + "title": "WithEvent", + "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes." + }, + "correlate": { + "type": "object", + "title": "EventFilterCorrelate", + "description": "A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics.", + "additionalProperties": { + "type": "object", + "properties": { + "from": { + "type": "string", + "title": "CorrelateFrom", + "description": "A runtime expression used to extract the correlation value from the filtered event." + }, + "expect": { + "type": "string", + "title": "CorrelateExpect", + "description": "A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation." + } + }, + "required": [ + "from" + ] + } + } + }, + "required": [ + "with" + ] + }, + "extension": { + "type": "object", + "title": "Extension", + "description": "The definition of an extension.", + "unevaluatedProperties": false, + "properties": { + "extend": { + "type": "string", + "enum": [ + "call", + "composite", + "emit", + "for", + "listen", + "raise", + "run", + "set", + "switch", + "try", + "wait", + "all" + ], + "title": "ExtensionTarget", + "description": "The type of task to extend." + }, + "when": { + "type": "string", + "title": "ExtensionCondition", + "description": "A runtime expression, if any, used to determine whether or not the extension should apply in the specified context." + }, + "before": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoBefore", + "description": "The task(s) to execute before the extended task, if any." + }, + "after": { + "$ref": "#/$defs/taskList", + "title": "ExtensionDoAfter", + "description": "The task(s) to execute after the extended task, if any." + } + }, + "required": [ + "extend" + ] + }, + "externalResource": { + "type": "object", + "title": "ExternalResource", + "description": "Represents an external resource.", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "ExternalResourceName", + "description": "The name of the external resource, if any." + }, + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "ExternalResourceEndpoint", + "description": "The endpoint of the external resource." + } + }, + "required": [ + "endpoint" + ] + }, + "input": { + "type": "object", + "title": "Input", + "description": "Configures the input of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "InputSchema", + "description": "The schema used to describe and validate the input of the workflow or task." + }, + "from": { + "title": "InputFrom", + "description": "A runtime expression, if any, used to mutate and/or filter the input of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "output": { + "type": "object", + "title": "Output", + "description": "Configures the output of a workflow or task.", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "OutputSchema", + "description": "The schema used to describe and validate the output of the workflow or task." + }, + "as": { + "title": "OutputAs", + "description": "A runtime expression, if any, used to mutate and/or filter the output of the workflow or task.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "export": { + "type": "object", + "title": "Export", + "description": "Set the content of the context. .", + "unevaluatedProperties": false, + "properties": { + "schema": { + "$ref": "#/$defs/schema", + "title": "ExportSchema", + "description": "The schema used to describe and validate the workflow context." + }, + "as": { + "title": "ExportAs", + "description": "A runtime expression, if any, used to export the output data to the context.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + } + } + }, + "retryPolicy": { + "type": "object", + "title": "RetryPolicy", + "description": "Defines a retry policy.", + "unevaluatedProperties": false, + "properties": { + "when": { + "type": "string", + "title": "RetryWhen", + "description": "A runtime expression, if any, used to determine whether or not to retry running the task, in a given context." + }, + "exceptWhen": { + "type": "string", + "title": "RetryExcepWhen", + "description": "A runtime expression used to determine whether or not to retry running the task, in a given context." + }, + "delay": { + "$ref": "#/$defs/duration", + "title": "RetryDelay", + "description": "The duration to wait between retry attempts." + }, + "backoff": { + "type": "object", + "title": "RetryBackoff", + "description": "The retry duration backoff.", + "unevaluatedProperties": false, + "oneOf": [ + { + "title": "ConstantBackoff", + "properties": { + "constant": { + "type": "object", + "description": "The definition of the constant backoff to use, if any." + } + }, + "required": [ + "constant" + ] + }, + { + "title": "ExponentialBackOff", + "properties": { + "exponential": { + "type": "object", + "description": "The definition of the exponential backoff to use, if any." + } + }, + "required": [ + "exponential" + ] + }, + { + "title": "LinearBackoff", + "properties": { + "linear": { + "type": "object", + "description": "The definition of the linear backoff to use, if any." + } + }, + "required": [ + "linear" + ] + } + ] + }, + "limit": { + "type": "object", + "title": "RetryLimit", + "unevaluatedProperties": false, + "properties": { + "attempt": { + "type": "object", + "title": "RetryLimitAttempt", + "unevaluatedProperties": false, + "properties": { + "count": { + "type": "integer", + "title": "RetryLimitAttemptCount", + "description": "The maximum amount of retry attempts, if any." + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitAttemptDuration", + "description": "The maximum duration for each retry attempt." + } + } + }, + "duration": { + "$ref": "#/$defs/duration", + "title": "RetryLimitDuration", + "description": "The duration limit, if any, for all retry attempts." + } + }, + "description": "The retry limit, if any." + }, + "jitter": { + "type": "object", + "title": "RetryPolicyJitter", + "description": "The parameters, if any, that control the randomness or variability of the delay between retry attempts.", + "unevaluatedProperties": false, + "properties": { + "from": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterFrom", + "description": "The minimum duration of the jitter range." + }, + "to": { + "$ref": "#/$defs/duration", + "title": "RetryPolicyJitterTo", + "description": "The maximum duration of the jitter range." + } + }, + "required": [ + "from", + "to" + ] + } + } + }, + "schema": { + "type": "object", + "title": "Schema", + "description": "Represents the definition of a schema.", + "unevaluatedProperties": false, + "properties": { + "format": { + "type": "string", + "default": "json", + "title": "SchemaFormat", + "description": "The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`." + } + }, + "oneOf": [ + { + "title": "SchemaInline", + "properties": { + "document": { + "description": "The schema's inline definition." + } + }, + "required": [ + "document" + ] + }, + { + "title": "SchemaExternal", + "properties": { + "resource": { + "$ref": "#/$defs/externalResource", + "title": "SchemaExternalResource", + "description": "The schema's external resource." + } + }, + "required": [ + "resource" + ] + } + ] + }, + "timeout": { + "type": "object", + "title": "Timeout", + "description": "The definition of a timeout.", + "unevaluatedProperties": false, + "properties": { + "after": { + "$ref": "#/$defs/duration", + "title": "TimeoutAfter", + "description": "The duration after which to timeout." + } + }, + "required": [ + "after" + ] + }, + "catalog": { + "type": "object", + "title": "Catalog", + "description": "The definition of a resource catalog.", + "unevaluatedProperties": false, + "properties": { + "endpoint": { + "$ref": "#/$defs/endpoint", + "title": "CatalogEndpoint", + "description": "The root URL where the catalog is hosted." + } + }, + "required": [ + "endpoint" + ] + }, + "runtimeExpression": { + "type": "string", + "title": "RuntimeExpression", + "description": "A runtime expression.", + "pattern": "^\\s*\\$\\{.+\\}\\s*$" + }, + "containerLifetime": { + "type": "object", + "title": "ContainerLifetime", + "description": "The configuration of a container's lifetime", + "unevaluatedProperties": false, + "properties": { + "cleanup": { + "type": "string", + "title": "ContainerCleanupPolicy", + "description": "The container cleanup policy to use", + "enum": [ + "always", + "never", + "eventually" + ], + "default": "never" + }, + "after": { + "$ref": "#/$defs/duration", + "title": "ContainerLifetimeDuration", + "description": "The duration after which to cleanup the container, in case the cleanup policy has been set to 'eventually'" + } + }, + "required": [ + "cleanup" + ], + "if": { + "properties": { + "cleanup": { + "const": "eventually" + } + } + }, + "then": { + "required": [ + "after" + ] + }, + "else": { + "not": { + "required": [ + "after" + ] + } + } + }, + "processResult": { + "type": "object", + "title": "ProcessResult", + "description": "The object returned by a run task when its return type has been set 'all'.", + "unevaluatedProperties": false, + "properties": { + "code": { + "type": "integer", + "title": "ProcessExitCode", + "description": "The process's exit code." + }, + "stdout": { + "type": "string", + "title": "ProcessStandardOutput", + "description": "The content of the process's STDOUT." + }, + "stderr": { + "type": "string", + "title": "ProcessStandardError", + "description": "The content of the process's STDERR." + } + }, + "required": [ + "code", + "stdout", + "stderr" + ] + }, + "asyncApiServer": { + "type": "object", + "title": "AsyncApiServer", + "description": "Configures the target server of an AsyncAPI operation.", + "unevaluatedProperties": false, + "properties": { + "name": { + "type": "string", + "title": "AsyncApiServerName", + "description": "The target server's name." + }, + "variables": { + "type": "object", + "title": "AsyncApiServerVariables", + "description": "The target server's variables, if any." + } + }, + "required": [ + "name" + ] + }, + "asyncApiOutboundMessage": { + "type": "object", + "title": "AsyncApiOutboundMessage", + "description": "An object used to configure the message to publish using the target operation.", + "unevaluatedProperties": false, + "properties": { + "payload": { + "type": "object", + "title": "AsyncApiMessagePayload", + "description": "The message's payload, if any." + }, + "headers": { + "type": "object", + "title": "AsyncApiMessageHeaders", + "description": "The message's headers, if any." + } + } + }, + "asyncApiInboundMessage": { + "title": "AsyncApiInboundMessage", + "description": "Represents a message counsumed by an AsyncAPI subscription.", + "allOf": [ + { + "$ref": "#/$defs/asyncApiOutboundMessage" + }, + { + "properties": { + "correlationId": { + "type": "string", + "title": "AsyncApiMessageCorrelationId", + "description": "The message's correlation id, if any." + } + } + } + ] + }, + "asyncApiSubscription": { + "type": "object", + "title": "AsyncApiSubscription", + "description": "An object used to configure the subscription to messages consumed using the target operation.", + "unevaluatedProperties": false, + "properties": { + "filter": { + "$ref": "#/$defs/runtimeExpression", + "title": "AsyncApiSubscriptionCorrelation", + "description": "A runtime expression, if any, used to filter consumed messages." + }, + "consume": { + "$ref": "#/$defs/asyncApiMessageConsumptionPolicy", + "title": "AsyncApiMessageConsumptionPolicy", + "description": "An object used to configure the subscription's message consumption policy." + }, + "foreach": { + "$ref": "#/$defs/subscriptionIterator", + "title": "AsyncApiSubscriptionIterator", + "description": "Configures the iterator, if any, for processing consumed messages(s)." + } + }, + "required": [ + "consume" + ] + }, + "asyncApiMessageConsumptionPolicy": { + "type": "object", + "title": "AsyncApiMessageConsumptionPolicy", + "description": "An object used to configure a subscription's message consumption policy.", + "unevaluatedProperties": false, + "properties": { + "for": { + "$ref": "#/$defs/duration", + "title": "AsyncApiMessageConsumptionPolicyFor", + "description": "Specifies the time period over which messages will be consumed." + } + }, + "oneOf": [ + { + "properties": { + "amount": { + "type": "integer", + "description": "The amount of (filtered) messages to consume before disposing of the subscription." + } + }, + "title": "AsyncApiMessageConsumptionPolicyAmount", + "required": [ + "amount" + ] + }, + { + "properties": { + "while": { + "$ref": "#/$defs/runtimeExpression", + "description": "A runtime expression evaluated after each consumed (filtered) message to decide if message consumption should continue." + } + }, + "title": "AsyncApiMessageConsumptionPolicyWhile", + "required": [ + "while" + ] + }, + { + "properties": { + "until": { + "$ref": "#/$defs/runtimeExpression", + "description": "A runtime expression evaluated before each consumed (filtered) message to decide if message consumption should continue." + } + }, + "title": "AsyncApiMessageConsumptionPolicyUntil", + "required": [ + "until" + ] + } + ] + }, + "subscriptionIterator": { + "type": "object", + "title": "SubscriptionIterator", + "description": "Configures the iteration over each item (event or message) consumed by a subscription.", + "unevaluatedProperties": false, + "properties": { + "item": { + "type": "string", + "title": "SubscriptionIteratorItem", + "description": "The name of the variable used to store the current item being enumerated.", + "default": "item" + }, + "at": { + "type": "string", + "title": "SubscriptionIteratorIndex", + "description": "The name of the variable used to store the index of the current item being enumerated.", + "default": "index" + }, + "do": { + "$ref": "#/$defs/taskList", + "title": "SubscriptionIteratorTasks", + "description": "The tasks to perform for each consumed item." + }, + "output": { + "$ref": "#/$defs/output", + "title": "SubscriptionIteratorOutput", + "description": "An object, if any, used to customize the item's output and to document its schema." + }, + "export": { + "$ref": "#/$defs/export", + "title": "SubscriptionIteratorExport", + "description": "An object, if any, used to customize the content of the workflow context." + } + } + } + } +} \ No newline at end of file diff --git a/public/schemas/1.0.3/workflow.yaml b/public/schemas/1.0.3/workflow.yaml new file mode 100644 index 0000000..adc380a --- /dev/null +++ b/public/schemas/1.0.3/workflow.yaml @@ -0,0 +1,1956 @@ +$id: https://open-workflow-specification.org/schemas/1.0.3/workflow.yaml +$schema: https://json-schema.org/draft/2020-12/schema +description: Open Workflow Specification DSL - Workflow Schema. +type: object +required: [ document, do ] +properties: + document: + type: object + title: Document + description: Documents the workflow. + unevaluatedProperties: false + properties: + dsl: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowDSL + description: The version of the DSL used by the workflow. + namespace: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowNamespace + description: The workflow's namespace. + name: + type: string + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$ + title: WorkflowName + description: The workflow's name. + version: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + title: WorkflowVersion + description: The workflow's semantic version. + title: + type: string + title: WorkflowTitle + description: The workflow's title. + summary: + type: string + title: WorkflowSummary + description: The workflow's Markdown summary. + tags: + type: object + title: WorkflowTags + description: A key/value mapping of the workflow's tags, if any. + additionalProperties: true + metadata: + type: object + title: WorkflowMetadata + description: Holds additional information about the workflow. + additionalProperties: true + required: [ dsl, namespace, name, version ] + input: + $ref: '#/$defs/input' + title: Input + description: Configures the workflow's input. + use: + type: object + title: Use + description: Defines the workflow's reusable components. + unevaluatedProperties: false + properties: + authentications: + type: object + title: UseAuthentications + description: The workflow's reusable authentication policies. + additionalProperties: + $ref: '#/$defs/authenticationPolicy' + errors: + type: object + title: UseErrors + description: The workflow's reusable errors. + additionalProperties: + $ref: '#/$defs/error' + extensions: + type: array + title: UseExtensions + description: The workflow's extensions. + items: + type: object + title: ExtensionItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/extension' + functions: + type: object + title: UseFunctions + description: The workflow's reusable functions. + additionalProperties: + $ref: '#/$defs/task' + retries: + type: object + title: UseRetries + description: The workflow's reusable retry policies. + additionalProperties: + $ref: '#/$defs/retryPolicy' + secrets: + type: array + title: UseSecrets + description: The workflow's reusable secrets. + items: + type: string + description: The workflow's secrets. + timeouts: + type: object + title: UseTimeouts + description: The workflow's reusable timeouts. + additionalProperties: + $ref: '#/$defs/timeout' + catalogs: + type: object + title: UseCatalogs + description: The workflow's reusable catalogs. + additionalProperties: + $ref: '#/$defs/catalog' + do: + $ref: '#/$defs/taskList' + title: Do + description: Defines the task(s) the workflow must perform. + timeout: + title: DoTimeout + oneOf: + - $ref: '#/$defs/timeout' + title: TimeoutDefinition + description: The workflow's timeout configuration, if any. + - type: string + title: TimeoutReference + description: The name of the workflow's timeout, if any. + output: + $ref: '#/$defs/output' + title: Output + description: Configures the workflow's output. + schedule: + type: object + title: Schedule + description: Schedules the workflow. + unevaluatedProperties: false + properties: + every: + $ref: '#/$defs/duration' + title: ScheduleEvery + description: Specifies the duration of the interval at which the workflow should be executed. + cron: + type: string + title: ScheduleCron + description: Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight. + after: + $ref: '#/$defs/duration' + title: ScheduleAfter + description: Specifies a delay duration that the workflow must wait before starting again after it completes. + on: + $ref: '#/$defs/eventConsumptionStrategy' + title: ScheduleOn + description: Specifies the events that trigger the workflow execution. +$defs: + taskList: + title: TaskList + description: List of named tasks to perform. + type: array + items: + type: object + title: TaskItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + $ref: '#/$defs/task' + taskBase: + type: object + title: TaskBase + description: An object inherited by all tasks. + properties: + if: + type: string + title: TaskBaseIf + description: A runtime expression, if any, used to determine whether or not the task should be run. + input: + $ref: '#/$defs/input' + title: TaskBaseInput + description: Configure the task's input. + output: + $ref: '#/$defs/output' + title: TaskBaseOutput + description: Configure the task's output. + export: + $ref: '#/$defs/export' + title: TaskBaseExport + description: Export task output to context. + timeout: + title: TaskTimeout + oneOf: + - $ref: '#/$defs/timeout' + title: TaskTimeoutDefinition + description: The task's timeout configuration, if any. + - type: string + title: TaskTimeoutReference + description: The name of the task's timeout, if any. + then: + $ref: '#/$defs/flowDirective' + title: TaskBaseThen + description: The flow directive to be performed upon completion of the task. + metadata: + type: object + title: TaskMetadata + description: Holds additional information about the task. + additionalProperties: true + task: + title: Task + description: A discrete unit of work that contributes to achieving the overall objectives defined by the workflow. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/callTask' + - $ref: '#/$defs/doTask' + - $ref: '#/$defs/forkTask' + - $ref: '#/$defs/emitTask' + - $ref: '#/$defs/forTask' + - $ref: '#/$defs/listenTask' + - $ref: '#/$defs/raiseTask' + - $ref: '#/$defs/runTask' + - $ref: '#/$defs/setTask' + - $ref: '#/$defs/switchTask' + - $ref: '#/$defs/tryTask' + - $ref: '#/$defs/waitTask' + callTask: + title: CallTask + description: Defines the call to perform. + oneOf: + - title: CallAsyncAPI + description: Defines the AsyncAPI call to perform. + type: object + required: [ call, with ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: asyncapi + with: + type: object + title: AsyncApiArguments + description: The Async API call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: AsyncAPIDocument + description: The document that defines the AsyncAPI operation to call. + channel: + type: string + title: With + description: The name of the channel on which to perform the operation. Used only in case the referenced document uses AsyncAPI v2.6.0. + operation: + type: string + title: AsyncAPIOperation + description: A reference to the AsyncAPI operation to call. + server: + $ref: '#/$defs/asyncApiServer' + title: AsyncAPIServer + description: An object used to configure to the server to call the specified AsyncAPI operation on. + protocol: + type: string + title: AsyncApiProtocol + description: The protocol to use to select the target server. + enum: [ amqp, amqp1, anypointmq, googlepubsub, http, ibmmq, jms, kafka, mercure, mqtt, mqtt5, nats, pulsar, redis, sns, solace, sqs, stomp, ws ] + message: + $ref: '#/$defs/asyncApiOutboundMessage' + title: AsyncApiMessage + description: An object used to configure the message to publish using the target operation. + subscription: + $ref: '#/$defs/asyncApiSubscription' + title: AsyncApiSubscription + description: An object used to configure the subscription to messages consumed using the target operation. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: AsyncAPIAuthentication + description: The authentication policy, if any, to use when calling the AsyncAPI operation. + oneOf: + - required: [ document, operation, message ] + - required: [ document, operation, subscription ] + - required: [ document, channel, message ] + - required: [ document, channel, subscription ] + unevaluatedProperties: false + - title: CallGRPC + description: Defines the GRPC call to perform. + type: object + unevaluatedProperties: false + required: [ call, with ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: grpc + with: + type: object + title: GRPCArguments + description: The GRPC call arguments. + properties: + proto: + $ref: '#/$defs/externalResource' + title: WithGRPCProto + description: The proto resource that describes the GRPC service to call. + service: + type: object + title: WithGRPCService + unevaluatedProperties: false + properties: + name: + type: string + title: WithGRPCServiceName + description: The name of the GRPC service to call. + host: + type: string + title: WithGRPCServiceHost + description: The hostname of the GRPC service to call. + pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-.]{0,61}[a-zA-Z0-9])?$ + port: + type: integer + title: WithGRPCServicePort + description: The port number of the GRPC service to call. + minimum: 0 + maximum: 65535 + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithGRPCServiceAuthentication + description: The endpoint's authentication policy, if any. + required: [ name, host ] + method: + type: string + title: WithGRPCMethod + description: The name of the method to call on the defined GRPC service. + arguments: + type: object + title: WithGRPCArguments + description: The arguments, if any, to call the method with. + additionalProperties: true + required: [ proto, service, method ] + unevaluatedProperties: false + - title: CallHTTP + description: Defines the HTTP call to perform. + type: object + unevaluatedProperties: false + required: [ call, with ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: http + with: + type: object + title: HTTPArguments + description: The HTTP call arguments. + properties: + method: + type: string + title: HTTPMethod + description: The HTTP method of the HTTP request to perform. + endpoint: + title: HTTPEndpoint + description: The HTTP endpoint to send the request to. + $ref: '#/$defs/endpoint' + headers: + oneOf: + - type: object + additionalProperties: + type: string + - $ref: '#/$defs/runtimeExpression' + title: HTTPHeaders + description: A name/value mapping of the headers, if any, of the HTTP request to perform. + body: + title: HTTPBody + description: The body, if any, of the HTTP request to perform. + query: + oneOf: + - type: object + additionalProperties: + type: string + - $ref: '#/$defs/runtimeExpression' + title: HTTPQuery + description: A name/value mapping of the query parameters, if any, of the HTTP request to perform. + additionalProperties: true + output: + type: string + title: HTTPOutput + description: The http call output format. Defaults to 'content'. + enum: [ raw, content, response ] + redirect: + type: boolean + title: HttpRedirect + description: Specifies whether redirection status codes (`300–399`) should be treated as errors. + required: [ method, endpoint ] + unevaluatedProperties: false + - title: CallOpenAPI + description: Defines the OpenAPI call to perform. + type: object + unevaluatedProperties: false + required: [ call, with ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: openapi + with: + type: object + title: OpenAPIArguments + description: The OpenAPI call arguments. + properties: + document: + $ref: '#/$defs/externalResource' + title: WithOpenAPIDocument + description: The document that defines the OpenAPI operation to call. + operationId: + type: string + title: WithOpenAPIOperation + description: The id of the OpenAPI operation to call. + parameters: + type: object + title: WithOpenAPIParameters + description: A name/value mapping of the parameters of the OpenAPI operation to call. + additionalProperties: true + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: WithOpenAPIAuthentication + description: The authentication policy, if any, to use when calling the OpenAPI operation. + output: + type: string + enum: [ raw, content, response ] + title: WithOpenAPIOutput + description: The http call output format. Defaults to 'content'. + redirect: + type: boolean + title: HttpRedirect + description: Specifies whether redirection status codes (`300–399`) should be treated as errors. + required: [ document, operationId ] + unevaluatedProperties: false + - title: CallA2A + description: Defines the A2A call to perform. + type: object + unevaluatedProperties: false + required: [ call, with ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: a2a + with: + type: object + title: A2AArguments + description: The A2A call arguments. + properties: + agentCard: + $ref: '#/$defs/externalResource' + title: WithA2AAgentCard + description: The Agent Card that defines the agent to call. + server: + title: A2AServer + description: The server endpoint to send the request to. + $ref: '#/$defs/endpoint' + method: + type: string + title: WithA2AMethod + description: The A2A method to send. + enum: [ 'message/send', 'message/stream', 'tasks/get', 'tasks/list', 'tasks/cancel', 'tasks/resubscribe', 'tasks/pushNotificationConfig/set', 'tasks/pushNotificationConfig/get', 'tasks/pushNotificationConfig/list', 'tasks/pushNotificationConfig/delete', 'agent/getAuthenticatedExtendedCard' ] + parameters: + oneOf: + - type: object + minProperties: 1 + additionalProperties: true + - type: string + title: WithA2AParameters + description: The parameters object to send with the A2A method. + required: [ method ] + unevaluatedProperties: false + - title: CallMCP + description: Defines the MCP call to perform. + type: object + unevaluatedProperties: false + required: [ call, with ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + const: mcp + with: + type: object + title: MCPArguments + description: The MCP call arguments. + properties: + protocolVersion: + type: string + default: '2025-06-18' + title: McpProtocolVersion + description: The version of the MCP protocol to use. + method: + type: string + enum: [ tools/list, tools/call, prompts/list, prompts/get, resources/list, resources/read, resources/templates/list ] + title: McpMethod + description: The MCP method to call. + parameters: + oneOf: + - type: object + additionalProperties: true + - type: string + title: McpMethodParameters + description: The MCP method parameters. + timeout: + $ref: '#/$defs/duration' + title: McpCallTimeout + description: The duration after which the MCP call times out. + transport: + type: object + title: McpCallTransport + description: The transport to use to perform the MCP call. + properties: + http: + type: object + title: McpHttpTransport + description: The definition of the HTTP transport to use. + properties: + endpoint: + $ref: '#/$defs/endpoint' + title: McpHttpTransportEndpoint + description: The MCP server endpoint to connect to. + headers: + type: object + additionalProperties: + type: string + title: McpHttpTransportHeaders + description: A key/value mapping of the HTTP headers to send with requests, if any. + required: [ endpoint ] + stdio: + type: object + title: McpStdioTransport + description: The definition of the STDIO transport to use. + properties: + command: + type: string + title: McpStdioTransportCommand + description: The command used to run the MCP server. + arguments: + type: array + items: + type: string + title: McpStdioTransportArguments + description: An optional list of arguments to pass to the command. + environment: + type: object + additionalProperties: + type: string + title: McpStdioTransportEnvironment + description: A key/value mapping, if any, of environment variables used to configure the MCP server. + required: [ command ] + options: + type: object + additionalProperties: + type: string + oneOf: + - required: [http] + - required: [stdio] + client: + type: object + title: McpClient + description: Describes the client used to perform the MCP call. + properties: + name: + type: string + title: McpClientName + description: The name of the client used to connect to the MCP server. + description: + type: string + title: McpClientVersion + description: The version of the client used to connect to the MCP server. + required: [ name, version ] + required: [ method, transport ] + - title: CallFunction + description: Defines the function call to perform. + type: object + unevaluatedProperties: false + required: [ call ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + call: + type: string + not: + enum: ["asyncapi", "grpc", "http", "openapi", "a2a", "mcp"] + description: The name of the function to call. + with: + type: object + title: FunctionArguments + description: A name/value mapping of the parameters, if any, to call the function with. + additionalProperties: true + forkTask: + type: object + title: ForkTask + description: Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output. + unevaluatedProperties: false + required: [ fork ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + fork: + type: object + title: ForkTaskConfiguration + description: The configuration of the branches to perform concurrently. + unevaluatedProperties: false + required: [ branches ] + properties: + branches: + $ref: '#/$defs/taskList' + title: ForkBranches + compete: + type: boolean + title: ForkCompete + description: Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output. + default: false + doTask: + type: object + title: DoTask + description: Allows to execute a list of tasks in sequence. + unevaluatedProperties: false + required: [ do ] + allOf: + - $ref: '#/$defs/taskBase' + - properties: + do: + $ref: '#/$defs/taskList' + title: DoTaskConfiguration + description: The configuration of the tasks to perform sequentially. + emitTask: + type: object + title: EmitTask + description: Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services. + required: [ emit ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + emit: + type: object + title: EmitTaskConfiguration + description: The configuration of an event's emission. + unevaluatedProperties: false + properties: + event: + type: object + title: EmitEventDefinition + description: The definition of the event to emit. + properties: + with: + $ref: '#/$defs/eventProperties' + title: EmitEventWith + description: Defines the properties of event to emit. + required: [ source, type ] + additionalProperties: true + required: [ event ] + forTask: + type: object + title: ForTask + description: Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets. + required: [ for, do ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + for: + type: object + title: ForTaskConfiguration + description: The definition of the loop that iterates over a range of values. + unevaluatedProperties: false + properties: + each: + type: string + title: ForEach + description: The name of the variable used to store the current item being enumerated. + default: item + in: + type: string + title: ForIn + description: A runtime expression used to get the collection to enumerate. + at: + type: string + title: ForAt + description: The name of the variable used to store the index of the current item being enumerated. + default: index + required: [ in ] + while: + type: string + title: While + description: A runtime expression that represents the condition, if any, that must be met for the iteration to continue. + do: + $ref: '#/$defs/taskList' + title: ForTaskDo + listenTask: + type: object + title: ListenTask + description: Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems. + required: [ listen ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + listen: + type: object + title: ListenTaskConfiguration + description: The configuration of the listener to use. + unevaluatedProperties: false + properties: + to: + $ref: '#/$defs/eventConsumptionStrategy' + title: ListenTo + description: Defines the event(s) to listen to. + read: + type: string + enum: [ data, envelope, raw ] + default: data + title: ListenAndReadAs + description: Specifies how events are read during the listen operation. + required: [ to ] + foreach: + $ref: '#/$defs/subscriptionIterator' + title: ListenIterator + description: Configures the iterator, if any, for processing consumed event(s). + raiseTask: + type: object + title: RaiseTask + description: Intentionally triggers and propagates errors. + required: [ raise ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + raise: + type: object + title: RaiseTaskConfiguration + description: The definition of the error to raise. + unevaluatedProperties: false + properties: + error: + title: RaiseTaskError + oneOf: + - $ref: '#/$defs/error' + title: RaiseErrorDefinition + description: Defines the error to raise. + - type: string + title: RaiseErrorReference + description: The name of the error to raise + required: [ error ] + runTask: + type: object + title: RunTask + description: Provides the capability to execute external containers, shell commands, scripts, or workflows. + required: [ run ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + run: + type: object + title: RunTaskConfiguration + description: The configuration of the process to execute. + unevaluatedProperties: false + properties: + await: + type: boolean + default: true + title: AwaitProcessCompletion + description: Whether to await the process completion before continuing. + return: + type: string + title: ProcessReturnType + description: Configures the output of the process. + enum: [ stdout, stderr, code, all, none ] + default: stdout + oneOf: + - title: RunContainer + description: Enables the execution of external processes encapsulated within a containerized environment. + properties: + container: + type: object + title: Container + description: The configuration of the container to run. + unevaluatedProperties: false + properties: + image: + type: string + title: ContainerImage + description: The name of the container image to run. + name: + type: string + title: ContainerName + description: A runtime expression, if any, used to give specific name to the container. + command: + type: string + title: ContainerCommand + description: The command, if any, to execute on the container. + ports: + type: object + title: ContainerPorts + description: The container's port mappings, if any. + volumes: + type: object + title: ContainerVolumes + description: The container's volume mappings, if any. + environment: + type: object + title: ContainerEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + stdin: + type: string + title: ContainerStdin + description: A runtime expression, if any, passed as standard input (stdin) to the command or default container CMD + arguments: + type: array + title: ContainerArguments + description: A list of the arguments, if any, passed as argv to the command or default container CMD + items: + type: string + lifetime: + $ref: '#/$defs/containerLifetime' + title: ContainerLifetime + description: An object, if any, used to configure the container's lifetime + pullPolicy: + type: string + title: ContainerPullPolicy + description: Policy that controls how the container's image should be pulled from the registry. Defaults to `ifNotPresent` + enum: [ ifNotPresent, always, never ] + required: [ image ] + required: [ container ] + - title: RunScript + description: Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages. + properties: + script: + type: object + title: Script + description: The configuration of the script to run. + unevaluatedProperties: false + properties: + language: + type: string + title: ScriptLanguage + description: The language of the script to run. + stdin: + type: string + title: ScriptStdin + description: A runtime expression, if any, to the script as standard input (stdin). + arguments: + type: array + title: ScriptArguments + description: A list of the arguments, if any, to the script as argv + items: + type: string + environment: + type: object + title: ScriptEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured script process. + additionalProperties: true + oneOf: + - title: InlineScript + type: object + description: The script's code. + properties: + code: + type: string + title: InlineScriptCode + required: [ code ] + - title: ExternalScript + type: object + description: The script's resource. + properties: + source: + $ref: '#/$defs/externalResource' + title: ExternalScriptResource + required: [ source ] + required: [ language ] + required: [ script ] + - title: RunShell + description: Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks. + properties: + shell: + type: object + title: Shell + description: The configuration of the shell command to run. + unevaluatedProperties: false + properties: + command: + type: string + title: ShellCommand + description: The shell command to run. + stdin: + type: string + title: ShellStdin + description: A runtime expression, if any, to the shell command as standard input (stdin). + arguments: + type: array + title: ShellArguments + description: A list of the arguments, if any, to the shell command as argv + items: + type: string + environment: + type: object + title: ShellEnvironment + description: A key/value mapping of the environment variables, if any, to use when running the configured process. + additionalProperties: true + required: [ command ] + required: [ shell ] + - title: RunWorkflow + description: Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units. + properties: + workflow: + type: object + title: SubflowConfiguration + description: The configuration of the workflow to run. + unevaluatedProperties: false + properties: + namespace: + type: string + title: SubflowNamespace + description: The namespace the workflow to run belongs to. + name: + type: string + title: SubflowName + description: The name of the workflow to run. + version: + type: string + default: latest + title: SubflowVersion + description: The version of the workflow to run. Defaults to latest. + input: + type: object + title: SubflowInput + description: The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified. + additionalProperties: true + required: [ namespace, name, version ] + required: [ workflow ] + setTask: + type: object + title: SetTask + description: A task used to set data. + required: [ set ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + set: + oneOf: + - type: object + minProperties: 1 + additionalProperties: true + - type: string + title: SetTaskConfiguration + description: The data to set. + switchTask: + type: object + title: SwitchTask + description: Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria. + required: [ switch ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + switch: + type: array + title: SwitchTaskConfiguration + description: The definition of the switch to use. + minItems: 1 + items: + type: object + title: SwitchItem + minProperties: 1 + maxProperties: 1 + additionalProperties: + type: object + title: SwitchCase + description: The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met. + unevaluatedProperties: false + required: [ then ] + properties: + when: + type: string + title: SwitchCaseCondition + description: A runtime expression used to determine whether or not the case matches. + then: + $ref: '#/$defs/flowDirective' + title: SwitchCaseOutcome + description: The flow directive to execute when the case matches. + tryTask: + type: object + title: TryTask + description: Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones. + required: [ try, catch ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + try: + $ref: '#/$defs/taskList' + title: TryTaskConfiguration + description: The task(s) to perform. + catch: + type: object + title: TryTaskCatch + description: The object used to define the errors to catch. + unevaluatedProperties: false + properties: + errors: + type: object + title: CatchErrors + properties: + with: + $ref: '#/$defs/errorFilter' + description: static error filter + as: + type: string + title: CatchAs + description: The name of the runtime expression variable to save the error as. Defaults to 'error'. + when: + type: string + title: CatchWhen + description: A runtime expression used to determine whether to catch the filtered error. + exceptWhen: + type: string + title: CatchExceptWhen + description: A runtime expression used to determine whether not to catch the filtered error. + retry: + oneOf: + - $ref: '#/$defs/retryPolicy' + title: RetryPolicyDefinition + description: The retry policy to use, if any, when catching errors. + - type: string + title: RetryPolicyReference + description: The name of the retry policy to use, if any, when catching errors. + do: + $ref: '#/$defs/taskList' + title: TryTaskCatchDo + description: The definition of the task(s) to run when catching an error. + waitTask: + type: object + title: WaitTask + description: Allows workflows to pause or delay their execution for a specified period of time. + required: [ wait ] + unevaluatedProperties: false + allOf: + - $ref: '#/$defs/taskBase' + - properties: + wait: + $ref: '#/$defs/duration' + title: WaitTaskConfiguration + description: The amount of time to wait. + flowDirective: + title: FlowDirective + description: Represents different transition options for a workflow. + anyOf: + - title: FlowDirectiveEnum + type: string + enum: [ continue, exit, end ] + default: continue + - type: string + referenceableAuthenticationPolicy: + type: object + title: ReferenceableAuthenticationPolicy + description: Represents a referenceable authentication policy. + unevaluatedProperties: false + oneOf: + - title: AuthenticationPolicyReference + description: The reference of the authentication policy to use. + properties: + use: + type: string + minLength: 1 + title: ReferenceableAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + - $ref: '#/$defs/authenticationPolicy' + secretBasedAuthenticationPolicy: + type: object + title: SecretBasedAuthenticationPolicy + description: Represents an authentication policy based on secrets. + unevaluatedProperties: false + properties: + use: + type: string + minLength: 1 + title: SecretBasedAuthenticationPolicyName + description: The name of the authentication policy to use. + required: [use] + authenticationPolicy: + type: object + title: AuthenticationPolicy + description: Defines an authentication policy. + oneOf: + - title: BasicAuthenticationPolicy + description: Use basic authentication. + properties: + basic: + type: object + title: BasicAuthenticationPolicyConfiguration + description: The configuration of the basic authentication policy. + unevaluatedProperties: false + oneOf: + - title: BasicAuthenticationProperties + description: Inline configuration of the basic authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BasicAuthenticationPolicySecret + description: Secret based configuration of the basic authentication policy. + required: [ basic ] + - title: BearerAuthenticationPolicy + description: Use bearer authentication. + properties: + bearer: + type: object + title: BearerAuthenticationPolicyConfiguration + description: The configuration of the bearer authentication policy. + unevaluatedProperties: false + oneOf: + - title: BearerAuthenticationProperties + description: Inline configuration of the bearer authentication policy. + properties: + token: + type: string + description: The bearer token to use. + required: [ token ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: BearerAuthenticationPolicySecret + description: Secret based configuration of the bearer authentication policy. + required: [ bearer ] + - title: DigestAuthenticationPolicy + description: Use digest authentication. + properties: + digest: + type: object + title: DigestAuthenticationPolicyConfiguration + description: The configuration of the digest authentication policy. + unevaluatedProperties: false + oneOf: + - title: DigestAuthenticationProperties + description: Inline configuration of the digest authentication policy. + properties: + username: + type: string + description: The username to use. + password: + type: string + description: The password to use. + required: [ username, password ] + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: DigestAuthenticationPolicySecret + description: Secret based configuration of the digest authentication policy. + required: [ digest ] + - title: OAuth2AuthenticationPolicy + description: Use OAuth2 authentication. + properties: + oauth2: + type: object + title: OAuth2AuthenticationPolicyConfiguration + description: The configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + type: object + title: OAuth2ConnectAuthenticationProperties + description: The inline configuration of the OAuth2 authentication policy. + unevaluatedProperties: false + properties: + endpoints: + type: object + title: OAuth2AuthenticationPropertiesEndpoints + description: The endpoint configurations for OAuth2. + properties: + token: + type: string + format: uri-template + default: /oauth2/token + title: OAuth2TokenEndpoint + description: The relative path to the token endpoint. Defaults to `/oauth2/token`. + revocation: + type: string + format: uri-template + default: /oauth2/revoke + title: OAuth2RevocationEndpoint + description: The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`. + introspection: + type: string + format: uri-template + default: /oauth2/introspect + title: OAuth2IntrospectionEndpoint + description: The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`. + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OAuth2AuthenticationPolicySecret + description: Secret based configuration of the OAuth2 authentication policy. + required: [ oauth2 ] + - title: OpenIdConnectAuthenticationPolicy + description: Use OpenIdConnect authentication. + properties: + oidc: + type: object + title: OpenIdConnectAuthenticationPolicyConfiguration + description: The configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + oneOf: + - $ref: '#/$defs/oauth2AuthenticationProperties' + title: OpenIdConnectAuthenticationProperties + description: The inline configuration of the OpenIdConnect authentication policy. + unevaluatedProperties: false + - $ref: '#/$defs/secretBasedAuthenticationPolicy' + title: OpenIdConnectAuthenticationPolicySecret + description: Secret based configuration of the OpenIdConnect authentication policy. + required: [ oidc ] + oauth2AuthenticationProperties: + type: object + title: OAuth2AuthenticationData + description: Inline configuration of the OAuth2 authentication policy. + properties: + authority: + $ref: '#/$defs/uriTemplate' + title: OAuth2AuthenticationDataAuthority + description: The URI that references the OAuth2 authority to use. + grant: + type: string + enum: [ authorization_code, client_credentials, password, refresh_token, 'urn:ietf:params:oauth:grant-type:token-exchange'] + title: OAuth2AuthenticationDataGrant + description: The grant type to use. + client: + type: object + title: OAuth2AuthenticationDataClient + description: The definition of an OAuth2 client. + unevaluatedProperties: false + properties: + id: + type: string + title: ClientId + description: The client id to use. + secret: + type: string + title: ClientSecret + description: The client secret to use, if any. + assertion: + type: string + title: ClientAssertion + description: A JWT containing a signed assertion with your application credentials. + authentication: + type: string + enum: [ client_secret_basic, client_secret_post, client_secret_jwt, private_key_jwt, none ] + default: client_secret_post + title: ClientAuthentication + description: The authentication method to use to authenticate the client. + request: + type: object + title: OAuth2TokenRequest + description: The configuration of an OAuth2 token request + properties: + encoding: + type: string + enum: [ 'application/x-www-form-urlencoded', 'application/json' ] + default: 'application/x-www-form-urlencoded' + title: Oauth2TokenRequestEncoding + issuers: + type: array + title: OAuth2Issuers + description: A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens. + items: + type: string + scopes: + type: array + title: OAuth2AuthenticationDataScopes + description: The scopes, if any, to request the token for. + items: + type: string + audiences: + type: array + title: OAuth2AuthenticationDataAudiences + description: The audiences, if any, to request the token for. + items: + type: string + username: + type: string + title: OAuth2AuthenticationDataUsername + description: The username to use. Used only if the grant type is Password. + password: + type: string + title: OAuth2AuthenticationDataPassword + description: The password to use. Used only if the grant type is Password. + subject: + $ref: '#/$defs/oauth2Token' + title: OAuth2AuthenticationDataSubject + description: The security token that represents the identity of the party on behalf of whom the request is being made. + actor: + $ref: '#/$defs/oauth2Token' + title: OAuth2AuthenticationDataActor + description: The security token that represents the identity of the acting party. + oauth2Token: + type: object + title: OAuth2TokenDefinition + description: Represents an OAuth2 token. + unevaluatedProperties: false + properties: + token: + type: string + title: OAuth2Token + description: The security token to use. + type: + type: string + title: OAuth2TokenType + description: The type of the security token to use. + required: [ token, type ] + duration: + oneOf: + - type: object + minProperties: 1 + unevaluatedProperties: false + properties: + days: + type: integer + title: DurationDays + description: Number of days, if any. + hours: + type: integer + title: DurationHours + description: Number of days, if any. + minutes: + type: integer + title: DurationMinutes + description: Number of minutes, if any. + seconds: + type: integer + title: DurationSeconds + description: Number of seconds, if any. + milliseconds: + type: integer + title: DurationMilliseconds + description: Number of milliseconds, if any. + title: DurationInline + description: The inline definition of a duration. + - $ref: '#/$defs/runtimeExpression' + title: DurationExpression + description: Runtime expression that generates an ISO 8601 + - type: string + pattern: '^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$' + title: DurationLiteral + description: The Literal ISO 8601 representation of a duration. + error: + type: object + title: Error + description: Represents an error. + unevaluatedProperties: false + properties: + type: + title: ErrorType + description: A URI reference that identifies the error type. + oneOf: + - title: LiteralErrorType + $ref: '#/$defs/uriTemplate' + description: The literal error type. + - title: ExpressionErrorType + $ref: '#/$defs/runtimeExpression' + description: An expression based error type. + status: + type: integer + title: ErrorStatus + description: The status code generated by the origin for this occurrence of the error. + instance: + title: ErrorInstance + description: A JSON Pointer used to reference the component the error originates from. + oneOf: + - title: LiteralErrorInstance + description: The literal error instance. + type: string + format: json-pointer + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorInstance + description: An expression based error instance. + title: + description: A short, human-readable summary of the error. + title: ErrorTitle + anyOf: + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorTitle + - type: string + title: LiteralErrorTitle + detail: + title: ErrorDetails + description: A human-readable explanation specific to this occurrence of the error. + anyOf: + - $ref: '#/$defs/runtimeExpression' + title: ExpressionErrorDetails + - type: string + title: LiteralErrorDetails + required: [ type, status ] + errorFilter: + type: object + title: ErrorFilter + description: Error filtering base on static values. For error filtering on dynamic values, use catch.when property + minProperties: 1 + properties: + type: + type: string + description: if present, means this value should be used for filtering + status: + type: integer + description: if present, means this value should be used for filtering + instance: + type: string + description: if present, means this value should be used for filtering + title: + type: string + description: if present, means this value should be used for filtering + details: + type: string + description: if present, means this value should be used for filtering + uriTemplate: + title: UriTemplate + anyOf: + - title: LiteralUriTemplate + type: string + format: uri-template + pattern: "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + - title: LiteralUri + type: string + format: uri + pattern: "^[A-Za-z][A-Za-z0-9+\\-.]*://.*" + endpoint: + title: Endpoint + description: Represents an endpoint. + oneOf: + - $ref: '#/$defs/runtimeExpression' + - $ref: '#/$defs/uriTemplate' + - title: EndpointConfiguration + type: object + unevaluatedProperties: false + properties: + uri: + title: EndpointUri + description: The endpoint's URI. + oneOf: + - title: LiteralEndpointURI + description: The literal endpoint's URI. + $ref: '#/$defs/uriTemplate' + - title: ExpressionEndpointURI + $ref: '#/$defs/runtimeExpression' + description: An expression based endpoint's URI. + authentication: + $ref: '#/$defs/referenceableAuthenticationPolicy' + title: EndpointAuthentication + description: The authentication policy to use. + required: [ uri ] + eventProperties: + type: object + title: EventProperties + description: Describes the properties of an event. + properties: + id: + type: string + title: EventId + description: The event's unique identifier. + source: + title: EventSource + description: Identifies the context in which an event happened. + oneOf: + - $ref: '#/$defs/uriTemplate' + - $ref: '#/$defs/runtimeExpression' + type: + type: string + title: EventType + description: This attribute contains a value describing the type of event related to the originating occurrence. + time: + title: EventTime + description: When the event occured. + oneOf: + - title: LiteralTime + type: string + format: date-time + - $ref: '#/$defs/runtimeExpression' + subject: + type: string + title: EventSubject + description: The subject of the event. + datacontenttype: + type: string + title: EventDataContentType + description: Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format. + dataschema: + title: EventDataschema + description: The schema describing the event format. + oneOf: + - title: LiteralDataSchema + $ref: '#/$defs/uriTemplate' + description: The literal event data schema. + - title: ExpressionDataSchema + $ref: '#/$defs/runtimeExpression' + description: An expression based event data schema. + data: + title: EventData + description: The event's payload data + anyOf: + - $ref: '#/$defs/runtimeExpression' + - {} + additionalProperties: true + eventConsumptionStrategy: + type: object + title: EventConsumptionStrategy + description: Describe the event consumption strategy to adopt. + unevaluatedProperties: false + oneOf: + - title: AllEventConsumptionStrategy + properties: + all: + type: array + title: AllEventConsumptionStrategyConfiguration + description: A list containing all the events that must be consumed. + items: + $ref: '#/$defs/eventFilter' + required: [ all ] + - title: AnyEventConsumptionStrategy + properties: + any: + type: array + title: AnyEventConsumptionStrategyConfiguration + description: A list containing any of the events to consume. + items: + $ref: '#/$defs/eventFilter' + until: + oneOf: + - type: string + title: AnyEventUntilCondition + description: A runtime expression condition evaluated after consuming an event and which determines whether or not to continue listening. + - allOf: + - $ref: '#/$defs/eventConsumptionStrategy' + description: The strategy that defines the event(s) to consume to stop listening. + - properties: + until: false + title: AnyEventUntilConsumed + required: [ any ] + - title: OneEventConsumptionStrategy + properties: + one: + $ref: '#/$defs/eventFilter' + title: OneEventConsumptionStrategyConfiguration + description: The single event to consume. + required: [ one ] + eventFilter: + type: object + title: EventFilter + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + unevaluatedProperties: false + properties: + with: + $ref: '#/$defs/eventProperties' + minProperties: 1 + title: WithEvent + description: An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes. + correlate: + type: object + title: EventFilterCorrelate + description: A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics. + additionalProperties: + type: object + properties: + from: + type: string + title: CorrelateFrom + description: A runtime expression used to extract the correlation value from the filtered event. + expect: + type: string + title: CorrelateExpect + description: A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation. + required: [ from ] + required: [ with ] + extension: + type: object + title: Extension + description: The definition of an extension. + unevaluatedProperties: false + properties: + extend: + type: string + enum: [ call, composite, emit, for, listen, raise, run, set, switch, try, wait, all ] + title: ExtensionTarget + description: The type of task to extend. + when: + type: string + title: ExtensionCondition + description: A runtime expression, if any, used to determine whether or not the extension should apply in the specified context. + before: + $ref: '#/$defs/taskList' + title: ExtensionDoBefore + description: The task(s) to execute before the extended task, if any. + after: + $ref: '#/$defs/taskList' + title: ExtensionDoAfter + description: The task(s) to execute after the extended task, if any. + required: [ extend ] + externalResource: + type: object + title: ExternalResource + description: Represents an external resource. + unevaluatedProperties: false + properties: + name: + type: string + title: ExternalResourceName + description: The name of the external resource, if any. + endpoint: + $ref: '#/$defs/endpoint' + title: ExternalResourceEndpoint + description: The endpoint of the external resource. + required: [ endpoint ] + input: + type: object + title: Input + description: Configures the input of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: InputSchema + description: The schema used to describe and validate the input of the workflow or task. + from: + title: InputFrom + description: A runtime expression, if any, used to mutate and/or filter the input of the workflow or task. + oneOf: + - type: string + - type: object + output: + type: object + title: Output + description: Configures the output of a workflow or task. + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: OutputSchema + description: The schema used to describe and validate the output of the workflow or task. + as: + title: OutputAs + description: A runtime expression, if any, used to mutate and/or filter the output of the workflow or task. + oneOf: + - type: string + - type: object + export: + type: object + title: Export + description: Set the content of the context. . + unevaluatedProperties: false + properties: + schema: + $ref: '#/$defs/schema' + title: ExportSchema + description: The schema used to describe and validate the workflow context. + as: + title: ExportAs + description: A runtime expression, if any, used to export the output data to the context. + oneOf: + - type: string + - type: object + retryPolicy: + type: object + title: RetryPolicy + description: Defines a retry policy. + unevaluatedProperties: false + properties: + when: + type: string + title: RetryWhen + description: A runtime expression, if any, used to determine whether or not to retry running the task, in a given context. + exceptWhen: + type: string + title: RetryExcepWhen + description: A runtime expression used to determine whether or not to retry running the task, in a given context. + delay: + $ref: '#/$defs/duration' + title: RetryDelay + description: The duration to wait between retry attempts. + backoff: + type: object + title: RetryBackoff + description: The retry duration backoff. + unevaluatedProperties: false + oneOf: + - title: ConstantBackoff + properties: + constant: + type: object + description: The definition of the constant backoff to use, if any. + required: [ constant ] + - title: ExponentialBackOff + properties: + exponential: + type: object + description: The definition of the exponential backoff to use, if any. + required: [ exponential ] + - title: LinearBackoff + properties: + linear: + type: object + description: The definition of the linear backoff to use, if any. + required: [ linear ] + limit: + type: object + title: RetryLimit + unevaluatedProperties: false + properties: + attempt: + type: object + title: RetryLimitAttempt + unevaluatedProperties: false + properties: + count: + type: integer + title: RetryLimitAttemptCount + description: The maximum amount of retry attempts, if any. + duration: + $ref: '#/$defs/duration' + title: RetryLimitAttemptDuration + description: The maximum duration for each retry attempt. + duration: + $ref: '#/$defs/duration' + title: RetryLimitDuration + description: The duration limit, if any, for all retry attempts. + description: The retry limit, if any. + jitter: + type: object + title: RetryPolicyJitter + description: The parameters, if any, that control the randomness or variability of the delay between retry attempts. + unevaluatedProperties: false + properties: + from: + $ref: '#/$defs/duration' + title: RetryPolicyJitterFrom + description: The minimum duration of the jitter range. + to: + $ref: '#/$defs/duration' + title: RetryPolicyJitterTo + description: The maximum duration of the jitter range. + required: [ from, to ] + schema: + type: object + title: Schema + description: Represents the definition of a schema. + unevaluatedProperties: false + properties: + format: + type: string + default: json + title: SchemaFormat + description: The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`. + oneOf: + - title: SchemaInline + properties: + document: + description: The schema's inline definition. + required: [ document ] + - title: SchemaExternal + properties: + resource: + $ref: '#/$defs/externalResource' + title: SchemaExternalResource + description: The schema's external resource. + required: [ resource ] + timeout: + type: object + title: Timeout + description: The definition of a timeout. + unevaluatedProperties: false + properties: + after: + $ref: '#/$defs/duration' + title: TimeoutAfter + description: The duration after which to timeout. + required: [ after ] + catalog: + type: object + title: Catalog + description: The definition of a resource catalog. + unevaluatedProperties: false + properties: + endpoint: + $ref: '#/$defs/endpoint' + title: CatalogEndpoint + description: The root URL where the catalog is hosted. + required: [ endpoint ] + runtimeExpression: + type: string + title: RuntimeExpression + description: A runtime expression. + pattern: "^\\s*\\$\\{.+\\}\\s*$" + containerLifetime: + type: object + title: ContainerLifetime + description: The configuration of a container's lifetime + unevaluatedProperties: false + properties: + cleanup: + type: string + title: ContainerCleanupPolicy + description: The container cleanup policy to use + enum: [ always, never, eventually ] + default: never + after: + $ref: '#/$defs/duration' + title: ContainerLifetimeDuration + description: The duration after which to cleanup the container, in case the cleanup policy has been set to 'eventually' + required: [ cleanup ] + if: + properties: + cleanup: + const: eventually + then: + required: [ after ] + else: + not: + required: [ after ] + processResult: + type: object + title: ProcessResult + description: The object returned by a run task when its return type has been set 'all'. + unevaluatedProperties: false + properties: + code: + type: integer + title: ProcessExitCode + description: The process's exit code. + stdout: + type: string + title: ProcessStandardOutput + description: The content of the process's STDOUT. + stderr: + type: string + title: ProcessStandardError + description: The content of the process's STDERR. + required: [ code, stdout, stderr ] + asyncApiServer: + type: object + title: AsyncApiServer + description: Configures the target server of an AsyncAPI operation. + unevaluatedProperties: false + properties: + name: + type: string + title: AsyncApiServerName + description: The target server's name. + variables: + type: object + title: AsyncApiServerVariables + description: The target server's variables, if any. + required: [ name ] + asyncApiOutboundMessage: + type: object + title: AsyncApiOutboundMessage + description: An object used to configure the message to publish using the target operation. + unevaluatedProperties: false + properties: + payload: + type: object + title: AsyncApiMessagePayload + description: The message's payload, if any. + headers: + type: object + title: AsyncApiMessageHeaders + description: The message's headers, if any. + asyncApiInboundMessage: + title: AsyncApiInboundMessage + description: Represents a message counsumed by an AsyncAPI subscription. + allOf: + - $ref: '#/$defs/asyncApiOutboundMessage' + - properties: + correlationId: + type: string + title: AsyncApiMessageCorrelationId + description: The message's correlation id, if any. + asyncApiSubscription: + type: object + title: AsyncApiSubscription + description: An object used to configure the subscription to messages consumed using the target operation. + unevaluatedProperties: false + properties: + filter: + $ref: '#/$defs/runtimeExpression' + title: AsyncApiSubscriptionCorrelation + description: A runtime expression, if any, used to filter consumed messages. + consume: + $ref: '#/$defs/asyncApiMessageConsumptionPolicy' + title: AsyncApiMessageConsumptionPolicy + description: An object used to configure the subscription's message consumption policy. + foreach: + $ref: '#/$defs/subscriptionIterator' + title: AsyncApiSubscriptionIterator + description: Configures the iterator, if any, for processing consumed messages(s). + required: [ consume ] + asyncApiMessageConsumptionPolicy: + type: object + title: AsyncApiMessageConsumptionPolicy + description: An object used to configure a subscription's message consumption policy. + unevaluatedProperties: false + properties: + for: + $ref: '#/$defs/duration' + title: AsyncApiMessageConsumptionPolicyFor + description: Specifies the time period over which messages will be consumed. + oneOf: + - properties: + amount: + type: integer + description: The amount of (filtered) messages to consume before disposing of the subscription. + title: AsyncApiMessageConsumptionPolicyAmount + required: [ amount ] + - properties: + while: + $ref: '#/$defs/runtimeExpression' + description: A runtime expression evaluated after each consumed (filtered) message to decide if message consumption should continue. + title: AsyncApiMessageConsumptionPolicyWhile + required: [ while ] + - properties: + until: + $ref: '#/$defs/runtimeExpression' + description: A runtime expression evaluated before each consumed (filtered) message to decide if message consumption should continue. + title: AsyncApiMessageConsumptionPolicyUntil + required: [ until ] + subscriptionIterator: + type: object + title: SubscriptionIterator + description: Configures the iteration over each item (event or message) consumed by a subscription. + unevaluatedProperties: false + properties: + item: + type: string + title: SubscriptionIteratorItem + description: The name of the variable used to store the current item being enumerated. + default: item + at: + type: string + title: SubscriptionIteratorIndex + description: The name of the variable used to store the index of the current item being enumerated. + default: index + do: + $ref: '#/$defs/taskList' + title: SubscriptionIteratorTasks + description: The tasks to perform for each consumed item. + output: + $ref: '#/$defs/output' + title: SubscriptionIteratorOutput + description: An object, if any, used to customize the item's output and to document its schema. + export: + $ref: '#/$defs/export' + title: SubscriptionIteratorExport + description: An object, if any, used to customize the content of the workflow context. \ No newline at end of file diff --git a/src/components/BlogPostsList.astro b/src/components/BlogPostsList.astro new file mode 100644 index 0000000..ffc7646 --- /dev/null +++ b/src/components/BlogPostsList.astro @@ -0,0 +1,27 @@ +--- +import type { CollectionEntry } from 'astro:content' +import FormattedDate from './FormattedDate.astro'; + +interface Props { + posts: CollectionEntry<'blog'>[] +} + +const { posts } = Astro.props; +--- + + \ No newline at end of file diff --git a/src/components/Card.astro b/src/components/Card.astro new file mode 100644 index 0000000..14d9dfe --- /dev/null +++ b/src/components/Card.astro @@ -0,0 +1,77 @@ +--- +interface Props { + title?: string; + alignment?: 'center' | 'start' | 'end'; + icon?: string; + image?: string; + imageDark?: string; + imageSize?: 'small' | 'medium'; +} + +const { + title, + alignment = 'center', + icon, + image, + imageDark, + imageSize = 'small', +} = Astro.props; +--- + +
+
+ { (image || imageDark) && +
+ { image && } + { imageDark && } +
+ } + { icon && } +

+ { title && title } +

+ +
+
+ + \ No newline at end of file diff --git a/src/components/Footer.astro b/src/components/Footer.astro new file mode 100644 index 0000000..499c166 --- /dev/null +++ b/src/components/Footer.astro @@ -0,0 +1,38 @@ +--- +import { + GITHUB_LINK, + SLACK_LINK, + X_TWITTER_LINK, + LINKEDIN_LINK, + DEV_MAILING_LIST_LINK, + RSS_LINK +} from "../consts"; +import Section from "./Section.astro"; +--- + +
+

👉Star our GitHub Repository

+
+