diff --git a/.github/workflows/if-nodejs-pr-testing.yml b/.github/workflows/if-nodejs-pr-testing.yml
new file mode 100644
index 00000000000..9ce9f9a19cf
--- /dev/null
+++ b/.github/workflows/if-nodejs-pr-testing.yml
@@ -0,0 +1,78 @@
+# This action is centrally managed in https://github.com/asyncapi/.github/
+# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo
+
+# It does magic only if there is package.json file in the root of the project
+name: PR testing - if Node project
+
+on:
+ pull_request:
+ types: [opened, reopened, synchronize, ready_for_review]
+
+jobs:
+ test-nodejs-pr:
+ name: Test NodeJS PR - ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ steps:
+ - if: >
+ !github.event.pull_request.draft && !(
+ (github.actor == 'asyncapi-bot' && (
+ startsWith(github.event.pull_request.title, 'ci: update of files from global .github repo') ||
+ startsWith(github.event.pull_request.title, 'chore(release):')
+ )) ||
+ (github.actor == 'asyncapi-bot-eve' && (
+ startsWith(github.event.pull_request.title, 'ci: update of files from global .github repo') ||
+ startsWith(github.event.pull_request.title, 'chore(release):')
+ )) ||
+ (github.actor == 'allcontributors[bot]' &&
+ startsWith(github.event.pull_request.title, 'docs: add')
+ )
+ )
+ id: should_run
+ name: Should Run
+ run: echo "shouldrun=true" >> $GITHUB_OUTPUT
+ - if: steps.should_run.outputs.shouldrun == 'true'
+ name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows
+ run: |
+ git config --global core.autocrlf false
+ git config --global core.eol lf
+ - if: steps.should_run.outputs.shouldrun == 'true'
+ name: Checkout repository
+ uses: actions/checkout@v3
+ - if: steps.should_run.outputs.shouldrun == 'true'
+ name: Check if Node.js project and has package.json
+ id: packagejson
+ run: test -e ./package.json && echo "exists=true" >> $GITHUB_OUTPUT || echo "exists=false" >> $GITHUB_OUTPUT
+ shell: bash
+ - if: steps.packagejson.outputs.exists == 'true'
+ name: Check package-lock version
+ uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master
+ id: lockversion
+ - if: steps.packagejson.outputs.exists == 'true'
+ name: Setup Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: "${{ steps.lockversion.outputs.version }}"
+ cache: 'npm'
+ cache-dependency-path: '**/package-lock.json'
+ - if: steps.packagejson.outputs.exists == 'true'
+ name: Install dependencies
+ id: first-installation
+ run: npm install --loglevel verbose
+ continue-on-error: true
+ - if: steps.first-installation.outputs.status == 'failure' && steps.packagejson.outputs.exists == 'true'
+ name: Clear NPM cache and install deps again
+ run: |
+ npm cache clean --force
+ npm install --loglevel verbose
+ - if: steps.packagejson.outputs.exists == 'true'
+ name: Test
+ run: npm test --if-present
+ - if: steps.packagejson.outputs.exists == 'true'
+ name: Run linter
+ run: npm run lint --if-present
+ - if: steps.packagejson.outputs.exists == 'true'
+ name: Run release assets generation to make sure PR does not break it
+ run: npm run generate:assets --if-present
diff --git a/ADDING_TRANSLATIONS.md b/ADDING_TRANSLATIONS.md
new file mode 100644
index 00000000000..e4a26f9fefb
--- /dev/null
+++ b/ADDING_TRANSLATIONS.md
@@ -0,0 +1,314 @@
+# Adding Translations to AsyncAPI Website
+
+We appreciate your valuable contributions to the AsyncAPI website, whether it's adding or improving existing translations.
+
+## Table of contents
+- [Improving existing translations:](#improving-existing-translations)
+- [Adding translations to a partially localized page:](#adding-translations-to-a-partially-localized-page)
+- [Adding translations to a new page:](#adding-translations-to-a-new-page)
+- [Adding a new locale:](#adding-a-new-locale)
+
+## Improving existing translations
+
+To modify or improve existing translations, simply navigate to the `locales` folder and edit the appropriate `JSON` files for your preferred language.
+
+Here is an example directory structure for the `locales` folder. It contains sub-folders named after different languages, each of which contains `JSON` files with key-value pairs for translations.
+
+The file `common.json` contains common translation keys such as buttons and CTAs. The other JSON files are specific to certain pages on the website. For instance, `tools.json` includes translations for all the tools-related pages on the website.
+
+```
+📦locales
+ ┣ 📂de
+ ┃ ┣ 📜common.json
+ ┃ ┣ 📜landing-page.json
+ ┃ ┗ 📜tools.json
+ ┃ ┗ 📜....json
+ ┗ 📂en
+ ┃ ┣ 📜common.json
+ ┃ ┣ 📜landing-page.json
+ ┃ ┗ 📜tools.json
+ ┃ ┗ 📜....json
+```
+
+To modify a `Landing Page`'s heading:
+- Navigate to the `locales` folder.
+- Select a language, e.g. `de` (German) - go to the `de` folder.
+- Open `landing-page.json`.
+- Change the values according to your needs.
+- Create a pull request with the changes.
+
+## Adding translations to a partially localized page
+
+The text on any given page may not have a translation available in your language.
+
+Use the translation hook with the key specified in the `locales` folder.
+
+Suppose the Landing Page has a button that is still in English when the language is set to German:
+- Navigate to the file where the component is defined.
+- Import the `useTranslation` hook from `lib/i18n`.
+- Extract the translation function from the hook `const { t } = useTranslation();`.
+- Use it to pass the key of the required translation value. Make sure to add the required key to the `locales` folder according to the page's scope. In this example, we are adding translation for a button, since all translation keys related to buttons need to be specified in `common.json`.
+
+Example:
+
+`ICSFileButton.js`
+```diff
+...
++ import { useTranslation } from '../../lib/i18n';
+
+export default function ICSFButton({
+- text = 'Download ICS File',
++ text = 'icsFileBtn',
+ ...
+}) {
+
++ const { t } = useTranslation('common');
+
+ return (
+
+ )
+}
+```
+
+`en/common.json`
+```diff
+{
++ "icsFileBtn": "Download ICS File",
+}
+```
+
+`de/common.json`
+```diff
+{
++ "icsFileBtn": "ICS-Datei herunterladen",
+}
+```
+
+Ensure consistent naming in all `locales/[lang]/[file].json` files, and add a translation for all the locales present in the `locales` folder.
+
+> **NOTE**: You may also need to fix the cypress tests after adding a new translation key.
+
+## Adding translations to a new page
+
+The process for adding translations to a page that is not yet available in any existing locale is different from adding translations to a specific part of the page that is partially translated.
+
+**1. Create new JSON Files**
+ - Navigate to the `locales` folder.
+ - Create new `JSON` files with the same name in each of the `locales` folder. You may not need to create new `JSON` files in case there already exists a file with the same scope as your page. For example, all pages under the `tools/*` use the translation keys defined in `locales/[lang]/tools.json`.
+ - Skip to `Step 3` in case you haven't created new `JSON` files.
+
+**2. Modify the i18n configuration**
+ - Navigate to the `next-i18next-static-site.config.js` file in the root of the project folder.
+ - Add the name of the newly added `JSON` file to the `namespaces` array.
+
+**3. Add the static site functions**
+ - Copy the page(s) that you want to be localized to the `pages/[lang]/` folder according to the appropriate directory structure.
+ - Add the following functions at the bottom of the file for `i18n` to work.
+ ```js
+ export async function getStaticPaths() {
+ const paths = getAllLanguageSlugs();
+ return {
+ paths,
+ fallback: false,
+ };
+ }
+
+ export async function getStaticProps({ params }) {
+ const language = getLanguage(params.lang);
+ return {
+ props: {
+ language,
+ },
+ };
+ }
+ ```
+
+ - Follow the [Adding Translations guide](#adding-translations) to start translating the components
+
+**4. Configure i18n routing**
+After adding a new internationalized page, test it to sure the page is being served on the website when someone visits it.
+ - Replace the `next/link` component with the `LinkComponent` from `components/link.js` in the files where the page's `href` is being referenced.
+ - Make sure to add the exact same `href` to the `lib/i18nPaths.js` in the respective locales which support that `href`.
+
+ For example, if you want to translate the `pages/newsletter/index.js` page, so that if someone visits `asyncapi.com/de/newsletter`, it shows the page in the `German` locale.
+
+ - Add new `JSON` files to the `locales/en` and `locales/de` folder.
+
+ `locales` folder directory structure
+ ```diff
+ locales
+ ┣ de
+ ┃ ┣ common.json
+ ┃ ┣ landing-page.json
+ + ┃ ┣ newsletter.json
+ ┃ ┗ tools.json
+ â”— en
+ ┃ ┣ common.json
+ ┃ ┣ landing-page.json
+ + ┃ ┣ newsletter.json
+ ┃ ┗ tools.json
+ ```
+
+ - Modify the `i18n` config to include the `newsletter` namespace.
+
+ ```diff
+ module.exports = {
+ i18n: {
+ languages: ["en", "de"],
+ defaultLanguage: "en",
+ - namespaces: ["landing-page", "common", "tools"],
+ + namespaces: ["landing-page", "common", "tools", "newsletter"],
+ defaultNamespace: "landing-page",
+ },
+ };
+ ```
+
+ - Copy and add static site functions to the `newsletter/index.js` page.
+
+ `pages` folder directory structure
+ ```diff
+ [lang]
+ + ┣ newsletter
+ + ┃ ┗ index.js
+ ┣ tools
+ ┃ ┗ cli.js
+ â”— index.js
+ ```
+
+ `newsletter/index.js`
+ ```diff
+ ...
+ + import {
+ + getAllLanguageSlugs,
+ + getLanguage,
+ + useTranslation
+ + } from "../../lib/i18n";
+
+ export default function NewsletterIndexPage() {
+
+ + const { t } = useTranslation('newsletter');
+
+ return (
+ ...
+ );
+ }
+
+ + export async function getStaticPaths() {
+ + const paths = getAllLanguageSlugs();
+ + return {
+ + paths,
+ + fallback: false,
+ + };
+ + }
+ +
+ + export async function getStaticProps({ params }) {
+ + const language = getLanguage(params.lang);
+ + return {
+ + props: {
+ + language,
+ + },
+ + };
+ + }
+ ```
+
+ - Add custom route `LinkComponent` wherever the `next/link` is used for routing to the `/newsletter` href.
+
+ `lib/i18nPaths.js`
+ ```diff
+ const i18nPaths = {
+ en: [
+ "/tools/cli"
+ + "/newsletter"
+ ],
+ de: [
+ "/tools/cli"
+ + "/newsletter"
+ ]
+ };
+
+ export default i18nPaths;
+ ```
+
+You are now done with adding the localization to the `newsletter` page.
+
+> **Note**: Make sure to fix the Cypress tests after using the `useTranslation()` hook inside any component that Cypress is testing.
+
+## Adding a new locale
+
+AsyncAPI welcomes people from all over the world.
+
+There exist a few locales like `en` (English) and `de` (German) which have available localizations present.
+
+If you want to add a new locale like `fr` to serve pages in the French locale on the AsyncAPI website, follow these steps.
+
+**1. Create new JSON Files**
+ - Navigate to the `locales` folder.
+ - Create a new folder with the name of the locale you want to introduce.
+ - Create new `JSON` files with the same name as present in each of the other `locales` folders.
+ - Copy the existing `JSON` files present in the `en` folder. Change the values of those translation keys according to the new localization.
+
+**2. Modify i18n configuration**
+ - Navigate to the `next-i18next-static-site.config.js` file in the root of the project folder.
+ - Add the name of the newly added `locale` to the `languages` array.
+
+**3. Configure i18n routing**
+After adding a new internationalized page, ensure it is being served on the website when someone visits.
+ - Make sure to add the same `href` to the `lib/i18nPaths.js` in the respective locales supporting that `href`.
+
+If you have added the 'fr' locale and translated the 'tools/cli' page, clicking 'Tools -> CLI' in the navigation menu will redirect the user to 'asyncapi.com/fr/tools/cli'.
+
+`locales` folder structure
+```diff
+ locales
+ ┣ de
+ ┃ ┣ common.json
+ ┃ ┣ landing-page.json
+ ┃ ┗ tools.json
+ ┣ en
+ ┃ ┣ common.json
+ ┃ ┣ landing-page.json
+ ┃ ┗ tools.json
++ â”— fr
++ ┃ ┣ common.json
++ ┃ ┣ landing-page.json
++ ┃ ┗ tools.json
+```
+
+- Change the `next-i18next-static-site.config.js` config.
+
+`next-i18next-static-site.config.js`
+```diff
+module.exports = {
+ i18n: {
+- languages: ["en", "de"],
++ languages: ["en", "de", "fr"],
+ defaultLanguage: "en",
+ namespaces: ["landing-page", "common", "tools"],
+ defaultNamespace: "landing-page",
+ },
+};
+```
+ - Add new locale routing.
+
+`lib/i18nPaths.js`
+```diff
+const i18nPaths = {
+ en: [
+ "/tools/cli"
+ ],
+ de: [
+ "/tools/cli"
+ ],
++ fr: [
++ "/tools/cli"
++ ]
+};
+
+export default i18nPaths;
+```
+
+You are now done with adding a new locale. Congrats 🚀
diff --git a/components/layout/BlogLayout.js b/components/layout/BlogLayout.js
index 1d379b20585..41cf11f2303 100644
--- a/components/layout/BlogLayout.js
+++ b/components/layout/BlogLayout.js
@@ -5,10 +5,8 @@ import moment from 'moment';
import Head from '../Head';
import BlogContext from '../../context/BlogContext';
import TOC from '../TOC';
-import NavBar from '../navigation/NavBar';
import Container from './Container';
import AuthorAvatars from '../AuthorAvatars';
-import StickyNavbar from '../navigation/StickyNavbar';
import AnnouncementHero from '../campaigns/AnnoucementHero';
export default function BlogLayout({ post, children }) {
@@ -22,9 +20,6 @@ export default function BlogLayout({ post, children }) {
return (
-
-
-
-
-
-
{showMenu && (
-
-
-
@@ -18,9 +16,6 @@ export default function GenericPostLayout({ post, children }) {
return (
-
-
-
-
-
-
{children}
diff --git a/components/layout/JobsLayout.js b/components/layout/JobsLayout.js
index a0578fba4dd..176bd075fad 100644
--- a/components/layout/JobsLayout.js
+++ b/components/layout/JobsLayout.js
@@ -2,11 +2,9 @@ import { useRouter } from 'next/router'
import ErrorPage from 'next/error'
import Head from '../Head'
import JobsContext from '../../context/JobsContext'
-import NavBar from '../navigation/NavBar'
import Container from './Container'
import JobSummary from '../JobSummary'
import ApplyJobButton from '../buttons/ApplyJob'
-import StickyNavbar from '../navigation/StickyNavbar'
export default function JobsLayout({ post, children }) {
if (!post) return ;
@@ -19,10 +17,6 @@ export default function JobsLayout({ post, children }) {
return (
-
-
-
-
diff --git a/pages/[lang]/index.js b/pages/[lang]/index.js
index 4cb1e171b4c..650ac78302b 100644
--- a/pages/[lang]/index.js
+++ b/pages/[lang]/index.js
@@ -1,6 +1,5 @@
import React from 'react';
import Container from '../../components/layout/Container';
-import NavBar from '../../components/navigation/NavBar';
import Hero from '../../components/Hero';
import NewsletterSubscribe from '../../components/NewsletterSubscribe';
import Sponsors from '../../components/sponsors/Sponsors';
@@ -20,7 +19,6 @@ import TextLink from '../../components/typography/TextLink';
import GoldSponsors from '../../components/sponsors/GoldSponsors';
import SilverSponsors from '../../components/sponsors/SilverSponsors';
import SupportUs from '../../components/SupportUs/SupportUs';
-import StickyNavbar from '../../components/navigation/StickyNavbar';
import GoogleCalendarButton from '../../components/buttons/GoogleCalendarButton';
import ICSFileButton from '../../components/buttons/ICSFileButton';
import SubscribeButton from '../../components/buttons/SubscribeButton';
@@ -38,10 +36,6 @@ function HomePage() {
return (
<>
-
-
-
-
diff --git a/pages/_app.js b/pages/_app.js
index 4dadaefe311..5a0147e7961 100644
--- a/pages/_app.js
+++ b/pages/_app.js
@@ -15,6 +15,8 @@ import {
} from "../lib/i18n";
import loadLocales from "../lib/locales";
import '../styles/globals.css'
+import StickyNavbar from '../components/navigation/StickyNavbar';
+import NavBar from '../components/navigation/NavBar';
function App({ Component, pageProps, router }) {
@@ -36,6 +38,9 @@ function App({ Component, pageProps, router }) {
+
+
+
diff --git a/pages/blog/2024-february-summary.md b/pages/blog/2024-february-summary.md
new file mode 100644
index 00000000000..61c68cc0ccc
--- /dev/null
+++ b/pages/blog/2024-february-summary.md
@@ -0,0 +1,97 @@
+---
+title: "Community Update: February 2024"
+date: 2024-02-29T06:00:00+01:00
+type: Communication
+tags:
+ - Project Status
+cover: /img/posts/2024-blog-banner/blog-banner-february.webp
+authors:
+ - name: Thulisile Sibanda
+ photo: /img/avatars/thulieblack.webp
+ link: https://www.linkedin.com/in/v-thulisile-sibanda/
+ byline: AsyncAPI Community Manager
+excerpt: 'Community update for February'
+featured: true
+---
+
+We are starting the year off with a bang as we got accepted to the [Google Summer of Code 2024](https://summerofcode.withgoogle.com/programs/2024/organizations/asyncapi) program after two years of rejections. It is an incredible achievement for the community, and we wouldn't have done it without our Doc's Lead, [Alejandra Quetzalli](https://www.linkedin.com/in/alejandra-quetzalli/), who crafted an excellent proposal, and [Elegbede Azeez](https://twitter.com/_acebuild). We are very excited to have received this opportunity, and you can read [the AsyncAPI Project Ideas Page](https://github.com/asyncapi/community/blob/master/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md) for in-depth details on participating projects.
+
+## AsyncAPI Conf on Tour 2024
+The planning of AACoT'24 is already underway as we prepare for our first conference in Helsinki on the 28th - 29th of May. We are putting in the final touches to update our conference website with the latest details, and we will soon announce the Call for Speakers. In the meantime, be sure to start crafting those proposals and get ready to share your expertise with the community.
+
+## Financial Sponsors
+We are thrilled to share that the initiative has secured new sponsors who generously paid for the entire year in advance. We welcome [Postman](https://www.postman.com/) as a gold sponsor, who contributed $12,000, and [HiveMQ](https://www.hivemq.com/), our silver sponsor, who gave $6,000.
+
+
+
+
+
+
+
+
+
+For more information about our financial budget, please [refer to the 2024 Budget discussion](https://github.com/orgs/asyncapi/discussions/1017).
+
+## Community Discussions
+We have important discussions that require the community's attention:
+
+- ### Marketing Activities
+ We need to invest in marketing efforts this year, and as the first initial step, we have secured a budget of $24,000. The next step now is to find a workaround to achieve this goal. If you have experience or have insights on how we can spend and efficiently boost our marketing aspects, please [join the Marketing Activities discussion](https://github.com/orgs/asyncapi/discussions/1062).
+- ### Doc's Project Ideas for GSoD'24
+ Google Season of Docs 2024 is now open, and we plan to participate again this year. We are currently gathering project proposals for our application, and if you have ideas on areas we should improve or focus on in our documentation, please [propose new docs project ideas in the community discussion](https://github.com/orgs/asyncapi/discussions/1069).
+- ### Sovereign Tech Fund Application
+ The [Sovereign Tech Fund](https://www.sovereigntechfund.de/) is opening its applications for open-source organizations in Q2. We have some ideas and areas we should focus on for the application, such as CI/CD infrastructure. Be sure to [join the Sovereign Tech Fund discussion](https://github.com/orgs/asyncapi/discussions/1073) if you want to collaborate or share application ideas.
+- ### Code of Conduct Draft Update
+ The AsyncAPI Code of Conduct Committee is halfway through updating the current Code of Conduct to the latest version. They have created some documents that explain the procedures and guidelines that the CoC Committee will use to enforce the Code of Conduct. You can glimpse [the updated Code of Conduct draft by checking the work-in-progress pull requests](https://github.com/asyncapi/community/issues/994).
+- ### Cupid is Looking For Maintainers
+ We're on the lookout for maintainers for the AsyncAPI Cupid. The library focuses on finding and analyzing the relationships between AsyncAPI documents. If you're well-versed in Event-Driven Architecture and AsyncAPI, please [join the Cupid repository discussion](https://github.com/asyncapi/cupid/issues/182) and help us drive its development.
+- ### AsyncAPI Working Groups
+ We are finally officializing working groups throughout the AsyncAPI community. A working group will be a community where people share similar interests beyond GitHub repositories. You can read the [Working Groups docs](https://github.com/asyncapi/community/blob/master/WORKING_GROUPS.md) or view the [Working Group public discussion](https://github.com/orgs/asyncapi/discussions/1037) for more comprehensive details.
+
+## TSC Members x Ambassadors
+
+We are excited to welcome five new [Technical Steering Committee](https://www.asyncapi.com/community/tsc) (TSC) members.
+
+
+
+Additionally, we have a new addition to the [AsyncAPI Ambassadors](https://www.asyncapi.com/community/ambassadors) team, raising the number to seven.
+
+
+
+Exciting times for our growing community!
+
+## Coming in March
+- **AACoT'24 Helsinki Call for Speakers** - We will announce our Call for Speakers for AACoT'24 Helsinki by the first week of March. Start crafting those proposals and get ready to submit them.
+- **AsyncAPI Community Updates Newsletter** - The March Edition issue will drop on the 6th. Make sure [you're subscribed to the AsyncAPI Newsletter](https://www.asyncapi.com/newsletter); you don't want to miss out!
\ No newline at end of file
diff --git a/pages/blog/designblog.md b/pages/blog/designblog.md
new file mode 100644
index 00000000000..fcb41290ac0
--- /dev/null
+++ b/pages/blog/designblog.md
@@ -0,0 +1,62 @@
+---
+title: "Contributing to Open Source as a Product Design and UX Researcher"
+date: 2023-11-09T06:00:00+01:00
+type: Communication
+tags:
+ - Project Status
+cover: /img/posts/designcover.webp
+authors:
+ - name: Aishat Muibudeen
+ photo: /img/avatars/maya_picture.webp
+ link: https://www.linkedin.com/in/aishatmuibudeen/
+ byline: Product Designer and UX Researcher
+excerpt: 'Design BlogPost'
+---
+Every software has a design system, regardless of whether it is free or not. Suppose you are a UX researcher or designer intending to be part of an Open Source community. In that case, you can begin contributing to the research or design program by collaborating with others. This article clarifies what Open Source is and provides tips on how you can start contributing as a UX researcher or designer. In addition, I’ll share some Open Source communities that you can contribute to as a beginner.
+
+### What is Open Source?
+
+public/img/posts/oss_image.webp
+
+Open Source Software (OSS) refers to software shared with its source code, allowing users to access, modify, and distribute. OSS allows everyone to contribute to the source code, make changes, or suggest new features. You can use the code for your purpose or contribute to improving the entire project’s features.
+
+Some examples of Open Source Software are available, including AsyncAPI, Linux Kernel, Oppia Foundation, VLC Media Player, Mozilla Firefox, Audacity, Blender, and more. These software are free to download, use, and distribute. It’s essential to recognize that some individuals put in much effort to make these projects available to a broad audience. Pursuing a career in Open Source can be beneficial, as it allows you to give back to the community and assist as many users as possible.
+
+It is worth noting that not all open-source projects are free of charge. To determine whether a project is free, you can check the project’s LICENSE file on GitHub.
+
+### My Experience as a Product Designer and UX Researcher in Open Source
+
+If you want to move faster in your career, I suggest getting started contributing to Open Source projects as early as possible. As a UX personnel, working with dummy users without getting feedback can be frustrating. However, Open Source allows you to learn your expertise and receive real-time feedback from users. Additionally, the collaborative nature of Open Source provides real-life working environments.
+
+In late 2022, I made my first Open Source contribution by designing speaker cards for the AsyncAPI Virtual Conference. When I received a notification that my pull request had been merged, I felt a sense of fulfillment about seeing my work showcased on a global scene.
+
+My interest in Open Source Communities made me apply for the Outreachy Internship Program. My collaboration and research skills helped me get into the program. I worked on the Foundational Research for Nigeria, a research project created to understand the learning needs and problems associated with technology learning among children between the ages of 7 and 15 in Nigeria. I also conducted usability testing with Oppia users to evaluate the effectiveness and usability of the Oppia application and website platform.
+
+Since completing my Internship Program in March, I have worked on other open-source projects.
+
+### Completed Projects
+
+- Designed the AsyncAPI Conference on Tour 2023 website (AACoT’23).
+- Conducted a UX Design Audit on the AsyncAPI Website.
+- Designed the AsyncAPI Financial Summary Page.
+- Designed the Community Member’s Page for AsyncAPI.
+- I worked with my team to design and create content for the Ladder Library as part of She Code Africa HackFest 2022.
+
+### On-going Projects
+
+- Working on the Design system for the AsyncAPI website.
+- Creating a UX research plan for usability testing.
+- Reviewing all design and research-related issues.
+
+### What are the advantages of contributing?
+
+There are numerous benefits to contributing to open source. One of the most prominent reasons is collaboration. For beginners and experienced fellows, collaborating using a version control system is an added advantage to your career. Getting hired based on your open-source contribution and contributing to technologies that make your life better and more accessible.
+Finally, open source is time-consuming and can become overwhelming if you do not manage your time.
+
+### Are you ready to start contributing?
+
+Check if the applications you frequently use are Open Source and consider joining their communities. You can ask questions, solve issues, and offer assistance to others. Many communities offer issues that are suitable for beginners who are new to open source.
+
+
+
+
diff --git a/pages/docs/migration/migrating-to-v3.md b/pages/docs/migration/migrating-to-v3.md
index 73f48d79494..84fa545b8e1 100644
--- a/pages/docs/migration/migrating-to-v3.md
+++ b/pages/docs/migration/migrating-to-v3.md
@@ -409,7 +409,7 @@ Parameters have often prioritized convenience over accurately reflecting real-wo
In v2, we significantly streamlined the Schema Object. While the previous version offered full capability with numerous, often underutilized options, it posed challenges in serializing objects or booleans in the channel path.
-The new v3 simplifies this by consistently using the string type and limiting available properties. Now, you can only access `enum`, `default`, `description`, `examples`, and `location`, ensuring a more focused and practical approach."
+The new v3 simplifies this by consistently using the string type and limiting available properties. Now, you can only access `enum`, `default`, `description`, `examples`, and `location`, ensuring a more focused and practical approach.
```yml
asyncapi: 2.6.0
diff --git a/pages/docs/reference/specification/v3.0.0.md b/pages/docs/reference/specification/v3.0.0.md
index 56d487b4991..9221b67d0fa 100644
--- a/pages/docs/reference/specification/v3.0.0.md
+++ b/pages/docs/reference/specification/v3.0.0.md
@@ -1,10 +1,10 @@
# AsyncAPI Specification
-#### Attribution
+## Attribution
Part of this content has been taken from the great work done by the folks at the [OpenAPI Initiative](https://openapis.org).
-#### Version 3.0.0
+### Version 3.0.0
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt).
@@ -63,28 +63,36 @@ Aside from the issues mentioned above, there may also be infrastructure configur
## Definitions
### Server
+
A server MAY be a message broker that is capable of sending and/or receiving between a [sender](#definitionsSender) and [receiver](#definitionsReceiver). A server MAY be a service with WebSocket API that enables message-driven communication between browser-to-server or server-to-server.
### Application
-An application is any kind of computer program or a group of them. It MUST be a [sender](#definitionsSender), a [receiver](#definitionsReceiver), or both. An application MAY be a microservice, IoT device (sensor), mainframe process, message broker, etc. An application MAY be written in any number of different programming languages as long as they support the selected [protocol](#definitionsProtocol). An application MUST also use a protocol supported by the [server](#definitionsServer) in order to connect and exchange [messages](#definitionsMessage).
+
+An application is any kind of computer program or a group of them. It MUST be a [sender](#definitionsSender), a [receiver](#definitionsReceiver), or both. An application MAY be a microservice, IoT device (sensor), mainframe process, message broker, etc. An application MAY be written in any number of different programming languages as long as they support the selected [protocol](#definitionsProtocol). An application MUST also use a protocol supported by the [server](#definitionsServer) in order to connect and exchange [messages](#definitionsMessage).
### Sender
+
A sender is a type of application, that is sending [messages](#definitionsMessage) to [channels](#definitionsChannel). A sender MAY send to multiple channels depending on the [server](#definitionsServer), protocol, and use-case pattern.
### Receiver
+
A receiver is a type of application that is receiving [messages](#definitionsMessage) from [channels](#definitionsChannel). A receiver MAY receive from multiple channels depending on the [server](#definitionsServer), protocol, and the use-case pattern. A receiver MAY forward a received message further without changing it. A receiver MAY act as a consumer and react to the message. A receiver MAY act as a processor that, for example, aggregates multiple messages in one and forwards them.
### Message
-A message is the mechanism by which information is exchanged via a channel between [servers](#definitionsServer) and applications. A message MAY contain a payload and MAY also contain headers. The headers MAY be subdivided into [protocol](#definitionsProtocol)-defined headers and header properties defined by the application which can act as supporting metadata. The payload contains the data, defined by the application, which MUST be serialized into a format (JSON, XML, Avro, binary, etc.). Since a message is a generic mechanism, it can support multiple interaction patterns such as event, command, request, or response.
+
+A message is the mechanism by which information is exchanged via a channel between [servers](#definitionsServer) and applications. A message MAY contain a payload and MAY also contain headers. The headers MAY be subdivided into [protocol](#definitionsProtocol)-defined headers and header properties defined by the application which can act as supporting metadata. The payload contains the data, defined by the application, which MUST be serialized into a format (JSON, XML, Avro, binary, etc.). Since a message is a generic mechanism, it can support multiple interaction patterns such as event, command, request, or response.
### Channel
+
A channel is an addressable component, made available by the [server](#definitionsServer), for the organization of [messages](#definitionsMessage). [Sender](#definitionsSender) applications send messages to channels and [receiver](#definitionsReceiver) applications receive messages from channels. [Servers](#definitionsServer) MAY support many channel instances, allowing messages with different content to be addressed to different channels. Depending on the [server](#definitionsServer) implementation, the channel MAY be included in the message via protocol-defined headers.
### Protocol
+
A protocol is the mechanism (wireline protocol or API) by which [messages](#definitionsMessage) are exchanged between the application and the [channel](#definitionsChannel). Example protocols include, but are not limited to, AMQP, HTTP, JMS, Kafka, Anypoint MQ, MQTT, Solace, STOMP, Mercure, WebSocket, Google Pub/Sub, Pulsar.
### Bindings
-A "binding" (or "protocol binding") is a mechanism to define protocol-specific information. Therefore, a protocol binding MUST define protocol-specific information only.
+
+A "binding" (or "protocol binding") is a mechanism to define protocol-specific information. Therefore, a protocol binding MUST define protocol-specific information only.
## Specification
@@ -165,7 +173,7 @@ This field represents a unique universal identifier of the [application](#defini
It is RECOMMENDED to use a [URN](https://tools.ietf.org/html/rfc8141) to globally and uniquely identify the application during long periods of time, even after it becomes unavailable or ceases to exist.
-###### Examples
+##### Examples
```json
{
@@ -207,7 +215,7 @@ Field Name | Type | Description
This object MAY be extended with [Specification Extensions](#specificationExtensions).
-##### Info Object Example:
+##### Info Object Example
```json
{
@@ -269,7 +277,7 @@ Field Name | Type | Description
This object MAY be extended with [Specification Extensions](#specificationExtensions).
-##### Contact Object Example:
+##### Contact Object Example
```json
{
@@ -298,7 +306,7 @@ Field Name | Type | Description
This object MAY be extended with [Specification Extensions](#specificationExtensions).
-##### License Object Example:
+##### License Object Example
```json
{
@@ -392,7 +400,6 @@ production:
description: "This environment is the live environment available for final users."
```
-
#### Server Object
An object representing a message broker, a server or any other kind of computer program capable of sending and/or receiving data. This object is used to capture details such as URIs, protocols and security configuration. Variable substitution can be used so that some details, for example usernames and passwords, can be injected by code generation tools.
@@ -500,7 +507,6 @@ variables:
- staging
```
-
#### Default Content Type
A string representing the default content type to use when encoding/decoding a message's payload. The value MUST be a specific media type (e.g. `application/json`). This value MUST be used by schema parsers when the [contentType](#messageObjectContentType) property is omitted.
@@ -519,11 +525,6 @@ In case a message can't be encoded/decoded using this value, schema parsers MUST
defaultContentType: application/json
```
-
-
-
-
-
#### Channels Object
An object containing all the [Channel Object](#channelObject) definitions the [Application](#definitionsApplication) MUST use during runtime.
@@ -557,9 +558,6 @@ userSignedUp:
$ref: '#/components/messages/userSignedUp'
```
-
-
-
#### Channel Object
Describes a shared communication channel.
@@ -579,7 +577,6 @@ Field Name | Type | Description
externalDocs | [External Documentation Object](#externalDocumentationObject) \| [Reference Object](#referenceObject) | Additional external documentation for this channel.
bindings | [Channel Bindings Object](#channelBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the channel.
-
This object MAY be extended with [Specification Extensions](#specificationExtensions).
##### Channel Object Example
@@ -653,20 +650,12 @@ externalDocs:
url: 'https://example.com'
```
-
-
-
-
#### Channel Address Expressions
Channel addresses MAY contain expressions that can be used to define dynamic values.
Expressions MUST be composed by a name enclosed in curly braces (`{` and `}`). E.g., `{userId}`.
-
-
-
-
#### Messages Object
Describes a map of messages included in a channel.
@@ -697,8 +686,6 @@ userCompletedOrder:
$ref: '#/components/messages/userCompletedOrder'
```
-
-
#### Operations Object
Holds a dictionary with all the [operations](#operationObject) this application MUST implement.
@@ -759,7 +746,6 @@ onUserSignUp:
- $ref: '#/components/operationTraits/kafka'
```
-
#### Operation Object
Describes a specific operation.
@@ -863,9 +849,6 @@ reply:
- $ref: '#/components/messages/userSignedUpReply'
```
-
-
-
#### Operation Trait Object
Describes a trait that MAY be applied to an [Operation Object](#operationObject). This object MAY contain any property from the [Operation Object](#operationObject), except the `action`, `channel`, `messages` and `traits` ones.
@@ -904,9 +887,6 @@ bindings:
ack: false
```
-
-
-
#### Operation Reply Object
Describes the reply part that MAY be applied to an Operation Object. If an operation implements the request/reply pattern, the reply object represents the response message.
@@ -923,11 +903,10 @@ This object MAY be extended with [Specification Extensions](#specificationExtens
#### Operation Reply Address Object
-An object that specifies where an operation has to send the reply.
+An object that specifies where an operation has to send the reply.
For specifying and computing the location of a reply address, a [runtime expression](#runtimeExpression) is used.
-
##### Fixed Fields
Field Name | Type | Description
@@ -951,7 +930,6 @@ description: Consumer Inbox
location: $message.header#/replyTo
```
-
#### Parameters Object
Describes a map of parameters included in a channel address.
@@ -984,10 +962,6 @@ parameters:
description: Id of the user.
```
-
-
-
-
#### Parameter Object
Describes a parameter included in a channel address.
@@ -1026,9 +1000,6 @@ parameters:
location: $message.payload#/user/id
```
-
-
-
#### Server Bindings Object
Map describing protocol-specific definitions for a server.
@@ -1059,8 +1030,6 @@ Field Name | Type | Description
This object MAY be extended with [Specification Extensions](#specificationExtensions).
-
-
#### Channel Bindings Object
Map describing protocol-specific definitions for a channel.
@@ -1091,8 +1060,6 @@ Field Name | Type | Description
This object MAY be extended with [Specification Extensions](#specificationExtensions).
-
-
#### Operation Bindings Object
Map describing protocol-specific definitions for an operation.
@@ -1123,9 +1090,6 @@ Field Name | Type | Description
This object MAY be extended with [Specification Extensions](#specificationExtensions).
-
-
-
#### Message Bindings Object
Map describing protocol-specific definitions for a message.
@@ -1156,12 +1120,6 @@ Field Name | Type | Description
This object MAY be extended with [Specification Extensions](#specificationExtensions).
-
-
-
-
-
-
#### Message Object
Describes a message received on a given channel and operation.
@@ -1171,7 +1129,7 @@ Describes a message received on a given channel and operation.
Field Name | Type | Description
---|:---:|---
headers | [Multi Format Schema Object](#multiFormatSchemaObject) | [Schema Object](#schemaObject) | [Reference Object](#referenceObject) | Schema definition of the application headers. Schema MUST be a map of key-value pairs. It **MUST NOT** define the protocol headers. If this is a [Schema Object](#schemaObject), then the `schemaFormat` will be assumed to be "application/vnd.aai.asyncapi+json;version=`asyncapi`" where the version is equal to the [AsyncAPI Version String](#A2SVersionString).
-payload | [Multi Format Schema Object](#multiFormatSchemaObject) | [Schema Object](#schemaObject) | [Reference Object](#referenceObject) | Definition of the message payload. If this is a [Schema Object](#schemaObject), then the `schemaFormat` will be assumed to be "application/vnd.aai.asyncapi+json;version=`asyncapi`" where the version is equal to the [AsyncAPI Version String](#A2SVersionString).
+payload | [Multi Format Schema Object](#multiFormatSchemaObject) | [Schema Object](#schemaObject) | [Reference Object](#referenceObject) | Definition of the message payload. If this is a [Schema Object](#schemaObject), then the `schemaFormat` will be assumed to be "application/vnd.aai.asyncapi+json;version=`asyncapi`" where the version is equal to the [AsyncAPI Version String](#A2SVersionString).
correlationId | [Correlation ID Object](#correlationIdObject) | [Reference Object](#referenceObject) | Definition of the correlation ID used for message tracing or matching.
contentType | `string` | The content type to use when encoding/decoding a message's payload. The value MUST be a specific media type (e.g. `application/json`). When omitted, the value MUST be the one specified on the [defaultContentType](#defaultContentTypeString) field.
name | `string` | A machine-friendly name for the message.
@@ -1333,12 +1291,6 @@ payload:
$ref: 'path/to/user-create.avsc/#UserCreate'
```
-
-
-
-
-
-
#### Message Trait Object
Describes a trait that MAY be applied to a [Message Object](#messageObject). This object MAY contain any property from the [Message Object](#messageObject), except `payload` and `traits`.
@@ -1377,13 +1329,13 @@ contentType: application/json
#### Message Example Object
-Message Example Object represents an example of a [Message Object](#messageObject) and MUST contain either **headers** and/or **payload** fields.
+Message Example Object represents an example of a [Message Object](#messageObject) and MUST contain either **headers** and/or **payload** fields.
##### Fixed Fields
Field Name | Type | Description
---|:---:|---
-headers | `Map[string, any]` | The value of this field MUST validate against the [Message Object's headers](#messageObjectHeaders) field.
+headers | `Map[string, any]` | The value of this field MUST validate against the [Message Object's headers](#messageObjectHeaders) field.
payload | `Map[string, any]` | The value of this field MUST validate against the [Message Object's payload](#messageObjectPayload) field.
name | `string` | A machine-friendly name.
summary | `string` | A short summary of what the example is about.
@@ -1433,6 +1385,7 @@ A Tags object is a list of [Tag Objects](#tagObject). An [Tag Object](#tagObject
Allows adding meta data to a single tag.
##### Fixed Fields
+
Field Name | Type | Description
---|:---:|---
name | `string` | **REQUIRED.** The name of the tag.
@@ -1445,8 +1398,8 @@ This object MAY be extended with [Specification Extensions](#specificationExtens
```json
{
- "name": "user",
- "description": "User-related messages"
+ "name": "user",
+ "description": "User-related messages"
}
```
@@ -1455,12 +1408,6 @@ name: user
description: User-related messages
```
-
-
-
-
-
-
#### External Documentation Object
Allows referencing an external resource for extended documentation.
@@ -1488,7 +1435,6 @@ description: Find more info here
url: https://example.com
```
-
#### Reference Object
A simple object to allow referencing other components in the specification, internally and externally.
@@ -1498,6 +1444,7 @@ The Reference Object is defined by [JSON Reference](https://tools.ietf.org/html/
For this specification, reference resolution is done as defined by the JSON Reference specification and not by the JSON Schema specification.
##### Fixed Fields
+
Field Name | Type | Description
---|:---:|---
$ref | `string` | **REQUIRED.** The reference string.
@@ -1524,14 +1471,14 @@ All objects defined within the components object will have no effect on the API
##### Fixed Fields
Field Name | Type | Description
----|:---|---
+---|:---|---
schemas | Map[`string`, [Multi Format Schema Object](#multiFormatSchemaObject) \| [Schema Object](#schemaObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Schema Object](#schemaObject). If this is a [Schema Object](#schemaObject), then the `schemaFormat` will be assumed to be "application/vnd.aai.asyncapi+json;version=`asyncapi`" where the version is equal to the [AsyncAPI Version String](#A2SVersionString).
servers | Map[`string`, [Server Object](#serverObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Server Objects](#serverObject).
channels | Map[`string`, [Channel Object](#channelObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Channel Objects](#channelObject).
operations | Map[`string`, [Operation Object](#operationObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Operation Objects](#operationObject).
messages | Map[`string`, [Message Object](#messageObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Message Objects](#messageObject).
securitySchemes| Map[`string`, [Security Scheme Object](#securitySchemeObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Security Scheme Objects](#securitySchemeObject).
- serverVariables | Map[`string`, [Server Variable Object](#serverVariableObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Server Variable Objects](#serverVariableObject).
+ serverVariables | Map[`string`, [Server Variable Object](#serverVariableObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Server Variable Objects](#serverVariableObject).
parameters | Map[`string`, [Parameter Object](#parameterObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Parameter Objects](#parameterObject).
correlationIds | Map[`string`, [Correlation ID Object](#correlationIdObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Correlation ID Objects](#correlationIdObject).
replies | Map[`string`, [Operation Reply Object](#operationReplyObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Operation Reply Objects](#operationReplyObject).
@@ -1551,7 +1498,7 @@ All the fixed fields declared above are objects that MUST use keys that match th
Field Name Examples:
-```
+```text
User
User_1
User_Name
@@ -1800,17 +1747,39 @@ The following table contains a set of values that every implementation MUST supp
Name | Allowed values | Notes
---|:---:|---
[AsyncAPI 3.0.0 Schema Object](#schemaObject) | `application/vnd.aai.asyncapi;version=3.0.0`, `application/vnd.aai.asyncapi+json;version=3.0.0`, `application/vnd.aai.asyncapi+yaml;version=3.0.0` | This is the default when a `schemaFormat` is not provided.
-[JSON Schema Draft 07](https://json-schema.org/specification-links.html#draft-7) | `application/schema+json;version=draft-07`, `application/schema+yaml;version=draft-07` |
+[JSON Schema Draft 07](https://json-schema.org/specification-links.html#draft-7) | `application/schema+json;version=draft-07`, `application/schema+yaml;version=draft-07` |
The following table contains a set of values that every implementation is RECOMMENDED to support.
Name | Allowed values | Notes
---|:---:|---
[Avro 1.9.0 schema](https://avro.apache.org/docs/1.9.0/spec.html#schemas) | `application/vnd.apache.avro;version=1.9.0`, `application/vnd.apache.avro+json;version=1.9.0`, `application/vnd.apache.avro+yaml;version=1.9.0` |
-[OpenAPI 3.0.0 Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#schemaObject) | `application/vnd.oai.openapi;version=3.0.0`, `application/vnd.oai.openapi+json;version=3.0.0`, `application/vnd.oai.openapi+yaml;version=3.0.0` |
+[OpenAPI 3.0.0 Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#schemaObject) | `application/vnd.oai.openapi;version=3.0.0`, `application/vnd.oai.openapi+json;version=3.0.0`, `application/vnd.oai.openapi+yaml;version=3.0.0` |
[RAML 1.0 data type](https://github.com/raml-org/raml-spec/blob/master/versions/raml-10/raml-10.md/) | `application/raml+yaml;version=1.0` |
-[Protocol Buffers](https://protobuf.dev/) | `application/vnd.google.protobuf;version=2`, `application/vnd.google.protobuf;version=3` |
+[Protocol Buffers](https://protobuf.dev/) | `application/vnd.google.protobuf;version=2`, `application/vnd.google.protobuf;version=3` |
+
+##### Multi Format Schema Object Examples
+###### Multi Format Schema Object Example with Avro
+
+```yaml
+channels:
+ example:
+ messages:
+ myMessage:
+ payload:
+ schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
+ schema:
+ type: record
+ name: User
+ namespace: com.company
+ doc: User information
+ fields:
+ - name: displayName
+ type: string
+ - name: age
+ type: int
+```
#### Schema Object
@@ -1818,7 +1787,7 @@ The Schema Object allows the definition of input and output data types.
These types can be objects, but also primitives and arrays. This object is a superset of the [JSON Schema Specification Draft 07](https://json-schema.org/). The empty schema (which allows any instance to validate) MAY be represented by the `boolean` value `true` and a schema which allows no instance to validate MAY be represented by the `boolean` value `false`.
Further information about the properties can be found in [JSON Schema Core](https://tools.ietf.org/html/draft-handrews-json-schema-01) and [JSON Schema Validation](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01).
-Unless stated otherwise, the property definitions follow the JSON Schema specification as referenced here.
+Unless stated otherwise, the property definitions follow the JSON Schema specification as referenced here. For other formats (e.g., Avro, RAML, etc) see [Multi Format Schema Object](#multiFormatSchemaObject).
##### Properties
@@ -1869,6 +1838,7 @@ Alternatively, any time a Schema Object can be used, a [Reference Object](#refer
In addition to the JSON Schema fields, the following AsyncAPI vocabulary fields MAY be used for further schema documentation:
##### Fixed Fields
+
Field Name | Type | Description
---|:---:|---
discriminator | `string` | Adds support for polymorphism. The discriminator is the schema property name that is used to differentiate between other schema that inherit this schema. The property name used MUST be defined at this schema and it MUST be in the `required` property list. When used, the value MUST be the name of this schema or any schema that inherits it. See [Composition and Inheritance](#schemaComposition) for more details.
@@ -1880,7 +1850,7 @@ This object MAY be extended with [Specification Extensions](#specificationExtens
###### Composition and Inheritance (Polymorphism)
The AsyncAPI Specification allows combining and extending model definitions using the `allOf` property of JSON Schema, in effect offering model composition.
-`allOf` takes in an array of object definitions that are validated *independently* but together compose a single object.
+`allOf` takes in an array of object definitions that are validated _independently_ but together compose a single object.
While composition offers model extensibility, it does not imply a hierarchy between the models.
To support polymorphism, AsyncAPI Specification adds the support of the `discriminator` field.
@@ -1891,7 +1861,7 @@ There are two ways to define the value of a discriminator for an inheriting inst
- Use the schema's name.
- Override the schema's name by overriding the property with a new value. If exists, this takes precedence over the schema's name.
-As such, inline schema definitions, which do not have a given id, *cannot* be used in polymorphism.
+As such, inline schema definitions, which do not have a given id, _cannot_ be used in polymorphism.
##### Schema Object Examples
@@ -2276,25 +2246,22 @@ schemas:
- color
```
-
-
-
-
#### Security Scheme Object
Defines a security scheme that can be used by the operations. Supported schemes are:
-* User/Password.
-* API key (either as user or as password).
-* X.509 certificate.
-* End-to-end encryption (either symmetric or asymmetric).
-* HTTP authentication.
-* HTTP API key.
-* OAuth2's common flows (Implicit, Resource Owner Protected Credentials, Client Credentials and Authorization Code) as defined in [RFC6749](https://tools.ietf.org/html/rfc6749).
-* [OpenID Connect Discovery](https://tools.ietf.org/html/draft-ietf-oauth-discovery-06).
-* SASL (Simple Authentication and Security Layer) as defined in [RFC4422](https://tools.ietf.org/html/rfc4422).
+- User/Password.
+- API key (either as user or as password).
+- X.509 certificate.
+- End-to-end encryption (either symmetric or asymmetric).
+- HTTP authentication.
+- HTTP API key.
+- OAuth2's common flows (Implicit, Resource Owner Protected Credentials, Client Credentials and Authorization Code) as defined in [RFC6749](https://tools.ietf.org/html/rfc6749).
+- [OpenID Connect Discovery](https://tools.ietf.org/html/draft-ietf-oauth-discovery-06).
+- SASL (Simple Authentication and Security Layer) as defined in [RFC4422](https://tools.ietf.org/html/rfc4422).
##### Fixed Fields
+
Field Name | Type | Applies To | Description
---|:---:|---|---
type | `string` | Any | **REQUIRED**. The type of the security scheme. Valid values are `"userPassword"`, `"apiKey"`, `"X509"`, `"symmetricEncryption"`, `"asymmetricEncryption"`, `"httpApiKey"`, `"http"`, `"oauth2"`, `"openIdConnect"`, `"plain"`, `"scramSha256"`, `"scramSha512"`, and `"gssapi"`.
@@ -2456,6 +2423,7 @@ type: scramSha512
Allows configuration of the supported OAuth Flows.
##### Fixed Fields
+
Field Name | Type | Description
---|:---:|---
implicit| [OAuth Flow Object](#oauthFlowObject) | Configuration for the OAuth Implicit flow.
@@ -2470,6 +2438,7 @@ This object MAY be extended with [Specification Extensions](#specificationExtens
Configuration details for a supported OAuth Flow
##### Fixed Fields
+
Field Name | Type | Applies To | Description
---|:---:|---|---
authorizationUrl | `string` | `oauth2` (`"implicit"`, `"authorizationCode"`) | **REQUIRED**. The authorization URL to be used for this flow. This MUST be in the form of an absolute URL.
@@ -2500,15 +2469,13 @@ availableScopes:
read:pets: read your pets
```
-
-
### Correlation ID Object
-An object that specifies an identifier at design time that can used for message tracing and correlation.
+An object that specifies an identifier at design time that can used for message tracing and correlation.
For specifying and computing the location of a Correlation ID, a [runtime expression](#runtimeExpression) is used.
-##### Fixed Fields
+#### Fixed Fields
Field Name | Type | Description
---|:---|---
@@ -2538,7 +2505,7 @@ This mechanism is used by [Correlation ID Object](#correlationIdObject) and [Ope
The runtime expression is defined by the following [ABNF](https://tools.ietf.org/html/rfc5234) syntax:
-```
+```text
expression = ( "$message" "." source )
source = ( header-reference | payload-reference )
header-reference = "header" ["#" fragment]
@@ -2548,7 +2515,7 @@ The runtime expression is defined by the following [ABNF](https://tools.ietf.org
The table below provides examples of runtime expressions and examples of their use in a value:
-##### Examples
+#### Examples
Source Location | Example expression | Notes
---|:---|:---|
@@ -2591,7 +2558,7 @@ The extensions properties are implemented as patterned fields that are always pr
Field Pattern | Type | Description
---|:---:|---
-`^x-[\w\d\-\_]+$` | Any | Allows extensions to the AsyncAPI Schema. The field name MUST begin with `x-`, for example, `x-internal-id`. The value can be `null`, a primitive, an array or an object. Can have any valid JSON format value.
+`^x-[\w\d\.\x2d_]+$` | Any | Allows extensions to the AsyncAPI Schema. The field name MUST begin with `x-`, for example, `x-internal-id`. The value can be `null`, a primitive, an array or an object. Can have any valid JSON format value.
The extensions may or may not be supported by the available tooling, but those may be extended as well to add requested support (if tools are internal or open-sourced).
@@ -2606,7 +2573,6 @@ Tools that do not recognize a specific `format` MAY default back to the `type` a
The formats defined by the AsyncAPI Specification are:
-
Common Name | `type` | [`format`](#dataTypeFormat) | Comments
----------- | ------ | -------- | --------
integer | `integer` | `int32` | signed 32 bits
diff --git a/pages/docs/tools/cli/usage.md b/pages/docs/tools/cli/usage.md
index 430f758e8fd..0ea9d290959 100644
--- a/pages/docs/tools/cli/usage.md
+++ b/pages/docs/tools/cli/usage.md
@@ -29,7 +29,7 @@ $ npm install -g @asyncapi/cli
$ asyncapi COMMAND
running command...
$ asyncapi (--version)
-@asyncapi/cli/1.5.1 linux-x64 node-v18.19.0
+@asyncapi/cli/1.5.15 linux-x64 node-v18.19.1
$ asyncapi --help [COMMAND]
USAGE
$ asyncapi COMMAND
@@ -93,7 +93,7 @@ EXAMPLES
$ asyncapi bundle ./asyncapi.yaml ./features.yaml --base ./asyncapi.yaml --reference-into-components
```
-_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/bundle.ts)_
+_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/bundle.ts)_
## `asyncapi config`
@@ -107,7 +107,7 @@ DESCRIPTION
CLI config settings
```
-_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/config/index.ts)_
+_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/config/index.ts)_
## `asyncapi config context`
@@ -121,7 +121,7 @@ DESCRIPTION
Manage short aliases for full paths to AsyncAPI documents
```
-_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/config/context/index.ts)_
+_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/config/context/index.ts)_
## `asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH`
@@ -143,7 +143,7 @@ DESCRIPTION
Add a context to the store
```
-_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/config/context/add.ts)_
+_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/config/context/add.ts)_
## `asyncapi config context current`
@@ -160,7 +160,7 @@ DESCRIPTION
Shows the current context that is being used
```
-_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/config/context/current.ts)_
+_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/config/context/current.ts)_
## `asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH`
@@ -181,7 +181,7 @@ DESCRIPTION
Edit a context in the store
```
-_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/config/context/edit.ts)_
+_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/config/context/edit.ts)_
## `asyncapi config context init [CONTEXT-FILE-PATH]`
@@ -204,7 +204,7 @@ DESCRIPTION
Initialize context
```
-_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/config/context/init.ts)_
+_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/config/context/init.ts)_
## `asyncapi config context list`
@@ -221,7 +221,7 @@ DESCRIPTION
List all the stored contexts in the store
```
-_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/config/context/list.ts)_
+_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/config/context/list.ts)_
## `asyncapi config context remove CONTEXT-NAME`
@@ -241,7 +241,7 @@ DESCRIPTION
Delete a context from the store
```
-_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/config/context/remove.ts)_
+_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/config/context/remove.ts)_
## `asyncapi config context use CONTEXT-NAME`
@@ -261,7 +261,7 @@ DESCRIPTION
Set a context as current
```
-_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/config/context/use.ts)_
+_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/config/context/use.ts)_
## `asyncapi config versions`
@@ -278,7 +278,7 @@ DESCRIPTION
Show versions of AsyncAPI tools used
```
-_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/config/versions.ts)_
+_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/config/versions.ts)_
## `asyncapi convert [SPEC-FILE]`
@@ -300,7 +300,7 @@ DESCRIPTION
Convert asyncapi documents older to newer versions
```
-_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/convert.ts)_
+_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/convert.ts)_
## `asyncapi diff OLD NEW`
@@ -355,7 +355,7 @@ DESCRIPTION
Find diff between two asyncapi files
```
-_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/diff.ts)_
+_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/diff.ts)_
## `asyncapi generate`
@@ -369,7 +369,7 @@ DESCRIPTION
Generate typed models or other things like clients, applications or docs using AsyncAPI Generator templates.
```
-_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/generate/index.ts)_
+_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/generate/index.ts)_
## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE`
@@ -406,7 +406,7 @@ EXAMPLES
$ asyncapi generate fromTemplate asyncapi.yaml @asyncapi/html-template --param version=1.0.0 singleFile=true --output ./docs --force-write
```
-_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/generate/fromTemplate.ts)_
+_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/generate/fromTemplate.ts)_
## `asyncapi generate models LANGUAGE FILE`
@@ -486,7 +486,7 @@ DESCRIPTION
Generates typed models
```
-_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/generate/models.ts)_
+_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/generate/models.ts)_
## `asyncapi new`
@@ -500,7 +500,6 @@ FLAGS
-e, --example=
name of the example to use. Available examples are:
- simple-asyncapi.yml
- - adeo-kafka-request-reply-asyncapi.yml
- anyof-asyncapi.yml
- application-headers-asyncapi.yml
- correlation-id-asyncapi.yml
@@ -544,7 +543,7 @@ EXAMPLES
$ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode
```
-_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/new/index.ts)_
+_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/new/index.ts)_
## `asyncapi new file`
@@ -558,7 +557,6 @@ FLAGS
-e, --example=
name of the example to use. Available examples are:
- simple-asyncapi.yml
- - adeo-kafka-request-reply-asyncapi.yml
- anyof-asyncapi.yml
- application-headers-asyncapi.yml
- correlation-id-asyncapi.yml
@@ -602,7 +600,7 @@ EXAMPLES
$ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode
```
-_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/new/file.ts)_
+_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/new/file.ts)_
## `asyncapi new glee`
@@ -624,7 +622,7 @@ DESCRIPTION
Creates a new Glee project
```
-_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/new/glee.ts)_
+_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/new/glee.ts)_
## `asyncapi new project`
@@ -646,7 +644,7 @@ DESCRIPTION
Creates a new Glee project
```
-_See code: [src/commands/new/project.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/new/project.ts)_
+_See code: [src/commands/new/project.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/new/project.ts)_
## `asyncapi optimize [SPEC-FILE]`
@@ -682,7 +680,7 @@ EXAMPLES
$ asyncapi optimize ./asyncapi.yaml --optimization=remove-components,reuse-components,move-to-components --output=terminal --no-tty
```
-_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/optimize.ts)_
+_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/optimize.ts)_
## `asyncapi start`
@@ -696,7 +694,7 @@ DESCRIPTION
Start asyncapi studio
```
-_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/start/index.ts)_
+_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/start/index.ts)_
## `asyncapi start studio`
@@ -715,7 +713,7 @@ DESCRIPTION
starts a new local instance of Studio
```
-_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/start/studio.ts)_
+_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/start/studio.ts)_
## `asyncapi validate [SPEC-FILE]`
@@ -742,5 +740,5 @@ DESCRIPTION
validate asyncapi file
```
-_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v1.5.1/src/commands/validate.ts)_
+_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v1.5.15/src/commands/validate.ts)_
diff --git a/pages/docs/tools/generator/generator-template.md b/pages/docs/tools/generator/generator-template.md
index c6bc65c286a..da10e6f6af3 100644
--- a/pages/docs/tools/generator/generator-template.md
+++ b/pages/docs/tools/generator/generator-template.md
@@ -572,4 +572,4 @@ Great job completing this tutorial! You have learnt how to use an AsyncAPI file
If you want to tinker with a completed template and see what it would look like in production, check out the [Paho-MQTT template](https://github.com/derberg/python-mqtt-client-template/tree/v1.0.0). You can also check out the accompanying [article about creating MQTT client code](https://www.brainfart.dev/blog/asyncapi-codegen-python).
-You can also check out the [MQTT beginners guide]((https://medium.com/python-point/mqtt-basics-with-python-examples-7c758e605d4)) tutorial to learn more about asynchronous messaging using MQTT.
+You can also check out the [MQTT beginners guide](https://medium.com/python-point/mqtt-basics-with-python-examples-7c758e605d4) tutorial to learn more about asynchronous messaging using MQTT.
diff --git a/pages/docs/tools/glee/intro-auth.md b/pages/docs/tools/glee/intro-auth.md
deleted file mode 100644
index 8eb431c17c4..00000000000
--- a/pages/docs/tools/glee/intro-auth.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: 'Introduction to Glee Authentication'
-weight: 60
----
-
-Glee comes with Authentication features which help you erifying the identity of users or entities attempting to access a system or application. It ensures that only authorised individuals or systems are granted access, protecting against unauthorised intrusions and data breaches. Glee simplifies this vital process by offering multiple authentication methods, each tailored to different use cases:
-
-## Authentication Using Authentication Functions:
-Glee allows you to implement custom authentication logic by utilising authentication functions. This flexible approach enables developers to craft tailored authentication mechanisms, ensuring that access to resources is controlled precisely as required.
-
-
-## HTTP Bearer Token Authentication:
-In today's API-driven world, bearer token authentication is a widely adopted method. Glee supports this approach, allowing clients to present a token as proof of their identity, thus ensuring secure and efficient access to resources.
-
-## HttpApiKey Authentication:
-Glee's authentication suite includes support for API key authentication, which is vital for protecting web APIs. By using API keys, you can regulate access to your services, making it an essential component of your application's security strategy.
-
-## Username and Password Authentication:
-Traditional yet still crucial, username and password authentication remains a reliable option within Glee's toolkit. This method allows users to access systems or applications by providing their unique credentials, ensuring a familiar and straightforward login experience.
-
-## Summary
-Glee's authentication features not only provide layers of security but also offer the flexibility needed to meet your unique requirements. Whether you're developing a web application, a mobile app, or any other application, Glee's authentication methods empower you to tailor your security measures to suit the demands of your project. With Glee, you can build and maintain a secure digital environment, ensuring that only authorised users and systems gain access, protecting your valuable data and resources.
\ No newline at end of file
diff --git a/pages/docs/tutorials/getting-started/request-reply.md b/pages/docs/tutorials/getting-started/request-reply.md
index fcbdd0e6b0d..747c8a6d85d 100644
--- a/pages/docs/tutorials/getting-started/request-reply.md
+++ b/pages/docs/tutorials/getting-started/request-reply.md
@@ -3,7 +3,7 @@ title: Request/reply pattern
weight: 40
---
-In this tutorial, you'll learn how to implement the request/reply pattern in an AsyncAPI document using a straightforward pong-pong example.
+In this tutorial, you'll learn how to implement the request/reply pattern in an AsyncAPI document using a straightforward ping-pong example.
Before we begin, it would be beneficial for you to have a basic understanding of AsyncAPI and Event-Driven Architectures (EDA). If you need a refresher, refer to our [Event-Driven Architecture](/docs/tutorials/getting-started/event-driven-architectures) document.
diff --git a/pages/docs/tutorials/kafka/_section.md b/pages/docs/tutorials/kafka/_section.md
index 93a5362a6f6..d96cc1127f8 100644
--- a/pages/docs/tutorials/kafka/_section.md
+++ b/pages/docs/tutorials/kafka/_section.md
@@ -1,4 +1,4 @@
---
title: 'Kafka'
-weight: 20
+weight: 220
---
\ No newline at end of file
diff --git a/pages/docs/tutorials/kafka/index.md b/pages/docs/tutorials/kafka/index.md
index 26ee909db35..a56b8062e23 100644
--- a/pages/docs/tutorials/kafka/index.md
+++ b/pages/docs/tutorials/kafka/index.md
@@ -1,7 +1,7 @@
---
title: Create AsyncAPI document for applications consuming from Kafka
description: A tutorial teaching how to configure an AsyncAPI document for Kafka messages.
-weight: 20
+weight: 220
---
## Introduction
diff --git a/pages/docs/tutorials/websocket/index.md b/pages/docs/tutorials/websocket/index.md
index ef5c049f650..ca3ac0363bc 100644
--- a/pages/docs/tutorials/websocket/index.md
+++ b/pages/docs/tutorials/websocket/index.md
@@ -1,5 +1,5 @@
---
-title: Create an AsyncAPI document for a Slackbot with WebSocket.
+title: Create an AsyncAPI document for a Slackbot with WebSocket
description: In this tutorial, you'll learn how to create an AsyncAPI document designed for a Slack application that operates in Socket Mode using the WebSocket protocol.
weight: 210
---
diff --git a/pages/finance.js b/pages/finance.js
index c01c16fd8f6..6d68d416cf2 100644
--- a/pages/finance.js
+++ b/pages/finance.js
@@ -1,8 +1,6 @@
import React, { useEffect, useState, useRef } from "react";
import Head from "next/head";
import Container from "../components/layout/Container";
-import StickyNavbar from "../components/navigation/StickyNavbar";
-import NavBar from "../components/navigation/NavBar";
import AsyncAPISummary from "../components/FinancialSummary/AsyncAPISummary";
import SponsorshipTiers from "../components/FinancialSummary/SponsorshipTiers";
import OtherFormsComponent from "../components/FinancialSummary/OtherFormsComponent";
@@ -38,9 +36,6 @@ export default function FinancialSummary() {
{title}
-
-
-
diff --git a/pages/index.js b/pages/index.js
index c5bc7fed2b3..bd81837570e 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -10,9 +10,6 @@ function HomePage() {
return (
<>
-
-
-
diff --git a/pages/newsletter/index.js b/pages/newsletter/index.js
index 44623495f89..fce1648c720 100644
--- a/pages/newsletter/index.js
+++ b/pages/newsletter/index.js
@@ -1,16 +1,11 @@
-import NavBar from "../../components/navigation/NavBar";
import Head from "../../components/Head";
import Container from '../../components/layout/Container'
-import StickyNavbar from "../../components/navigation/StickyNavbar"
import NewsletterSubscribe from '../../components/NewsletterSubscribe'
export default function NewsletterIndexPage() {
return (