From 74315954a1acd6dc291d19e13cdb5a8317a67f5c Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Tue, 20 Jan 2026 18:48:28 +0530 Subject: [PATCH 01/16] HDDS-10684:Add Swagger API for Recon as a Docusaurus page. --- .../02-recon/02-recon-rest-api.md | 3 - .../02-recon/02-recon-rest-api.mdx | 11 + package.json | 3 +- pnpm-lock.yaml | 1173 ++++++++- src/components/SwaggerUI/index.js | 39 + src/components/SwaggerUI/styles.module.css | 363 +++ static/recon-api.yaml | 2163 +++++++++++++++++ 7 files changed, 3749 insertions(+), 6 deletions(-) delete mode 100644 docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.md create mode 100644 docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx create mode 100644 src/components/SwaggerUI/index.js create mode 100644 src/components/SwaggerUI/styles.module.css create mode 100644 static/recon-api.yaml diff --git a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.md b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.md deleted file mode 100644 index bdb3195653..0000000000 --- a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.md +++ /dev/null @@ -1,3 +0,0 @@ -# Recon REST API - -**TODO:** [HDDS-10684](https://issues.apache.org/jira/browse/HDDS-10684) Embed a Swagger API spec into this page. diff --git a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx new file mode 100644 index 0000000000..05b307896c --- /dev/null +++ b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx @@ -0,0 +1,11 @@ +# Recon REST API + +import SwaggerUI from '@site/src/components/SwaggerUI'; + +Ozone Recon's public **REST API** follows the [OpenAPI specification](https://www.openapis.org/), and is documented below. The docs are generated using [Swagger React UI](https://github.com/swagger-api/swagger-ui). + +:::info +**NOTE!** You can find an interactive version of this documentation on your local Ozone Recon instance at **/api/v1/** (if Recon is running). +::: + + diff --git a/package.json b/package.json index 539ea84bb1..6994e32177 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "prism-react-renderer": "^2.4.1", "react": "^18.3.1", "react-bootstrap-icons": "^1.11.5", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "swagger-ui-react": "^5.31.0" }, "devDependencies": { "@cspell/dict-docker": "^1.1.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6225c55a51..41255a180d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,6 +41,9 @@ importers: react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) + swagger-ui-react: + specifier: ^5.31.0 + version: 5.31.0(@types/react@19.0.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@cspell/dict-docker': specifier: ^1.1.12 @@ -698,10 +701,18 @@ packages: resolution: {integrity: sha512-uITFQYO68pMEYR46AHgQoyBg7KPPJDAbGn4jUTIRgCFJIp88MIBUianVOplhZDEec07bp9zIyr4Kp0FCyQzmWg==} engines: {node: '>=6.9.0'} + '@babel/runtime-corejs3@7.28.6': + resolution: {integrity: sha512-kz2fAQ5UzjV7X7D3ySxmj3vRq89dTpqOZWv76Z6pNPztkwb/0Yj1Mtx1xFrYj6mbIHysxtBot8J4o0JLCblcFw==} + engines: {node: '>=6.9.0'} + '@babel/runtime@7.26.10': resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.28.6': + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + engines: {node: '>=6.9.0'} + '@babel/template@7.26.9': resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} engines: {node: '>=6.9.0'} @@ -1524,6 +1535,9 @@ packages: rollup: optional: true + '@scarf/scarf@1.4.0': + resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} + '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -1634,10 +1648,125 @@ packages: resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} engines: {node: '>=14'} + '@swagger-api/apidom-ast@1.2.2': + resolution: {integrity: sha512-A2GaCpOg+SILyMEBZ7CtjUL7I4RCTUbmI1ldXuKYNOl2k8yo5maJWrJKcM4Y3X+mEmqXR57s3gVNGSMwNVO72w==} + + '@swagger-api/apidom-core@1.2.2': + resolution: {integrity: sha512-wcV3Ej+emB+y/ybcNaF3bMURQ00UfJ3pTG80x6//blySg+g9LtS1HcXj2JggYxEVeWnarmX3HuHCzZTbw87Q1g==} + + '@swagger-api/apidom-error@1.2.2': + resolution: {integrity: sha512-wU6i2ETXLVsUjwC2XR6oQDriUdo1L85BigyhcKFG88rXzSvwB5B5x3bAVUa95bQJHV0H/iU1BX5KuPk+AUDa1w==} + + '@swagger-api/apidom-json-pointer@1.2.2': + resolution: {integrity: sha512-zbV4q4YA4bN65K17M3JvUqicI521sm7dI3WNwF26jTo/mXC9hrkbv8QznSGO1N9i+pOAQ4eO+3i0a+4iII9zEw==} + + '@swagger-api/apidom-ns-api-design-systems@1.2.2': + resolution: {integrity: sha512-0D6RzBROnhUDSFcDURYnIYspuOXcJ9XBIv+08RwONno3Pr5VIRAwQqGFTldSOauMHMgwDLTwetUqPjEn3fjSpA==} + + '@swagger-api/apidom-ns-arazzo-1@1.2.2': + resolution: {integrity: sha512-387mds78w90tCF6cAr2V1OznRK9vpGqn+cgjHlPkfQiAkqolZPGalh99kKTdzMhPkST1agdhKrosW2lw+9Na3A==} + + '@swagger-api/apidom-ns-asyncapi-2@1.2.2': + resolution: {integrity: sha512-DRiN0xDPeZbc8Ic3knvSndZcWfBR5f2kRe/1QWuEdrAX4QCFgPtWgOlolKAOm/1FshflV0l0HmgoPQh24U7WFg==} + + '@swagger-api/apidom-ns-asyncapi-3@1.2.2': + resolution: {integrity: sha512-Vs/R7EWrmyVr3voKlZi+C6e2Kn8x1+cB+8k5jSq8iMdXgVsLqD796iu6l+swU0nzV/HHDjli69WziKSpgBZu1g==} + + '@swagger-api/apidom-ns-json-schema-2019-09@1.2.2': + resolution: {integrity: sha512-ivLx+OZ7uhXzweoPMDdBX8BMjXDMtWIpjHwS5AMhGLiVQWmx05vfgGTmDzBKDp89DDFDKfjwhHgMvVHAFc+9mg==} + + '@swagger-api/apidom-ns-json-schema-2020-12@1.2.2': + resolution: {integrity: sha512-6uBWxnzllLs/0+q9w2iuPDlM6BevCXA0ARqUblqrrXohwdsRCk88bw9ku+dre2egDQxTkviYFIn9S3ycip2eEw==} + + '@swagger-api/apidom-ns-json-schema-draft-4@1.2.2': + resolution: {integrity: sha512-1BVOBZzDu/We8DfS7COpcQ4cn7IJNwGq67Z3rdTfld7a/QJnMf6SUkSPEir7q7q5vJhRhD0ldlU7RUJWzZavFw==} + + '@swagger-api/apidom-ns-json-schema-draft-6@1.2.2': + resolution: {integrity: sha512-nHmAE57iAkkORKVd89GUaQUSY01VlpxW4HuGoBqZJ8GcuCkfky7Zi5XF7gH2Gg1nYPOzmZNJa69+mDoOe/n81g==} + + '@swagger-api/apidom-ns-json-schema-draft-7@1.2.2': + resolution: {integrity: sha512-udoaz8pOYnniS/xV/jwXbEVKcOYZ0AbRRu1ZlepUR6xkpGjCNXKpJ9oxCSlR9BNjFY2Lkln2pp7RQ6i3KyG0Gw==} + + '@swagger-api/apidom-ns-openapi-2@1.2.2': + resolution: {integrity: sha512-K1ohVyJyDIUQg5ufUb726qFt6zxBIpQl2KMwRoUfZw/eqd7ee2If0AtL0t9qPkDNPAy1l/+NLJtg8kjny2MkBg==} + + '@swagger-api/apidom-ns-openapi-3-0@1.2.2': + resolution: {integrity: sha512-bUN8SfI1Qc5jWJrcFtfJQa6Z04DLGQTBRGtfPr6BmfB7vN0J+LRdd93EJXWVlXWHzKz9nlq7JJ3qJnSnypHB7Q==} + + '@swagger-api/apidom-ns-openapi-3-1@1.2.2': + resolution: {integrity: sha512-qgIjjlR1BfFmjmB82YuAEAtS06WBHMyPNRdF/zV4uSgUwnpkgByoYGaXrVRii/rHEmc1N1nHGaFfumDYUWljdg==} + + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.2.2': + resolution: {integrity: sha512-7c7+e+OIX24i1iAsEOuPBfHoZ8nz1YESdA7Rr0NUApWPocsB6atKgO3NqlRxFRm+eqBV1n9O5YnLxa2E3hhldw==} + + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.2.2': + resolution: {integrity: sha512-pr9lt6mnLgoD+DSsFktu751VKXALFY+spb6+ns6aTq3FaEt6nD0qIOb3Vz1hgzJsax4Day7JZgjaWG9Kk7vY5A==} + + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.2.2': + resolution: {integrity: sha512-0ULPlNJysnFPjhwgKK3m2Cm+3odoBeGdMM6BiPKBAZ5x0RKRJK2lD5HU8L3SOzQogWEm0YqINuVipaneGymbbg==} + + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.2.2': + resolution: {integrity: sha512-nHPm94VrDNsh5LboJJI9pos4YJjt9pAX1j9dx/r3g2mjMqpAA/HlftYMZ4jvrOKo7e1OqN9OkegsVuey225ogQ==} + + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.2.2': + resolution: {integrity: sha512-tcuzT35jBdilAcdAPBVIhbh2RyzwO+NljwX50MpXVO5JZXSRCN+lQeNUjxuhnUe8MzfVT7Ct+9hoxURobVga7Q==} + + '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.2.2': + resolution: {integrity: sha512-mcFgqQkb0uo1YPq+9bLDC0oGpi3Qus+MPGJe5tgJoBOwZC7nnZpzrM0vMsHIfEp//uauw77ekZt/5pbipGgC0A==} + + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.2.2': + resolution: {integrity: sha512-SJava43USnIaz4X7iGfTDx3+j7m7DGbTnz5FDsLeLwH/ZmoRsRp9OnPxFp3J/pJ2mENISqeRUxVcJKVvBx0JbA==} + + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.2.2': + resolution: {integrity: sha512-601noVwKmWoBQC0NdRlkApmSf1cgii3wgbU1cFLlWz9LshJNXhzrs0rTRkwncJNM0100DtumKhvN+xOeM82MyA==} + + '@swagger-api/apidom-parser-adapter-json@1.2.2': + resolution: {integrity: sha512-huEX+PjfFNJroNiYooIneGynbrH7EwkQfuZXvzA4PXPCh8M7jNPR4vOWmj0jnXeRyaJ0/iokLrHkfqW1d1Bs9Q==} + + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.2.2': + resolution: {integrity: sha512-iZLl1DQhy8rjRduRntZI1RNwfz1p85zEeTWImToqfOCdK/az3914ZkG0ForfWWCdvpHYChEhgksgdknFKSZv8w==} + + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.2.2': + resolution: {integrity: sha512-fk7up4pw9I9pl4H35K4MIYUZnlVPGNc6cHtXYf6qRctkB7WQvGb1R59iEAUvexexlObQyfOIUyo/HS3NcIlpKA==} + + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.2.2': + resolution: {integrity: sha512-HwbVXojjqzCc77QexZw6rDNg3I9I7X4WuOOm3WzM/TcajL5oyXm+xcV25LzXzhR71lSnznIhnEcbzN++pnCM7A==} + + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.2.2': + resolution: {integrity: sha512-9D7rZ/Y37G7Mp5sTQvB5udPqDF0aajdJMoRN7U41cJmPPEwjPPAHuPTZzKwjhdvetEyL+1Qo0E2c35VDwVyeaw==} + + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.2.2': + resolution: {integrity: sha512-N6yQ93kRrPbQYdyD7QlHJbs0j2ItUvVIvHk+Z9iSQKD5ShOwzxDqUowYBTgsSkSDKeqqZWuxB2l7voWerUKToQ==} + + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.2.2': + resolution: {integrity: sha512-qH3gJxeZe+KZk2PxcSzciNwoPr754tce1HqqHYAVeCrf2XD6wf+AhBWSeB8pEHceToVU9zS1prEs1aeooM2yWw==} + + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.2.2': + resolution: {integrity: sha512-q6jpgFnBHm/Thy/udSmjb8RKEjDMlfhbwehrYLVI4DVeAnxNWY3Kn2G2GLuVEUehPPIBVRdrin5Nv8vRcwAa2w==} + + '@swagger-api/apidom-reference@1.2.2': + resolution: {integrity: sha512-rPXfTV9q3Dr+PYgC0G0ZYrQ3dpkiuoYQGuc29bsI83ZVBROwbUbCNOpBwOnXJJWcuBZUHs7xKR/tE5aFLlmXWQ==} + + '@swaggerexpert/cookie@2.0.2': + resolution: {integrity: sha512-DPI8YJ0Vznk4CT+ekn3rcFNq1uQwvUHZhH6WvTSPD0YKBIlMS9ur2RYKghXuxxOiqOam/i4lHJH4xTIiTgs3Mg==} + engines: {node: '>=12.20.0'} + + '@swaggerexpert/json-pointer@2.10.2': + resolution: {integrity: sha512-qMx1nOrzoB+PF+pzb26Q4Tc2sOlrx9Ba2UBNX9hB31Omrq+QoZ2Gly0KLrQWw4Of1AQ4J9lnD+XOdwOdcdXqqw==} + engines: {node: '>=12.20.0'} + '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} + '@tree-sitter-grammars/tree-sitter-yaml@0.7.1': + resolution: {integrity: sha512-AynBwkIoQCTgjDR33bDUp9Mqq+YTco0is3n5hRApMqG9of/6A4eQsfC1/uSEeHSUyMQSYawcAWamsexnVpIP4Q==} + peerDependencies: + tree-sitter: ^0.22.4 + peerDependenciesMeta: + tree-sitter: + optional: true + '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -1759,6 +1888,9 @@ packages: '@types/qs@6.9.18': resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + '@types/ramda@0.30.2': + resolution: {integrity: sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA==} + '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -1804,6 +1936,9 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + '@types/ws@8.18.0': resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} @@ -1967,6 +2102,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + apg-lite@1.0.5: + resolution: {integrity: sha512-SlI+nLMQDzCZfS39ihzjGp3JNBQfJXyMi6cg9tkLOCPVErgFsUIAEdO9IezR7kbP5Xd0ozcPNQBkf9TO5cHgWw==} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -2005,10 +2143,16 @@ packages: async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} + autolinker@3.16.2: + resolution: {integrity: sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==} + autoprefixer@10.4.21: resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} engines: {node: ^10 || ^12 || >=14} @@ -2020,6 +2164,9 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + babel-loader@9.2.1: resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} engines: {node: '>= 14.15.0'} @@ -2051,6 +2198,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -2097,6 +2247,9 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -2196,6 +2349,9 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + clean-css@5.3.3: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} @@ -2244,6 +2400,10 @@ packages: resolution: {integrity: sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==} engines: {node: '>=10'} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2337,6 +2497,9 @@ packages: resolution: {integrity: sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==} engines: {node: '>=12'} + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + copy-webpack-plugin@11.0.0: resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} engines: {node: '>= 14.15.0'} @@ -2349,6 +2512,9 @@ packages: core-js-pure@3.41.0: resolution: {integrity: sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==} + core-js-pure@3.47.0: + resolution: {integrity: sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==} + core-js@3.41.0: resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} @@ -2501,6 +2667,9 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssdb@8.2.4: resolution: {integrity: sha512-3KSCVkjZJe/QxicVXnbyYSY26WsFc1YoMY7jep1ZKWMEVc7jEm6V2Xq2r+MX8WKQIuB7ofGbnr5iVI+aZpoSzg==} @@ -2768,6 +2937,10 @@ packages: delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -2835,6 +3008,9 @@ packages: dompurify@3.1.6: resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==} + dompurify@3.2.6: + resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==} + domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -2848,6 +3024,10 @@ packages: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} engines: {node: '>=10'} + drange@1.1.1: + resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==} + engines: {node: '>=4'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -3077,6 +3257,9 @@ packages: resolution: {integrity: sha512-4j5uBaTnsYAV5ebkidvxiLUYOwjQ+JSFljeqfTxCrH9bDmlCQaOJFS84oDJ2rAXZq2yskmk3ORfoP9DCwqFNig==} engines: {node: '>= 0.4.0'} + fast-json-patch@3.1.1: + resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -3086,6 +3269,9 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} @@ -3200,6 +3386,10 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -3418,6 +3608,12 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + + highlightjs-vue@1.0.0: + resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} + history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} @@ -3523,6 +3719,9 @@ packages: idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -3535,6 +3734,10 @@ packages: immer@9.0.21: resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + immutable@3.8.2: + resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==} + engines: {node: '>=0.10.0'} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -3849,6 +4052,9 @@ packages: joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + js-file-download@0.4.12: + resolution: {integrity: sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3860,6 +4066,10 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -4005,6 +4215,9 @@ packages: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lowlight@1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -4360,6 +4573,10 @@ packages: peerDependencies: webpack: ^5.0.0 + minim@0.23.8: + resolution: {integrity: sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww==} + engines: {node: '>=6'} + minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -4370,6 +4587,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -4415,17 +4636,41 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + neotraverse@0.6.18: + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} + no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + + node-addon-api@8.5.0: + resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} + engines: {node: ^18 || ^20 || >= 21} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + node-emoji@2.2.0: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} + node-fetch-commonjs@3.3.2: + resolution: {integrity: sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -4498,6 +4743,14 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + openapi-path-templating@2.2.1: + resolution: {integrity: sha512-eN14VrDvl/YyGxxrkGOHkVkWEoPyhyeydOUrbvjoz8K5eIGgELASwN1eqFOJ2CTQMGCy2EntOK1KdtJ8ZMekcg==} + engines: {node: '>=12.20.0'} + + openapi-server-url-templating@1.3.0: + resolution: {integrity: sha512-DPlCms3KKEbjVQb0spV6Awfn6UWNheuG/+folQPzh/wUaKwuqvj8zt5gagD7qoyxtE03cIiKPgLFS3Q8Bz00uQ==} + engines: {node: '>=12.20.0'} + opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -5064,6 +5317,10 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -5084,6 +5341,9 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -5100,6 +5360,9 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -5110,6 +5373,19 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} + ramda-adjunct@5.1.0: + resolution: {integrity: sha512-8qCpl2vZBXEJyNbi4zqcgdfHtcdsWjOGbiNSEnEBrM6Y0OKOT8UxJbIVGm1TIcjaSu2MxaWcgtsNlKlCk7o7qg==} + engines: {node: '>=0.10.3'} + peerDependencies: + ramda: '>= 0.30.0' + + ramda@0.30.1: + resolution: {integrity: sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==} + + randexp@0.5.3: + resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==} + engines: {node: '>=4'} + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -5134,6 +5410,16 @@ packages: peerDependencies: react: '>=16.8.6' + react-copy-to-clipboard@5.1.0: + resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==} + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 + + react-debounce-input@3.3.0: + resolution: {integrity: sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA==} + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 + react-dev-utils@12.0.1: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} @@ -5155,6 +5441,23 @@ packages: react-fast-compare@3.2.2: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + react-immutable-proptypes@2.2.0: + resolution: {integrity: sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==} + peerDependencies: + immutable: '>=3.6.2' + + react-immutable-pure-component@2.2.2: + resolution: {integrity: sha512-vkgoMJUDqHZfXXnjVlG3keCxSO/U6WeDQ5/Sl0GK2cH8TOxEzQ5jXqDXHEL/jqk6fsNxV05oH5kD7VNMUE2k+A==} + peerDependencies: + immutable: '>= 2 || >= 4.0.0-rc' + react: '>= 16.6' + react-dom: '>= 16.6' + + react-inspector@6.0.2: + resolution: {integrity: sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==} + peerDependencies: + react: ^16.8.4 || ^17.0.0 || ^18.0.0 + react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -5171,6 +5474,18 @@ packages: react-loadable: '*' webpack: '>=4.41.1 || 5.x' + react-redux@9.2.0: + resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} + peerDependencies: + '@types/react': ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true + react-router-config@5.1.1: resolution: {integrity: sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==} peerDependencies: @@ -5187,6 +5502,12 @@ packages: peerDependencies: react: '>=15' + react-syntax-highlighter@16.1.0: + resolution: {integrity: sha512-E40/hBiP5rCNwkeBN1vRP+xow1X0pndinO+z3h7HLsHyjztbyjfzNWNKuAsJj+7DLam9iT4AaaOZnueCU+Nplg==} + engines: {node: '>= 16.20.2'} + peerDependencies: + react: '>= 0.14.0' + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -5225,10 +5546,21 @@ packages: resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} engines: {node: '>=6.0.0'} + redux-immutable@4.0.0: + resolution: {integrity: sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg==} + peerDependencies: + immutable: ^3.8.1 || ^4.0.0-rc.1 + + redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} + refractor@5.0.0: + resolution: {integrity: sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==} + regenerate-unicode-properties@10.2.0: resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} @@ -5300,6 +5632,11 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remarkable@2.0.1: + resolution: {integrity: sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==} + engines: {node: '>= 6.0.0'} + hasBin: true + renderkid@3.0.0: resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} @@ -5317,6 +5654,9 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + reselect@5.1.1: + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -5340,6 +5680,10 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} + ret@0.2.2: + resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} + engines: {node: '>=4'} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -5450,6 +5794,10 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + serialize-error@8.1.0: + resolution: {integrity: sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==} + engines: {node: '>=10'} + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -5482,6 +5830,11 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sha.js@2.4.12: + resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} + engines: {node: '>= 0.10'} + hasBin: true + shallow-clone@3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} @@ -5506,6 +5859,10 @@ packages: engines: {node: '>=4'} hasBin: true + short-unique-id@5.3.2: + resolution: {integrity: sha512-KRT/hufMSxXKEDSQujfVE0Faa/kZ51ihUcZQAcmP04t00DvPj7Ox5anHke1sJYUtzSuiT/Y5uyzg/W7bBEGhCg==} + hasBin: true + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -5718,6 +6075,15 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + swagger-client@3.36.0: + resolution: {integrity: sha512-9fkjxGHXuKy20jj8zwE6RwgFSOGKAyOD5U7aKgW/+/futtHZHOdZeqiEkb97sptk2rdBv7FEiUQDNlWZR186RA==} + + swagger-ui-react@5.31.0: + resolution: {integrity: sha512-E/sTgKADThzpVksaGXbhED0pQCYdajiBNOzvSAan+RhV7pdoi2qvdwWhZsIo8nRvHk9UXJ0nkuxrud854ICr7A==} + peerDependencies: + react: '>=16.8.0 <20' + react-dom: '>=16.8.0 <20' + tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} @@ -5771,10 +6137,17 @@ packages: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} + engines: {node: '>= 0.4'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -5786,6 +6159,17 @@ packages: tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tree-sitter-json@0.24.8: + resolution: {integrity: sha512-Tc9ZZYwHyWZ3Tt1VEw7Pa2scu1YO7/d2BCBbKTx5hXwig3UfdQjsOPkPyLpDJOn/m1UBEWYAtSdGAwCSyagBqQ==} + peerDependencies: + tree-sitter: ^0.21.1 + peerDependenciesMeta: + tree-sitter: + optional: true + + tree-sitter@0.22.4: + resolution: {integrity: sha512-usbHZP9/oxNsUY65MQUsduGRqDHQOou1cagUSwjhoSYAmSahjQDAVsh9s+SlZkn8X8+O1FULRGwHu7AFP3kjzg==} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -5796,6 +6180,12 @@ packages: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} + ts-mixer@6.0.4: + resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} + + ts-toolbelt@9.6.0: + resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -5803,6 +6193,10 @@ packages: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -5838,6 +6232,9 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + types-ramda@0.30.1: + resolution: {integrity: sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==} + typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} @@ -5913,6 +6310,9 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unraw@3.0.0: + resolution: {integrity: sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==} + upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} @@ -5940,6 +6340,14 @@ packages: file-loader: optional: true + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -5999,6 +6407,13 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + web-tree-sitter@0.24.5: + resolution: {integrity: sha512-+J/2VSHN8J47gQUAvF8KDadrfz6uFYVjxoxbKWDoXVsH2u7yLdarCnIURnrMA6uSRkgX3SdmqM5BOoQjPdSh5w==} + web-worker@1.3.0: resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==} @@ -6191,10 +6606,16 @@ packages: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} + xml-but-prettier@1.0.1: + resolution: {integrity: sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==} + xml-js@1.6.11: resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} hasBin: true + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -6215,6 +6636,9 @@ packages: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} + zenscroll@4.0.2: + resolution: {integrity: sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -7051,10 +7475,16 @@ snapshots: core-js-pure: 3.41.0 regenerator-runtime: 0.14.1 + '@babel/runtime-corejs3@7.28.6': + dependencies: + core-js-pure: 3.47.0 + '@babel/runtime@7.26.10': dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.28.6': {} + '@babel/template@7.26.9': dependencies: '@babel/code-frame': 7.26.2 @@ -8578,6 +9008,8 @@ snapshots: optionalDependencies: rollup: 2.79.2 + '@scarf/scarf@1.4.0': {} + '@sideway/address@4.1.5': dependencies: '@hapi/hoek': 9.3.0 @@ -8594,7 +9026,7 @@ snapshots: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.28.6 invariant: 2.2.4 prop-types: 15.8.1 react: 18.3.1 @@ -8708,10 +9140,412 @@ snapshots: - supports-color - typescript + '@swagger-api/apidom-ast@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-error': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + unraw: 3.0.0 + + '@swagger-api/apidom-core@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-ast': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@types/ramda': 0.30.2 + minim: 0.23.8 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + short-unique-id: 5.3.2 + ts-mixer: 6.0.4 + + '@swagger-api/apidom-error@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + + '@swagger-api/apidom-json-pointer@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@swaggerexpert/json-pointer': 2.10.2 + + '@swagger-api/apidom-ns-api-design-systems@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + optional: true + + '@swagger-api/apidom-ns-arazzo-1@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + optional: true + + '@swagger-api/apidom-ns-asyncapi-2@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + optional: true + + '@swagger-api/apidom-ns-asyncapi-3@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + optional: true + + '@swagger-api/apidom-ns-json-schema-2019-09@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + + '@swagger-api/apidom-ns-json-schema-2020-12@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@swagger-api/apidom-ns-json-schema-2019-09': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + + '@swagger-api/apidom-ns-json-schema-draft-4@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-ast': 1.2.2 + '@swagger-api/apidom-core': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + + '@swagger-api/apidom-ns-json-schema-draft-6@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + + '@swagger-api/apidom-ns-json-schema-draft-7@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@swagger-api/apidom-ns-json-schema-draft-6': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + + '@swagger-api/apidom-ns-openapi-2@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + optional: true + + '@swagger-api/apidom-ns-openapi-3-0@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + + '@swagger-api/apidom-ns-openapi-3-1@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-ast': 1.2.2 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-json-pointer': 1.2.2 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.2.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + ts-mixer: 6.0.4 + + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-api-design-systems': 1.2.2 + '@swagger-api/apidom-parser-adapter-json': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-api-design-systems': 1.2.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-arazzo-1': 1.2.2 + '@swagger-api/apidom-parser-adapter-json': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-arazzo-1': 1.2.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.2.2 + '@swagger-api/apidom-parser-adapter-json': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-asyncapi-3': 1.2.2 + '@swagger-api/apidom-parser-adapter-json': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.2.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-asyncapi-3': 1.2.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-json@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-ast': 1.2.2 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + tree-sitter: 0.22.4 + tree-sitter-json: 0.24.8(tree-sitter@0.22.4) + web-tree-sitter: 0.24.5 + optional: true + + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-openapi-2': 1.2.2 + '@swagger-api/apidom-parser-adapter-json': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.2.2 + '@swagger-api/apidom-parser-adapter-json': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.2.2 + '@swagger-api/apidom-parser-adapter-json': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-openapi-2': 1.2.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.2.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.2.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.2.2 + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optional: true + + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-ast': 1.2.2 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@tree-sitter-grammars/tree-sitter-yaml': 0.7.1(tree-sitter@0.22.4) + '@types/ramda': 0.30.2 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + tree-sitter: 0.22.4 + web-tree-sitter: 0.24.5 + optional: true + + '@swagger-api/apidom-reference@1.2.2': + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@types/ramda': 0.30.2 + axios: 1.13.2 + minimatch: 7.4.6 + process: 0.11.10 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + optionalDependencies: + '@swagger-api/apidom-json-pointer': 1.2.2 + '@swagger-api/apidom-ns-arazzo-1': 1.2.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.2.2 + '@swagger-api/apidom-ns-openapi-2': 1.2.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.2.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.2.2 + '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.2.2 + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.2.2 + '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.2.2 + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.2.2 + '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.2.2 + '@swagger-api/apidom-parser-adapter-asyncapi-json-3': 1.2.2 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.2.2 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3': 1.2.2 + '@swagger-api/apidom-parser-adapter-json': 1.2.2 + '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.2.2 + '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.2.2 + '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.2.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.2.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.2.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.2.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.2.2 + transitivePeerDependencies: + - debug + + '@swaggerexpert/cookie@2.0.2': + dependencies: + apg-lite: 1.0.5 + + '@swaggerexpert/json-pointer@2.10.2': + dependencies: + apg-lite: 1.0.5 + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 + '@tree-sitter-grammars/tree-sitter-yaml@0.7.1(tree-sitter@0.22.4)': + dependencies: + node-addon-api: 8.5.0 + node-gyp-build: 4.8.4 + optionalDependencies: + tree-sitter: 0.22.4 + optional: true + '@trysound/sax@0.2.0': {} '@types/acorn@4.0.6': @@ -8847,6 +9681,10 @@ snapshots: '@types/qs@6.9.18': {} + '@types/ramda@0.30.2': + dependencies: + types-ramda: 0.30.1 + '@types/range-parser@1.2.7': {} '@types/react-router-config@5.0.11': @@ -8903,6 +9741,8 @@ snapshots: '@types/unist@3.0.3': {} + '@types/use-sync-external-store@0.0.6': {} + '@types/ws@8.18.0': dependencies: '@types/node': 22.13.11 @@ -9100,6 +9940,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + apg-lite@1.0.5: {} + arg@5.0.2: {} argparse@1.0.10: @@ -9135,8 +9977,14 @@ snapshots: async@3.2.6: {} + asynckit@0.4.0: {} + at-least-node@1.0.0: {} + autolinker@3.16.2: + dependencies: + tslib: 2.8.1 + autoprefixer@10.4.21(postcss@8.5.3): dependencies: browserslist: 4.24.4 @@ -9151,6 +9999,14 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 + axios@1.13.2: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.5 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.98.0): dependencies: '@babel/core': 7.26.10 @@ -9190,6 +10046,8 @@ snapshots: balanced-match@1.0.2: {} + base64-js@1.5.1: {} + batch@0.6.1: {} big.js@5.2.2: {} @@ -9264,6 +10122,11 @@ snapshots: buffer-from@1.1.2: {} + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bytes@3.0.0: {} bytes@3.1.2: {} @@ -9375,6 +10238,8 @@ snapshots: ci-info@3.9.0: {} + classnames@2.5.1: {} + clean-css@5.3.3: dependencies: source-map: 0.6.1 @@ -9416,6 +10281,10 @@ snapshots: combine-promises@1.2.0: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} commander@10.0.1: {} @@ -9495,6 +10364,10 @@ snapshots: copy-text-to-clipboard@3.2.0: {} + copy-to-clipboard@3.3.3: + dependencies: + toggle-selection: 1.0.6 + copy-webpack-plugin@11.0.0(webpack@5.98.0): dependencies: fast-glob: 3.3.3 @@ -9511,6 +10384,8 @@ snapshots: core-js-pure@3.41.0: {} + core-js-pure@3.47.0: {} + core-js@3.41.0: {} core-util-is@1.0.3: {} @@ -9710,6 +10585,8 @@ snapshots: css-what@6.1.0: {} + css.escape@1.5.1: {} + cssdb@8.2.4: {} cssesc@3.0.0: {} @@ -10031,6 +10908,8 @@ snapshots: dependencies: robust-predicates: 3.0.2 + delayed-stream@1.0.0: {} + depd@1.1.2: {} depd@2.0.0: {} @@ -10097,6 +10976,10 @@ snapshots: dompurify@3.1.6: {} + dompurify@3.2.6: + optionalDependencies: + '@types/trusted-types': 2.0.7 + domutils@2.8.0: dependencies: dom-serializer: 1.4.1 @@ -10118,6 +11001,8 @@ snapshots: dependencies: is-obj: 2.0.0 + drange@1.1.1: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -10413,6 +11298,8 @@ snapshots: dependencies: fast-deep-equal: 2.0.1 + fast-json-patch@3.1.1: {} + fast-json-stable-stringify@2.1.0: {} fast-uri@3.0.6: {} @@ -10421,6 +11308,10 @@ snapshots: dependencies: reusify: 1.1.0 + fault@1.0.4: + dependencies: + format: 0.2.2 + fault@2.0.1: dependencies: format: 0.2.2 @@ -10534,6 +11425,14 @@ snapshots: form-data-encoder@2.1.4: {} + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + format@0.2.2: {} forwarded@0.2.0: {} @@ -10835,6 +11734,10 @@ snapshots: he@1.2.0: {} + highlight.js@10.7.3: {} + + highlightjs-vue@1.0.0: {} + history@4.10.1: dependencies: '@babel/runtime': 7.26.10 @@ -10969,6 +11872,8 @@ snapshots: idb@7.1.1: {} + ieee754@1.2.1: {} + ignore@5.3.2: {} image-size@1.2.0: @@ -10977,6 +11882,8 @@ snapshots: immer@9.0.21: {} + immutable@3.8.2: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -11257,6 +12164,8 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 + js-file-download@0.4.12: {} + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -11268,6 +12177,10 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -11382,6 +12295,11 @@ snapshots: lowercase-keys@3.0.0: {} + lowlight@1.20.0: + dependencies: + fault: 1.0.4 + highlight.js: 10.7.3 + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -12133,6 +13051,10 @@ snapshots: tapable: 2.2.1 webpack: 5.98.0 + minim@0.23.8: + dependencies: + lodash: 4.17.21 + minimalistic-assert@1.0.1: {} minimatch@3.1.2: @@ -12143,6 +13065,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@7.4.6: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -12172,11 +13098,20 @@ snapshots: neo-async@2.6.2: {} + neotraverse@0.6.18: {} + no-case@3.0.4: dependencies: lower-case: 2.0.2 tslib: 2.8.1 + node-abort-controller@3.1.1: {} + + node-addon-api@8.5.0: + optional: true + + node-domexception@1.0.0: {} + node-emoji@2.2.0: dependencies: '@sindresorhus/is': 4.6.0 @@ -12184,8 +13119,16 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 + node-fetch-commonjs@3.3.2: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + node-forge@1.3.1: {} + node-gyp-build@4.8.4: + optional: true + node-releases@2.0.19: {} non-layered-tidy-tree-layout@2.0.2: {} @@ -12249,6 +13192,14 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + openapi-path-templating@2.2.1: + dependencies: + apg-lite: 1.0.5 + + openapi-server-url-templating@1.3.0: + dependencies: + apg-lite: 1.0.5 + opener@1.5.2: {} own-keys@1.0.1: @@ -12846,6 +13797,8 @@ snapshots: process-nextick-args@2.0.1: {} + process@0.11.10: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -12868,6 +13821,8 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-from-env@1.1.0: {} + punycode.js@2.3.1: {} punycode@2.3.1: {} @@ -12880,6 +13835,8 @@ snapshots: dependencies: side-channel: 1.1.0 + querystringify@2.2.0: {} + queue-microtask@1.2.3: {} queue@6.0.2: @@ -12888,6 +13845,17 @@ snapshots: quick-lru@5.1.1: {} + ramda-adjunct@5.1.0(ramda@0.30.1): + dependencies: + ramda: 0.30.1 + + ramda@0.30.1: {} + + randexp@0.5.3: + dependencies: + drange: 1.1.1 + ret: 0.2.2 + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -12915,6 +13883,18 @@ snapshots: prop-types: 15.8.1 react: 18.3.1 + react-copy-to-clipboard@5.1.0(react@18.3.1): + dependencies: + copy-to-clipboard: 3.3.3 + prop-types: 15.8.1 + react: 18.3.1 + + react-debounce-input@3.3.0(react@18.3.1): + dependencies: + lodash.debounce: 4.0.8 + prop-types: 15.8.1 + react: 18.3.1 + react-dev-utils@12.0.1(typescript@5.8.2)(webpack@5.98.0): dependencies: '@babel/code-frame': 7.26.2 @@ -12959,6 +13939,21 @@ snapshots: react-fast-compare@3.2.2: {} + react-immutable-proptypes@2.2.0(immutable@3.8.2): + dependencies: + immutable: 3.8.2 + invariant: 2.2.4 + + react-immutable-pure-component@2.2.2(immutable@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + immutable: 3.8.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + react-inspector@6.0.2(react@18.3.1): + dependencies: + react: 18.3.1 + react-is@16.13.1: {} react-json-view-lite@1.5.0(react@18.3.1): @@ -12971,6 +13966,15 @@ snapshots: react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' webpack: 5.98.0 + react-redux@9.2.0(@types/react@19.0.12)(react@18.3.1)(redux@5.0.1): + dependencies: + '@types/use-sync-external-store': 0.0.6 + react: 18.3.1 + use-sync-external-store: 1.6.0(react@18.3.1) + optionalDependencies: + '@types/react': 19.0.12 + redux: 5.0.1 + react-router-config@5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.10 @@ -13001,6 +14005,16 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 + react-syntax-highlighter@16.1.0(react@18.3.1): + dependencies: + '@babel/runtime': 7.28.6 + highlight.js: 10.7.3 + highlightjs-vue: 1.0.0 + lowlight: 1.20.0 + prismjs: 1.30.0 + react: 18.3.1 + refractor: 5.0.0 + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -13065,6 +14079,12 @@ snapshots: dependencies: minimatch: 3.1.2 + redux-immutable@4.0.0(immutable@3.8.2): + dependencies: + immutable: 3.8.2 + + redux@5.0.1: {} + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -13076,6 +14096,13 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 + refractor@5.0.0: + dependencies: + '@types/hast': 3.0.4 + '@types/prismjs': 1.26.5 + hastscript: 9.0.1 + parse-entities: 4.0.2 + regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 @@ -13086,7 +14113,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.28.6 regexp.prototype.flags@1.5.4: dependencies: @@ -13203,6 +14230,11 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + remarkable@2.0.1: + dependencies: + argparse: 1.0.10 + autolinker: 3.16.2 + renderkid@3.0.0: dependencies: css-select: 4.3.0 @@ -13219,6 +14251,8 @@ snapshots: requires-port@1.0.0: {} + reselect@5.1.1: {} + resolve-alpn@1.2.1: {} resolve-from@4.0.0: {} @@ -13237,6 +14271,8 @@ snapshots: dependencies: lowercase-keys: 3.0.0 + ret@0.2.2: {} + retry@0.13.1: {} reusify@1.1.0: {} @@ -13365,6 +14401,10 @@ snapshots: transitivePeerDependencies: - supports-color + serialize-error@8.1.0: + dependencies: + type-fest: 0.20.2 + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -13426,6 +14466,12 @@ snapshots: setprototypeof@1.2.0: {} + sha.js@2.4.12: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + shallow-clone@3.0.1: dependencies: kind-of: 6.0.3 @@ -13446,6 +14492,8 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 + short-unique-id@5.3.2: {} + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -13692,6 +14740,71 @@ snapshots: csso: 5.0.5 picocolors: 1.1.1 + swagger-client@3.36.0: + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@scarf/scarf': 1.4.0 + '@swagger-api/apidom-core': 1.2.2 + '@swagger-api/apidom-error': 1.2.2 + '@swagger-api/apidom-json-pointer': 1.2.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.2.2 + '@swagger-api/apidom-reference': 1.2.2 + '@swaggerexpert/cookie': 2.0.2 + deepmerge: 4.3.1 + fast-json-patch: 3.1.1 + js-yaml: 4.1.1 + neotraverse: 0.6.18 + node-abort-controller: 3.1.1 + node-fetch-commonjs: 3.3.2 + openapi-path-templating: 2.2.1 + openapi-server-url-templating: 1.3.0 + ramda: 0.30.1 + ramda-adjunct: 5.1.0(ramda@0.30.1) + transitivePeerDependencies: + - debug + + swagger-ui-react@5.31.0(@types/react@19.0.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime-corejs3': 7.28.6 + '@scarf/scarf': 1.4.0 + base64-js: 1.5.1 + buffer: 6.0.3 + classnames: 2.5.1 + css.escape: 1.5.1 + deep-extend: 0.6.0 + dompurify: 3.2.6 + ieee754: 1.2.1 + immutable: 3.8.2 + js-file-download: 0.4.12 + js-yaml: 4.1.1 + lodash: 4.17.21 + prop-types: 15.8.1 + randexp: 0.5.3 + randombytes: 2.1.0 + react: 18.3.1 + react-copy-to-clipboard: 5.1.0(react@18.3.1) + react-debounce-input: 3.3.0(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-immutable-proptypes: 2.2.0(immutable@3.8.2) + react-immutable-pure-component: 2.2.2(immutable@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-inspector: 6.0.2(react@18.3.1) + react-redux: 9.2.0(@types/react@19.0.12)(react@18.3.1)(redux@5.0.1) + react-syntax-highlighter: 16.1.0(react@18.3.1) + redux: 5.0.1 + redux-immutable: 4.0.0(immutable@3.8.2) + remarkable: 2.0.1 + reselect: 5.1.1 + serialize-error: 8.1.0 + sha.js: 2.4.12 + swagger-client: 3.36.0 + url-parse: 1.5.10 + xml: 1.0.1 + xml-but-prettier: 1.0.1 + zenscroll: 4.0.2 + transitivePeerDependencies: + - '@types/react' + - debug + tapable@1.1.3: {} tapable@2.2.1: {} @@ -13734,10 +14847,18 @@ snapshots: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 + to-buffer@1.2.2: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + toggle-selection@1.0.6: {} + toidentifier@1.0.1: {} totalist@3.0.1: {} @@ -13746,16 +14867,36 @@ snapshots: dependencies: punycode: 2.3.1 + tree-sitter-json@0.24.8(tree-sitter@0.22.4): + dependencies: + node-addon-api: 8.5.0 + node-gyp-build: 4.8.4 + optionalDependencies: + tree-sitter: 0.22.4 + optional: true + + tree-sitter@0.22.4: + dependencies: + node-addon-api: 8.5.0 + node-gyp-build: 4.8.4 + optional: true + trim-lines@3.0.1: {} trough@2.2.0: {} ts-dedent@2.2.0: {} + ts-mixer@6.0.4: {} + + ts-toolbelt@9.6.0: {} + tslib@2.8.1: {} type-fest@0.16.0: {} + type-fest@0.20.2: {} + type-fest@0.21.3: {} type-fest@1.4.0: {} @@ -13804,6 +14945,10 @@ snapshots: dependencies: is-typedarray: 1.0.0 + types-ramda@0.30.1: + dependencies: + ts-toolbelt: 9.6.0 + typescript@5.8.2: {} uc.micro@2.0.0: {} @@ -13883,6 +15028,8 @@ snapshots: unpipe@1.0.0: {} + unraw@3.0.0: {} + upath@1.2.0: {} update-browserslist-db@1.1.3(browserslist@4.24.4): @@ -13921,6 +15068,15 @@ snapshots: optionalDependencies: file-loader: 6.2.0(webpack@5.98.0) + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + use-sync-external-store@1.6.0(react@18.3.1): + dependencies: + react: 18.3.1 + util-deprecate@1.0.2: {} utila@0.4.0: {} @@ -13974,6 +15130,11 @@ snapshots: web-namespaces@2.0.1: {} + web-streams-polyfill@3.3.3: {} + + web-tree-sitter@0.24.5: + optional: true + web-worker@1.3.0: {} webidl-conversions@4.0.2: {} @@ -14310,10 +15471,16 @@ snapshots: xdg-basedir@5.1.0: {} + xml-but-prettier@1.0.1: + dependencies: + repeat-string: 1.6.1 + xml-js@1.6.11: dependencies: sax: 1.4.1 + xml@1.0.1: {} + yallist@3.1.1: {} yaml@1.10.2: {} @@ -14324,4 +15491,6 @@ snapshots: yocto-queue@1.2.1: {} + zenscroll@4.0.2: {} + zwitch@2.0.4: {} diff --git a/src/components/SwaggerUI/index.js b/src/components/SwaggerUI/index.js new file mode 100644 index 0000000000..bad22d32c4 --- /dev/null +++ b/src/components/SwaggerUI/index.js @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import SwaggerUI from 'swagger-ui-react'; +import 'swagger-ui-react/swagger-ui.css'; +import useBaseUrl from '@docusaurus/useBaseUrl'; +import styles from './styles.module.css'; + +export default function SwaggerUIComponent({ spec }) { + const specUrl = useBaseUrl(spec); + + return ( +
+ +
+ ); +} diff --git a/src/components/SwaggerUI/styles.module.css b/src/components/SwaggerUI/styles.module.css new file mode 100644 index 0000000000..ada92240c4 --- /dev/null +++ b/src/components/SwaggerUI/styles.module.css @@ -0,0 +1,363 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.swaggerWrapper { + margin-top: 2rem; + margin-bottom: 2rem; +} + +/* Remove white bars and extra spacing */ +.swaggerWrapper :global(.swagger-ui .information-container) { + margin: 0; + padding: 0; + background: transparent; +} + +.swaggerWrapper :global(.swagger-ui .scheme-container) { + margin: 0; + padding: 20px 0; + background: transparent; + box-shadow: none; +} + +.swaggerWrapper :global(.swagger-ui .info) { + margin: 0 0 20px 0; + padding: 0; + background: transparent; +} + +.swaggerWrapper :global(.swagger-ui .wrapper) { + padding: 0; +} + +/* Match Swagger UI with Docusaurus theme */ +.swaggerWrapper :global(.swagger-ui) { + font-family: var(--ifm-font-family-base); +} + +/* Match heading fonts */ +.swaggerWrapper :global(.swagger-ui .info .title), +.swaggerWrapper :global(.swagger-ui h1), +.swaggerWrapper :global(.swagger-ui h2), +.swaggerWrapper :global(.swagger-ui h3), +.swaggerWrapper :global(.swagger-ui h4), +.swaggerWrapper :global(.swagger-ui h5) { + font-family: var(--ifm-heading-font-family); + letter-spacing: -0.02em; +} + +/* Make main title white */ +.swaggerWrapper :global(.swagger-ui .info .title) { + color: #ffffff !important; + background: var(--ifm-color-primary); + padding: 15px 20px; + border-radius: 4px; +} + +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .info .title) { + color: #1a1a1a !important; + background: var(--ifm-color-primary); +} + +/* Fix OAS version text visibility */ +.swaggerWrapper :global(.swagger-ui .info .main .version), +.swaggerWrapper :global(.swagger-ui .info hgroup.main a), +.swaggerWrapper :global(.swagger-ui .info hgroup.main span) { + color: var(--ifm-font-color-base) !important; + background: transparent !important; +} + +.swaggerWrapper :global(.swagger-ui select) { + color: var(--ifm-font-color-base) !important; + background: var(--ifm-background-color) !important; +} + +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .info .main .version), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .info hgroup.main a), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .info hgroup.main span) { + color: var(--ifm-font-color-base) !important; + background: transparent !important; +} + +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui select) { + color: var(--ifm-font-color-base) !important; + background: var(--ifm-background-color) !important; +} + +/* Style the spec file URL to match Apache License (green) */ +.swaggerWrapper :global(.swagger-ui .information-container .info .url) { + color: var(--ifm-color-primary) !important; + font-size: 14px; + font-weight: 400; +} + +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .information-container .info .url) { + color: var(--ifm-color-primary) !important; +} + +/* Style server URL section to match license */ +.swaggerWrapper :global(.swagger-ui .scheme-container) { + background: transparent; + padding: 0; + margin: 15px 0 20px 0; + box-shadow: none; +} + +.swaggerWrapper :global(.swagger-ui .scheme-container .servers-title) { + display: none; +} + +.swaggerWrapper :global(.swagger-ui .scheme-container .servers > label) { + color: var(--ifm-color-primary) !important; + font-size: 14px; + font-weight: 400; +} + +.swaggerWrapper :global(.swagger-ui .scheme-container .servers select) { + color: var(--ifm-font-color-base) !important; + background: var(--ifm-background-color) !important; + border: 1px solid #ccc; + border-radius: 4px; + padding: 5px 10px; + font-size: 14px; +} + +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .scheme-container .servers select) { + border-color: #444; +} + +/* Match code/monospace fonts */ +.swaggerWrapper :global(.swagger-ui code), +.swaggerWrapper :global(.swagger-ui pre) { + font-family: var(--ifm-font-family-monospace); + font-size: 14px; +} + +/* Match link colors with Docusaurus theme */ +.swaggerWrapper :global(.swagger-ui a) { + color: var(--ifm-link-color) !important; +} + +.swaggerWrapper :global(.swagger-ui a:hover) { + color: var(--ifm-link-hover-color) !important; +} + +/* Fix link text visibility in response links column */ +.swaggerWrapper :global(.swagger-ui .response-col_links), +.swaggerWrapper :global(.swagger-ui .response-col_links a), +.swaggerWrapper :global(.swagger-ui .response-col_links span), +.swaggerWrapper :global(.swagger-ui .response-col_links .response-undocumented) { + color: var(--ifm-font-color-base) !important; +} + +.swaggerWrapper :global(.swagger-ui .response-col_links a) { + color: var(--ifm-link-color) !important; + text-decoration: underline; +} + +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .response-col_links), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .response-col_links a), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .response-col_links span), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .response-col_links .response-undocumented) { + color: var(--ifm-font-color-base) !important; +} + +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .response-col_links a) { + color: var(--ifm-link-color) !important; + text-decoration: underline; +} + +/* Use Docusaurus primary color for GET operations */ +.swaggerWrapper :global(.swagger-ui .opblock.opblock-get .opblock-summary-method) { + background: var(--ifm-color-primary) !important; +} + +.swaggerWrapper :global(.swagger-ui .opblock.opblock-get) { + border-color: var(--ifm-color-primary) !important; + background: rgba(53, 117, 0, 0.1); +} + +.swaggerWrapper :global(.swagger-ui .opblock.opblock-get .opblock-summary) { + border-color: var(--ifm-color-primary) !important; +} + +/* Dark mode adjustments */ +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .opblock.opblock-get) { + background: rgba(150, 210, 110, 0.1); +} + +/* Match background colors */ +.swaggerWrapper :global(.swagger-ui .wrapper) { + background: var(--ifm-background-color); +} + +/* Improve body text readability */ +.swaggerWrapper :global(.swagger-ui p), +.swaggerWrapper :global(.swagger-ui li), +.swaggerWrapper :global(.swagger-ui td), +.swaggerWrapper :global(.swagger-ui th) { + font-family: var(--ifm-font-family-base); + line-height: 1.6; +} + +/* Improve visibility of ALL grey/muted text */ +.swaggerWrapper :global(.swagger-ui .opblock-description-wrapper p), +.swaggerWrapper :global(.swagger-ui .opblock-external-docs-wrapper p), +.swaggerWrapper :global(.swagger-ui .opblock-title_normal p), +.swaggerWrapper :global(.swagger-ui .parameter__name), +.swaggerWrapper :global(.swagger-ui .parameter__type), +.swaggerWrapper :global(.swagger-ui .parameter__in), +.swaggerWrapper :global(.swagger-ui .prop-type), +.swaggerWrapper :global(.swagger-ui .prop-format), +.swaggerWrapper :global(.swagger-ui .response-col_description), +.swaggerWrapper :global(.swagger-ui .response-col_status), +.swaggerWrapper :global(.swagger-ui .model), +.swaggerWrapper :global(.swagger-ui .model-title), +.swaggerWrapper :global(.swagger-ui table thead tr th), +.swaggerWrapper :global(.swagger-ui table tbody tr td), +.swaggerWrapper :global(.swagger-ui .tab li), +.swaggerWrapper :global(.swagger-ui .renderedMarkdown p), +.swaggerWrapper :global(.swagger-ui .renderedMarkdown code) { + color: var(--ifm-font-color-base) !important; +} + +/* Dark mode text visibility */ +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .opblock-description-wrapper p), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .opblock-external-docs-wrapper p), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .opblock-title_normal p), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .parameter__name), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .parameter__type), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .parameter__in), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .prop-type), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .prop-format), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .response-col_description), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .response-col_status), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .model), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .model-title), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui table thead tr th), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui table tbody tr td), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .tab li), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .renderedMarkdown p), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .renderedMarkdown code) { + color: var(--ifm-font-color-base) !important; +} + +/* Improve description text visibility */ +.swaggerWrapper :global(.swagger-ui .opblock-summary-description), +.swaggerWrapper :global(.swagger-ui .opblock-description), +.swaggerWrapper :global(.swagger-ui .markdown p), +.swaggerWrapper :global(.swagger-ui .markdown code) { + color: var(--ifm-font-color-base) !important; +} + +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .opblock-summary-description), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .opblock-description), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .markdown p), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .markdown code) { + color: var(--ifm-font-color-base) !important; +} + +/* Fix alignment issues when API is expanded */ +.swaggerWrapper :global(.swagger-ui .opblock-body) { + padding: 20px; +} + +.swaggerWrapper :global(.swagger-ui .opblock-section) { + padding: 0; +} + +.swaggerWrapper :global(.swagger-ui .opblock-section-header) { + padding: 15px 20px; + margin: 0; +} + +/* Fix table alignment */ +.swaggerWrapper :global(.swagger-ui table) { + width: 100%; + margin: 0; +} + +.swaggerWrapper :global(.swagger-ui .table-container) { + padding: 0; + margin: 0; +} + +/* Fix parameter table alignment - ALL columns */ +.swaggerWrapper :global(.swagger-ui .parameters-col_name), +.swaggerWrapper :global(.swagger-ui .parameters-col_description), +.swaggerWrapper :global(.swagger-ui table.parameters tbody tr td) { + text-align: left !important; + padding: 12px 20px !important; +} + +.swaggerWrapper :global(.swagger-ui table.parameters thead tr th) { + text-align: left !important; + padding: 12px 20px !important; +} + +/* Make Parameters and Responses headers black in both modes */ +.swaggerWrapper :global(.swagger-ui .opblock-section-header h4), +.swaggerWrapper :global(.swagger-ui .opblock-section-header label) { + color: #000000 !important; +} + +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .opblock-section-header h4), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .opblock-section-header label) { + color: #000000 !important; +} + +/* Fix response section alignment - ALL columns */ +.swaggerWrapper :global(.swagger-ui .responses-wrapper) { + padding: 0; +} + +.swaggerWrapper :global(.swagger-ui .responses-inner) { + padding: 20px; +} + +.swaggerWrapper :global(.swagger-ui .response-col_status), +.swaggerWrapper :global(.swagger-ui .response-col_description), +.swaggerWrapper :global(.swagger-ui .response-col_links), +.swaggerWrapper :global(.swagger-ui .responses-table tbody tr td) { + text-align: left !important; + padding: 12px 20px !important; +} + +.swaggerWrapper :global(.swagger-ui .responses-header th) { + text-align: left !important; + padding: 12px 20px !important; +} + +/* Fix ALL table cells alignment */ +.swaggerWrapper :global(.swagger-ui table tbody tr td), +.swaggerWrapper :global(.swagger-ui table thead tr th) { + text-align: left !important; + padding: 12px 20px !important; + vertical-align: top; +} + +/* Fix code block alignment */ +.swaggerWrapper :global(.swagger-ui .highlight-code) { + margin: 0; + text-align: left; +} + +.swaggerWrapper :global(.swagger-ui .microlight) { + text-align: left; +} diff --git a/static/recon-api.yaml b/static/recon-api.yaml new file mode 100644 index 0000000000..964efb87af --- /dev/null +++ b/static/recon-api.yaml @@ -0,0 +1,2163 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +openapi: 3.0.0 +info: + title: Ozone Recon REST API + license: + url: http://www.apache.org/licenses/LICENSE-2.0.html + name: Apache 2.0 License +servers: + - url: /api/v1/ +tags: + - name: Containers + description: APIs to fetch information about the available containers. **Admin Only** + - name: Volumes + description: APIs to fetch information about the available volumes. **Admin Only** + - name: Buckets + description: APIs to fetch information about the available buckets. **Admin Only** + - name: Keys + description: APIs to fetch information about the available keys. **Admin Only** + - name: Containers and Keys + description: APIs to fetch information about the available containers and keys. **Admin Only** + - name: Blocks Metadata + description: APIs to fetch metadata for the blocks available. **Admin Only** + - name: Namespace Metadata + description: APIs to fetch metadata for the namespace. **Admin Only** + - name: Cluster State + description: APIs to fetch data about the cluster state + - name: Datanodes + description: APIs to fetch data about the Datanodes + - name: Pipelines + description: APIs to fetch data about the Pipelines + - name: Tasks + description: APIs to fetch data about status of Recon Tasks + - name: Utilization + description: APIs to fetch data about space utilization + - name: Metrics + description: APIs to fetch data about various metrics from Prometheus + externalDocs: + description: Prometheus API docs + url: https://prometheus.io/docs/prometheus/latest/querying/api/ +paths: + /containers: + get: + tags: + - Containers + summary: Get all Container Metadata information + operationId: getContainerInfo + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerMetadata' + /containers/deleted: + get: + tags: + - Containers + summary: Return all DELETED containers in SCM + operationId: getSCMDeletedContainers + responses: + 200: + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/DeletedContainers' + /containers/missing: + get: + tags: + - Containers + summary: Get the MissingContainerMetadata for all missing containers + operationId: getMissingContainers + parameters: + - name: limit + in: query + description: Limit of the number of results returned + required: false + schema: + type: integer + default: 1000 + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/MissingContainerMetadata' + /containers/{id}/replicaHistory: + get: + tags: + - Containers + summary: Get all the Replica history for a given container id + operationId: getReplicaHistoryForContainer + parameters: + - name: id + in: path + description: ID of the container for which we want ContainerHistory + required: true + schema: + type: integer + responses: + '200': + description: Successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ReplicaHistory' + /containers/unhealthy: + get: + tags: + - Containers + summary: Get UnhealthyContainerMetadata for all the unhealthy containers + operationId: getUnhealthyContainers + parameters: + - name: batchNum + in: query + description: Size of the batch for the result. It will give us results from **(limit + 1) to (2 * limit)** + required: false + schema: + type: integer + - name: limit + in: query + description: Limit of the number of results returned + required: false + schema: + type: integer + default: 1000 + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/UnhealthyContainerMetadata' + /containers/unhealthy/{state}: + get: + tags: + - Containers + summary: Returns UnhealthyContainerMetadata for all the unhealthy containers with the specified state + operationId: getUnhealthyContainersWithState + parameters: + - name: state + in: path + description: State of the container which is one of **MISSING**, **MIS_REPLICATED**, **UNDER_REPLICATED**, **OVER_REPLICATED** + required: true + schema: + type: string + example: MISSING + - name: batchNum + in: query + description: Size of the batch for the result. It will give us results from **(limit + 1) to (2 * limit)** + required: false + schema: + type: integer + - name: limit + in: query + description: Limit of the number of results returned + required: false + schema: + type: integer + default: 1000 + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/UnhealthyContainerMetadata' + /containers/mismatch: + get: + tags: + - Containers + summary: Returns the list of mis-matched containers between OM and SCM + operationId: getContainerMisMatchInsights + parameters: + - name: prevKey + in: query + description: Stores the previous key after which to fetch the data + required: false + schema: + type: integer + default: 0 + - name: limit + in: query + description: Stores the limit for the number of results to fetch + required: false + schema: + type: integer + default: 1000 + - name: missingIn + in: query + description: Filters by where a given container is missing i.e. in OM or SCM + required: false + schema: + type: string + default: SCM + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/MismatchedContainers' + /containers/mismatch/deleted: + get: + tags: + - Containers + summary: Returns the list of DELETED containers in SCM that are present in OM + operationId: getOmContainersDeletedInSCM + parameters: + - name: prevKey + in: query + description: Stores the previous key after which to fetch the data + required: false + schema: + type: integer + default: 0 + - name: limit + in: query + description: Stores the limit for the number of results to fetch + required: false + schema: + type: integer + default: 1000 + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/DeletedMismatchedContainers' + /volumes: + get: + tags: + - Volumes + summary: Returns the set of all volumes present + operationId: getVolumes + parameters: + - name: prevKey + in: query + description: Stores the previous key after which to fetch the data + required: false + schema: + type: string + - name: limit + in: query + description: Stores the limit for the number of results to fetch + required: false + schema: + type: integer + default: 1000 + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/Volumes' + /buckets: + get: + tags: + - Buckets + summary: Returns the set of all buckets across all volumes + operationId: getBuckets + parameters: + - name: volume + in: query + description: Stores the name of the volumes whose buckets to fetch + required: false + schema: + type: string + - name: prevKey + in: query + description: Stores the previous key after which to fetch the data + required: false + schema: + type: string + - name: limit + in: query + description: Stores the limit for the number of results to fetch + required: false + schema: + type: integer + default: 1000 + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/Buckets' + /keys/open: + get: + tags: + - Keys + summary: Returns the set of keys/files which are open + operationId: getOpenKeyInfo + parameters: + - name: prevKey + in: query + description: Stores the previous key after which to fetch the data. + required: false + schema: + type: string + - name: limit + in: query + description: Stores the limit for the number of results to fetch + required: false + schema: + type: integer + default: 1000 + - name: startPrefix + in: query + description: Will return keys matching this prefix + schema: + type: integer + - name: includeFso + in: query + description: Boolean value to determine whether to include FSO keys or not + required: false + schema: + type: boolean + default: false + - name: includeNonFso + in: query + description: Boolean value to determine whether to include non-FSO keys or not + required: false + schema: + type: boolean + default: false + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/OpenKeys' + /keys/open/summary: + get: + tags: + - Keys + summary: Returns the summary of all open keys info + operationId: getOpenKeySummary + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/OpenKeysSummary' + + /keys/deletePending: + get: + tags: + - Keys + summary: Returns the set of keys/files which are pending for deletion + operationId: getDeletedKeyInfo + parameters: + - name: prevKey + in: query + description: Stores the previous key after which to fetch the data. + required: false + schema: + type: string + - name: limit + in: query + description: Stores the limit for the number of results to fetch + required: false + schema: + type: integer + default: 1000 + - name: startPrefix + in: query + description: Will return keys matching this prefix + schema: + type: string + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/DeletePendingKeys' + /keys/deletePending/dirs: + get: + tags: + - Keys + summary: Returns the set of keys/files which are pending for deletion + operationId: getDeletedDirInfo + parameters: + - name: prevKey + in: query + description: Stores the previous key after which to fetch the data. + required: false + schema: + type: string + - name: limit + in: query + description: Stores the limit for the number of results to fetch + required: false + schema: + type: integer + default: 1000 + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/DeletePendingDirs' + /keys/deletePending/summary: + get: + tags: + - Keys + summary: Returns the summary of all keys pending deletion info + operationId: getDeletedKeySummary + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/DeletePendingSummary' + /keys/deletePending/dirs/summary: + get: + tags: + - Keys + summary: Retrieves the summary of deleted directories. + operationId: getDeletedDirectorySummary + responses: + '200': + description: Successful operation + content: + application/json: + schema: + type: object + properties: + totalDeletedDirectories: + type: integer + /containers/{id}/keys: + get: + tags: + - Containers and Keys + summary: Get the Key metadata for all keys present in the given container ID + operationId: getKeysForContainer + parameters: + - name: id + in: path + description: ID of the container for which we want Key Metadata + required: true + schema: + type: integer + - name: prevKey + in: query + description: Only return keys that are present after the given key prevKey prefix + required: false + schema: + type: string + - name: limit + in: query + description: Limit of the number of results returned + required: false + schema: + type: integer + default: 1000 + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/KeyMetadata' + /blocks/deletePending: + get: + tags: + - Blocks Metadata + summary: Fetch the list of blocks pending for deletion + operationId: getBlocksPendingDeletion + parameters: + - name: prevKey + in: query + description: Only returns the list of blocks pending for deletion, that are present after the given block id (prevKey). + example: 4 + required: false + schema: + type: string + - name: limit + in: query + description: Stores the limit for the number of results to fetch + required: false + schema: + type: integer + default: 1000 + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/DeletePendingBlocks' + /namespace/summary: + get: + tags: + - Namespace Metadata + summary: Returns a basic summary of the path, including entity type and aggregate count of objects under the path. + operationId: getBasicInfo + parameters: + - name: path + in: query + description: The path request in string without any protocol prefix. + example: /volume1/bucket1 + required: true + schema: + type: string + responses: + '200': + description: | + Successful operation
+ #### **Note**: + #### status can be either **OK** if path exists else **PATH_NOT_FOUND** + #### If **any num parameter is -1**, the path request is not applicable to such an entity type. + content: + application/json: + schema: + $ref: '#/components/schemas/NamespaceMetadataResponse' + /namespace/usage: + get: + tags: + - Namespace Metadata + summary: Returns namespace usage of all sub-paths under the path. + operationId: getDiskUsage + parameters: + - name: path + in: query + description: The path request in string without any protocol prefix. + example: /volume1/bucket1 + required: true + schema: + type: string + - name: files + in: query + description: This boolean has a default value of false. When set to true, it calculates the namespace usage for keys within the specified path and also provides a list of their corresponding sub-paths. + example: true + required: false + schema: + type: boolean + - name: replica + in: query + description: A boolean with a default value of false. If set to true, computes namespace usage with replicated size of keys. + example: true + required: false + schema: + type: boolean + responses: + '200': + description: | + Successful operation
+ #### **Note**: + #### The below example response is for the sample endpoint: **namespace/usage?path=/vol1/bucket1&files=true&replica=true** + #### status can be either **OK** if path exists else **PATH_NOT_FOUND** + #### If files is set to **false**, sub-path **/vol1/bucket1/key1-1 is omitted**. + #### If replica is set to **false**, **sizeWithReplica returns -1**. + #### If the path’s entity type cannot have direct keys (Root, Volume), sizeDirectKey returns -1. + content: + application/json: + schema: + $ref: '#/components/schemas/MetadataDiskUsage' + /namespace/quota: + get: + tags: + - Namespace Metadata + summary: Returns the quota allowed and used under the path. Only volumes and buckets have quota. Other types are not applicable to the quota request. + operationId: getQuotaUsage + parameters: + - name: path + in: query + description: The path request in string without any protocol prefix. + example: /volume1/bucket1 + required: true + schema: + type: string + responses: + '200': + description: | + Successful operation
+ #### **Note**: + #### status can be either **OK** if path exists else **PATH_NOT_FOUND**, **TYPE_NOT_APPLICABLE** if path exists, but the path’s entity type is not applicable to the request. + #### If **quota is not set, "allowed" returns -1** + content: + application/json: + schema: + $ref: '#/components/schemas/MetadataQuota' + /namespace/dist: + get: + tags: + - Namespace Metadata + summary: Returns the file size distribution of all keys under the path. + operationId: getFileSizeDistribution + parameters: + - name: path + in: query + description: The path request in string without any protocol prefix. + example: / + required: true + schema: + type: string + responses: + '200': + description: | + Successful operation
+ #### **Note**: + #### status can be either **OK** if path exists else **PATH_NOT_FOUND**, **TYPE_NOT_APPLICABLE** if path exists, but the path is a key, which does not have a file size distribution. + #### Recon keeps track of all keys with size from **1 KB to 1 PB**. + #### For keys **smaller than 1 KB, map to the first bin (index)**, for **keys larger than 1 PB, map to the last bin (index)**. + #### Each **index of dist** is mapped to a file size range (e.g. **1 MB - 2 MB**). + content: + application/json: + schema: + $ref: '#/components/schemas/MetadataSpaceDist' + /clusterState: + get: + tags: + - Cluster State + summary: Returns the summary of the current state of the Ozone cluster. + operationId: getClusterState + responses: + '200': + description: Successful Operation + content: + application/json: + schema: + $ref: '#/components/schemas/ClusterState' + /datanodes: + get: + tags: + - Datanodes + summary: Returns all the datanodes in the cluster. + operationId: getDatanodes + responses: + '200': + description: Successful Operation + content: + application/json: + schema: + $ref: '#/components/schemas/DatanodesSummary' + /datanodes/decommission/info: + get: + tags: + - Datanodes + summary: Returns all the datanodes in the decommissioning state + operationId: getDecommissioningDatanodes + responses: + '200': + description: Successful Operation + content: + application/json: + schema: + $ref: '#/components/schemas/DatanodesDecommissionInfo' + /datanodes/decommission/info/datanode: + get: + tags: + - Datanodes + summary: Returns info of a specific datanode for which decommissioning is initiated + operationId: getDecommissionInfoForDatanode + parameters: + - name: uuid + in: query + description: The uuid of the datanode being decommissioned. + required: false + schema: + type: string + - name: ipAddress + in: query + description: The ipAddress of the datanode being decommissioned. + required: false + schema: + type: string + responses: + '200': + description: Successful Operation + content: + application/json: + schema: + $ref: '#/components/schemas/DatanodesDecommissionInfo' + /datanodes/remove: + put: + tags: + - Datanodes + summary: Removes datanodes from Recon's memory and nodes table in Recon DB. + operationId: removeDatanodes + requestBody: + description: List of datanodes to be removed + required: true + content: + application/json: + schema: + type: array + items: + type: string + responses: + '200': + description: Successful Operation + content: + application/json: + schema: + $ref: '#/components/schemas/RemovedDatanodesResponse' + + /pipelines: + get: + tags: + - Pipelines + summary: Returns all the pipelines in the cluster. + operationId: getPipelines + responses: + '200': + description: | + Successful Operation
+ #### **Note**: The following sample response shows only one pipeline in the array + #### but since the pipeline totalCount is 5, there are 4 more pipelines expected in the array + content: + application/json: + schema: + $ref: '#/components/schemas/PipelinesSummary' + /task/status: + get: + tags: + - Tasks + summary: Returns the status of all the Recon tasks. + operationId: getTaskTimes + responses: + '200': + description: Successful Operation + content: + application/json: + schema: + $ref: '#/components/schemas/TasksStatus' + /utilization/fileCount: + get: + tags: + - Utilization + summary: Returns the file counts within different file ranges with fileSize in the response object being the upper cap for file size range. + operationId: getFileCounts + parameters: + - name: volume + in: query + description: Filters the results based on the given volume name. + example: sampleVol + required: false + schema: + type: string + - name: bucket + in: query + description: Filters the results based on the given bucket name. + example: sampleBucket + required: false + schema: + type: string + - name: fileSize + in: query + description: | + Filters the results based on the given file size.
+ The smallest file size being tracked for count is 1 KB i.e. 1024 bytes. + example: 1024 + required: false + schema: + type: number + responses: + '200': + description: Successful Operation + content: + application/json: + schema: + $ref: '#/components/schemas/FileSizeUtilization' + /utilization/containerCount: + get: + tags: + - Utilization + summary: Returns the container counts within the given container size. + operationId: getContainerCounts + parameters: + - name: containerSize + in: query + description: | + Filters the results based on the given containerSize.
+ The smallest container size being tracked for count is 512 MB i.e. 512000000 bytes. + example: 512000000 + required: false + schema: + type: number + responses: + '200': + description: Successful Operation + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerUtilization' + /metrics/query: + get: + tags: + - Metrics + summary: This is a proxy endpoint for Prometheus, and helps to fetch different metrics for Ozone + operationId: getMetricsResponse + parameters: + - name: query + in: query + description: The query in a Prometheus query format for which to fetch results + example: ratis_leader_election_electionCount + required: true + schema: + type: string + allowReserved: true + responses: + '200': + description: Successful Operation + content: + application/json: + schema: + $ref: '#/components/schemas/MetricsQuery' +components: + schemas: + Volumes: + type: object + properties: + totalCount: + type: integer + volumes: + type: array + items: + type: object + properties: + metadata: + type: object + name: + type: string + quotaInBytes: + type: integer + quotaInNamespace: + type: integer + usedNamespace: + type: integer + creationTime: + type: integer + modificationTime: + type: integer + acls: + $ref: "#/components/schemas/ACL" + admin: + type: string + owner: + type: string + volume: + type: string + Buckets: + type: object + properties: + totalCount: + type: integer + buckets: + type: array + items: + type: object + properties: + versioningEnabled: + type: boolean + metadata: + type: object + name: + type: string + quotaInBytes: + type: integer + quotaInNamespace: + type: integer + usedNamespace: + type: integer + creationTime: + type: integer + modificationTime: + type: integer + acls: + $ref: "#/components/schemas/ACL" + volumeName: + type: string + storageType: + type: string + versioning: + type: boolean + usedBytes: + type: integer + encryptionInfo: + type: object + properties: + version: + type: string + suite: + type: string + keyName: + type: string + replicationConfigInfo: + type: object + nullable: true + sourceVolume: + type: string + nullable: true + sourceBucket: + type: string + nullable: true + bucketLayout: + type: string + owner: + type: string + ContainerMetadata: + type: object + properties: + data: + type: object + properties: + totalCount: + type: integer + example: 3 + prevKey: + type: integer + example: 3019 + containers: + type: array + items: + type: object + properties: + ContainerID: + type: integer + example: 1 + NumberOfKeys: + type: integer + example: 834 + pipelines: + type: string + nullable: true + xml: + name: containerMetadata + example: + - ContainerID: 1 + NumberOfKeys: 834 + pipelines: null + - ContainerID: 2 + NumberOfKeys: 833 + pipelines: null + - ContainerID: 3 + NumberOfKeys: 833 + pipelines: null + xml: + name: containerMetadataResponse + DeletedContainers: + type: array + items: + type: object + properties: + containerId: + type: integer + pipelineId: + type: object + properties: + id: + type: string + containerState: + type: string + stateEnterTime: + type: integer + lastUsed: + type: integer + replicationConfig: + type: object + properties: + replicationType: + type: string + replicationFactor: + type: string + replicationNodes: + type: integer + replicationFactor: + type: string + KeyMetadata: + type: object + properties: + totalCount: + type: integer + example: 7 + lastKey: + type: string + example: /vol1/buck1/file1 + keys: + type: array + items: + type: object + properties: + Volume: + type: string + example: vol-1-73141 + Bucket: + type: string + example: bucket-3-35816 + Key: + type: string + example: key-0-43637 + CompletePath: + type: string + example: /vol1/buck1/dir1/dir2/file1 + DataSize: + type: integer + example: 1000 + Versions: + type: array + items: + type: integer + example: [0] + Blocks: + type: object + properties: + 0: + type: array + items: + type: object + properties: + containerID: + type: integer + localID: + type: number + example: + - containerID: 1 + localID: 105232659753992201 + CreationTime: + type: string + format: date-time + example: 2020-11-18T18:09:17.722Z + ModificationTime: + type: string + format: date-time + example: 2020-11-18T18:09:30.405Z + ReplicaHistory: + type: object + properties: + containerID: + type: integer + example: 1 + datanodeUuid: + type: string + example: 841be80f-0454-47df-b676 + datanodeHost: + type: string + example: localhost-1 + firstSeenTime: + type: number + example: 1605724047057 + lastSeenTime: + type: number + example: 1605731201301 + lastBcsId: + type: integer + example: 123 + state: + type: string + example: OPEN + MissingContainerMetadata: + type: object + properties: + totalCount: + type: integer + example: 26 + containers: + type: array + items: + type: object + properties: + containerID: + type: integer + example: 1 + missingSince: + type: number + example: 1605731029145 + keys: + type: integer + example: 7 + pipelineID: + type: string + example: 88646d32-a1aa-4e1a + replicas: + type: array + items: + $ref: "#/components/schemas/ReplicaHistory" + UnhealthyContainerMetadata: + type: object + properties: + missingCount: + type: integer + example: 2 + underReplicatedCount: + type: integer + example: 0 + overReplicatedCount: + type: integer + example: 0 + misReplicatedCount: + type: integer + example: 0 + containers: + type: array + items: + type: object + properties: + containerID: + type: integer + example: 1 + containerState: + type: string + example: MISSING + unhealthySince: + type: number + example: 1605731029145 + expectedReplicaCount: + type: integer + example: 3 + actualReplicaCount: + type: integer + example: 0 + replicaDeltaCount: + type: integer + example: 3 + reason: + type: string + example: null + keys: + type: integer + example: 7 + pipelineID: + type: string + example: 88646d32-a1aa-4e1a + replicas: + type: array + items: + $ref: "#/components/schemas/ReplicaHistory" + MismatchedContainers: + type: object + properties: + lastKey: + type: integer + example: 21 + containerDiscrepancyInfo: + type: array + items: + type: object + properties: + containerId: + type: integer + example: 11 + numberOfKeys: + type: integer + example: 1 + pipelines: + type: array + items: + type: object + properties: + id: + type: object + properties: + id: + type: string + example: 1202e6bb-b7c1-4a85-8067-61374b069adb + replicationConfig: + type: object + properties: + replicationFactor: + type: string + example: THREE + requiredNodes: + type: integer + example: 3 + replicationType: + type: string + example: RATIS + healthy: + type: boolean + example: true + existsAt: + type: string + example: OM + example: + - containerId: 2 + numberOfKeys: 2 + pipelines: + - id: + id: 1202e6bb-b7c1-4a85-8067-61374b069adb + replicationConfig: + replicationFactor: ONE + requiredNodes: 1 + replicationType: RATIS + healthy: true + existsAt: OM + - containerId: 11 + numberOfKeys: 2 + pipelines: + - id: + id: 1202e6bb-b7c1-4a85-8067-61374b069adb + replicationConfig: + replicationFactor: TWO + requiredNodes: 2 + replicationType: RATIS + healthy: true + - id: + id: 1202e6bb-b7c1-4a85-8067-613724nn + replicationConfig: + replicationFactor: ONE + requiredNodes: 1 + replicationType: RATIS + healthy: true + existsAt: SCM + DeletedMismatchedContainers: + type: object + properties: + lastKey: + type: integer + example: 21 + containerDiscrepancyInfo: + type: array + items: + type: object + properties: + containerId: + type: integer + example: 11 + numberOfKeys: + type: integer + example: 1 + pipelines: + type: array + items: + type: object + properties: + id: + type: object + properties: + id: + type: string + example: 1202e6bb-b7c1-4a85-8067-61374b069adb + replicationConfig: + type: object + properties: + replicationFactor: + type: string + example: THREE + requiredNodes: + type: integer + example: 3 + replicationType: + type: string + example: RATIS + healthy: + type: boolean + example: true + existsAt: + type: string + example: OM + example: + - containerId: 2 + numberOfKeys: 2 + pipelines: + - id: + id: 1202e6bb-b7c1-4a85-8067-61374b069adb + replicationConfig: + replicationFactor: ONE + requiredNodes: 1 + replicationType: RATIS + healthy: true + - containerId: 11 + numberOfKeys: 2 + pipelines: + - id: + id: 1202e6bb-b7c1-4a85-8067-61374b069adb + replicationConfig: + replicationFactor: TWO + requiredNodes: 2 + replicationType: RATIS + healthy: true + - id: + id: 1202e6bb-b7c1-4a85-8067-613724nn + replicationConfig: + replicationFactor: ONE + requiredNodes: 1 + replicationType: RATIS + healthy: true + OpenKeysSummary: + type: object + properties: + totalUnreplicatedDataSize: + type: integer + totalReplicatedDataSize: + type: integer + totalOpenKeys: + type: integer + OpenKeys: + type: object + required: ['lastKey', 'replicatedDataSize', 'unreplicatedDataSize', 'status'] + properties: + lastKey: + type: string + example: /vol1/fso-bucket/dir1/dir2/file2 + replicatedDataSize: + type: integer + example: 13824 + unreplicatedDataSize: + type: integer + example: 4608 + status: + type: string + fso: + type: array + items: + type: object + properties: + path: + type: string + key: + type: string + inStateSince: + type: number + size: + type: integer + replicatedSize: + type: integer + replicationInfo: + type: object + properties: + replicationFactor: + type: string + example: THREE + requiredNodes: + type: integer + example: 3 + replicationType: + type: string + example: RATIS + creationTime: + type: integer + modificationTime: + type: integer + isKey: + type: boolean + nonFSO: + type: array + items: + type: object + properties: + path: + type: string + key: + type: string + inStateSince: + type: number + size: + type: integer + replicatedSize: + type: integer + replicationInfo: + type: object + properties: + replicationFactor: + type: string + example: THREE + requiredNodes: + type: integer + example: 3 + replicationType: + type: string + example: RATIS + creationTime: + type: integer + modificationTime: + type: integer + isKey: + type: boolean + OMKeyInfoList: + type: array + items: + type: object + properties: + metadata: + type: object + objectID: + type: number + updateID: + type: number + parentObjectID: + type: number + volumeName: + type: string + bucketName: + type: string + keyName: + type: string + dataSize: + type: number + keyLocationVersions: + type: array + items: + $ref: "#/components/schemas/VersionLocation" + creationTime: + type: number + modificationTime: + type: number + replicationConfig: + type: object + properties: + replicationFactor: + type: string + requiredNodes: + type: integer + replicationType: + type: string + fileChecksum: + type: number + nullable: true + fileName: + type: string + ownerName: + type: string + acls: + $ref: "#/components/schemas/ACL" + tags: + type: object + expectedDataGeneration: + type: string + nullable: true + file: + type: boolean + path: + type: string + generation: + type: integer + replicatedSize: + type: number + fileEncryptionInfo: + type: string + nullable: true + objectInfo: + type: string + latestVersionLocations: + $ref: "#/components/schemas/VersionLocation" + hsync: + type: boolean + VersionLocation: + type: object + properties: + version: + type: integer + locationVersionMap: + type: object + properties: + 0: + $ref: "#/components/schemas/LocationList" + multipartKey: + type: boolean + blocksLatestVersionOnly: + $ref: "#/components/schemas/LocationList" + locationListCount: + type: integer + locationLists: + type: array + items: + $ref: "#/components/schemas/LocationList" + locationList: + $ref: "#/components/schemas/LocationList" + LocationList: + type: array + items: + type: object + properties: + blockID: + type: object + properties: + containerBlockID: + type: object + properties: + containerID: + type: integer + localID: + type: integer + blockCommitSequenceID: + type: integer + replicaIndex: + type: integer + nullable: true + containerID: + type: integer + localID: + type: integer + length: + type: integer + offset: + type: integer + token: + type: string + nullable: true + createVersion: + type: integer + pipeline: + type: string + nullable: true + partNumber: + type: integer + underConstruction: + type: boolean + blockCommitSequenceId: + type: integer + containerID: + type: integer + localID: + type: integer + DeletePendingKeys: + type: object + properties: + lastKey: + type: string + example: sampleVol/bucketOne/key_one + replicatedDataSize: + type: number + example: 300000000 + unreplicatedDataSize: + type: number + example: 100000000 + deletedKeyInfo: + type: array + items: + type: object + properties: + omKeyInfoList: + $ref: "#/components/schemas/OMKeyInfoList" + totalSize: + type: object + properties: + 63: + type: integer + example: 189 + status: + type: string + example: OK + DeletePendingSummary: + type: object + properties: + totalUnreplicatedDataSize: + type: integer + totalReplicatedDataSize: + type: integer + totalDeletedKeys: + type: integer + ACL: + type: object + properties: + type: + type: string + name: + type: string + aclScope: + type: string + aclList: + type: array + items: + type: string + DeletePendingDirs: + type: object + properties: + lastKey: + type: string + example: vol1/bucket1/bucket1/dir1 + replicatedDataSize: + type: integer + example: 13824 + unreplicatedDataSize: + type: integer + example: 4608 + deletedDirInfo: + type: array + items: + type: object + properties: + path: + type: string + key: + type: string + inStateSince: + type: number + size: + type: integer + replicatedSize: + type: integer + replicationInfo: + type: object + properties: + replicationFactor: + type: string + example: THREE + requiredNodes: + type: integer + example: 3 + replicationType: + type: string + example: RATIS + creationTime: + type: integer + modificationTime: + type: integer + isKey: + type: boolean + status: + type: string + example: OK + DeletePendingBlocks: + type: object + properties: + OPEN: + type: array + items: + type: object + properties: + containerId: + type: number + example: 100 + localIDList: + type: array + items: + type: integer + example: + - 1 + - 2 + - 3 + - 4 + localIDCount: + type: integer + example: 4 + txID: + type: number + example: 1 + NamespaceMetadataResponse: + type: object + properties: + status: + type: string + example: OK + type: + type: string + example: BUCKET + numVolume: + type: number + example: -1 + numBucket: + type: integer + example: 100 + numDir: + type: number + example: 50 + numKey: + type: number + example: 400 + MetadataDiskUsage: + type: object + properties: + status: + type: string + example: OK + path: + type: string + example: /vol1/bucket1 + size: + type: number + example: 150000 + sizeWithReplica: + type: number + example: 450000 + subPathCount: + type: number + example: 4 + subPaths: + type: array + items: + type: object + properties: + key: + type: boolean + path: + type: string + size: + type: number + sizeWithReplica: + type: number + isKey: + type: boolean + example: + - key: false + path: /vol1/bucket1/dir1-1 + size: 30000 + sizeWithReplica: 90000 + isKey: false + - key: false + path: /vol1/bucket1/dir1-2 + size: 30000 + sizeWithReplica: 90000 + isKey": false + - key: false + path: /vol1/bucket1/dir1-3 + size: 30000 + sizeWithReplica: 90000 + isKey": false + - key: true + path: /vol1/bucket1/key1-1 + size: 30000 + sizeWithReplica: 90000 + isKey": true + sizeDirectKey: + type: number + example: 10000 + MetadataQuota: + type: object + properties: + status: + type: string + example: OK + allowed: + type: number + example: 200000 + used: + type: number + example: 160000 + MetadataSpaceDist: + type: object + properties: + status: + type: string + example: OK + dist: + type: array + items: + type: integer + example: + - 0 + - 0 + - 10 + - 20 + - 0 + - 30 + - 0 + - 100 + - 40 + StorageReport: + type: object + properties: + capacity: + type: number + example: 270429917184 + used: + type: number + example: 358805504 + remaining: + type: number + example: 270071111680 + committed: + type: number + example: 27007111 + ClusterState: + type: object + properties: + deletedDirs: + type: integer + missingContainers: + type: integer + openContainers: + type: integer + deletedContainers: + type: integer + keysPendingDeletion: + type: integer + scmServiceId: + type: string + omServiceId: + type: string + pipelines: + type: integer + example: 5 + totalDatanodes: + type: integer + example: 4 + healthyDatanodes: + type: integer + example: 4 + storageReport: + $ref: "#/components/schemas/StorageReport" + containers: + type: integer + example: 26 + volumes: + type: integer + example: 6 + buckets: + type: integer + example: 26 + keys: + type: integer + example: 25 + DatanodesSummary: + type: object + properties: + totalCount: + type: integer + example: 4 + datanodes: + type: array + items: + type: object + properties: + buildDate: + type: string + layoutVersion: + type: integer + networkLocation: + type: string + opState: + type: string + revision: + type: string + setupTime: + type: integer + version: + type: string + uuid: + type: string + example: f8f8cb45-3ab2-4123 + hostname: + type: string + example: localhost-1 + state: + type: string + example: HEALTHY + lastHeartbeat: + type: number + example: 1605738400544 + storageReport: + $ref: "#/components/schemas/StorageReport" + pipelines: + type: array + items: + type: object + properties: + pipelineID: + type: string + replicationType: + type: string + replicationFactor: + type: integer + leaderNode: + type: string + example: + - pipelineID: b9415b20-b9bd-4225 + replicationType: RATIS + replicationFactor: 3 + leaderNode: localhost-2 + - pipelineID: 3bf4a9e9-69cc-4d20 + replicationType: RATIS + replicationFactor: 1 + leaderNode: localhost-1 + containers: + type: integer + example: 17 + leaderCount: + type: integer + example: 1 + RemovedDatanodesResponse: + type: object + properties: + datanodesResponseMap: + type: object + properties: + removedDatanodes: + type: object + properties: + totalCount: + type: integer + datanodes: + type: array + items: + type: object + properties: + uuid: + type: string + hostname: + type: string + state: + type: string + pipelines: + type: string + nullable: true + DatanodesDecommissionInfo: + type: object + properties: + DatanodesDecommissionInfo: + type: array + items: + type: object + properties: + containers: + type: object + metrics: + type: object + properties: + decommissionStartTime: + type: string + numOfUnclosedContainers: + type: integer + numOfUnclosedPipelines: + type: integer + numOfUnderReplicatedContainers: + type: integer + nullable: true + datanodeDetails: + $ref: "#/components/schemas/DatanodeDetails" + ByteString: + type: object + properties: + string: + type: string + bytes: + type: object + properties: + validUtf8: + type: boolean + empty: + type: boolean + DatanodeDetails: + type: object + properties: + level: + type: integer + parent: + type: string + nullable: true + cost: + type: integer + uuid: + type: string + uuidString: + type: string + ipAddress: + type: string + hostName: + type: string + ports: + type: array + items: + type: object + properties: + name: + type: string + value: + type: integer + certSerialId: + type: integer + version: + type: string + nullable: true + setupTime: + type: string + revision: + type: string + nullable: true + buildDate: + type: string + nullable: true + persistedOpState: + type: string + persistedOpStateExpiryEpochSec: + type: integer + initialVersion: + type: integer + currentVersion: + type: integer + decommissioned: + type: boolean + maintenance: + type: boolean + ipAddressAsByteString: + $ref: '#/components/schemas/ByteString' + hostNameAsByteString: + $ref: '#/components/schemas/ByteString' + networkName: + type: string + networkLocation: + type: string + networkFullPath: + type: string + numOfLeaves: + type: integer + networkNameAsByteString: + $ref: '#/components/schemas/ByteString' + networkLocationAsByteString: + $ref: '#/components/schemas/ByteString' + PipelinesSummary: + type: object + properties: + totalCount: + type: integer + example: 5 + pipelines: + type: array + items: + type: object + properties: + pipelineId: + type: string + example: b9415b20-b9bd-4225 + status: + type: string + example: OPEN + leaderNode: + type: string + example: localhost-1 + datanodes: + type: array + items: + $ref: '#/components/schemas/DatanodeDetails' + lastLeaderElection: + type: integer + example: 0 + duration: + type: number + example: 23166128 + leaderElections: + type: integer + example: 0 + replicationType: + type: string + example: RATIS + replicationFactor: + type: integer + example: 3 + containers: + type: integer + example: 3 + TasksStatus: + type: array + items: + type: object + properties: + taskName: + type: string + lastUpdatedTimestamp: + type: number + lastUpdatedSeqNumber: + type: number + example: + - taskName: OmDeltaRequest + lastUpdatedTimestamp: 1605724099147 + lastUpdatedSeqNumber: 186 + - taskName: OmDeltaRequest + lastUpdatedTimestamp: 1605724103892 + lastUpdatedSeqNumber: 188 + FileSizeUtilization: + type: array + items: + type: object + properties: + volume: + type: string + bucket: + type: string + fileSize: + type: number + count: + type: integer + example: + - volume: vol-2-04168 + bucket: bucket-0-11685 + fileSize: 1024 + count: 1 + - volume: vol-2-04168 + bucket: bucket-1-41795 + fileSize: 1024 + count: 1 + - volume: vol-2-04168 + bucket: bucket-2-93377 + fileSize: 1024 + count: 1 + - volume: vol-2-04168 + bucket: bucket-3-50336 + fileSize: 1024 + count: 2 + ContainerUtilization: + type: array + items: + type: object + properties: + containerSize: + type: number + count: + type: number + example: + - containerSize: 2147483648 + count: 9 + - containerSize: 1073741824 + count: 3 + MetricsQuery: + type: object + properties: + status: + type: string + example: success + data: + type: object + properties: + resultType: + type: string + example: vector + result: + type: array + items: + type: object + properties: + metric: + type: object + properties: + __name__: + type: string + example: ratis_leader_election_electionCount + exported_instance: + type: string + example: 33a5ac1d-8c65-4c74-a0b8-9314dfcccb42 + group: + type: string + example: group-03CA9397D54B + instance: + type: string + example: ozone_datanode_1:9882 + job: + type: string + example: ozone + value: + oneOf: + - type: string + - type: number + example: + - 1599159384.455 + - "5" From 1f212da6410c502793aff71ce8cdd7505253faa3 Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Tue, 20 Jan 2026 21:29:37 +0530 Subject: [PATCH 02/16] HDDS-10684:Add Swagger UI component for Recon REST API documentation with Docusaurus theme integration. --- src/components/SwaggerUI/styles.module.css | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/components/SwaggerUI/styles.module.css b/src/components/SwaggerUI/styles.module.css index ada92240c4..6a224b1a6b 100644 --- a/src/components/SwaggerUI/styles.module.css +++ b/src/components/SwaggerUI/styles.module.css @@ -361,3 +361,30 @@ .swaggerWrapper :global(.swagger-ui .microlight) { text-align: left; } + +/* Fix input field text visibility in Try it out */ +.swaggerWrapper :global(.swagger-ui input[type="text"]), +.swaggerWrapper :global(.swagger-ui input[type="number"]), +.swaggerWrapper :global(.swagger-ui input[type="email"]), +.swaggerWrapper :global(.swagger-ui input[type="password"]), +.swaggerWrapper :global(.swagger-ui input[type="search"]), +.swaggerWrapper :global(.swagger-ui input[type="url"]), +.swaggerWrapper :global(.swagger-ui textarea), +.swaggerWrapper :global(.swagger-ui select) { + color: var(--ifm-font-color-base) !important; + background: var(--ifm-background-color) !important; + border: 1px solid #ccc !important; +} + +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui input[type="text"]), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui input[type="number"]), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui input[type="email"]), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui input[type="password"]), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui input[type="search"]), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui input[type="url"]), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui textarea), +[data-theme='dark'] .swaggerWrapper :global(.swagger-ui select) { + color: var(--ifm-font-color-base) !important; + background: var(--ifm-background-color) !important; + border-color: #444 !important; +} From c9ce49f3ef788c388d86432b11dbe44db84027e1 Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Fri, 23 Jan 2026 19:31:49 +0530 Subject: [PATCH 03/16] HDDS-10684:Added recon-api.yaml to resolve linting errors. --- .yamllint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.yamllint.yml b/.yamllint.yml index 45e12885a5..69087bcc9e 100644 --- a/.yamllint.yml +++ b/.yamllint.yml @@ -20,7 +20,7 @@ ignore: - pnpm-lock.yaml - node_modules -- "**/static/docs" +- static/recon-api.yaml rules: anchors: enable From af86d71359ef9608064e3d8fac53309126397dfe Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Fri, 23 Jan 2026 19:44:29 +0530 Subject: [PATCH 04/16] Apply suggestion from @errose28 Co-authored-by: Ethan Rose <33912936+errose28@users.noreply.github.com> --- .../09-observability/02-recon/02-recon-rest-api.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx index 05b307896c..ab8e85bbfc 100644 --- a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx +++ b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx @@ -5,7 +5,7 @@ import SwaggerUI from '@site/src/components/SwaggerUI'; Ozone Recon's public **REST API** follows the [OpenAPI specification](https://www.openapis.org/), and is documented below. The docs are generated using [Swagger React UI](https://github.com/swagger-api/swagger-ui). :::info -**NOTE!** You can find an interactive version of this documentation on your local Ozone Recon instance at **/api/v1/** (if Recon is running). +You can find an interactive version of this documentation on your local Ozone Recon instance at **/api/v1/** (if Recon is running). ::: From 4ffc3e6394914965c635d3c797b476de8032c1e7 Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Fri, 23 Jan 2026 19:46:13 +0530 Subject: [PATCH 05/16] HDDS-10684:resolved Swagger UI header color coding for api headers --- src/components/SwaggerUI/styles.module.css | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/components/SwaggerUI/styles.module.css b/src/components/SwaggerUI/styles.module.css index 6a224b1a6b..aa08a128ab 100644 --- a/src/components/SwaggerUI/styles.module.css +++ b/src/components/SwaggerUI/styles.module.css @@ -183,25 +183,6 @@ text-decoration: underline; } -/* Use Docusaurus primary color for GET operations */ -.swaggerWrapper :global(.swagger-ui .opblock.opblock-get .opblock-summary-method) { - background: var(--ifm-color-primary) !important; -} - -.swaggerWrapper :global(.swagger-ui .opblock.opblock-get) { - border-color: var(--ifm-color-primary) !important; - background: rgba(53, 117, 0, 0.1); -} - -.swaggerWrapper :global(.swagger-ui .opblock.opblock-get .opblock-summary) { - border-color: var(--ifm-color-primary) !important; -} - -/* Dark mode adjustments */ -[data-theme='dark'] .swaggerWrapper :global(.swagger-ui .opblock.opblock-get) { - background: rgba(150, 210, 110, 0.1); -} - /* Match background colors */ .swaggerWrapper :global(.swagger-ui .wrapper) { background: var(--ifm-background-color); From 513a3e18a857e914ad977981086db96f3024de7f Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Fri, 23 Jan 2026 20:03:36 +0530 Subject: [PATCH 06/16] HDDS-10684.Add configurable server URL input to Recon API Swagger UI --- .../02-recon/02-recon-rest-api.mdx | 10 +++- src/components/SwaggerUI/index.js | 50 +++++++++++++++- src/components/SwaggerUI/styles.module.css | 57 +++++++++++++++++++ 3 files changed, 112 insertions(+), 5 deletions(-) diff --git a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx index ab8e85bbfc..b1f2903f75 100644 --- a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx +++ b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx @@ -5,7 +5,13 @@ import SwaggerUI from '@site/src/components/SwaggerUI'; Ozone Recon's public **REST API** follows the [OpenAPI specification](https://www.openapis.org/), and is documented below. The docs are generated using [Swagger React UI](https://github.com/swagger-api/swagger-ui). :::info -You can find an interactive version of this documentation on your local Ozone Recon instance at **/api/v1/** (if Recon is running). +**Interactive API Testing** + +You can test these APIs directly from this page using the "Try it out" button on each endpoint. + +- **Default server**: `http://localhost:9888` (matches the [Docker quick start guide](/docs/quick-start/installation/docker)) +- **Custom server**: Update the "Recon Server URL" field above to point to your own Recon instance +- **Local instance**: If you're running Recon locally, you can also access the interactive Swagger UI at `http://localhost:9888/api/v1/` ::: - + diff --git a/src/components/SwaggerUI/index.js b/src/components/SwaggerUI/index.js index bad22d32c4..36417656dc 100644 --- a/src/components/SwaggerUI/index.js +++ b/src/components/SwaggerUI/index.js @@ -17,22 +17,66 @@ * under the License. */ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import SwaggerUI from 'swagger-ui-react'; import 'swagger-ui-react/swagger-ui.css'; import useBaseUrl from '@docusaurus/useBaseUrl'; import styles from './styles.module.css'; -export default function SwaggerUIComponent({ spec }) { +export default function SwaggerUIComponent({ spec, defaultServer }) { const specUrl = useBaseUrl(spec); - + const [serverUrl, setServerUrl] = useState(defaultServer || 'http://localhost:9888'); + const [specData, setSpecData] = useState(null); + + useEffect(() => { + // Fetch the spec and modify the servers array + fetch(specUrl) + .then(response => response.text()) + .then(text => { + // Parse YAML to JSON (simple approach for this case) + // Since swagger-ui-react can handle YAML, we'll pass the URL + // but configure servers via the spec modification + return fetch(specUrl).then(r => r.json().catch(() => { + // If JSON parsing fails, it's YAML, use the URL directly + return null; + })); + }) + .catch(() => null); + }, [specUrl]); + return (
+
+ + setServerUrl(e.target.value)} + placeholder="http://localhost:9888" + className={styles.serverInput} + /> + + (Default for Docker quick start. Change to match your Recon instance.) + +
{ + // Override the servers in the spec with the user-configured URL + const spec = system.getState().getIn(['spec', 'json']); + if (spec) { + system.specActions.updateJsonSpec({ + ...spec.toJS(), + servers: [{ url: serverUrl, description: 'Configured Recon Server' }] + }); + } + }} />
); diff --git a/src/components/SwaggerUI/styles.module.css b/src/components/SwaggerUI/styles.module.css index aa08a128ab..019009b619 100644 --- a/src/components/SwaggerUI/styles.module.css +++ b/src/components/SwaggerUI/styles.module.css @@ -22,6 +22,63 @@ margin-bottom: 2rem; } +/* Server configuration input */ +.serverConfig { + background: var(--ifm-color-primary-lightest); + border: 1px solid var(--ifm-color-primary-light); + border-radius: 8px; + padding: 20px; + margin-bottom: 30px; + display: flex; + align-items: center; + gap: 15px; + flex-wrap: wrap; +} + +[data-theme='dark'] .serverConfig { + background: rgba(150, 210, 110, 0.1); + border-color: var(--ifm-color-primary-dark); +} + +.serverLabel { + font-weight: 600; + color: var(--ifm-font-color-base); + font-size: 14px; + margin: 0; +} + +.serverInput { + flex: 1; + min-width: 300px; + padding: 8px 12px; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 14px; + font-family: var(--ifm-font-family-monospace); + color: var(--ifm-font-color-base); + background: var(--ifm-background-color); +} + +[data-theme='dark'] .serverInput { + border-color: #444; +} + +.serverInput:focus { + outline: none; + border-color: var(--ifm-color-primary); + box-shadow: 0 0 0 2px rgba(53, 117, 0, 0.1); +} + +[data-theme='dark'] .serverInput:focus { + box-shadow: 0 0 0 2px rgba(150, 210, 110, 0.2); +} + +.serverHint { + font-size: 13px; + color: var(--ifm-font-color-base); + font-style: italic; +} + /* Remove white bars and extra spacing */ .swaggerWrapper :global(.swagger-ui .information-container) { margin: 0; From 10b46ea82ee39697fbaaaa6a3ef12cd84f7a2c9b Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Mon, 26 Jan 2026 01:35:53 +0530 Subject: [PATCH 07/16] HDDS-10684.Added a rule in .yamllint.yml to ignore static/recon-api.yaml to resolve linting erros --- .yamllint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.yamllint.yml b/.yamllint.yml index 69087bcc9e..9bd2cd9228 100644 --- a/.yamllint.yml +++ b/.yamllint.yml @@ -20,7 +20,7 @@ ignore: - pnpm-lock.yaml - node_modules -- static/recon-api.yaml +- "**/recon-api.yaml" rules: anchors: enable From 85bbd6bc8e4ed7bb4bf1e89165009ff17c697c9c Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Tue, 27 Jan 2026 20:52:25 +0530 Subject: [PATCH 08/16] HDDS-10684.Fix configurable server URL, remove unused code, update broken link --- .../01-architecture/06-recon.md | 4 +++ .../02-recon/02-recon-rest-api.mdx | 2 +- src/components/SwaggerUI/index.js | 33 +++++++++---------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/docs/03-core-concepts/01-architecture/06-recon.md b/docs/03-core-concepts/01-architecture/06-recon.md index 7a98760cb4..c2e58736e0 100644 --- a/docs/03-core-concepts/01-architecture/06-recon.md +++ b/docs/03-core-concepts/01-architecture/06-recon.md @@ -52,7 +52,11 @@ Recon can integrate with any Prometheus instance configured to collected metrics ## API Reference +<<<<<<< HEAD [Link to complete API Reference](../../administrator-guide/operations/observability/recon/recon-rest-api) +======= +[Link to complete API Reference](../../05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx) +>>>>>>> a378f8564 (HDDS-10684.Fix configurable server URL, remove unused code, update broken link) ## Persisted state diff --git a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx index b1f2903f75..3079979caa 100644 --- a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx +++ b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx @@ -10,7 +10,7 @@ Ozone Recon's public **REST API** follows the [OpenAPI specification](https://ww You can test these APIs directly from this page using the "Try it out" button on each endpoint. - **Default server**: `http://localhost:9888` (matches the [Docker quick start guide](/docs/quick-start/installation/docker)) -- **Custom server**: Update the "Recon Server URL" field above to point to your own Recon instance +- **Custom server**: Update the "Recon Server URL" field below to point to your own Recon instance - **Local instance**: If you're running Recon locally, you can also access the interactive Swagger UI at `http://localhost:9888/api/v1/` ::: diff --git a/src/components/SwaggerUI/index.js b/src/components/SwaggerUI/index.js index 36417656dc..62ff8b45d4 100644 --- a/src/components/SwaggerUI/index.js +++ b/src/components/SwaggerUI/index.js @@ -17,7 +17,7 @@ * under the License. */ -import React, { useState, useEffect } from 'react'; +import React, { useState, useRef, useEffect } from 'react'; import SwaggerUI from 'swagger-ui-react'; import 'swagger-ui-react/swagger-ui.css'; import useBaseUrl from '@docusaurus/useBaseUrl'; @@ -26,23 +26,20 @@ import styles from './styles.module.css'; export default function SwaggerUIComponent({ spec, defaultServer }) { const specUrl = useBaseUrl(spec); const [serverUrl, setServerUrl] = useState(defaultServer || 'http://localhost:9888'); - const [specData, setSpecData] = useState(null); + const swaggerSystemRef = useRef(null); + // Update the server URL in Swagger whenever serverUrl changes useEffect(() => { - // Fetch the spec and modify the servers array - fetch(specUrl) - .then(response => response.text()) - .then(text => { - // Parse YAML to JSON (simple approach for this case) - // Since swagger-ui-react can handle YAML, we'll pass the URL - // but configure servers via the spec modification - return fetch(specUrl).then(r => r.json().catch(() => { - // If JSON parsing fails, it's YAML, use the URL directly - return null; - })); - }) - .catch(() => null); - }, [specUrl]); + if (swaggerSystemRef.current) { + const spec = swaggerSystemRef.current.getState().getIn(['spec', 'json']); + if (spec) { + swaggerSystemRef.current.specActions.updateJsonSpec({ + ...spec.toJS(), + servers: [{ url: serverUrl, description: 'Configured Recon Server' }] + }); + } + } + }, [serverUrl]); return (
@@ -68,7 +65,9 @@ export default function SwaggerUIComponent({ spec, defaultServer }) { defaultModelsExpandDepth={1} defaultModelExpandDepth={1} onComplete={(system) => { - // Override the servers in the spec with the user-configured URL + // Store the system reference for later updates + swaggerSystemRef.current = system; + // Set initial server URL const spec = system.getState().getIn(['spec', 'json']); if (spec) { system.specActions.updateJsonSpec({ From 530e74b4a885716586eb81b45bb6f95643d21673 Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Thu, 29 Jan 2026 15:25:23 +0530 Subject: [PATCH 09/16] HDDS-10684.added API version input in the Recon rest API --- src/components/SwaggerUI/index.js | 27 ++++++++++++++++++---- src/components/SwaggerUI/styles.module.css | 21 +++++++++++++++-- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/components/SwaggerUI/index.js b/src/components/SwaggerUI/index.js index 62ff8b45d4..54d0c55bc0 100644 --- a/src/components/SwaggerUI/index.js +++ b/src/components/SwaggerUI/index.js @@ -26,20 +26,24 @@ import styles from './styles.module.css'; export default function SwaggerUIComponent({ spec, defaultServer }) { const specUrl = useBaseUrl(spec); const [serverUrl, setServerUrl] = useState(defaultServer || 'http://localhost:9888'); + const [apiVersion, setApiVersion] = useState('v1'); const swaggerSystemRef = useRef(null); - // Update the server URL in Swagger whenever serverUrl changes + // Update the server URL in Swagger whenever serverUrl or apiVersion changes useEffect(() => { if (swaggerSystemRef.current) { const spec = swaggerSystemRef.current.getState().getIn(['spec', 'json']); if (spec) { + // Construct full URL: {serverUrl}/api/{version}/ + const baseUrl = serverUrl.endsWith('/') ? serverUrl.slice(0, -1) : serverUrl; + const fullServerUrl = `${baseUrl}/api/${apiVersion}/`; swaggerSystemRef.current.specActions.updateJsonSpec({ ...spec.toJS(), - servers: [{ url: serverUrl, description: 'Configured Recon Server' }] + servers: [{ url: fullServerUrl, description: 'Configured Recon Server' }] }); } } - }, [serverUrl]); + }, [serverUrl, apiVersion]); return (
@@ -55,6 +59,17 @@ export default function SwaggerUIComponent({ spec, defaultServer }) { placeholder="http://localhost:9888" className={styles.serverInput} /> + + setApiVersion(e.target.value)} + placeholder="v1" + className={styles.versionInput} + /> (Default for Docker quick start. Change to match your Recon instance.) @@ -67,12 +82,14 @@ export default function SwaggerUIComponent({ spec, defaultServer }) { onComplete={(system) => { // Store the system reference for later updates swaggerSystemRef.current = system; - // Set initial server URL + // Set initial server URL with API version const spec = system.getState().getIn(['spec', 'json']); if (spec) { + const baseUrl = serverUrl.endsWith('/') ? serverUrl.slice(0, -1) : serverUrl; + const fullServerUrl = `${baseUrl}/api/${apiVersion}/`; system.specActions.updateJsonSpec({ ...spec.toJS(), - servers: [{ url: serverUrl, description: 'Configured Recon Server' }] + servers: [{ url: fullServerUrl, description: 'Configured Recon Server' }] }); } }} diff --git a/src/components/SwaggerUI/styles.module.css b/src/components/SwaggerUI/styles.module.css index 019009b619..b8b99350ca 100644 --- a/src/components/SwaggerUI/styles.module.css +++ b/src/components/SwaggerUI/styles.module.css @@ -63,13 +63,30 @@ border-color: #444; } -.serverInput:focus { +.versionInput { + width: 100px; + padding: 8px 12px; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 14px; + font-family: var(--ifm-font-family-monospace); + color: var(--ifm-font-color-base); + background: var(--ifm-background-color); +} + +[data-theme='dark'] .versionInput { + border-color: #444; +} + +.serverInput:focus, +.versionInput:focus { outline: none; border-color: var(--ifm-color-primary); box-shadow: 0 0 0 2px rgba(53, 117, 0, 0.1); } -[data-theme='dark'] .serverInput:focus { +[data-theme='dark'] .serverInput:focus, +[data-theme='dark'] .versionInput:focus { box-shadow: 0 0 0 2px rgba(150, 210, 110, 0.2); } From 10d0e2e812d801e31bc9ac64786e402f4e67a27d Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Fri, 30 Jan 2026 12:52:26 +0530 Subject: [PATCH 10/16] HDDS-10684.added API version input apply buuton in the Recon rest API --- src/components/SwaggerUI/index.js | 28 ++++++++++++++++------ src/components/SwaggerUI/styles.module.css | 28 ++++++++++++++++++++++ 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/src/components/SwaggerUI/index.js b/src/components/SwaggerUI/index.js index 54d0c55bc0..a4a8506a69 100644 --- a/src/components/SwaggerUI/index.js +++ b/src/components/SwaggerUI/index.js @@ -27,23 +27,30 @@ export default function SwaggerUIComponent({ spec, defaultServer }) { const specUrl = useBaseUrl(spec); const [serverUrl, setServerUrl] = useState(defaultServer || 'http://localhost:9888'); const [apiVersion, setApiVersion] = useState('v1'); + const [appliedServerUrl, setAppliedServerUrl] = useState(defaultServer || 'http://localhost:9888'); + const [appliedApiVersion, setAppliedApiVersion] = useState('v1'); const swaggerSystemRef = useRef(null); - // Update the server URL in Swagger whenever serverUrl or apiVersion changes + // Update the server URL in Swagger only when applied values change useEffect(() => { if (swaggerSystemRef.current) { const spec = swaggerSystemRef.current.getState().getIn(['spec', 'json']); if (spec) { // Construct full URL: {serverUrl}/api/{version}/ - const baseUrl = serverUrl.endsWith('/') ? serverUrl.slice(0, -1) : serverUrl; - const fullServerUrl = `${baseUrl}/api/${apiVersion}/`; + const baseUrl = appliedServerUrl.endsWith('/') ? appliedServerUrl.slice(0, -1) : appliedServerUrl; + const fullServerUrl = `${baseUrl}/api/${appliedApiVersion}/`; swaggerSystemRef.current.specActions.updateJsonSpec({ ...spec.toJS(), servers: [{ url: fullServerUrl, description: 'Configured Recon Server' }] }); } } - }, [serverUrl, apiVersion]); + }, [appliedServerUrl, appliedApiVersion]); + + const handleApply = () => { + setAppliedServerUrl(serverUrl); + setAppliedApiVersion(apiVersion); + }; return (
@@ -70,8 +77,15 @@ export default function SwaggerUIComponent({ spec, defaultServer }) { placeholder="v1" className={styles.versionInput} /> + - (Default for Docker quick start. Change to match your Recon instance.) + (Default for Docker quick start. Change server/version and click Apply.)
Date: Tue, 3 Feb 2026 02:09:49 +0530 Subject: [PATCH 11/16] HDDS-10684.Fixed the styling issues --- .../02-recon/02-recon-rest-api.mdx | 3 +- src/components/SwaggerUI/styles.module.css | 88 ++++++++++++++++--- 2 files changed, 76 insertions(+), 15 deletions(-) diff --git a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx index 3079979caa..209ebb3fde 100644 --- a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx +++ b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx @@ -4,6 +4,8 @@ import SwaggerUI from '@site/src/components/SwaggerUI'; Ozone Recon's public **REST API** follows the [OpenAPI specification](https://www.openapis.org/), and is documented below. The docs are generated using [Swagger React UI](https://github.com/swagger-api/swagger-ui). +The API is defined in the [recon-api.yaml](/recon-api.yaml) OpenAPI specification file and is available under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0.html). + :::info **Interactive API Testing** @@ -11,7 +13,6 @@ You can test these APIs directly from this page using the "Try it out" button on - **Default server**: `http://localhost:9888` (matches the [Docker quick start guide](/docs/quick-start/installation/docker)) - **Custom server**: Update the "Recon Server URL" field below to point to your own Recon instance -- **Local instance**: If you're running Recon locally, you can also access the interactive Swagger UI at `http://localhost:9888/api/v1/` ::: diff --git a/src/components/SwaggerUI/styles.module.css b/src/components/SwaggerUI/styles.module.css index f56ef001a6..ab2ba5732a 100644 --- a/src/components/SwaggerUI/styles.module.css +++ b/src/components/SwaggerUI/styles.module.css @@ -24,8 +24,8 @@ /* Server configuration input */ .serverConfig { - background: var(--ifm-color-primary-lightest); - border: 1px solid var(--ifm-color-primary-light); + background: var(--ifm-color-primary); + border: 1px solid var(--ifm-color-primary-dark); border-radius: 8px; padding: 20px; margin-bottom: 30px; @@ -36,17 +36,21 @@ } [data-theme='dark'] .serverConfig { - background: rgba(150, 210, 110, 0.1); - border-color: var(--ifm-color-primary-dark); + background: var(--ifm-color-primary-dark); + border-color: var(--ifm-color-primary-darker); } .serverLabel { font-weight: 600; - color: var(--ifm-font-color-base); + color: #ffffff; font-size: 14px; margin: 0; } +[data-theme='dark'] .serverLabel { + color: #ffffff; +} + .serverInput { flex: 1; min-width: 300px; @@ -80,30 +84,37 @@ .applyButton { padding: 8px 20px; - background: var(--ifm-color-primary); - color: #ffffff; - border: none; + background: #ffffff; + color: var(--ifm-color-primary-darker); + border: 2px solid #ffffff; border-radius: 4px; font-size: 14px; font-weight: 600; cursor: pointer; - transition: background-color 0.2s; + transition: all 0.2s; } .applyButton:hover { - background: var(--ifm-color-primary-dark); + background: transparent; + color: #ffffff; + border-color: #ffffff; } .applyButton:active { - background: var(--ifm-color-primary-darker); + background: rgba(255, 255, 255, 0.2); + color: #ffffff; } [data-theme='dark'] .applyButton { - color: #1a1a1a; + background: #ffffff; + color: var(--ifm-color-primary-darker); + border-color: #ffffff; } [data-theme='dark'] .applyButton:hover { - background: var(--ifm-color-primary-light); + background: transparent; + color: #ffffff; + border-color: #ffffff; } .serverInput:focus, @@ -120,8 +131,14 @@ .serverHint { font-size: 13px; - color: var(--ifm-font-color-base); + color: #ffffff; font-style: italic; + opacity: 0.9; +} + +[data-theme='dark'] .serverHint { + color: #ffffff; + opacity: 0.9; } /* Remove white bars and extra spacing */ @@ -129,6 +146,7 @@ margin: 0; padding: 0; background: transparent; + display: none !important; } .swaggerWrapper :global(.swagger-ui .scheme-container) { @@ -142,6 +160,7 @@ margin: 0 0 20px 0; padding: 0; background: transparent; + display: none !important; } .swaggerWrapper :global(.swagger-ui .wrapper) { @@ -164,6 +183,46 @@ letter-spacing: -0.02em; } +/* Make API section headings more readable - match doc heading style */ +.swaggerWrapper :global(.swagger-ui .opblock-tag) { + font-family: var(--ifm-heading-font-family) !important; + font-size: 1.75rem !important; + font-weight: 700 !important; + letter-spacing: -0.02em !important; + line-height: 1.2 !important; + margin: 2rem 0 1rem 0 !important; + color: var(--ifm-font-color-base) !important; +} + +/* Style the tag section description text */ +.swaggerWrapper :global(.swagger-ui .opblock-tag-section) { + margin-bottom: 2rem; +} + +/* Style the tag description - "APIs to fetch..." text */ +.swaggerWrapper :global(.swagger-ui .opblock-tag small) { + font-family: var(--ifm-font-family-base) !important; + font-size: 1rem !important; + font-weight: 400 !important; + color: var(--ifm-color-emphasis-700) !important; + letter-spacing: normal !important; +} + +/* Make endpoint paths more readable */ +.swaggerWrapper :global(.swagger-ui .opblock-summary-path) { + font-family: var(--ifm-font-family-monospace) !important; + font-size: 1rem !important; + font-weight: 600 !important; +} + +/* Make endpoint descriptions more readable */ +.swaggerWrapper :global(.swagger-ui .opblock-summary-description) { + font-family: var(--ifm-font-family-base) !important; + font-size: 0.9375rem !important; + line-height: 1.6 !important; + color: var(--ifm-color-emphasis-800) !important; +} + /* Make main title white */ .swaggerWrapper :global(.swagger-ui .info .title) { color: #ffffff !important; @@ -219,6 +278,7 @@ padding: 0; margin: 15px 0 20px 0; box-shadow: none; + display: none !important; } .swaggerWrapper :global(.swagger-ui .scheme-container .servers-title) { From c8353c050026589ee987a8719f4d682933321496 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Tue, 17 Feb 2026 10:57:07 -0800 Subject: [PATCH 12/16] Update yamllint --- .yamllint.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.yamllint.yml b/.yamllint.yml index 9bd2cd9228..f0068012cc 100644 --- a/.yamllint.yml +++ b/.yamllint.yml @@ -21,6 +21,10 @@ ignore: - pnpm-lock.yaml - node_modules - "**/recon-api.yaml" +<<<<<<< HEAD +======= +- "**/static/docs" +>>>>>>> af434a367 (Update yamllint) rules: anchors: enable From 17790a4e9190292772e0d1d3180115653a2f0990 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Tue, 17 Feb 2026 12:21:08 -0800 Subject: [PATCH 13/16] fix link --- .../08-developer-guide/02-run/02-docker-compose.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/versioned_docs/version-2.1.0/08-developer-guide/02-run/02-docker-compose.md b/versioned_docs/version-2.1.0/08-developer-guide/02-run/02-docker-compose.md index cafe5e20e6..d981a47bb0 100644 --- a/versioned_docs/version-2.1.0/08-developer-guide/02-run/02-docker-compose.md +++ b/versioned_docs/version-2.1.0/08-developer-guide/02-run/02-docker-compose.md @@ -169,5 +169,9 @@ cd hadoop-ozone/dist/target/ozone-*-SNAPSHOT/compose/ After setting up your development cluster: +<<<<<<< HEAD 1. Explore the [Ozone CLI documentation](../../user-guide/client-interfaces/o3) +======= +1. Explore the [Ozone CLI documentation](/docs/04-user-guide/01-client-interfaces/01-o3.md) +>>>>>>> 7e42e39fb (fix link) 2. Experiment with the various compose configurations for specific use cases From 5ef803873e5adae5782a19f74ec8c346f9e3aa89 Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Wed, 18 Feb 2026 21:39:19 +0530 Subject: [PATCH 14/16] HDDS-10684.Removed the swagger ui functionality to configure server --- .../09-observability/02-recon/02-recon-rest-api.mdx | 11 +---------- src/components/SwaggerUI/styles.module.css | 2 +- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx index 209ebb3fde..293d60865b 100644 --- a/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx +++ b/docs/05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx @@ -2,17 +2,8 @@ import SwaggerUI from '@site/src/components/SwaggerUI'; -Ozone Recon's public **REST API** follows the [OpenAPI specification](https://www.openapis.org/), and is documented below. The docs are generated using [Swagger React UI](https://github.com/swagger-api/swagger-ui). +Ozone Recon's public **REST API** follows the [OpenAPI specification](https://www.openapis.org/), and is documented below. The API is defined in the [recon-api.yaml](/recon-api.yaml) OpenAPI specification file and is available under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0.html). -:::info -**Interactive API Testing** - -You can test these APIs directly from this page using the "Try it out" button on each endpoint. - -- **Default server**: `http://localhost:9888` (matches the [Docker quick start guide](/docs/quick-start/installation/docker)) -- **Custom server**: Update the "Recon Server URL" field below to point to your own Recon instance -::: - diff --git a/src/components/SwaggerUI/styles.module.css b/src/components/SwaggerUI/styles.module.css index ab2ba5732a..2f5051cfa1 100644 --- a/src/components/SwaggerUI/styles.module.css +++ b/src/components/SwaggerUI/styles.module.css @@ -29,7 +29,7 @@ border-radius: 8px; padding: 20px; margin-bottom: 30px; - display: flex; + display: none; /* Hidden until CORS is configured on Recon server */ align-items: center; gap: 15px; flex-wrap: wrap; From f59efdb710a13a33c2b2d939711f1e6401d6b433 Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Thu, 19 Feb 2026 13:10:35 +0530 Subject: [PATCH 15/16] HDDS-10684.Resolved merge conflict --- docs/03-core-concepts/01-architecture/06-recon.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/03-core-concepts/01-architecture/06-recon.md b/docs/03-core-concepts/01-architecture/06-recon.md index c2e58736e0..7a98760cb4 100644 --- a/docs/03-core-concepts/01-architecture/06-recon.md +++ b/docs/03-core-concepts/01-architecture/06-recon.md @@ -52,11 +52,7 @@ Recon can integrate with any Prometheus instance configured to collected metrics ## API Reference -<<<<<<< HEAD [Link to complete API Reference](../../administrator-guide/operations/observability/recon/recon-rest-api) -======= -[Link to complete API Reference](../../05-administrator-guide/03-operations/09-observability/02-recon/02-recon-rest-api.mdx) ->>>>>>> a378f8564 (HDDS-10684.Fix configurable server URL, remove unused code, update broken link) ## Persisted state From c2ee738b0614e58003eb750fb4d480b0197e5163 Mon Sep 17 00:00:00 2001 From: chirag goyal Date: Thu, 19 Feb 2026 13:14:02 +0530 Subject: [PATCH 16/16] HDDS-10684.Resolved merge conflict --- .yamllint.yml | 4 ---- .../08-developer-guide/02-run/02-docker-compose.md | 4 ---- 2 files changed, 8 deletions(-) diff --git a/.yamllint.yml b/.yamllint.yml index f0068012cc..45e12885a5 100644 --- a/.yamllint.yml +++ b/.yamllint.yml @@ -20,11 +20,7 @@ ignore: - pnpm-lock.yaml - node_modules -- "**/recon-api.yaml" -<<<<<<< HEAD -======= - "**/static/docs" ->>>>>>> af434a367 (Update yamllint) rules: anchors: enable diff --git a/versioned_docs/version-2.1.0/08-developer-guide/02-run/02-docker-compose.md b/versioned_docs/version-2.1.0/08-developer-guide/02-run/02-docker-compose.md index d981a47bb0..cafe5e20e6 100644 --- a/versioned_docs/version-2.1.0/08-developer-guide/02-run/02-docker-compose.md +++ b/versioned_docs/version-2.1.0/08-developer-guide/02-run/02-docker-compose.md @@ -169,9 +169,5 @@ cd hadoop-ozone/dist/target/ozone-*-SNAPSHOT/compose/ After setting up your development cluster: -<<<<<<< HEAD 1. Explore the [Ozone CLI documentation](../../user-guide/client-interfaces/o3) -======= -1. Explore the [Ozone CLI documentation](/docs/04-user-guide/01-client-interfaces/01-o3.md) ->>>>>>> 7e42e39fb (fix link) 2. Experiment with the various compose configurations for specific use cases