From 2b520a2c956aabfb4e7cd71fb3a77513cf32af3d Mon Sep 17 00:00:00 2001 From: Jonas Lagoni Date: Wed, 29 Nov 2023 11:08:15 -1000 Subject: [PATCH] feat: update to parser API v3 (#387) --- components/Message.js | 5 +- package-lock.json | 724 ++++++++++-------- package.json | 8 +- test/components/Message.test.js | 4 +- test/components/Operations.test.js | 1 - .../__snapshots__/AsyncAPI.test.js.snap | 335 ++++---- test/spec/asyncapi_v3.yml | 565 +++++++------- 7 files changed, 888 insertions(+), 754 deletions(-) diff --git a/components/Message.js b/components/Message.js index 8c73e573f..370ab58e9 100644 --- a/components/Message.js +++ b/components/Message.js @@ -13,8 +13,7 @@ export function Message({ message }) { // NOSONAR return null; } - // check typeof as fallback for older version than `2.4.0` - const messageId = typeof message.messageId === 'function' && message.messageId(); + const messageId = message.id(); const headers = message.headers(); const payload = message.payload(); const correlationId = message.correlationId(); @@ -26,7 +25,7 @@ export function Message({ message }) { // NOSONAR if (message.title()) { header += ` ${message.title()}`; } - const id = message.messageId() || message.name() || message.id(); + const id = message.name() || messageId; if (id) { header += ` \`${id}\``; } diff --git a/package-lock.json b/package-lock.json index 2b7519c0f..4cc32dd42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,8 +14,8 @@ "yaml": "^1.10.2" }, "devDependencies": { - "@asyncapi/cli": "^1.1.3", - "@asyncapi/parser": "^3.0.0-next-major-spec.3", + "@asyncapi/cli": "^1.1.9", + "@asyncapi/parser": "^3.0.0-next-major-spec.14", "@babel/preset-env": "^7.15.8", "@babel/preset-react": "^7.14.5", "@types/react": "^18.2.18", @@ -272,16 +272,16 @@ } }, "node_modules/@asyncapi/cli": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@asyncapi/cli/-/cli-1.1.3.tgz", - "integrity": "sha512-cCUsuFNjcYH1AOrilw1PfboMVqqL5d41gdKiviVYebMegd2oRmqR/MoD/MGc7SmxcKOvuPn40MMi7D4Q+ueIwg==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@asyncapi/cli/-/cli-1.1.9.tgz", + "integrity": "sha512-kJwBaKKYnQzJT6KflWkp9SPLyMj/PogBiVhSIGisTZCyoZuPJzZkXhgNQTtjG8GZ6vpscVCLa327+gfBHyI0yA==", "dev": true, "dependencies": { "@asyncapi/avro-schema-parser": "^3.0.5", "@asyncapi/bundler": "^0.3.8", - "@asyncapi/converter": "^1.4.0", + "@asyncapi/converter": "^1.4.2", "@asyncapi/diff": "^0.4.1", - "@asyncapi/generator": "^1.13.1", + "@asyncapi/generator": "^1.15.1", "@asyncapi/modelina": "^2.0.2", "@asyncapi/openapi-schema-parser": "^3.0.5", "@asyncapi/optimizer": "^0.2.3", @@ -311,7 +311,7 @@ "serve-handler": "^6.1.3", "strip-ansi": "^6.0.0", "unzipper": "^0.10.11", - "wrap-ansi": "^4.0.0", + "wrap-ansi": "^9.0.0", "ws": "^8.2.3" }, "bin": { @@ -325,12 +325,27 @@ } }, "node_modules/@asyncapi/cli/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@asyncapi/cli/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==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@asyncapi/cli/node_modules/argparse": { @@ -388,6 +403,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/@asyncapi/cli/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, "node_modules/@asyncapi/cli/node_modules/fast-levenshtein": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", @@ -420,15 +441,6 @@ "node": ">=8" } }, - "node_modules/@asyncapi/cli/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@asyncapi/cli/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -454,28 +466,35 @@ } }, "node_modules/@asyncapi/cli/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", + "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", "dev": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@asyncapi/cli/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/@asyncapi/cli/node_modules/supports-color": { @@ -500,29 +519,35 @@ } }, "node_modules/@asyncapi/cli/node_modules/wrap-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/@asyncapi/cli/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/@asyncapi/cli/node_modules/ws": { @@ -547,19 +572,19 @@ } }, "node_modules/@asyncapi/converter": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@asyncapi/converter/-/converter-1.4.0.tgz", - "integrity": "sha512-YGmfb1K7sN9OpmOa1gjbNBTTv9QsQWfXaD7ibKFzHjgsIuQyUjwhp4++psiyw82iRQEUb1RoNPK8/X5knbG/Zg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@asyncapi/converter/-/converter-1.4.2.tgz", + "integrity": "sha512-/EcZcJPmgcgYAVrxQEInSNj59qIyHJXQ2Ug9LSwQeTcKGxLB40QgjsaQr5Kw/FMkNobZgeOOEtctiDOkqvRsoA==", "dev": true, "dependencies": { - "@asyncapi/parser": "^2.1.1", + "@asyncapi/parser": "^2.1.2", "js-yaml": "^3.14.1" } }, "node_modules/@asyncapi/converter/node_modules/@asyncapi/parser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-2.1.1.tgz", - "integrity": "sha512-FnJ5Du9iMu9MEb5mF90gF7z1ZkdnazisBsm3GHVFr7VaiF8luAoB+bklGYFwoMb+9QWKWr1099orY5VyXULAcQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-2.1.2.tgz", + "integrity": "sha512-2pHKnr2P8EujcrvZo4x4zNwsEIAg5vb1ZEhl2+OH0YBg8EYH/Xx73XZ+bbwLaYIg1gvFjm29jNB9UL3CMeDU5w==", "dev": true, "dependencies": { "@asyncapi/specs": "^5.1.0", @@ -580,9 +605,7 @@ "avsc": "^5.7.5", "js-yaml": "^4.1.0", "jsonpath-plus": "^7.2.0", - "node-fetch": "2.6.7", - "ramldt2jsonschema": "^1.2.3", - "webapi-parser": "^0.5.0" + "node-fetch": "2.6.7" } }, "node_modules/@asyncapi/converter/node_modules/@asyncapi/parser/node_modules/js-yaml": { @@ -684,15 +707,15 @@ } }, "node_modules/@asyncapi/generator": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@asyncapi/generator/-/generator-1.13.1.tgz", - "integrity": "sha512-+6pQE9OlXue79AO0hMJwlzwH48vED/rPGU1NAQlDyuTvo8599JTd3zUPFDafExRn/arQltJPDE+Z5jtNBifXjw==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@asyncapi/generator/-/generator-1.15.1.tgz", + "integrity": "sha512-8yhEGSaASmKIQlSjmH6RBpsCRJ6c8oWSfY0WCWSk7+lw9eyuFzhq57XKfFAexy2GCVoHAx67VA6/4Na8I2nwew==", "dev": true, "dependencies": { - "@asyncapi/generator-react-sdk": "^0.2.23", - "@asyncapi/parser": "2.1.0", + "@asyncapi/generator-react-sdk": "^1.0.2", + "@asyncapi/parser": "^2.1.2", "@npmcli/arborist": "^2.2.4", - "@smoya/multi-parser": "^4.0.0", + "@smoya/multi-parser": "^5.0.0", "ajv": "^8.12.0", "chokidar": "^3.4.0", "commander": "^6.1.0", @@ -703,7 +726,6 @@ "js-yaml": "^3.13.1", "levenshtein-edit-distance": "^2.0.5", "loglevel": "^1.6.8", - "markdown-it": "^12.3.2", "minimatch": "^3.0.4", "node-fetch": "^2.6.0", "nunjucks": "^3.2.0", @@ -875,78 +897,22 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/@asyncapi/generator/node_modules/@asyncapi/generator-react-sdk": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@asyncapi/generator-react-sdk/-/generator-react-sdk-0.2.25.tgz", - "integrity": "sha512-zmVdNaMPTDoUHnAIp33+dkGspEuLIi3BaaHFXY5lmL1XmaD9bU1rK/HLpNKhV32Os6Wp50CuskOwDsoRCeSGow==", - "dev": true, - "dependencies": { - "@asyncapi/parser": "^1.15.1", - "@babel/core": "7.12.9", - "@babel/preset-env": "^7.12.7", - "@babel/preset-react": "^7.12.7", - "@rollup/plugin-babel": "^5.2.1", - "babel-plugin-source-map-support": "^2.1.3", - "prop-types": "^15.7.2", - "react": "^17.0.1", - "rollup": "^2.60.1", - "source-map-support": "^0.5.19" - } - }, - "node_modules/@asyncapi/generator/node_modules/@asyncapi/generator-react-sdk/node_modules/@asyncapi/parser": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-1.18.1.tgz", - "integrity": "sha512-7sU9DajLV+vA2vShTYmD5lbtbTY6TOcGxB4Z4IcpRp8x5pejOsN32iU05eIYCnuamsi5SMscFxoi6fIO2vPK3Q==", - "dev": true, - "dependencies": { - "@apidevtools/json-schema-ref-parser": "^9.0.6", - "@asyncapi/specs": "^4.1.1", - "@fmvilas/pseudo-yaml-ast": "^0.3.1", - "ajv": "^6.10.1", - "js-yaml": "^3.13.1", - "json-to-ast": "^2.1.0", - "lodash.clonedeep": "^4.5.0", - "node-fetch": "^2.6.0", - "tiny-merge-patch": "^0.1.2" - } - }, - "node_modules/@asyncapi/generator/node_modules/@asyncapi/generator-react-sdk/node_modules/@asyncapi/specs": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@asyncapi/specs/-/specs-4.3.1.tgz", - "integrity": "sha512-EfexhJu/lwF8OdQDm28NKLJHFkx0Gb6O+rcezhZYLPIoNYKXJMh2J1vFGpwmfAcTTh+ffK44Oc2Hs1Q4sLBp+A==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.11" - } - }, - "node_modules/@asyncapi/generator/node_modules/@asyncapi/generator-react-sdk/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/@asyncapi/generator/node_modules/@asyncapi/parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-2.1.0.tgz", - "integrity": "sha512-78jjN3eW4ZmgJEa6Ap15lofzADCeItO4wHcAY2Jod3qLB1xf1zFDZQdtm3VSHYLeLhwoC1A33bAtzEf7M5P2bg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-2.1.2.tgz", + "integrity": "sha512-2pHKnr2P8EujcrvZo4x4zNwsEIAg5vb1ZEhl2+OH0YBg8EYH/Xx73XZ+bbwLaYIg1gvFjm29jNB9UL3CMeDU5w==", "dev": true, "dependencies": { "@asyncapi/specs": "^5.1.0", "@openapi-contrib/openapi-schema-to-json-schema": "~3.2.0", + "@stoplight/json": "^3.20.2", + "@stoplight/json-ref-readers": "^1.2.2", "@stoplight/json-ref-resolver": "^3.1.5", "@stoplight/spectral-core": "^1.16.1", "@stoplight/spectral-functions": "^1.7.2", "@stoplight/spectral-parsers": "^1.0.2", + "@stoplight/spectral-ref-resolver": "^1.0.3", + "@stoplight/types": "^13.12.0", "@types/json-schema": "^7.0.11", "@types/urijs": "^1.19.19", "ajv": "^8.11.0", @@ -955,9 +921,7 @@ "avsc": "^5.7.5", "js-yaml": "^4.1.0", "jsonpath-plus": "^7.2.0", - "node-fetch": "2.6.7", - "ramldt2jsonschema": "^1.2.3", - "webapi-parser": "^0.5.0" + "node-fetch": "2.6.7" } }, "node_modules/@asyncapi/generator/node_modules/@asyncapi/parser/node_modules/js-yaml": { @@ -981,44 +945,19 @@ "@types/json-schema": "^7.0.11" } }, - "node_modules/@asyncapi/generator/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "node_modules/@asyncapi/generator/node_modules/@smoya/multi-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smoya/multi-parser/-/multi-parser-5.0.0.tgz", + "integrity": "sha512-8cBG+pD478YHblQafBDngubW6lVcxJK+WJb0EtMnPYhP9upMBceRAnWRVL1RgZ5t/3C2C9DsjOo7IazW78Kf5g==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@asyncapi/generator/node_modules/@babel/core/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" + "@asyncapi/avro-schema-parser": "^3.0.3", + "@asyncapi/openapi-schema-parser": "^3.0.4", + "@asyncapi/protobuf-schema-parser": "^3.0.0", + "@asyncapi/raml-dt-schema-parser": "^4.0.4", + "parserapiv1": "npm:@asyncapi/parser@^2.1.0", + "parserapiv2": "npm:@asyncapi/parser@3.0.0-next-major-spec.8", + "parserapiv3": "npm:@asyncapi/parser@^3.0.0-next-major-spec.10" } }, "node_modules/@asyncapi/generator/node_modules/argparse": { @@ -1027,12 +966,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/@asyncapi/generator/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "node_modules/@asyncapi/generator/node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -1053,15 +986,6 @@ } } }, - "node_modules/@asyncapi/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@asyncapi/generator/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -1452,12 +1376,12 @@ } }, "node_modules/@asyncapi/parser": { - "version": "3.0.0-next-major-spec.3", - "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-3.0.0-next-major-spec.3.tgz", - "integrity": "sha512-LCrAQqJpGxraMyU2k1Nh1X6Q1dz7a/YhTRRFFrQHOEo+TUT/kRdoUkRDP++e58dO7h9MBN+/hZK5TaqE+/jQiw==", + "version": "3.0.0-next-major-spec.15", + "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-3.0.0-next-major-spec.15.tgz", + "integrity": "sha512-3Ngxkekzw7oh8auqGmEnz3PiSxSIkveMzdpuBIOiQ3EHVnBpG1cdhi/mMlvksqTsMQcfLGPsVVqW7Y3cW2HPDQ==", "dev": true, "dependencies": { - "@asyncapi/specs": "^6.0.0-next-major-spec.6", + "@asyncapi/specs": "^6.0.0-next-major-spec.9", "@openapi-contrib/openapi-schema-to-json-schema": "~3.2.0", "@stoplight/json-ref-resolver": "^3.1.5", "@stoplight/spectral-core": "^1.16.1", @@ -1750,9 +1674,9 @@ } }, "node_modules/@asyncapi/specs": { - "version": "6.0.0-next-major-spec.6", - "resolved": "https://registry.npmjs.org/@asyncapi/specs/-/specs-6.0.0-next-major-spec.6.tgz", - "integrity": "sha512-xYiXZetKiAZgZoh2q/sxt+Ceg8bLTK/WSCwtLvlH7JgnjpnOEtCDwKszijmmOJEYdGVSrj0OFXLPrg/dm4JANw==", + "version": "6.0.0-next-major-spec.13", + "resolved": "https://registry.npmjs.org/@asyncapi/specs/-/specs-6.0.0-next-major-spec.13.tgz", + "integrity": "sha512-mnGllHVaUscCHaDnYfLGo84KK81NcTmevVFQP94RusKM2SvtYkbBuC0nwQ6ie/PAEHQy+kn2PjrJlfwwm7VgEQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.11" @@ -4140,15 +4064,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@fmvilas/pseudo-yaml-ast": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@fmvilas/pseudo-yaml-ast/-/pseudo-yaml-ast-0.3.1.tgz", - "integrity": "sha512-8OAB74W2a9M3k9bjYD8AjVXkX+qO8c0SqNT5HlgOqx7AxSw8xdksEcZp7gFtfi+4njSxT6+76ZR+1ubjAwQHOg==", - "dev": true, - "dependencies": { - "yaml-ast-parser": "0.0.43" - } - }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -6838,9 +6753,9 @@ } }, "node_modules/@smoya/multi-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smoya/multi-parser/-/multi-parser-4.0.0.tgz", - "integrity": "sha512-NgPxSaB3YqwrIVe7AtQ/wh9I2J0BHR4lP0PdqirYYrc0XXRwdDjIRrywEc2jjECWsL7tuGU/QtGMGIVaJe6ZYA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smoya/multi-parser/-/multi-parser-4.1.0.tgz", + "integrity": "sha512-0q4805I7ZdkKNEbNrbxmBNAdYEAH9aBYCuXiIXCbu8WC0sdRqLWmTsvg/DaNO8ZnsrGhVzy5VITf+8CKlVnGoQ==", "dev": true, "dependencies": { "@asyncapi/avro-schema-parser": "^3.0.3", @@ -9941,15 +9856,6 @@ "node": ">= 0.12.0" } }, - "node_modules/code-error-fragment": { - "version": "0.0.230", - "resolved": "https://registry.npmjs.org/code-error-fragment/-/code-error-fragment-0.0.230.tgz", - "integrity": "sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -10932,15 +10838,6 @@ "once": "^1.4.0" } }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -12265,6 +12162,18 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -12495,12 +12404,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -15755,19 +15658,6 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, - "node_modules/json-to-ast": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json-to-ast/-/json-to-ast-2.1.0.tgz", - "integrity": "sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==", - "dev": true, - "dependencies": { - "code-error-fragment": "0.0.230", - "grapheme-splitter": "^1.0.4" - }, - "engines": { - "node": ">= 4" - } - }, "node_modules/json2md": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/json2md/-/json2md-1.13.0.tgz", @@ -15954,15 +15844,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, "node_modules/list-item": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", @@ -16043,12 +15924,6 @@ "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", "dev": true }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true - }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -16304,28 +16179,6 @@ "tmpl": "1.0.5" } }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it/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==", - "dev": true - }, "node_modules/markdown-link": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", @@ -16379,12 +16232,6 @@ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", "dev": true }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, "node_modules/mem-fs": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-2.3.0.tgz", @@ -18020,15 +17867,198 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "node_modules/parserv2": { + "node_modules/parserapiv1": { "name": "@asyncapi/parser", - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-2.1.0.tgz", - "integrity": "sha512-78jjN3eW4ZmgJEa6Ap15lofzADCeItO4wHcAY2Jod3qLB1xf1zFDZQdtm3VSHYLeLhwoC1A33bAtzEf7M5P2bg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-2.1.2.tgz", + "integrity": "sha512-2pHKnr2P8EujcrvZo4x4zNwsEIAg5vb1ZEhl2+OH0YBg8EYH/Xx73XZ+bbwLaYIg1gvFjm29jNB9UL3CMeDU5w==", "dev": true, "dependencies": { "@asyncapi/specs": "^5.1.0", "@openapi-contrib/openapi-schema-to-json-schema": "~3.2.0", + "@stoplight/json": "^3.20.2", + "@stoplight/json-ref-readers": "^1.2.2", + "@stoplight/json-ref-resolver": "^3.1.5", + "@stoplight/spectral-core": "^1.16.1", + "@stoplight/spectral-functions": "^1.7.2", + "@stoplight/spectral-parsers": "^1.0.2", + "@stoplight/spectral-ref-resolver": "^1.0.3", + "@stoplight/types": "^13.12.0", + "@types/json-schema": "^7.0.11", + "@types/urijs": "^1.19.19", + "ajv": "^8.11.0", + "ajv-errors": "^3.0.0", + "ajv-formats": "^2.1.1", + "avsc": "^5.7.5", + "js-yaml": "^4.1.0", + "jsonpath-plus": "^7.2.0", + "node-fetch": "2.6.7" + } + }, + "node_modules/parserapiv1/node_modules/@asyncapi/specs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@asyncapi/specs/-/specs-5.1.0.tgz", + "integrity": "sha512-yffhETqehkim43luMnPKOwzY0D0YtU4bKpORIXIaid6p5Y5kDLrMGJaEPkNieQp03HMjhjFrnUPtT8kvqe0+aQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.11" + } + }, + "node_modules/parserapiv1/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==", + "dev": true + }, + "node_modules/parserapiv1/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/parserapiv1/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/parserapiv1/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/parserapiv1/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==", + "dev": true + }, + "node_modules/parserapiv1/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==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/parserapiv2": { + "name": "@asyncapi/parser", + "version": "3.0.0-next-major-spec.8", + "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-3.0.0-next-major-spec.8.tgz", + "integrity": "sha512-d8ebYM08BCsx3Q4AeLke6naU/NrcAXFEVpS6b3EWcKRdUDce+v0X5k9aDH+YXWCaQApEF28UzcxhlSOJvhIFgQ==", + "dev": true, + "dependencies": { + "@asyncapi/specs": "^6.0.0-next-major-spec.9", + "@openapi-contrib/openapi-schema-to-json-schema": "~3.2.0", + "@stoplight/json-ref-resolver": "^3.1.5", + "@stoplight/spectral-core": "^1.16.1", + "@stoplight/spectral-functions": "^1.7.2", + "@stoplight/spectral-parsers": "^1.0.2", + "@types/json-schema": "^7.0.11", + "@types/urijs": "^1.19.19", + "ajv": "^8.11.0", + "ajv-errors": "^3.0.0", + "ajv-formats": "^2.1.1", + "avsc": "^5.7.5", + "js-yaml": "^4.1.0", + "jsonpath-plus": "^7.2.0", + "node-fetch": "2.6.7", + "ramldt2jsonschema": "^1.2.3", + "webapi-parser": "^0.5.0" + } + }, + "node_modules/parserapiv2/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==", + "dev": true + }, + "node_modules/parserapiv2/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/parserapiv2/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/parserapiv2/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/parserapiv2/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==", + "dev": true + }, + "node_modules/parserapiv2/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==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/parserapiv3": { + "name": "@asyncapi/parser", + "version": "3.0.0-next-major-spec.15", + "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-3.0.0-next-major-spec.15.tgz", + "integrity": "sha512-3Ngxkekzw7oh8auqGmEnz3PiSxSIkveMzdpuBIOiQ3EHVnBpG1cdhi/mMlvksqTsMQcfLGPsVVqW7Y3cW2HPDQ==", + "dev": true, + "dependencies": { + "@asyncapi/specs": "^6.0.0-next-major-spec.9", + "@openapi-contrib/openapi-schema-to-json-schema": "~3.2.0", "@stoplight/json-ref-resolver": "^3.1.5", "@stoplight/spectral-core": "^1.16.1", "@stoplight/spectral-functions": "^1.7.2", @@ -18046,6 +18076,94 @@ "webapi-parser": "^0.5.0" } }, + "node_modules/parserapiv3/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==", + "dev": true + }, + "node_modules/parserapiv3/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/parserapiv3/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/parserapiv3/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/parserapiv3/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==", + "dev": true + }, + "node_modules/parserapiv3/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==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/parserv2": { + "name": "@asyncapi/parser", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-2.1.2.tgz", + "integrity": "sha512-2pHKnr2P8EujcrvZo4x4zNwsEIAg5vb1ZEhl2+OH0YBg8EYH/Xx73XZ+bbwLaYIg1gvFjm29jNB9UL3CMeDU5w==", + "dev": true, + "dependencies": { + "@asyncapi/specs": "^5.1.0", + "@openapi-contrib/openapi-schema-to-json-schema": "~3.2.0", + "@stoplight/json": "^3.20.2", + "@stoplight/json-ref-readers": "^1.2.2", + "@stoplight/json-ref-resolver": "^3.1.5", + "@stoplight/spectral-core": "^1.16.1", + "@stoplight/spectral-functions": "^1.7.2", + "@stoplight/spectral-parsers": "^1.0.2", + "@stoplight/spectral-ref-resolver": "^1.0.3", + "@stoplight/types": "^13.12.0", + "@types/json-schema": "^7.0.11", + "@types/urijs": "^1.19.19", + "ajv": "^8.11.0", + "ajv-errors": "^3.0.0", + "ajv-formats": "^2.1.1", + "avsc": "^5.7.5", + "js-yaml": "^4.1.0", + "jsonpath-plus": "^7.2.0", + "node-fetch": "2.6.7" + } + }, "node_modules/parserv2/node_modules/@asyncapi/specs": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@asyncapi/specs/-/specs-5.1.0.tgz", @@ -18117,12 +18235,12 @@ }, "node_modules/parserv3": { "name": "@asyncapi/parser", - "version": "3.0.0-next-major-spec.3", - "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-3.0.0-next-major-spec.3.tgz", - "integrity": "sha512-LCrAQqJpGxraMyU2k1Nh1X6Q1dz7a/YhTRRFFrQHOEo+TUT/kRdoUkRDP++e58dO7h9MBN+/hZK5TaqE+/jQiw==", + "version": "3.0.0-next-major-spec.15", + "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-3.0.0-next-major-spec.15.tgz", + "integrity": "sha512-3Ngxkekzw7oh8auqGmEnz3PiSxSIkveMzdpuBIOiQ3EHVnBpG1cdhi/mMlvksqTsMQcfLGPsVVqW7Y3cW2HPDQ==", "dev": true, "dependencies": { - "@asyncapi/specs": "^6.0.0-next-major-spec.6", + "@asyncapi/specs": "^6.0.0-next-major-spec.9", "@openapi-contrib/openapi-schema-to-json-schema": "~3.2.0", "@stoplight/json-ref-resolver": "^3.1.5", "@stoplight/spectral-core": "^1.16.1", @@ -20151,9 +20269,9 @@ } }, "node_modules/simple-git": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.20.0.tgz", - "integrity": "sha512-ozK8tl2hvLts8ijTs18iFruE+RoqmC/mqZhjs/+V7gS5W68JpJ3+FCTmLVqmR59MaUQ52MfGQuWsIqfsTbbJ0Q==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.21.0.tgz", + "integrity": "sha512-oTzw9248AF5bDTMk9MrxsRzEzivMlY+DWH0yWS4VYpMhNLhDWnN06pCtaUyPnqv/FpsdeNmRqmZugMABHRPdDA==", "dev": true, "dependencies": { "@kwsites/file-exists": "^1.1.1", @@ -20371,9 +20489,9 @@ "dev": true }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "dependencies": { "asn1": "~0.2.3", @@ -20863,12 +20981,6 @@ "xtend": "~4.0.1" } }, - "node_modules/tiny-merge-patch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tiny-merge-patch/-/tiny-merge-patch-0.1.2.tgz", - "integrity": "sha512-NLoA//tTMBPTr0oGdq+fxnvVR0tDa8tOcG9ZGbuovGzROadZ404qOV4g01jeWa5S8MC9nAOvu5bQgCW7s8tlWQ==", - "dev": true - }, "node_modules/tippy.js": { "version": "6.3.7", "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", @@ -21521,9 +21633,9 @@ } }, "node_modules/typescript-json-schema/node_modules/@types/node": { - "version": "16.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.63.tgz", - "integrity": "sha512-Q2VSI/lVKza0Z5qeY/JrHcwi9fxzBktDvNHthr0TVA/D3yMdHDw9syggng+wJPlsBLgx4jPpOrcJ100wnpniTg==", + "version": "16.18.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.66.tgz", + "integrity": "sha512-sePmD/imfKvC4re/Wwos1NEcXYm6O96CAG5gQVY53nmDb8ePQ4qPku6uruN7n6TJ0t5FhcoUc2+yvE2/UZVDZw==", "dev": true }, "node_modules/typescript-json-schema/node_modules/cliui": { @@ -21599,12 +21711,6 @@ "node": ">=12" } }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -22475,12 +22581,6 @@ "node": ">= 6" } }, - "node_modules/yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "dev": true - }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/package.json b/package.json index 195cfa067..fe1740e44 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ "yaml": "^1.10.2" }, "devDependencies": { - "@asyncapi/cli": "^1.1.3", - "@asyncapi/parser": "^3.0.0-next-major-spec.3", + "@asyncapi/parser": "^3.0.0-next-major-spec.14", + "@asyncapi/cli": "^1.1.9", "@babel/preset-env": "^7.15.8", "@babel/preset-react": "^7.14.5", "@types/react": "^18.2.18", @@ -57,8 +57,8 @@ }, "generator": { "renderer": "react", - "apiVersion": "v2", - "generator": ">=1.13.0 <2.0.0", + "apiVersion": "v3", + "generator": ">=1.15.0 <2.0.0", "parameters": { "frontMatter": { "description": "The name of a JSON or YAML formatted file containing values to provide the YAML frontmatter for static-site or documentation generators. The file may contain {{title}} and {{version}} replaceable tags.", diff --git a/test/components/Message.test.js b/test/components/Message.test.js index 8ee80f890..52ff93b25 100644 --- a/test/components/Message.test.js +++ b/test/components/Message.test.js @@ -138,9 +138,9 @@ describe('Message component', () => { } } ] - }); + }, { id: 'UserSignup Message Id' }); const expected = ` -#### Message User signup \`UserSignup Message Id\` +#### Message User signup \`UserSignup\` *Action to sign a user up.* diff --git a/test/components/Operations.test.js b/test/components/Operations.test.js index bf01e7113..dc41d64c8 100644 --- a/test/components/Operations.test.js +++ b/test/components/Operations.test.js @@ -918,7 +918,6 @@ A longer description of the message } }, SomeMessage2: { - messageId: 'SomeMessage2', description: 'A longer description of the message', payload: { type: 'object', diff --git a/test/components/__snapshots__/AsyncAPI.test.js.snap b/test/components/__snapshots__/AsyncAPI.test.js.snap index d9b93f70e..73e133aa2 100644 --- a/test/components/__snapshots__/AsyncAPI.test.js.snap +++ b/test/components/__snapshots__/AsyncAPI.test.js.snap @@ -360,183 +360,228 @@ Accepts **one of** the following messages: `; exports[`AsyncAPI component should render AsyncAPI v3 document 1`] = ` -"# Adeo AsyncAPI Case Study %REPLACED_BY_MAVEN% documentation +"# Streetlights API 1.0.0 documentation -* Email support: [info@asyncapi.io](mailto:info@asyncapi.io) +* License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0) +* Default content type: [application/json](https://www.iana.org/assignments/media-types/application/json) -This Adeo specification illustrates how ADEO uses AsyncAPI to document some of their exchanges +The Smartylighting Streetlights API allows you to remotely manage the city lights. -##### Specification tags +### Check out its awesome features: -| Name | Description | Documentation | -|---|---|---| -| costing | Costing channels, used by Costing clients. | - | +* Turn a specific streetlight on/off 🌃 +* Dim a specific streetlight 😎 +* Receive real-time information about environmental lighting conditions 📈 ## Table of Contents * [Servers](#servers) * [production](#production-server) - * [staging](#staging-server) - * [dev](#dev-server) ## Servers ### \`production\` Server -* URL: \`kafka-secure://prod.url:9092/\` -* Protocol: \`kafka-secure\` - -Kafka PRODUCTION cluster - -#### Security - -##### Security Requirement 1 +* URL: \`mqtt://test.mosquitto.org:{port}/\` +* Protocol: \`mqtt\` -* Type: \`PLAIN\` - * security.protocol: SASL_SSL - * sasl.mechanism: PLAIN +Test broker - Use [SASL authentication with SSL encryption](https://docs.confluent.io/platform/current/security/security_tutorial.html#configure-clients) to connect to the ADEO Broker. +#### URL Variables +| Name | Description | Default value | Allowed values | +|---|---|---|---| +| port | Secure connection (TLS) is available through port 8883. | \`1883\` | \`1883\`, \`8883\` | +## Operations +### RECEIVE \`smartylighting/streetlights/1/0/event/{streetlightId}/lighting/measured\` Operation +*Inform about environmental lighting conditions of a particular streetlight.* -#### \`kafka\` Server specific information +* Operation ID: \`receiveLightMeasurement\` -| Name | Type | Description | Value | Constraints | Notes | -|---|---|---|---|---|---| -| schemaRegistryUrl | - | - | \`\\"https://schema-registry.prod.url/\\"\` | - | - | +The topic on which measured values may be produced and consumed. +This is the description with **bold** text. -### \`staging\` Server +On multiple lines. -* URL: \`kafka-secure://staging.url:9092/\` -* Protocol: \`kafka-secure\` -Kafka STAGING cluster for \`uat\` and \`preprod\` environments +##### Operation tags -#### Security +| Name | Description | Documentation | +|---|---|---| +| oparation-tag1 | - | [External docs description 1](https://www.asyncapi.com/) | +| oparation-tag2 | Description 2 | [Find more info here](https://www.asyncapi.com/) | +| oparation-tag3 | - | - | +| oparation-tag4 | Description 4 | - | +| message-tag5 | - | [Find more info here](https://www.asyncapi.com/) | -##### Security Requirement 1 +#### Parameters -* Type: \`PLAIN\` - * security.protocol: SASL_SSL - * sasl.mechanism: PLAIN +| Name | Type | Description | Value | Constraints | Notes | +|---|---|---|---|---|---| +| streetlightId | string | The ID of the streetlight. | - | - | **required** | - Use [SASL authentication with SSL encryption](https://docs.confluent.io/platform/current/security/security_tutorial.html#configure-clients) to connect to the ADEO Broker. +#### \`kafka\` Operation specific information +| Name | Type | Description | Value | Constraints | Notes | +|---|---|---|---|---|---| +| clientId | - | - | - | - | - | +| clientId.const | - | - | \`\\"my-app-id\\"\` | - | - | +#### Message Light measured \`lightMeasured\` +*Inform about environmental lighting conditions of a particular streetlight.* +* Content type: [application/json](https://www.iana.org/assignments/media-types/application/json) -#### \`kafka\` Server specific information +##### Headers | Name | Type | Description | Value | Constraints | Notes | |---|---|---|---|---|---| -| schemaRegistryUrl | - | - | \`\\"https://schema-registry.staging.url/\\"\` | - | - | +| (root) | object | - | - | - | **additional properties are allowed** | +| my-app-header | integer | - | - | [ 0 .. 100 ] | - | +> Examples of headers _(generated)_ -### \`dev\` Server +\`\`\`json +{ + \\"my-app-header\\": 100 +} +\`\`\` -* URL: \`kafka-secure://dev.url:9092/\` -* Protocol: \`kafka-secure\` -Kafka DEV cluster for \`dev\` and \`sit\` environments +##### Payload -#### Security +| Name | Type | Description | Value | Constraints | Notes | +|---|---|---|---|---|---| +| (root) | object | - | - | - | **additional properties are allowed** | +| lumens | integer | Light intensity measured in lumens. | - | >= 0 | - | +| lumens.x-pi | - | - | \`\\"false\\"\` | - | - | +| sentAt | string | Date and time when the message was sent. | - | format (\`date-time\`) | - | -##### Security Requirement 1 +> Examples of payload _(generated)_ -* Type: \`PLAIN\` - * security.protocol: SASL_SSL - * sasl.mechanism: PLAIN +\`\`\`json +{ + \\"lumens\\": 0, + \\"sentAt\\": \\"2019-08-24T14:15:22Z\\" +} +\`\`\` - Use [SASL authentication with SSL encryption](https://docs.confluent.io/platform/current/security/security_tutorial.html#configure-clients) to connect to the ADEO Broker. +##### Message tags +| Name | Description | Documentation | +|---|---|---| +| message-tag1 | - | [External docs description 1](https://www.asyncapi.com/) | +| message-tag2 | Description 2 | [Find more info here](https://www.asyncapi.com/) | +| message-tag3 | - | - | +| message-tag4 | Description 4 | - | +| message-tag5 | - | [Find more info here](https://www.asyncapi.com/) | +### SEND \`smartylighting/streetlights/1/0/action/{streetlightId}/turn/on\` Operation +* Operation ID: \`turnOn\` -#### \`kafka\` Server specific information +#### Parameters | Name | Type | Description | Value | Constraints | Notes | |---|---|---|---|---|---| -| schemaRegistryUrl | - | - | \`\\"https://schema-registry.dev.url/\\"\` | - | - | +| streetlightId | string | The ID of the streetlight. | - | - | **required** | -## Operations +#### \`kafka\` Operation specific information -### REPLY \`adeo-{env}-case-study-COSTING-REQUEST-{version}\` Operation +| Name | Type | Description | Value | Constraints | Notes | +|---|---|---|---|---|---| +| clientId | - | - | - | - | - | +| clientId.const | - | - | \`\\"my-app-id\\"\` | - | - | -*[COSTING] Request one or more Costing calculation for any product* +#### Message Turn on/off \`turnOnOff\` -* Operation ID: \`requestCosting\` +*Command a particular streetlight to turn the lights on or off.* -Use this topic to do a Costing Request to Costing product. We use the [**RecordNameStrategy**](https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#subject-name-strategy) to infer the messages schema. You have to define \`x-value.subject.name.strategy\` to \`io.confluent.kafka.serializers.subject.RecordNameStrategy\` in your producer to use the schema we manage. The schema below illustrates how Costing Request messages are handled. ![](https://user-images.githubusercontent.com/5501911/188920831-689cec5f-8dc3-460b-8794-0b54ec8b0ac8.png) +* Content type: [application/json](https://www.iana.org/assignments/media-types/application/json) +##### Headers -You can try a costing request using our [Conduktor producer template](https://conduktor.url) +| Name | Type | Description | Value | Constraints | Notes | +|---|---|---|---|---|---| +| (root) | object | - | - | - | **additional properties are allowed** | +| my-app-header | integer | - | - | [ 0 .. 100 ] | - | +> Examples of headers _(generated)_ -##### Operation tags +\`\`\`json +{ + \\"my-app-header\\": 100 +} +\`\`\` -| Name | Description | Documentation | -|---|---|---| -| costing | - | - | -#### Parameters +##### Payload | Name | Type | Description | Value | Constraints | Notes | |---|---|---|---|---|---| -| env | string | Adeo Kafka Environment for messages publications. | allowed (\`\\"dev\\"\`, \`\\"sit\\"\`, \`\\"uat1\\"\`, \`\\"preprod\\"\`, \`\\"prod\\"\`) | - | **required** | -| version | string | the topic version you want to use | default (\`\\"V1\\"\`), examples (\`\\"V1\\"\`) | - | **required** | +| (root) | object | - | - | - | **additional properties are allowed** | +| command | string | Whether to turn on or off the light. | allowed (\`\\"on\\"\`, \`\\"off\\"\`) | - | - | +| command.x-pi | - | - | \`\\"false\\"\` | - | - | +| sentAt | string | Date and time when the message was sent. | - | format (\`date-time\`) | - | +> Examples of payload _(generated)_ -#### \`kafka\` Channel specific information +\`\`\`json +{ + \\"command\\": \\"on\\", + \\"sentAt\\": \\"2019-08-24T14:15:22Z\\" +} +\`\`\` + + + +### SEND \`smartylighting/streetlights/1/0/action/{streetlightId}/turn/off\` Operation + +* Operation ID: \`turnOff\` + +#### Parameters | Name | Type | Description | Value | Constraints | Notes | |---|---|---|---|---|---| -| replicas | - | - | \`\\"3\\"\` | - | - | -| partitions | - | - | \`\\"3\\"\` | - | - | -| topicConfiguration | - | - | - | - | - | -| topicConfiguration.cleanup.policy | - | - | - | - | - | -| topicConfiguration.cleanup.policy.0 (index) | - | - | \`\\"delete\\"\` | - | - | -| topicConfiguration.retention.ms | - | - | \`\\"604800000\\"\` | - | - | +| streetlightId | string | The ID of the streetlight. | - | - | **required** | + #### \`kafka\` Operation specific information | Name | Type | Description | Value | Constraints | Notes | |---|---|---|---|---|---| -| groupId | string | The groupId must be prefixed by your \`svc\` account, deliver by the Adeo Kafka team. This \`svc\` must have the write access to the topic. | - | - | - | -| x-value.subject.name.strategy | string | We use the RecordNameStrategy to infer the messages schema. Use \`x-value.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy\` in your producer configuration. | - | - | - | +| clientId | - | - | - | - | - | +| clientId.const | - | - | \`\\"my-app-id\\"\` | - | - | -#### Message Costing Request V1 \`CostingRequestV1\` +#### Message Turn on/off \`turnOnOff\` -*Costing Request V1 inputs.* +*Command a particular streetlight to turn the lights on or off.* + +* Content type: [application/json](https://www.iana.org/assignments/media-types/application/json) ##### Headers | Name | Type | Description | Value | Constraints | Notes | |---|---|---|---|---|---| | (root) | object | - | - | - | **additional properties are allowed** | -| REQUEST_ID | string | A unique Request ID needed to define a \`CORRELATION_ID\` for exchanges, which will be sent back in the Costing Responses. | - | format (\`uuid\`) | **required** | -| REPLY_TOPIC | string | The Kafka topic where to send the Costing Response. This is required for the [Return Address EIP pattern](https://www.enterpriseintegrationpatterns.com/patterns/messaging/ReturnAddress.html). **You must grant WRITE access to our \`svc-ccr-app\` service account.** | - | - | **required** | -| REQUESTER_ID | string | The Costing requester service account used to produce costing request. | - | - | **required** | -| REQUESTER_CODE | string | The Costing requester code (generally the BU Code). The requester code is useful to get the dedicated context (tenant). | - | - | **required** | +| my-app-header | integer | - | - | [ 0 .. 100 ] | - | > Examples of headers _(generated)_ \`\`\`json { - \\"REQUEST_ID\\": \\"1fa6ef40-8f47-40a8-8cf6-f8607d0066ef\\", - \\"REPLY_TOPIC\\": \\"adeo-case-study-COSTING-RESPONSE-V1\\", - \\"REQUESTER_ID\\": \\"svc-ecollect-app\\", - \\"REQUESTER_CODE\\": 1 + \\"my-app-header\\": 100 } \`\`\` @@ -545,112 +590,130 @@ You can try a costing request using our [Conduktor producer template](https://co | Name | Type | Description | Value | Constraints | Notes | |---|---|---|---|---|---| -| (root) | record | - | - | - | - | +| (root) | object | - | - | - | **additional properties are allowed** | +| command | string | Whether to turn on or off the light. | allowed (\`\\"on\\"\`, \`\\"off\\"\`) | - | - | +| command.x-pi | - | - | \`\\"false\\"\` | - | - | +| sentAt | string | Date and time when the message was sent. | - | format (\`date-time\`) | - | > Examples of payload _(generated)_ \`\`\`json -\\"\\" +{ + \\"command\\": \\"on\\", + \\"sentAt\\": \\"2019-08-24T14:15:22Z\\" +} \`\`\` -##### Message tags -| Name | Description | Documentation | -|---|---|---| -| costing | - | - | +### SEND \`smartylighting/streetlights/1/0/action/{streetlightId}/dim\` Operation -#### Response information +* Operation ID: \`dimLight\` -* should be done to channel: \`adeo-{env}-case-study-COSTING-RESPONSE-{version}\` -#### Operation reply address information +#### Parameters -* Operation reply address location: \`$message.header#/REPLY_TOPIC\` +| Name | Type | Description | Value | Constraints | Notes | +|---|---|---|---|---|---| +| streetlightId | string | The ID of the streetlight. | - | - | **required** | +#### \`kafka\` Operation specific information -### SEND \`adeo-{env}-case-study-COSTING-RESPONSE-{version}\` Operation +| Name | Type | Description | Value | Constraints | Notes | +|---|---|---|---|---|---| +| clientId | - | - | - | - | - | +| clientId.const | - | - | \`\\"my-app-id\\"\` | - | - | -*[COSTING] Get the costing responses matching an initial Costing Request.* +#### Message Dim light \`dimLight\` -* Operation ID: \`getCostingResponse\` +*Command a particular streetlight to dim the lights.* -This topic is used to REPLY Costing Requests and is targeted by the \`REPLY_TOPIC\` header. **You must grant PUBLISH access to our \`svc-ccr-app\` service account.**. We use the [**RecordNameStrategy**](https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#subject-name-strategy) to infer the messages schema. You have to define \`key.subject.name.strategy\` and \`x-value.subject.name.strategy\` to \`io.confluent.kafka.serializers.subject.RecordNameStrategy\` in your consumer. The schema below illustrates how Costing Response messages are handled. - ![](https://user-images.githubusercontent.com/5501911/188920831-689cec5f-8dc3-460b-8794-0b54ec8b0ac8.png) +* Content type: [application/json](https://www.iana.org/assignments/media-types/application/json) +##### Headers -##### Operation tags +| Name | Type | Description | Value | Constraints | Notes | +|---|---|---|---|---|---| +| (root) | object | - | - | - | **additional properties are allowed** | +| my-app-header | integer | - | - | [ 0 .. 100 ] | - | -| Name | Description | Documentation | -|---|---|---| -| costing | - | - | +> Examples of headers _(generated)_ -#### Parameters +\`\`\`json +{ + \\"my-app-header\\": 100 +} +\`\`\` + + +##### Payload | Name | Type | Description | Value | Constraints | Notes | |---|---|---|---|---|---| -| env | string | Adeo Kafka Environment for messages publications. | allowed (\`\\"dev\\"\`, \`\\"sit\\"\`, \`\\"uat1\\"\`, \`\\"preprod\\"\`, \`\\"prod\\"\`) | - | **required** | -| version | string | the topic version you want to use | default (\`\\"V1\\"\`), examples (\`\\"V1\\"\`) | - | **required** | +| (root) | object | - | - | - | **additional properties are allowed** | +| percentage | integer | Percentage to which the light should be dimmed to. | - | [ 0 .. 100 ] | - | +| sentAt | string | Date and time when the message was sent. | - | format (\`date-time\`) | - | +> Examples of payload _(generated)_ -#### \`kafka\` Channel specific information +\`\`\`json +{ + \\"percentage\\": 100, + \\"sentAt\\": \\"2019-08-24T14:15:22Z\\" +} +\`\`\` -| Name | Type | Description | Value | Constraints | Notes | -|---|---|---|---|---|---| -| x-key.subject.name.strategy | string | We use the RecordNameStrategy to infer the messages schema. Use \`x-key.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy\` in your consumer configuration. | - | - | - | -| x-value.subject.name.strategy | string | We use the RecordNameStrategy to infer the messages schema. Use \`x-value.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy\` in your consumer configuration. | - | - | - | -#### \`kafka\` Operation specific information -| Name | Type | Description | Value | Constraints | Notes | -|---|---|---|---|---|---| -| groupId | string | The groupId must be prefixed by your \`svc\` account, deliver by the Adeo Kafka team. This \`svc\` must have the read access to the topic. | - | - | - | +### SEND \`some.channel\` Operation -#### Message Costing Response \`CostingResponse\` +* Operation ID: \`some.channel.subscribe\` -*Costing Response ouputs.* +this description shows in markdown -Please refer to the \`CostingResponseKey.avsc\` schema, available on [our github project](https://github.url/). +Sending **one of** the following messages: +#### Message \`Success\` -##### Headers +* Content type: [application/json](https://www.iana.org/assignments/media-types/application/json) + +##### Payload | Name | Type | Description | Value | Constraints | Notes | |---|---|---|---|---|---| | (root) | object | - | - | - | **additional properties are allowed** | -| CALCULATION_ID | string | A unique Message ID. | - | format (\`uuid\`) | - | -| CORRELATION_ID | string | A unique Correlation ID defined from the \`REQUEST_ID\` or the \`MESSAGE_ID\` provided in the Costing Request. | - | format (\`uuid\`) | - | -| REQUEST_TIMESTAMP | string | Timestamp of the costing request | - | format (\`date-time\`) | - | -| CALCULATION_TIMESTAMP | string | Technical timestamp for the costing calculation | - | format (\`date-time\`) | - | +| result | string | - | examples (\`\\"success\\"\`) | - | - | -> Examples of headers _(generated)_ +> Examples of payload _(generated)_ \`\`\`json { - \\"CALCULATION_ID\\": \\"1fa6ef40-8f47-40a8-8cf6-f8607d0066ef\\", - \\"CORRELATION_ID\\": \\"1fa6ef40-8f47-40a8-8cf6-f8607d0066ef\\", - \\"REQUEST_TIMESTAMP\\": \\"2019-08-24T14:15:22Z\\", - \\"CALCULATION_TIMESTAMP\\": \\"2019-08-24T14:15:22Z\\" + \\"result\\": \\"success\\" } \`\`\` +#### Message \`Failure\` + +* Content type: [application/json](https://www.iana.org/assignments/media-types/application/json) + ##### Payload | Name | Type | Description | Value | Constraints | Notes | |---|---|---|---|---|---| -| (root) | record | - | - | - | - | +| (root) | object | - | examples (\`{\\"error\\":{\\"errorCode\\":404,\\"errorMessage\\":\\"Something messed up\\"}}\`) | - | **additional properties are allowed** | +| error | object | - | - | - | **additional properties are allowed** | +| error.errorCode | integer | - | - | - | - | +| error.errorMessage | string | - | - | - | - | -> Examples of payload _(generated)_ +> Examples of payload \`\`\`json -\\"\\" -\`\`\` - - -##### Message tags - -| Name | Description | Documentation | -|---|---|---| -| costing | - | - |" +{ + \\"error\\": { + \\"errorCode\\": 404, + \\"errorMessage\\": \\"Something messed up\\" + } +} +\`\`\`" `; diff --git a/test/spec/asyncapi_v3.yml b/test/spec/asyncapi_v3.yml index 06e285bef..ef0c47a5d 100644 --- a/test/spec/asyncapi_v3.yml +++ b/test/spec/asyncapi_v3.yml @@ -1,318 +1,291 @@ asyncapi: 3.0.0 info: - title: Adeo AsyncAPI Case Study - version: "%REPLACED_BY_MAVEN%" - description: > - This Adeo specification illustrates how ADEO uses AsyncAPI to document some of their exchanges - contact: - name: AsyncAPI team - email: info@asyncapi.io - tags: - - name: costing - description: "Costing channels, used by Costing clients." + title: Streetlights API + version: 1.0.0 + description: "The Smartylighting Streetlights API allows you to remotely manage the city lights.\n\n### Check out its awesome features:\n\n* Turn a specific streetlight on/off \U0001F303\n* Dim a specific streetlight \U0001F60E\n* Receive real-time information about environmental lighting conditions \U0001F4C8\n" + license: + name: Apache 2.0 + url: 'https://www.apache.org/licenses/LICENSE-2.0' +defaultContentType: application/json servers: production: - host: "prod.url:9092" - protocol: kafka-secure - description: Kafka PRODUCTION cluster - security: - - $ref: '#/components/securitySchemes/sasl-ssl' - bindings: - kafka: - schemaRegistryUrl: >- - https://schema-registry.prod.url/ - staging: - host: "staging.url:9092" - protocol: kafka-secure - description: Kafka STAGING cluster for `uat` and `preprod` environments - security: - - $ref: '#/components/securitySchemes/sasl-ssl' - bindings: - kafka: - schemaRegistryUrl: >- - https://schema-registry.staging.url/ - dev: - host: "dev.url:9092" - protocol: kafka-secure - description: Kafka DEV cluster for `dev` and `sit` environments - security: - - $ref: '#/components/securitySchemes/sasl-ssl' - bindings: - kafka: - schemaRegistryUrl: >- - https://schema-registry.dev.url/ - + host: 'test.mosquitto.org:{port}' + protocol: mqtt + description: Test broker + variables: + port: + description: Secure connection (TLS) is available through port 8883. + default: '1883' + enum: + - '1883' + - '8883' channels: - costingRequest: - address: "adeo-{env}-case-study-COSTING-REQUEST-{version}" - description: > - Use this topic to do a Costing Request to Costing product. - We use the - [**RecordNameStrategy**](https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#subject-name-strategy) - to infer the messages schema. - You have to define `x-value.subject.name.strategy` to - `io.confluent.kafka.serializers.subject.RecordNameStrategy` in your - producer to use the schema we manage. - The schema below illustrates how Costing Request messages are - handled. - ![](https://user-images.githubusercontent.com/5501911/188920831-689cec5f-8dc3-460b-8794-0b54ec8b0ac8.png) + 'smartylighting/streetlights/1/0/event/{streetlightId}/lighting/measured': + address: 'smartylighting/streetlights/1/0/event/{streetlightId}/lighting/measured' + messages: + receiveLightMeasurement.message: + $ref: '#/components/messages/lightMeasured' + description: The topic on which measured values may be produced and consumed. parameters: - env: - $ref: "#/components/parameters/Env" - version: - $ref: "#/components/parameters/Version" - bindings: - kafka: - replicas: 3 - partitions: 3 - topicConfiguration: - cleanup.policy: [ "delete" ] - retention.ms: 604800000 + streetlightId: + $ref: '#/components/parameters/streetlightId' + 'smartylighting/streetlights/1/0/action/{streetlightId}/turn/on': + address: 'smartylighting/streetlights/1/0/action/{streetlightId}/turn/on' messages: - costingRequest: - $ref: "#/components/messages/costingRequestV1" - - costingResponse: - address: "adeo-{env}-case-study-COSTING-RESPONSE-{version}" - description: > - This topic is used to REPLY Costing Requests and is targeted by the - `REPLY_TOPIC` header. - **You must grant PUBLISH access to our `svc-ccr-app` service account.**. - We use the - [**RecordNameStrategy**](https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#subject-name-strategy) - to infer the messages schema. - You have to define `key.subject.name.strategy` and - `x-value.subject.name.strategy` to - `io.confluent.kafka.serializers.subject.RecordNameStrategy` in your - consumer. - The schema below illustrates how Costing Response messages are - handled. - ![](https://user-images.githubusercontent.com/5501911/188920831-689cec5f-8dc3-460b-8794-0b54ec8b0ac8.png) + turnOn.message: + $ref: '#/components/messages/turnOnOff' parameters: - env: - $ref: "#/components/parameters/Env" - version: - $ref: "#/components/parameters/Version" - bindings: - kafka: - x-key.subject.name.strategy: - type: string - description: > - We use the RecordNameStrategy to infer the messages schema. - Use - `x-key.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy` - in your consumer configuration. - x-value.subject.name.strategy: - type: string - description: > - We use the RecordNameStrategy to infer the messages schema. - Use - `x-value.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy` - in your consumer configuration. + streetlightId: + $ref: '#/components/parameters/streetlightId' + 'smartylighting/streetlights/1/0/action/{streetlightId}/turn/off': + address: 'smartylighting/streetlights/1/0/action/{streetlightId}/turn/off' messages: - costingResponse: - $ref: "#/components/messages/costingResponse" - + turnOff.message: + $ref: '#/components/messages/turnOnOff' + parameters: + streetlightId: + $ref: '#/components/parameters/streetlightId' + 'smartylighting/streetlights/1/0/action/{streetlightId}/dim': + address: 'smartylighting/streetlights/1/0/action/{streetlightId}/dim' + messages: + dimLight.message: + $ref: '#/components/messages/dimLight' + parameters: + streetlightId: + $ref: '#/components/parameters/streetlightId' + some.channel: + address: some.channel + messages: + subscribe.message.0: + $ref: '#/components/messages/successMessage' + subscribe.message.1: + $ref: '#/components/messages/failureMessage' operations: - requestCosting: - action: receive - channel: - $ref: '#/channels/costingRequest' - reply: - channel: - $ref: '#/channels/costingResponse' - address: - location: '$message.header#/REPLY_TOPIC' - summary: | - [COSTING] Request one or more Costing calculation for any product - description: > - You can try a costing request using our [Conduktor producer - template](https://conduktor.url) - tags: - - name: costing - bindings: - kafka: - groupId: - type: string - description: > - The groupId must be prefixed by your `svc` account, deliver by the - Adeo Kafka team. - This `svc` must have the write access to the topic. - x-value.subject.name.strategy: - type: string - description: > - We use the RecordNameStrategy to infer the messages schema. - Use - `x-value.subject.name.strategy=io.confluent.kafka.serializers.subject.RecordNameStrategy` - in your producer configuration. - getCostingResponse: - action: send - channel: - $ref: '#/channels/costingResponse' - summary: > - [COSTING] Get the costing responses matching an initial Costing - Request. - bindings: - kafka: - groupId: - type: string - description: > - The groupId must be prefixed by your `svc` account, deliver by the - Adeo Kafka team. - This `svc` must have the read access to the topic. - tags: - - name: costing + receiveLightMeasurement: + action: receive + channel: + $ref: >- + #/channels/smartylighting~1streetlights~11~10~1event~1{streetlightId}~1lighting~1measured + summary: >- + Inform about environmental lighting conditions of a particular + streetlight. + description: | + This is the description with **bold** text. + On multiple lines. + tags: + - name: oparation-tag1 + externalDocs: + description: External docs description 1 + url: 'https://www.asyncapi.com/' + - name: oparation-tag2 + description: Description 2 + externalDocs: + url: 'https://www.asyncapi.com/' + - name: oparation-tag3 + - name: oparation-tag4 + description: Description 4 + - name: message-tag5 + externalDocs: + url: 'https://www.asyncapi.com/' + traits: + - $ref: '#/components/operationTraits/kafka' + messages: + - $ref: '#/channels/smartylighting~1streetlights~11~10~1event~1{streetlightId}~1lighting~1measured/messages/receiveLightMeasurement.message' + turnOn: + action: send + channel: + $ref: >- + #/channels/smartylighting~1streetlights~11~10~1action~1{streetlightId}~1turn~1on + traits: + - $ref: '#/components/operationTraits/kafka' + messages: + - $ref: '#/channels/smartylighting~1streetlights~11~10~1action~1{streetlightId}~1turn~1on/messages/turnOn.message' + turnOff: + action: send + channel: + $ref: >- + #/channels/smartylighting~1streetlights~11~10~1action~1{streetlightId}~1turn~1off + traits: + - $ref: '#/components/operationTraits/kafka' + messages: + - $ref: '#/channels/smartylighting~1streetlights~11~10~1action~1{streetlightId}~1turn~1off/messages/turnOff.message' + dimLight: + action: send + channel: + $ref: >- + #/channels/smartylighting~1streetlights~11~10~1action~1{streetlightId}~1dim + traits: + - $ref: '#/components/operationTraits/kafka' + messages: + - $ref: '#/channels/smartylighting~1streetlights~11~10~1action~1{streetlightId}~1dim/messages/dimLight.message' + some.channel.subscribe: + action: send + channel: + $ref: '#/channels/some.channel' + description: this description shows in markdown + messages: + - $ref: '#/channels/some.channel/messages/subscribe.message.0' + - $ref: '#/channels/some.channel/messages/subscribe.message.1' components: - correlationIds: - costingCorrelationId: - description: > - This correlation ID is used for message tracing and messages - correlation. - This correlation ID is generated at runtime based on the `REQUEST_ID` - and sent to the RESPONSE message. - location: $message.header#/REQUEST_ID messages: - costingRequestV1: - name: CostingRequestV1 - title: Costing Request V1 - summary: Costing Request V1 inputs. + lightMeasured: + name: lightMeasured + title: Light measured + summary: >- + Inform about environmental lighting conditions of a particular + streetlight. + contentType: application/json tags: - - name: costing - correlationId: - $ref: "#/components/correlationIds/costingCorrelationId" - headers: - type: object - required: - - REQUESTER_ID - - REQUESTER_CODE - - REQUEST_ID - - REPLY_TOPIC - properties: - REQUEST_ID: - $ref: "#/components/schemas/RequestId" - REPLY_TOPIC: - $ref: "#/components/schemas/ReplyTopic" - REQUESTER_ID: - $ref: "#/components/schemas/RequesterId" - REQUESTER_CODE: - $ref: "#/components/schemas/RequesterCode" + - name: message-tag1 + externalDocs: + description: External docs description 1 + url: 'https://www.asyncapi.com/' + - name: message-tag2 + description: Description 2 + externalDocs: + url: 'https://www.asyncapi.com/' + - name: message-tag3 + - name: message-tag4 + description: Description 4 + - name: message-tag5 + externalDocs: + url: 'https://www.asyncapi.com/' + traits: + - $ref: '#/components/messageTraits/commonHeaders' + payload: + $ref: '#/components/schemas/lightMeasuredPayload' + turnOnOff: + name: turnOnOff + title: Turn on/off + summary: Command a particular streetlight to turn the lights on or off. + traits: + - $ref: '#/components/messageTraits/commonHeaders' + payload: + $ref: '#/components/schemas/turnOnOffPayload' + dimLight: + name: dimLight + title: Dim light + summary: Command a particular streetlight to dim the lights. + traits: + - $ref: '#/components/messageTraits/commonHeaders' + payload: + $ref: '#/components/schemas/dimLightPayload' + successMessage: + name: Success payload: - schemaFormat: application/vnd.apache.avro;version=1.9.0 - schema: - $ref: "https://www.asyncapi.com/resources/casestudies/adeo/CostingRequestPayload.avsc" - costingResponse: - name: CostingResponse - title: Costing Response - summary: Costing Response ouputs. - tags: - - name: costing - description: > - Please refer to the `CostingResponseKey.avsc` schema, available on [our - github - project](https://github.url/). - correlationId: - $ref: "#/components/correlationIds/costingCorrelationId" - headers: type: object properties: - CALCULATION_ID: - $ref: "#/components/schemas/MessageId" - CORRELATION_ID: - $ref: "#/components/schemas/CorrelationId" - REQUEST_TIMESTAMP: - type: string - format: date-time - description: Timestamp of the costing request - CALCULATION_TIMESTAMP: + result: type: string - format: date-time - description: Technical timestamp for the costing calculation + examples: + - success + failureMessage: + name: Failure payload: - schemaFormat: application/vnd.apache.avro;version=1.9.0 - schema: - $ref: "https://deploy-preview-921--asyncapi-website.netlify.app/resources/casestudies/adeo/CostingResponsePayload.avsc" + type: object + properties: + error: + type: object + properties: + errorCode: + type: integer + errorMessage: + type: string + examples: + - error: + errorCode: 404 + errorMessage: Something messed up schemas: - RequesterId: - type: string - description: The Costing requester service account used to produce costing request. - example: svc-ecollect-app - RequesterCode: - type: string - description: >- - The Costing requester code (generally the BU Code). The requester code - is useful to get the dedicated context (tenant). - example: 1 - MessageId: - type: string - format: uuid - description: A unique Message ID. - example: 1fa6ef40-8f47-40a8-8cf6-f8607d0066ef - RequestId: - type: string - format: uuid - description: >- - A unique Request ID needed to define a `CORRELATION_ID` for exchanges, - which will be sent back in the Costing Responses. - example: 1fa6ef40-8f47-40a8-8cf6-f8607d0066ef - CorrelationId: - type: string - format: uuid - description: >- - A unique Correlation ID defined from the `REQUEST_ID` or the - `MESSAGE_ID` provided in the Costing Request. - example: 1fa6ef40-8f47-40a8-8cf6-f8607d0066ef - BuCode: - type: string - description: The Business Unit code for which data are applicable. - example: 1 - ReplyTopic: - type: string - description: > - The Kafka topic where to send the Costing Response. This is required for - the [Return Address EIP - pattern](https://www.enterpriseintegrationpatterns.com/patterns/messaging/ReturnAddress.html). - **You must grant WRITE access to our `svc-ccr-app` service account.** - example: adeo-case-study-COSTING-RESPONSE-V1 - ErrorStep: - type: string - description: | - The woker that has thrown the error. - example: EXPOSE_RESULT - ErrorMessage: - type: string - description: | - The error message describing the error. - example: Error message - ErrorCode: + lightMeasuredPayload: + type: object + properties: + lumens: + type: integer + minimum: 0 + description: Light intensity measured in lumens. + x-pi: false + sentAt: + $ref: '#/components/schemas/sentAt' + turnOnOffPayload: + type: object + properties: + command: + type: string + enum: + - 'on' + - 'off' + description: Whether to turn on or off the light. + x-pi: false + sentAt: + $ref: '#/components/schemas/sentAt' + dimLightPayload: + type: object + properties: + percentage: + type: integer + description: Percentage to which the light should be dimmed to. + minimum: 0 + maximum: 100 + sentAt: + $ref: '#/components/schemas/sentAt' + sentAt: type: string - description: | - The error code. - example: CURRENCY_NOT_FOUND - parameters: - Env: - description: Adeo Kafka Environment for messages publications. - enum: - - dev - - sit - - uat1 - - preprod - - prod - Version: - description: the topic version you want to use - examples: - - V1 - default: V1 + format: date-time + description: Date and time when the message was sent. securitySchemes: - sasl-ssl: - type: plain - x-sasl.jaas.config: >- - org.apache.kafka.common.security.plain.PlainLoginModule required - username="" password=""; - x-security.protocol: SASL_SSL - x-ssl.endpoint.identification.algorithm: https - x-sasl.mechanism: PLAIN - description: > - Use [SASL authentication with SSL - encryption](https://docs.confluent.io/platform/current/security/security_tutorial.html#configure-clients) - to connect to the ADEO Broker. \ No newline at end of file + apiKey: + type: apiKey + in: user + description: Provide your API key as the user and leave the password empty. + supportedOauthFlows: + type: oauth2 + description: Flows to support OAuth 2.0 + flows: + implicit: + authorizationUrl: 'https://authserver.example/auth' + availableScopes: + 'streetlights:on': Ability to switch lights on + 'streetlights:off': Ability to switch lights off + 'streetlights:dim': Ability to dim the lights + password: + tokenUrl: 'https://authserver.example/token' + availableScopes: + 'streetlights:on': Ability to switch lights on + 'streetlights:off': Ability to switch lights off + 'streetlights:dim': Ability to dim the lights + clientCredentials: + tokenUrl: 'https://authserver.example/token' + availableScopes: + 'streetlights:on': Ability to switch lights on + 'streetlights:off': Ability to switch lights off + 'streetlights:dim': Ability to dim the lights + authorizationCode: + authorizationUrl: 'https://authserver.example/auth' + tokenUrl: 'https://authserver.example/token' + refreshUrl: 'https://authserver.example/refresh' + availableScopes: + 'streetlights:on': Ability to switch lights on + 'streetlights:off': Ability to switch lights off + 'streetlights:dim': Ability to dim the lights + openIdConnectWellKnown: + type: openIdConnect + openIdConnectUrl: 'https://authserver.example/.well-known' + parameters: + streetlightId: + description: The ID of the streetlight. + messageTraits: + commonHeaders: + headers: + type: object + properties: + my-app-header: + type: integer + minimum: 0 + maximum: 100 + operationTraits: + kafka: + bindings: + kafka: + clientId: + const: my-app-id