diff --git a/commafeed-client/package-lock.json b/commafeed-client/package-lock.json index 22abc426..0b1b6b37 100644 --- a/commafeed-client/package-lock.json +++ b/commafeed-client/package-lock.json @@ -38,7 +38,6 @@ "react-redux": "^9.2.0", "react-router-dom": "^7.7.1", "react-swipeable": "^7.0.2", - "redoc": "^2.5.0", "style-to-object": "^1.0.9", "throttle-debounce": "^5.0.2", "tinycon": "^0.6.8", @@ -729,23 +728,6 @@ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", "license": "MIT" }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", - "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@emotion/memoize": "^0.8.1" - } - }, - "node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", - "license": "MIT", - "peer": true - }, "node_modules/@emotion/memoize": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", @@ -1264,12 +1246,6 @@ "node": ">=18" } }, - "node_modules/@exodus/schemasafe": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", - "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==", - "license": "MIT" - }, "node_modules/@floating-ui/core": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz", @@ -1806,61 +1782,6 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@redocly/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js-replace": "^1.0.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@redocly/config": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.2.tgz", - "integrity": "sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==", - "license": "MIT" - }, - "node_modules/@redocly/openapi-core": { - "version": "1.34.5", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.5.tgz", - "integrity": "sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==", - "license": "MIT", - "dependencies": { - "@redocly/ajv": "^8.11.2", - "@redocly/config": "^0.22.0", - "colorette": "^1.2.0", - "https-proxy-agent": "^7.0.5", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "minimatch": "^5.0.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" - }, - "engines": { - "node": ">=18.17.0", - "npm": ">=9.5.0" - } - }, - "node_modules/@redocly/openapi-core/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@reduxjs/toolkit": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.8.2.tgz", @@ -2388,12 +2309,6 @@ "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, "node_modules/@types/mousetrap": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.15.tgz", @@ -2446,13 +2361,6 @@ "@types/react": "*" } }, - "node_modules/@types/stylis": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", - "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==", - "license": "MIT", - "peer": true - }, "node_modules/@types/throttle-debounce": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.2.tgz", @@ -2467,13 +2375,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT", - "optional": true - }, "node_modules/@types/use-sync-external-store": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", @@ -2637,6 +2538,7 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 14" @@ -2646,6 +2548,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2655,6 +2558,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -2684,6 +2588,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "devOptional": true, "license": "Python-2.0" }, "node_modules/aria-query": { @@ -2773,12 +2678,6 @@ "@babel/types": "^7.26.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2825,15 +2724,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -2928,12 +2818,6 @@ "node": ">= 0.4" } }, - "node_modules/call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "license": "MIT" - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2956,16 +2840,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001727", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", @@ -3053,12 +2927,6 @@ "fsevents": "~2.3.1" } }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" - }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -3101,6 +2969,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -3115,12 +2984,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -3135,6 +3006,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -3147,6 +3019,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -3183,6 +3056,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -3195,12 +3069,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "devOptional": true, "license": "MIT" }, "node_modules/colors": { @@ -3250,18 +3119,6 @@ "node": ">=18" } }, - "node_modules/core-js": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz", - "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==", - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -3304,28 +3161,6 @@ "node": ">= 8" } }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "license": "ISC", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-to-react-native": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", - "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -3408,11 +3243,6 @@ "dev": true, "license": "MIT" }, - "node_modules/decko": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz", - "integrity": "sha512-m8FnyHXV1QX+S1cl+KPFDIl6NMkxtKsy6+U/aYyjrOqWMuwAwYWu7ePqrsUHtDR5Y8Yk2pi/KIDSgF+vT4cPOQ==" - }, "node_modules/deep-eql": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", @@ -3489,15 +3319,6 @@ "csstype": "^3.0.2" } }, - "node_modules/dompurify": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", - "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", - "license": "(MPL-2.0 OR Apache-2.0)", - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -3607,12 +3428,6 @@ "node": ">= 0.4" } }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "license": "MIT" - }, "node_modules/esbuild": { "version": "0.25.8", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", @@ -3659,6 +3474,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -3692,12 +3508,6 @@ "@types/estree": "^1.0.0" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" - }, "node_modules/expect-type": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", @@ -3714,30 +3524,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", - "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.1.1" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3777,12 +3563,6 @@ } } }, - "node_modules/foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", - "license": "MIT" - }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -3854,6 +3634,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -4046,16 +3827,11 @@ "node": ">= 14" } }, - "node_modules/http2-client": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", - "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==", - "license": "MIT" - }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, "license": "MIT", "dependencies": { "agent-base": "^7.1.2", @@ -4228,6 +4004,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4395,15 +4172,6 @@ "jiti": "bin/jiti.js" } }, - "node_modules/js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/js-sha256": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.10.1.tgz", @@ -4420,6 +4188,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "devOptional": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -4486,21 +4255,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "license": "MIT" }, - "node_modules/json-pointer": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", - "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", - "license": "MIT", - "dependencies": { - "foreach": "^2.0.4" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -4599,12 +4353,6 @@ "yallist": "^3.0.2" } }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "license": "MIT" - }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", @@ -4626,24 +4374,6 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", - "license": "MIT" - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -4734,67 +4464,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mobx": { - "version": "6.13.7", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.13.7.tgz", - "integrity": "sha512-aChaVU/DO5aRPmk1GX8L+whocagUUpBQqoPtJk+cm7UOXUk87J4PeWCh6nNmTTIfEhiR9DI/+FnA8dln/hTK7g==", - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mobx" - } - }, - "node_modules/mobx-react": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-9.2.0.tgz", - "integrity": "sha512-dkGWCx+S0/1mfiuFfHRH8D9cplmwhxOV5CkXMp38u6rQGG2Pv3FWYztS0M7ncR6TyPRQKaTG/pnitInoYE9Vrw==", - "license": "MIT", - "dependencies": { - "mobx-react-lite": "^4.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mobx" - }, - "peerDependencies": { - "mobx": "^6.9.0", - "react": "^16.8.0 || ^17 || ^18 || ^19" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/mobx-react-lite": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.1.0.tgz", - "integrity": "sha512-QEP10dpHHBeQNv1pks3WnHRCem2Zp636lq54M2nKO2Sarr13pL4u6diQXf65yzXUn0mkk18SyIDCm9UOJYTi1w==", - "license": "MIT", - "dependencies": { - "use-sync-external-store": "^1.4.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mobx" - }, - "peerDependencies": { - "mobx": "^6.9.0", - "react": "^16.8.0 || ^17 || ^18 || ^19" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, "node_modules/monaco-editor": { "version": "0.52.2", "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.2.tgz", @@ -4823,6 +4492,7 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, "funding": [ { "type": "github", @@ -4837,69 +4507,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch-h2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", - "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", - "license": "MIT", - "dependencies": { - "http2-client": "^1.2.5" - }, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-readfiles": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", - "integrity": "sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==", - "license": "MIT", - "dependencies": { - "es6-promise": "^3.2.1" - } - }, "node_modules/node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", @@ -4954,103 +4561,6 @@ "dev": true, "license": "MIT" }, - "node_modules/oas-kit-common": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", - "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", - "license": "BSD-3-Clause", - "dependencies": { - "fast-safe-stringify": "^2.0.7" - } - }, - "node_modules/oas-linter": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", - "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@exodus/schemasafe": "^1.0.0-rc.2", - "should": "^13.2.1", - "yaml": "^1.10.0" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/oas-linter/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/oas-resolver": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", - "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", - "license": "BSD-3-Clause", - "dependencies": { - "node-fetch-h2": "^2.3.0", - "oas-kit-common": "^1.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - }, - "bin": { - "resolve": "resolve.js" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/oas-resolver/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/oas-schema-walker": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", - "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==", - "license": "BSD-3-Clause", - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/oas-validator": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", - "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", - "license": "BSD-3-Clause", - "dependencies": { - "call-me-maybe": "^1.0.1", - "oas-kit-common": "^1.0.8", - "oas-linter": "^3.2.2", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "reftools": "^1.1.9", - "should": "^13.2.1", - "yaml": "^1.10.0" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/oas-validator/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5094,17 +4604,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/openapi-sampler": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.6.1.tgz", - "integrity": "sha512-s1cIatOqrrhSj2tmJ4abFYZQK6l5v+V4toO5q1Pa0DyN8mtyqy2I+Qrj5W9vOELEtybIMQs/TBZGVO/DtTFK8w==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "fast-xml-parser": "^4.5.0", - "json-pointer": "0.6.2" - } - }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -5192,12 +4691,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "license": "MIT" - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -5267,12 +4760,6 @@ "node": ">= 14.16" } }, - "node_modules/perfect-scrollbar": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.6.tgz", - "integrity": "sha512-rixgxw3SxyJbCaSpo1n35A/fwI1r2rdwMKOTCg/AcG+xOEyZcE8UHVjpZMFCVImzsFoCZeJTT+M/rdEIQYO2nw==", - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5292,15 +4779,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/pofile": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/pofile/-/pofile-1.1.4.tgz", @@ -5308,54 +4786,6 @@ "dev": true, "license": "MIT" }, - "node_modules/polished": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", - "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.17.8" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT", - "peer": true - }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -5394,15 +4824,6 @@ "license": "MIT", "peer": true }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -5721,19 +5142,6 @@ "react": "^16.8.3 || ^17 || ^18 || ^19.0.0 || ^19.0.0-rc" } }, - "node_modules/react-tabs": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-6.1.0.tgz", - "integrity": "sha512-6QtbTRDKM+jA/MZTTefvigNxo0zz+gnBTVFw2CFVvq+f2BuH0nF0vDLNClL045nuTAdOoK/IL1vTP0ZLX0DAyQ==", - "license": "MIT", - "dependencies": { - "clsx": "^2.0.0", - "prop-types": "^15.5.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0" - } - }, "node_modules/react-textarea-autosize": { "version": "8.5.9", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz", @@ -5809,46 +5217,6 @@ "node": ">=8" } }, - "node_modules/redoc": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.5.0.tgz", - "integrity": "sha512-NpYsOZ1PD9qFdjbLVBZJWptqE+4Y6TkUuvEOqPUmoH7AKOmPcE+hYjotLxQNTqVoWL4z0T2uxILmcc8JGDci+Q==", - "license": "MIT", - "dependencies": { - "@redocly/openapi-core": "^1.4.0", - "classnames": "^2.3.2", - "decko": "^1.2.0", - "dompurify": "^3.2.4", - "eventemitter3": "^5.0.1", - "json-pointer": "^0.6.2", - "lunr": "^2.3.9", - "mark.js": "^8.11.1", - "marked": "^4.3.0", - "mobx-react": "^9.1.1", - "openapi-sampler": "^1.5.0", - "path-browserify": "^1.0.1", - "perfect-scrollbar": "^1.5.5", - "polished": "^4.2.2", - "prismjs": "^1.29.0", - "prop-types": "^15.8.1", - "react-tabs": "^6.0.2", - "slugify": "~1.4.7", - "stickyfill": "^1.1.1", - "swagger2openapi": "^7.0.8", - "url-template": "^2.0.8" - }, - "engines": { - "node": ">=6.9", - "npm": ">=3.0.0" - }, - "peerDependencies": { - "core-js": "^3.1.4", - "mobx": "^6.0.4", - "react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5" - } - }, "node_modules/redux": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", @@ -5864,28 +5232,11 @@ "redux": "^5.0.0" } }, - "node_modules/reftools": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", - "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==", - "license": "BSD-3-Clause", - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6111,13 +5462,6 @@ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", "license": "MIT" }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT", - "peer": true - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6141,60 +5485,6 @@ "node": ">=8" } }, - "node_modules/should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "license": "MIT", - "dependencies": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" - } - }, - "node_modules/should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "license": "MIT", - "dependencies": { - "should-type": "^1.4.0" - } - }, - "node_modules/should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", - "license": "MIT", - "dependencies": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } - }, - "node_modules/should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", - "license": "MIT" - }, - "node_modules/should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "license": "MIT", - "dependencies": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" - } - }, - "node_modules/should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", - "license": "MIT" - }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -6215,15 +5505,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slugify": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", - "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -6237,6 +5518,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -6262,11 +5544,6 @@ "dev": true, "license": "MIT" }, - "node_modules/stickyfill": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stickyfill/-/stickyfill-1.1.1.tgz", - "integrity": "sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==" - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -6407,18 +5684,6 @@ "dev": true, "license": "MIT" }, - "node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, "node_modules/style-to-object": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", @@ -6428,56 +5693,6 @@ "inline-style-parser": "0.2.4" } }, - "node_modules/styled-components": { - "version": "6.1.19", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.19.tgz", - "integrity": "sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@emotion/is-prop-valid": "1.2.2", - "@emotion/unitless": "0.8.1", - "@types/stylis": "4.2.5", - "css-to-react-native": "3.2.0", - "csstype": "3.1.3", - "postcss": "8.4.49", - "shallowequal": "1.1.0", - "stylis": "4.3.2", - "tslib": "2.6.2" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0" - } - }, - "node_modules/styled-components/node_modules/@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", - "license": "MIT", - "peer": true - }, - "node_modules/styled-components/node_modules/stylis": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", - "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", - "license": "MIT", - "peer": true - }, - "node_modules/styled-components/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "license": "0BSD", - "peer": true - }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", @@ -6509,42 +5724,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/swagger2openapi": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", - "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", - "license": "BSD-3-Clause", - "dependencies": { - "call-me-maybe": "^1.0.1", - "node-fetch": "^2.6.1", - "node-fetch-h2": "^2.3.0", - "node-readfiles": "^0.2.0", - "oas-kit-common": "^1.0.8", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "oas-validator": "^5.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - }, - "bin": { - "boast": "boast.js", - "oas-validate": "oas-validate.js", - "swagger2openapi": "swagger2openapi.js" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/swagger2openapi/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -6884,18 +6063,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/uri-js-replace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", - "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", - "license": "MIT" - }, - "node_modules/url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", - "license": "BSD" - }, "node_modules/use-callback-ref": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", @@ -7610,6 +6777,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -7637,16 +6805,11 @@ "node": ">= 14.6" } }, - "node_modules/yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "license": "Apache-2.0" - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -7665,6 +6828,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -7674,12 +6838,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -7694,6 +6860,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" diff --git a/commafeed-client/package.json b/commafeed-client/package.json index 29eeb055..a0505ec5 100644 --- a/commafeed-client/package.json +++ b/commafeed-client/package.json @@ -45,7 +45,6 @@ "react-redux": "^9.2.0", "react-router-dom": "^7.7.1", "react-swipeable": "^7.0.2", - "redoc": "^2.5.0", "style-to-object": "^1.0.9", "throttle-debounce": "^5.0.2", "tinycon": "^0.6.8", diff --git a/commafeed-client/src/App.tsx b/commafeed-client/src/App.tsx index e6eff476..7b4c4ddd 100644 --- a/commafeed-client/src/App.tsx +++ b/commafeed-client/src/App.tsx @@ -3,7 +3,8 @@ import { I18nProvider } from "@lingui/react" import { MantineProvider } from "@mantine/core" import { ModalsProvider } from "@mantine/modals" import { Notifications } from "@mantine/notifications" -import React, { useEffect, useState } from "react" +import type React from "react" +import { useEffect, useState } from "react" import { isSafari } from "react-device-detect" import ReactGA from "react-ga4" import { HashRouter, Navigate, Route, Routes, useLocation, useNavigate } from "react-router-dom" @@ -72,9 +73,6 @@ function Providers(props: { children: React.ReactNode }) { ) } -// api documentation page is very large, load only on-demand -const ApiDocumentationPage = React.lazy(async () => await import("@/pages/app/ApiDocumentationPage")) - function AppRoutes() { const sidebarVisible = useAppSelector(state => state.tree.sidebarVisible) @@ -85,7 +83,6 @@ function AppRoutes() { } /> } /> } /> - } /> } sidebar={} sidebarVisible={sidebarVisible} />}> } /> diff --git a/commafeed-client/src/app/redirect/thunks.ts b/commafeed-client/src/app/redirect/thunks.ts index 7c799881..9bcb3a9d 100644 --- a/commafeed-client/src/app/redirect/thunks.ts +++ b/commafeed-client/src/app/redirect/thunks.ts @@ -6,7 +6,9 @@ export const redirectToLogin = createAppAsyncThunk("redirect/login", (_, thunkAp export const redirectToRegistration = createAppAsyncThunk("redirect/register", (_, thunkApi) => thunkApi.dispatch(redirectTo("/register"))) -export const redirectToApiDocumentation = createAppAsyncThunk("redirect/api", (_, thunkApi) => thunkApi.dispatch(redirectTo("/api"))) +export const redirectToApiDocumentation = createAppAsyncThunk("redirect/api", () => { + window.location.href = "api-documentation/" +}) export const redirectToSelectedSource = createAppAsyncThunk("redirect/selectedSource", (_, thunkApi) => { const { source } = thunkApi.getState().entries diff --git a/commafeed-client/src/pages/app/ApiDocumentationPage.tsx b/commafeed-client/src/pages/app/ApiDocumentationPage.tsx deleted file mode 100644 index 2e640797..00000000 --- a/commafeed-client/src/pages/app/ApiDocumentationPage.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { Box } from "@mantine/core" -import { HistoryService, RedocStandalone } from "redoc" - -// disable redoc url sync because it causes issues with hashrouter -Object.defineProperty(HistoryService.prototype, "replace", { - value: () => { - // do nothing - }, -}) - -function ApiDocumentationPage() { - return ( - // force white background because documentation does not support dark theme - - - - ) -} - -export default ApiDocumentationPage diff --git a/commafeed-client/vite.config.ts b/commafeed-client/vite.config.ts index ba6f0ec3..ca1675cc 100644 --- a/commafeed-client/vite.config.ts +++ b/commafeed-client/vite.config.ts @@ -37,7 +37,8 @@ export default defineConfig(() => ({ "/rest": "http://localhost:8083", "/next": "http://localhost:8083", "/ws": "ws://localhost:8083", - "/openapi.json": "http://localhost:8083", + "/openapi": "http://localhost:8083", + "/api-documentation": "http://localhost:8083", "/custom_css.css": "http://localhost:8083", "/custom_js.js": "http://localhost:8083", "/j_security_check": "http://localhost:8083", diff --git a/commafeed-server/pom.xml b/commafeed-server/pom.xml index 95ed9783..0a3b990c 100644 --- a/commafeed-server/pom.xml +++ b/commafeed-server/pom.xml @@ -15,7 +15,6 @@ 3.24.5 7.0 2.1.0 - 2.2.34 h2 @@ -292,30 +291,6 @@ false - - io.swagger.core.v3 - swagger-maven-plugin-jakarta - ${swagger.version} - - - ${project.build.directory}/classes/META-INF/resources - JSONANDYAML - - com.commafeed.frontend.resource - com.commafeed.frontend.model - com.commafeed.frontend.model.request - - true - - - - compile - - resolve - - - - org.apache.maven.plugins maven-checkstyle-plugin @@ -442,17 +417,16 @@ io.quarkus quarkus-liquibase + + io.quarkus + quarkus-smallrye-openapi + io.dropwizard.metrics metrics-json 4.2.33 - - io.swagger.core.v3 - swagger-annotations - ${swagger.version} - io.github.openfeign.querydsl querydsl-apt diff --git a/commafeed-server/src/main/java/com/commafeed/NativeImageClasses.java b/commafeed-server/src/main/java/com/commafeed/NativeImageClasses.java index 3bfc9df9..985f03f2 100644 --- a/commafeed-server/src/main/java/com/commafeed/NativeImageClasses.java +++ b/commafeed-server/src/main/java/com/commafeed/NativeImageClasses.java @@ -10,6 +10,7 @@ import com.codahale.metrics.Timer; import io.quarkus.runtime.annotations.RegisterForReflection; @RegisterForReflection( + registerFullHierarchy = true, targets = { // metrics MetricRegistry.class, Meter.class, Gauge.class, Counter.class, Timer.class, Histogram.class, diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/Category.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/Category.java index 63a0604f..7c2d2276 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/Category.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/Category.java @@ -4,9 +4,9 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import io.quarkus.runtime.annotations.RegisterForReflection; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; @SuppressWarnings("serial") @@ -15,7 +15,7 @@ import lombok.Data; @RegisterForReflection public class Category implements Serializable { - @Schema(description = "category id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "category id", required = true) private String id; @Schema(description = "parent category id") @@ -24,18 +24,18 @@ public class Category implements Serializable { @Schema(description = "parent category name") private String parentName; - @Schema(description = "category id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "category id", required = true) private String name; - @Schema(description = "category children categories", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "category children categories", required = true) private List children = new ArrayList<>(); - @Schema(description = "category feeds", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "category feeds", required = true) private List feeds = new ArrayList<>(); - @Schema(description = "whether the category is expanded or collapsed", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "whether the category is expanded or collapsed", required = true) private boolean expanded; - @Schema(description = "position of the category in the list", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "position of the category in the list", required = true) private int position; } \ No newline at end of file diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/Entries.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/Entries.java index dc61b4cf..1a4e6383 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/Entries.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/Entries.java @@ -4,9 +4,9 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import io.quarkus.runtime.annotations.RegisterForReflection; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; @SuppressWarnings("serial") @@ -15,22 +15,22 @@ import lombok.Data; @RegisterForReflection public class Entries implements Serializable { - @Schema(description = "name of the feed or the category requested", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "name of the feed or the category requested", required = true) private String name; @Schema(description = "error or warning message") private String message; - @Schema(description = "times the server tried to refresh the feed and failed", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "times the server tried to refresh the feed and failed", required = true) private int errorCount; @Schema(description = "URL of the website, extracted from the feed, only filled if querying for feed entries, not category entries") private String feedLink; - @Schema(description = "list generation timestamp", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "list generation timestamp", required = true) private long timestamp; - @Schema(description = "if the query has more elements", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "if the query has more elements", required = true) private boolean hasMore; @Schema(description = "the requested offset") @@ -39,12 +39,12 @@ public class Entries implements Serializable { @Schema(description = "the requested limit") private int limit; - @Schema(description = "list of entries", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "list of entries", required = true) private List entries = new ArrayList<>(); @Schema( description = "if true, the unread flag was ignored in the request, all entries are returned regardless of their read status", - requiredMode = RequiredMode.REQUIRED) + required = true) private boolean ignoredReadStatus; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/Entry.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/Entry.java index 491be40a..d6e8f69f 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/Entry.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/Entry.java @@ -7,6 +7,8 @@ import java.util.Date; import java.util.List; import org.apache.commons.lang3.StringUtils; +import org.eclipse.microprofile.openapi.annotations.enums.SchemaType; +import org.eclipse.microprofile.openapi.annotations.media.Schema; import com.commafeed.backend.feed.FeedUtils; import com.commafeed.backend.model.FeedEntry; @@ -20,8 +22,6 @@ import com.rometools.rome.feed.synd.SyndEntry; import com.rometools.rome.feed.synd.SyndEntryImpl; import io.quarkus.runtime.annotations.RegisterForReflection; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; @SuppressWarnings("serial") @@ -30,22 +30,22 @@ import lombok.Data; @RegisterForReflection public class Entry implements Serializable { - @Schema(description = "entry id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "entry id", required = true) private String id; - @Schema(description = "entry guid", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "entry guid", required = true) private String guid; - @Schema(description = "entry title", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "entry title", required = true) private String title; - @Schema(description = "entry content", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "entry content", required = true) private String content; @Schema(description = "comma-separated list of categories") private String categories; - @Schema(description = "whether entry content and title are rtl", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "whether entry content and title are rtl", required = true) private boolean rtl; @Schema(description = "entry author") @@ -69,40 +69,40 @@ public class Entry implements Serializable { @Schema(description = "entry media thumbnail height, if any") private Integer mediaThumbnailHeight; - @Schema(description = "entry publication date", type = "number", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "entry publication date", type = SchemaType.INTEGER, required = true) private Instant date; - @Schema(description = "entry insertion date in the database", type = "number", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "entry insertion date in the database", type = SchemaType.INTEGER, required = true) private Instant insertedDate; - @Schema(description = "feed id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "feed id", required = true) private String feedId; - @Schema(description = "feed name", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "feed name", required = true) private String feedName; - @Schema(description = "this entry's feed url", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "this entry's feed url", required = true) private String feedUrl; - @Schema(description = "this entry's website url", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "this entry's website url", required = true) private String feedLink; - @Schema(description = "The favicon url to use for this feed", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "The favicon url to use for this feed", required = true) private String iconUrl; - @Schema(description = "entry url", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "entry url", required = true) private String url; - @Schema(description = "read status", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "read status", required = true) private boolean read; - @Schema(description = "starred status", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "starred status", required = true) private boolean starred; - @Schema(description = "whether the entry is still markable (old entry statuses are discarded)", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "whether the entry is still markable (old entry statuses are discarded)", required = true) private boolean markable; - @Schema(description = "tags", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "tags", required = true) private List tags; public static Entry build(FeedEntryStatus status, boolean proxyImages) { diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/FeedInfo.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/FeedInfo.java index f908782b..97f85ca6 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/FeedInfo.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/FeedInfo.java @@ -2,9 +2,9 @@ package com.commafeed.frontend.model; import java.io.Serializable; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import io.quarkus.runtime.annotations.RegisterForReflection; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; @SuppressWarnings("serial") @@ -13,10 +13,10 @@ import lombok.Data; @RegisterForReflection public class FeedInfo implements Serializable { - @Schema(description = "url", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "url", required = true) private String url; - @Schema(description = "title", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "title", required = true) private String title; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/ServerInfo.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/ServerInfo.java index 5e557859..72b91ed6 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/ServerInfo.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/ServerInfo.java @@ -2,9 +2,9 @@ package com.commafeed.frontend.model; import java.io.Serializable; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import io.quarkus.runtime.annotations.RegisterForReflection; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; @SuppressWarnings("serial") @@ -16,34 +16,34 @@ public class ServerInfo implements Serializable { @Schema private String announcement; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private String version; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private String gitCommit; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean allowRegistrations; @Schema private String googleAnalyticsCode; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean smtpEnabled; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean demoAccountEnabled; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean websocketEnabled; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private long websocketPingInterval; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private long treeReloadInterval; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private long forceRefreshCooldownDuration; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/Settings.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/Settings.java index 644cdcd3..4d31c5a0 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/Settings.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/Settings.java @@ -2,14 +2,14 @@ package com.commafeed.frontend.model; import java.io.Serializable; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import com.commafeed.backend.model.UserSettings.IconDisplayMode; import com.commafeed.backend.model.UserSettings.ReadingMode; import com.commafeed.backend.model.UserSettings.ReadingOrder; import com.commafeed.backend.model.UserSettings.ScrollMode; import io.quarkus.runtime.annotations.RegisterForReflection; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; @SuppressWarnings("serial") @@ -18,19 +18,19 @@ import lombok.Data; @RegisterForReflection public class Settings implements Serializable { - @Schema(description = "user's preferred language, english if none", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "user's preferred language, english if none", required = true) private String language; - @Schema(description = "user reads all entries or unread entries only", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "user reads all entries or unread entries only", required = true) private ReadingMode readingMode; - @Schema(description = "user reads entries in ascending or descending order", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "user reads entries in ascending or descending order", required = true) private ReadingOrder readingOrder; - @Schema(description = "user wants category and feeds with no unread entries shown", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "user wants category and feeds with no unread entries shown", required = true) private boolean showRead; - @Schema(description = "In expanded view, scroll through entries mark them as read", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "In expanded view, scroll through entries mark them as read", required = true) private boolean scrollMarks; @Schema(description = "user's custom css for the website") @@ -39,72 +39,70 @@ public class Settings implements Serializable { @Schema(description = "user's custom js for the website") private String customJs; - @Schema(description = "user's preferred scroll speed when navigating between entries", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "user's preferred scroll speed when navigating between entries", required = true) private int scrollSpeed; - @Schema(description = "whether to scroll to the selected entry", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "whether to scroll to the selected entry", required = true) private ScrollMode scrollMode; - @Schema(description = "number of entries to keep above the selected entry when scrolling", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "number of entries to keep above the selected entry when scrolling", required = true) private int entriesToKeepOnTopWhenScrolling; - @Schema(description = "whether to show the star icon in the header of entries", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "whether to show the star icon in the header of entries", required = true) private IconDisplayMode starIconDisplayMode; - @Schema(description = "whether to show the external link icon in the header of entries", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "whether to show the external link icon in the header of entries", required = true) private IconDisplayMode externalLinkIconDisplayMode; - @Schema(description = "ask for confirmation when marking all entries as read", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "ask for confirmation when marking all entries as read", required = true) private boolean markAllAsReadConfirmation; - @Schema( - description = "navigate to the next unread category or feed after marking all entries as read", - requiredMode = RequiredMode.REQUIRED) + @Schema(description = "navigate to the next unread category or feed after marking all entries as read", required = true) private boolean markAllAsReadNavigateToNextUnread; - @Schema(description = "show commafeed's own context menu on right click", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "show commafeed's own context menu on right click", required = true) private boolean customContextMenu; - @Schema(description = "on mobile, show action buttons at the bottom of the screen", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "on mobile, show action buttons at the bottom of the screen", required = true) private boolean mobileFooter; - @Schema(description = "show unread count in the title", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "show unread count in the title", required = true) private boolean unreadCountTitle; - @Schema(description = "show unread count in the favicon", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "show unread count in the favicon", required = true) private boolean unreadCountFavicon; @Schema(description = "primary theme color to use in the UI") private String primaryColor; - @Schema(description = "sharing settings", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "sharing settings", required = true) private SharingSettings sharingSettings = new SharingSettings(); @Schema(description = "User sharing settings") @Data public static class SharingSettings implements Serializable { - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean email; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean gmail; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean facebook; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean twitter; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean tumblr; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean pocket; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean instapaper; - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private boolean buffer; } } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/Subscription.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/Subscription.java index 23450a9c..7822c071 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/Subscription.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/Subscription.java @@ -3,14 +3,15 @@ package com.commafeed.frontend.model; import java.io.Serializable; import java.time.Instant; +import org.eclipse.microprofile.openapi.annotations.enums.SchemaType; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import com.commafeed.backend.feed.FeedUtils; import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.FeedSubscription; import io.quarkus.runtime.annotations.RegisterForReflection; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; @SuppressWarnings("serial") @@ -19,34 +20,34 @@ import lombok.Data; @RegisterForReflection public class Subscription implements Serializable { - @Schema(description = "subscription id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "subscription id", required = true) private Long id; - @Schema(description = "subscription name", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "subscription name", required = true) private String name; @Schema(description = "error message while fetching the feed") private String message; - @Schema(description = "error count", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "error count", required = true) private int errorCount; - @Schema(description = "last time the feed was refreshed", type = "number") + @Schema(description = "last time the feed was refreshed", type = SchemaType.INTEGER) private Instant lastRefresh; - @Schema(description = "next time the feed refresh is planned, null if refresh is already queued", type = "number") + @Schema(description = "next time the feed refresh is planned, null if refresh is already queued", type = SchemaType.INTEGER) private Instant nextRefresh; - @Schema(description = "this subscription's feed url", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "this subscription's feed url", required = true) private String feedUrl; - @Schema(description = "this subscription's website url", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "this subscription's website url", required = true) private String feedLink; - @Schema(description = "The favicon url to use for this feed", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "The favicon url to use for this feed", required = true) private String iconUrl; - @Schema(description = "unread count", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "unread count", required = true) private long unread; @Schema(description = "category id") @@ -55,7 +56,7 @@ public class Subscription implements Serializable { @Schema(description = "position of the subscription's in the list") private int position; - @Schema(description = "date of the newest item", type = "number") + @Schema(description = "date of the newest item", type = SchemaType.INTEGER) private Instant newestItemTime; @Schema(description = "JEXL string evaluated on new entries to mark them as read if they do not match") diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/UnreadCount.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/UnreadCount.java index f4182984..52925df7 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/UnreadCount.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/UnreadCount.java @@ -3,8 +3,10 @@ package com.commafeed.frontend.model; import java.io.Serializable; import java.time.Instant; +import org.eclipse.microprofile.openapi.annotations.enums.SchemaType; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import io.quarkus.runtime.annotations.RegisterForReflection; -import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @SuppressWarnings("serial") @@ -19,7 +21,7 @@ public class UnreadCount implements Serializable { @Schema private long unreadCount; - @Schema(type = "number") + @Schema(type = SchemaType.INTEGER) private Instant newestItemTime; public UnreadCount() { diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/UserModel.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/UserModel.java index f666a6e2..437fb506 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/UserModel.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/UserModel.java @@ -3,9 +3,10 @@ package com.commafeed.frontend.model; import java.io.Serializable; import java.time.Instant; +import org.eclipse.microprofile.openapi.annotations.enums.SchemaType; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import io.quarkus.runtime.annotations.RegisterForReflection; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; @SuppressWarnings("serial") @@ -14,10 +15,10 @@ import lombok.Data; @RegisterForReflection public class UserModel implements Serializable { - @Schema(description = "user id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "user id", required = true) private Long id; - @Schema(description = "user name", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "user name", required = true) private String name; @Schema(description = "user email, if any") @@ -29,19 +30,19 @@ public class UserModel implements Serializable { @Schema(description = "user password, never returned by the api") private String password; - @Schema(description = "account status", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "account status", required = true) private boolean enabled; - @Schema(description = "account creation date", type = "number") + @Schema(description = "account creation date", type = SchemaType.INTEGER) private Instant created; - @Schema(description = "last login date", type = "number") + @Schema(description = "last login date", type = SchemaType.INTEGER) private Instant lastLogin; - @Schema(description = "user is admin", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "user is admin", required = true) private boolean admin; - @Schema(description = "user last force refresh", type = "number") + @Schema(description = "user last force refresh", type = SchemaType.INTEGER) private Instant lastForceRefresh; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/AddCategoryRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/AddCategoryRequest.java index 68ee932b..e7e98e49 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/AddCategoryRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/AddCategoryRequest.java @@ -5,8 +5,8 @@ import java.io.Serializable; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -14,7 +14,7 @@ import lombok.Data; @Data public class AddCategoryRequest implements Serializable { - @Schema(description = "name", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "name", required = true) @NotEmpty @Size(max = 128) private String name; diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/AdminSaveUserRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/AdminSaveUserRequest.java index 59365c0c..8faf458d 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/AdminSaveUserRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/AdminSaveUserRequest.java @@ -2,8 +2,8 @@ package com.commafeed.frontend.model.request; import java.io.Serializable; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -14,7 +14,7 @@ public class AdminSaveUserRequest implements Serializable { @Schema(description = "user id") private Long id; - @Schema(description = "user name", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "user name", required = true) private String name; @Schema(description = "user email, if any") @@ -23,9 +23,9 @@ public class AdminSaveUserRequest implements Serializable { @Schema(description = "user password") private String password; - @Schema(description = "account status", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "account status", required = true) private boolean enabled; - @Schema(description = "user is admin", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "user is admin", required = true) private boolean admin; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/CategoryModificationRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/CategoryModificationRequest.java index dc4aecbf..c4a93605 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/CategoryModificationRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/CategoryModificationRequest.java @@ -4,8 +4,8 @@ import java.io.Serializable; import jakarta.validation.constraints.Size; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -13,7 +13,7 @@ import lombok.Data; @Data public class CategoryModificationRequest implements Serializable { - @Schema(description = "id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "id", required = true) private Long id; @Schema(description = "new name, null if not changed") diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/CollapseRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/CollapseRequest.java index 52991d01..1fafcd3e 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/CollapseRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/CollapseRequest.java @@ -2,8 +2,8 @@ package com.commafeed.frontend.model.request; import java.io.Serializable; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -11,10 +11,10 @@ import lombok.Data; @Data public class CollapseRequest implements Serializable { - @Schema(description = "category id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "category id", required = true) private Long id; - @Schema(description = "collapse", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "collapse", required = true) private boolean collapse; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/FeedInfoRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/FeedInfoRequest.java index e16e9d5e..d7b40108 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/FeedInfoRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/FeedInfoRequest.java @@ -5,8 +5,8 @@ import java.io.Serializable; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -14,7 +14,7 @@ import lombok.Data; @Data public class FeedInfoRequest implements Serializable { - @Schema(description = "feed url", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "feed url", required = true) @NotEmpty @Size(max = 4096) private String url; diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/FeedModificationRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/FeedModificationRequest.java index f6b24854..6c9ad741 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/FeedModificationRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/FeedModificationRequest.java @@ -4,8 +4,8 @@ import java.io.Serializable; import jakarta.validation.constraints.Size; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -13,7 +13,7 @@ import lombok.Data; @Data public class FeedModificationRequest implements Serializable { - @Schema(description = "id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "id", required = true) private Long id; @Schema(description = "new name, null if not changed") diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/IDRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/IDRequest.java index 90f60c75..cf821989 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/IDRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/IDRequest.java @@ -2,8 +2,8 @@ package com.commafeed.frontend.model.request; import java.io.Serializable; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -11,7 +11,7 @@ import lombok.Data; @Data public class IDRequest implements Serializable { - @Schema(requiredMode = RequiredMode.REQUIRED) + @Schema(required = true) private Long id; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/MarkRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/MarkRequest.java index cee69182..eed7af70 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/MarkRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/MarkRequest.java @@ -6,8 +6,8 @@ import java.util.List; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -15,31 +15,26 @@ import lombok.Data; @Data public class MarkRequest implements Serializable { - @Schema(description = "entry id, category id, 'all' or 'starred'", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "entry id, category id, 'all' or 'starred'", required = true) @NotEmpty @Size(max = 128) private String id; - @Schema(description = "mark as read or unread", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "mark as read or unread", required = true) private boolean read; - @Schema(description = "mark only entries older than this", requiredMode = RequiredMode.NOT_REQUIRED) + @Schema(description = "mark only entries older than this") private Long olderThan; @Schema( - description = "pass the timestamp you got from the entry list to avoid marking entries that may have been fetched in the mean time and never displayed", - requiredMode = RequiredMode.NOT_REQUIRED) + description = "pass the timestamp you got from the entry list to avoid marking entries that may have been fetched in the mean time and never displayed") private Long insertedBefore; - @Schema( - description = "only mark read if a feed has these keywords in the title or rss content", - requiredMode = RequiredMode.NOT_REQUIRED) + @Schema(description = "only mark read if a feed has these keywords in the title or rss content") @Size(max = 128) private String keywords; - @Schema( - description = "if marking a category or 'all', exclude those subscriptions from the marking", - requiredMode = RequiredMode.NOT_REQUIRED) + @Schema(description = "if marking a category or 'all', exclude those subscriptions from the marking") private List excludedSubscriptions; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/MultipleMarkRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/MultipleMarkRequest.java index 8b7b2cc2..afe132af 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/MultipleMarkRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/MultipleMarkRequest.java @@ -5,8 +5,8 @@ import java.util.List; import jakarta.validation.Valid; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -14,7 +14,7 @@ import lombok.Data; @Data public class MultipleMarkRequest implements Serializable { - @Schema(description = "list of mark requests", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "list of mark requests", required = true) private List<@Valid MarkRequest> requests; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/PasswordResetRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/PasswordResetRequest.java index f69770b4..68ad861e 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/PasswordResetRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/PasswordResetRequest.java @@ -6,8 +6,8 @@ import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -15,7 +15,7 @@ import lombok.Data; @Schema public class PasswordResetRequest implements Serializable { - @Schema(description = "email address for password recovery", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "email address for password recovery", required = true) @Email @NotEmpty @Size(max = 255) diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/ProfileModificationRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/ProfileModificationRequest.java index 1936d931..e7a1e270 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/ProfileModificationRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/ProfileModificationRequest.java @@ -5,17 +5,17 @@ import java.io.Serializable; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import com.commafeed.security.password.ValidPassword; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; @SuppressWarnings("serial") @Schema(description = "Profile modification request") @Data public class ProfileModificationRequest implements Serializable { - @Schema(description = "current user password, required to change profile data", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "current user password, required to change profile data", required = true) @NotEmpty @Size(max = 128) private String currentPassword; diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/RegistrationRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/RegistrationRequest.java index 9cf83623..64f148e7 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/RegistrationRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/RegistrationRequest.java @@ -6,10 +6,10 @@ import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import com.commafeed.security.password.ValidPassword; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; @SuppressWarnings("serial") @@ -17,17 +17,17 @@ import lombok.Data; @Schema public class RegistrationRequest implements Serializable { - @Schema(description = "username, between 3 and 32 characters", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "username, between 3 and 32 characters", required = true) @NotEmpty @Size(min = 3, max = 32) private String name; - @Schema(description = "password, minimum 6 characters", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "password, minimum 6 characters", required = true) @NotEmpty @ValidPassword private String password; - @Schema(description = "email address for password recovery", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "email address for password recovery", required = true) @Email @NotEmpty @Size(max = 255) diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/StarRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/StarRequest.java index f32a119d..651d30ad 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/StarRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/StarRequest.java @@ -5,8 +5,8 @@ import java.io.Serializable; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -14,15 +14,15 @@ import lombok.Data; @Data public class StarRequest implements Serializable { - @Schema(description = "id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "id", required = true) @NotEmpty @Size(max = 128) private String id; - @Schema(description = "feed id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "feed id", required = true) private Long feedId; - @Schema(description = "starred or not", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "starred or not", required = true) private boolean starred; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/SubscribeRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/SubscribeRequest.java index f2056bff..1a73f6af 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/SubscribeRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/SubscribeRequest.java @@ -5,8 +5,8 @@ import java.io.Serializable; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -14,12 +14,12 @@ import lombok.Data; @Data public class SubscribeRequest implements Serializable { - @Schema(description = "url of the feed", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "url of the feed", required = true) @NotEmpty @Size(max = 4096) private String url; - @Schema(description = "name of the feed for the user", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "name of the feed for the user", required = true) @NotEmpty @Size(max = 128) private String title; diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/TagRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/TagRequest.java index b04bf3d6..d5905cc1 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/TagRequest.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/TagRequest.java @@ -3,8 +3,8 @@ package com.commafeed.frontend.model.request; import java.io.Serializable; import java.util.List; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + import lombok.Data; @SuppressWarnings("serial") @@ -12,10 +12,10 @@ import lombok.Data; @Data public class TagRequest implements Serializable { - @Schema(description = "entry id", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "entry id", required = true) private Long entryId; - @Schema(description = "tags", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "tags", required = true) private List tags; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/AdminREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/AdminREST.java index e403e217..199c38db 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/AdminREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/AdminREST.java @@ -1,6 +1,8 @@ package com.commafeed.frontend.resource; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; @@ -18,6 +20,9 @@ import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response.Status; import org.apache.commons.lang3.StringUtils; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; import com.codahale.metrics.MetricRegistry; import com.commafeed.CommaFeedConstants; @@ -36,13 +41,6 @@ import com.commafeed.security.Roles; import com.google.common.base.Preconditions; import com.google.common.collect.Sets; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.ArraySchema; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @Path("/rest/admin") @@ -120,11 +118,8 @@ public class AdminREST { @Path("/user/get/{id}") @GET @Transactional - @Operation( - summary = "Get user information", - description = "Get user information", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = UserModel.class))) }) - public Response adminGetUser(@Parameter(description = "user id", required = true) @PathParam("id") Long id) { + @Operation(summary = "Get user information", description = "Get user information") + public UserModel adminGetUser(@Parameter(description = "user id", required = true) @PathParam("id") Long id) { Preconditions.checkNotNull(id); User u = userDAO.findById(id); UserModel userModel = new UserModel(); @@ -133,17 +128,14 @@ public class AdminREST { userModel.setEmail(u.getEmail()); userModel.setEnabled(!u.isDisabled()); userModel.setAdmin(userRoleDAO.findAll(u).stream().anyMatch(r -> r.getRole() == Role.ADMIN)); - return Response.ok(userModel).build(); + return userModel; } @Path("/user/getAll") @GET @Transactional - @Operation( - summary = "Get all users", - description = "Get all users", - responses = { @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = UserModel.class)))) }) - public Response adminGetUsers() { + @Operation(summary = "Get all users", description = "Get all users") + public List adminGetUsers() { Map users = new HashMap<>(); for (UserRole role : userRoleDAO.findAll()) { User u = role.getUser(); @@ -162,7 +154,7 @@ public class AdminREST { userModel.setAdmin(true); } } - return Response.ok(users.values()).build(); + return new ArrayList<>(users.values()); } @Path("/user/delete") diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java index a914eb6a..474ea7b2 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java @@ -28,6 +28,12 @@ import jakarta.ws.rs.core.UriInfo; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.media.Content; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; +import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.dao.FeedCategoryDAO; @@ -60,13 +66,6 @@ import com.rometools.rome.feed.synd.SyndFeed; import com.rometools.rome.feed.synd.SyndFeedImpl; import com.rometools.rome.io.SyndFeedOutput; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.ArraySchema; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -95,10 +94,11 @@ public class CategoryREST { @Path("/entries") @GET @Transactional - @Operation( - summary = "Get category entries", - description = "Get a list of category entries", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = Entries.class))) }) + @Operation(summary = "Get category entries", description = "Get a list of category entries") + @APIResponse( + responseCode = "200", + content = { @Content(mediaType = "application/json", schema = @Schema(implementation = Entries.class)) }) + @APIResponse(responseCode = "404", description = "category not found") public Response getCategoryEntries( @Parameter(description = "id of the category, 'all' or 'starred'", required = true) @QueryParam("id") String id, @Parameter( @@ -269,11 +269,8 @@ public class CategoryREST { @Path("/add") @POST @Transactional - @Operation( - summary = "Add a category", - description = "Add a new feed category", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = Long.class))) }) - public Response addCategory(@Valid @Parameter(required = true) AddCategoryRequest req) { + @Operation(summary = "Add a category", description = "Add a new feed category") + public Long addCategory(@Valid @Parameter(required = true) AddCategoryRequest req) { Preconditions.checkNotNull(req); Preconditions.checkNotNull(req.getName()); @@ -290,7 +287,7 @@ public class CategoryREST { cat.setParent(parent); } feedCategoryDAO.persist(cat); - return Response.ok(cat.getId()).build(); + return cat.getId(); } @POST @@ -390,23 +387,18 @@ public class CategoryREST { @GET @Path("/unreadCount") @Transactional - @Operation( - summary = "Get unread count for feed subscriptions", - responses = { @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = UnreadCount.class)))) }) - public Response getUnreadCount() { + @Operation(summary = "Get unread count for feed subscriptions") + public List getUnreadCount() { User user = authenticationContext.getCurrentUser(); Map unreadCount = feedSubscriptionService.getUnreadCount(user); - return Response.ok(Lists.newArrayList(unreadCount.values())).build(); + return Lists.newArrayList(unreadCount.values()); } @GET @Path("/get") @Transactional - @Operation( - summary = "Get root category", - description = "Get all categories and subscriptions of the user", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = Category.class))) }) - public Response getRootCategory() { + @Operation(summary = "Get root category", description = "Get all categories and subscriptions of the user") + public Category getRootCategory() { User user = authenticationContext.getCurrentUser(); List categories = feedCategoryDAO.findAll(user); @@ -417,7 +409,7 @@ public class CategoryREST { root.setId("all"); root.setName("All"); - return Response.ok(root).build(); + return root; } private Category buildCategory(Long id, List categories, List subscriptions, diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/EntryREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/EntryREST.java index 35544eed..8fad1a25 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/EntryREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/EntryREST.java @@ -14,6 +14,10 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; + import com.commafeed.backend.dao.FeedEntryTagDAO; import com.commafeed.backend.model.User; import com.commafeed.backend.service.FeedEntryService; @@ -26,9 +30,6 @@ import com.commafeed.security.AuthenticationContext; import com.commafeed.security.Roles; import com.google.common.base.Preconditions; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @Path("/rest/entry") diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java index 9f8113b3..c7b861e4 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java @@ -29,6 +29,12 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.SystemUtils; import org.apache.hc.core5.http.HttpStatus; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.media.Content; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; +import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; import org.jboss.resteasy.reactive.Cache; import org.jboss.resteasy.reactive.RestForm; @@ -80,12 +86,6 @@ import com.rometools.rome.io.FeedException; import com.rometools.rome.io.SyndFeedOutput; import com.rometools.rome.io.WireFeedOutput; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -131,10 +131,11 @@ public class FeedREST { @Path("/entries") @GET @Transactional - @Operation( - summary = "Get feed entries", - description = "Get a list of feed entries", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = Entries.class))) }) + @Operation(summary = "Get feed entries", description = "Get a list of feed entries") + @APIResponse( + responseCode = "200", + content = { @Content(mediaType = "application/json", schema = @Schema(implementation = Entries.class)) }) + @APIResponse(responseCode = "404", description = "feed not found") public Response getFeedEntries(@Parameter(description = "id of the feed", required = true) @QueryParam("id") String id, @Parameter( description = "all entries or only unread ones", @@ -251,10 +252,11 @@ public class FeedREST { @POST @Path("/fetch") @Transactional - @Operation( - summary = "Fetch a feed", - description = "Fetch a feed by its url", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = FeedInfo.class))) }) + @Operation(summary = "Fetch a feed", description = "Fetch a feed by its url") + @APIResponse( + responseCode = "200", + content = { @Content(mediaType = "application/json", schema = @Schema(implementation = FeedInfo.class)) }) + @APIResponse(responseCode = "404", description = "feed not found") public Response fetchFeed(@Valid @Parameter(description = "feed url", required = true) FeedInfoRequest req) { Preconditions.checkNotNull(req); Preconditions.checkNotNull(req.getUrl()); @@ -309,9 +311,11 @@ public class FeedREST { @GET @Path("/get/{id}") @Transactional - @Operation( - summary = "get feed", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = Subscription.class))) }) + @Operation(summary = "get feed") + @APIResponse( + responseCode = "200", + content = { @Content(mediaType = "application/json", schema = @Schema(implementation = Subscription.class)) }) + @APIResponse(responseCode = "404", description = "feed not found") public Response getFeed(@Parameter(description = "user id", required = true) @PathParam("id") Long id) { Preconditions.checkNotNull(id); @@ -345,10 +349,10 @@ public class FeedREST { @POST @Path("/subscribe") @Transactional - @Operation( - summary = "Subscribe to a feed", - description = "Subscribe to a feed", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = Long.class))) }) + @Operation(summary = "Subscribe to a feed", description = "Subscribe to a feed") + @APIResponse( + responseCode = "200", + content = { @Content(mediaType = "application/json", schema = @Schema(implementation = Long.class)) }) public Response subscribe(@Valid @Parameter(description = "subscription request", required = true) SubscribeRequest req) { Preconditions.checkNotNull(req); Preconditions.checkNotNull(req.getTitle()); diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/OpenAPI.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/OpenAPI.java index 8d396faa..41e18678 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/OpenAPI.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/OpenAPI.java @@ -1,16 +1,18 @@ package com.commafeed.frontend.resource; -import io.swagger.v3.oas.annotations.OpenAPIDefinition; -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; -import io.swagger.v3.oas.annotations.info.Info; -import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import io.swagger.v3.oas.annotations.security.SecurityScheme; -import io.swagger.v3.oas.annotations.servers.Server; +import jakarta.ws.rs.core.Application; + +import org.eclipse.microprofile.openapi.annotations.OpenAPIDefinition; +import org.eclipse.microprofile.openapi.annotations.enums.SecuritySchemeType; +import org.eclipse.microprofile.openapi.annotations.info.Info; +import org.eclipse.microprofile.openapi.annotations.security.SecurityRequirement; +import org.eclipse.microprofile.openapi.annotations.security.SecurityScheme; +import org.eclipse.microprofile.openapi.annotations.servers.Server; @OpenAPIDefinition( - info = @Info(title = "CommaFeed API"), + info = @Info(title = "CommaFeed API", version = "1.0.0"), servers = { @Server(description = "CommaFeed API", url = "/") }, security = { @SecurityRequirement(name = "basicAuth") }) -@SecurityScheme(name = "basicAuth", type = SecuritySchemeType.HTTP, scheme = "basic") -public class OpenAPI { +@SecurityScheme(securitySchemeName = "basicAuth", type = SecuritySchemeType.HTTP, scheme = "basic") +public class OpenAPI extends Application { } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/ServerREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/ServerREST.java index e2776f0e..cd005c69 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/ServerREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/ServerREST.java @@ -13,6 +13,10 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response.Status; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; + import com.commafeed.CommaFeedConfiguration; import com.commafeed.CommaFeedVersion; import com.commafeed.backend.HttpGetter; @@ -21,12 +25,6 @@ import com.commafeed.backend.feed.ImageProxyUrl; import com.commafeed.frontend.model.ServerInfo; import com.commafeed.security.Roles; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @Path("/rest/server") @@ -46,11 +44,8 @@ public class ServerREST { @GET @PermitAll @Transactional - @Operation( - summary = "Get server infos", - description = "Get server infos", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = ServerInfo.class))) }) - public Response getServerInfos() { + @Operation(summary = "Get server infos", description = "Get server infos") + public ServerInfo getServerInfos() { ServerInfo infos = new ServerInfo(); infos.setAnnouncement(config.announcement().orElse(null)); infos.setVersion(version.getVersion()); @@ -63,7 +58,7 @@ public class ServerREST { infos.setWebsocketPingInterval(config.websocket().pingInterval().toMillis()); infos.setTreeReloadInterval(config.websocket().treeReloadInterval().toMillis()); infos.setForceRefreshCooldownDuration(config.feedRefresh().forceRefreshCooldownDuration().toMillis()); - return Response.ok(infos).build(); + return infos; } @Path("/proxy") diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java index f646a31f..b190efee 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java @@ -28,6 +28,9 @@ import jakarta.ws.rs.core.UriInfo; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.apache.hc.core5.net.URIBuilder; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; import com.commafeed.CommaFeedConfiguration; import com.commafeed.CommaFeedConstants; @@ -56,12 +59,6 @@ import com.commafeed.security.AuthenticationContext; import com.commafeed.security.Roles; import com.google.common.base.Preconditions; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -88,11 +85,8 @@ public class UserREST { @Path("/settings") @GET @Transactional - @Operation( - summary = "Retrieve user settings", - description = "Retrieve user settings", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = Settings.class))) }) - public Response getUserSettings() { + @Operation(summary = "Retrieve user settings", description = "Retrieve user settings") + public Settings getUserSettings() { Settings s = new Settings(); User user = authenticationContext.getCurrentUser(); @@ -155,7 +149,7 @@ public class UserREST { s.setUnreadCountTitle(false); s.setUnreadCountFavicon(true); } - return Response.ok(s).build(); + return s; } @Path("/settings") @@ -208,10 +202,8 @@ public class UserREST { @Path("/profile") @GET @Transactional - @Operation( - summary = "Retrieve user's profile", - responses = { @ApiResponse(content = @Content(schema = @Schema(implementation = UserModel.class))) }) - public Response getUserProfile() { + @Operation(summary = "Retrieve user's profile") + public UserModel getUserProfile() { User user = authenticationContext.getCurrentUser(); UserModel userModel = new UserModel(); @@ -226,7 +218,7 @@ public class UserREST { userModel.setAdmin(true); } } - return Response.ok(userModel).build(); + return userModel; } @Path("/profile") diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java index af07a1e6..140b5c9f 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java @@ -27,6 +27,7 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MultivaluedMap; import jakarta.ws.rs.core.UriInfo; +import org.eclipse.microprofile.openapi.annotations.Operation; import org.jboss.resteasy.reactive.server.multipart.FormValue; import org.jboss.resteasy.reactive.server.multipart.MultipartFormDataInput; @@ -51,7 +52,6 @@ import com.commafeed.frontend.resource.fever.FeverResponse.FeverFeedGroup; import com.commafeed.frontend.resource.fever.FeverResponse.FeverGroup; import com.commafeed.frontend.resource.fever.FeverResponse.FeverItem; -import io.swagger.v3.oas.annotations.Hidden; import lombok.RequiredArgsConstructor; /** @@ -70,7 +70,6 @@ import lombok.RequiredArgsConstructor; @Produces(MediaType.APPLICATION_JSON) @RequiredArgsConstructor @Singleton -@Hidden public class FeverREST { private static final String PATH = "/user/{userId}{optionalTrailingFever : (/fever)?}{optionalTrailingSlash : (/)?}"; @@ -91,6 +90,7 @@ public class FeverREST { @Path(PATH) @POST @Transactional + @Operation(hidden = true) public FeverResponse formUrlencoded(@Context UriInfo uri, @PathParam("userId") Long userId, MultivaluedMap form) { Map params = new HashMap<>(); uri.getQueryParameters().forEach((k, v) -> params.put(k, v.get(0))); @@ -103,6 +103,7 @@ public class FeverREST { @Path(PATH) @POST @Transactional + @Operation(hidden = true) public FeverResponse noForm(@Context UriInfo uri, @PathParam("userId") Long userId) { Map params = new HashMap<>(); uri.getQueryParameters().forEach((k, v) -> params.put(k, v.get(0))); @@ -114,6 +115,7 @@ public class FeverREST { @Path(PATH) @GET @Transactional + @Operation(hidden = true) public FeverResponse get(@Context UriInfo uri, @PathParam("userId") Long userId) { Map params = new HashMap<>(); uri.getQueryParameters().forEach((k, v) -> params.put(k, v.get(0))); @@ -126,6 +128,7 @@ public class FeverREST { @Path(PATH) @POST @Transactional + @Operation(hidden = true) public FeverResponse formData(@Context UriInfo uri, @PathParam("userId") Long userId, MultipartFormDataInput form) { Map params = new HashMap<>(); uri.getQueryParameters().forEach((k, v) -> params.put(k, v.get(0))); diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java index 6c79ff83..8d62408b 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java @@ -6,6 +6,8 @@ import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; +import org.eclipse.microprofile.openapi.annotations.Operation; + import com.commafeed.backend.dao.UserSettingsDAO; import com.commafeed.backend.model.User; import com.commafeed.backend.model.UserSettings; @@ -24,6 +26,7 @@ public class CustomCssServlet { @GET @Transactional + @Operation(hidden = true) public String get() { User user = authenticationContext.getCurrentUser(); if (user == null) { diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/CustomJsServlet.java b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/CustomJsServlet.java index 9ff4ad4b..6c76cf3a 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/CustomJsServlet.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/CustomJsServlet.java @@ -6,6 +6,8 @@ import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; +import org.eclipse.microprofile.openapi.annotations.Operation; + import com.commafeed.backend.dao.UserSettingsDAO; import com.commafeed.backend.model.User; import com.commafeed.backend.model.UserSettings; @@ -24,6 +26,7 @@ public class CustomJsServlet { @GET @Transactional + @Operation(hidden = true) public String get() { User user = authenticationContext.getCurrentUser(); if (user == null) { diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java index cffb4a67..c2fe7ddc 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java @@ -12,6 +12,7 @@ import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.UriInfo; import org.eclipse.microprofile.config.inject.ConfigProperty; +import org.eclipse.microprofile.openapi.annotations.Operation; @Path("/logout") @PermitAll @@ -27,6 +28,7 @@ public class LogoutServlet { } @GET + @Operation(hidden = true) public Response get() { NewCookie removeCookie = new NewCookie.Builder(cookieName).maxAge(0).expiry(Date.from(Instant.EPOCH)).path("/").build(); return Response.temporaryRedirect(uri.getBaseUri()).cookie(removeCookie).build(); diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java index a56790be..816aad69 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java @@ -13,6 +13,7 @@ import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.UriInfo; import org.apache.commons.lang3.StringUtils; +import org.eclipse.microprofile.openapi.annotations.Operation; import com.commafeed.backend.dao.FeedCategoryDAO; import com.commafeed.backend.dao.FeedEntryStatusDAO; @@ -42,6 +43,7 @@ public class NextUnreadServlet { @GET @Transactional + @Operation(hidden = true) public Response get(@QueryParam("category") String categoryId, @QueryParam("order") @DefaultValue("desc") ReadingOrder order) { User user = authenticationContext.getCurrentUser(); if (user == null) { diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/RobotsTxtDisallowAllServlet.java b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/RobotsTxtDisallowAllServlet.java index 4abd5e3d..43cf286a 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/RobotsTxtDisallowAllServlet.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/RobotsTxtDisallowAllServlet.java @@ -9,6 +9,7 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import org.apache.hc.core5.http.HttpStatus; +import org.eclipse.microprofile.openapi.annotations.Operation; import com.commafeed.CommaFeedConfiguration; @@ -24,6 +25,7 @@ public class RobotsTxtDisallowAllServlet { private final CommaFeedConfiguration config; @GET + @Operation(hidden = true) public Response get() { if (config.hideFromWebCrawlers()) { return Response.ok("User-agent: *\nDisallow: /").build(); diff --git a/commafeed-server/src/main/resources/application.properties b/commafeed-server/src/main/resources/application.properties index e28b20d5..fa58c73a 100644 --- a/commafeed-server/src/main/resources/application.properties +++ b/commafeed-server/src/main/resources/application.properties @@ -10,7 +10,7 @@ quarkus.http.filter.index-html.header."Cache-Control"=no-cache quarkus.http.filter.index-html.matches=/ ## make sure the openapi documentation is always up to date quarkus.http.filter.openapi.header."Cache-Control"=no-cache -quarkus.http.filter.openapi.matches=/openapi[.](json|yaml) +quarkus.http.filter.openapi.matches=/openapi ## make sure /next always redirects to the next unread entry quarkus.http.filter.next.header."Cache-Control"=no-cache quarkus.http.filter.next.matches=/next @@ -32,6 +32,11 @@ quarkus.websocket.dispatch-to-worker=true quarkus.liquibase.change-log=migrations.xml quarkus.liquibase.migrate-at-start=true +# openapi +quarkus.smallrye-openapi.path=/openapi +quarkus.swagger-ui.path=/api-documentation +quarkus.swagger-ui.always-include=true + # shutdown quarkus.shutdown.timeout=5s diff --git a/commafeed-server/src/test/java/com/commafeed/e2e/DocumentationIT.java b/commafeed-server/src/test/java/com/commafeed/e2e/DocumentationIT.java index 5c7b3c0e..4f55c6b7 100644 --- a/commafeed-server/src/test/java/com/commafeed/e2e/DocumentationIT.java +++ b/commafeed-server/src/test/java/com/commafeed/e2e/DocumentationIT.java @@ -20,8 +20,8 @@ class DocumentationIT { @Test void documentationAvailable() { Page page = context.newPage(); - page.navigate("http://localhost:8085/#/api"); - PlaywrightAssertions.assertThat(page.getByText("Download OpenAPI specification:")).isVisible(); + page.navigate("http://localhost:8085/api-documentation"); + PlaywrightAssertions.assertThat(page.getByText("CommaFeed API 1.0.0 OAS")).isVisible(); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/CompressionIT.java b/commafeed-server/src/test/java/com/commafeed/integration/CompressionIT.java index 1a458b90..70ed88cd 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/CompressionIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/CompressionIT.java @@ -12,7 +12,7 @@ import io.restassured.RestAssured; class CompressionIT { @ParameterizedTest - @ValueSource(strings = { "/rest/server/get", "/openapi.json" }) + @ValueSource(strings = { "/rest/server/get", "/" }) void servedWithCompression(String path) { RestAssured.given().when().get(path).then().statusCode(200).header(HttpHeaders.CONTENT_ENCODING, "gzip"); } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/StaticFilesIT.java b/commafeed-server/src/test/java/com/commafeed/integration/StaticFilesIT.java index be27caec..145b3d3a 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/StaticFilesIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/StaticFilesIT.java @@ -10,7 +10,7 @@ import io.restassured.RestAssured; class StaticFilesIT { @ParameterizedTest - @ValueSource(strings = { "/", "/openapi.json", "/openapi.yaml" }) + @ValueSource(strings = { "/", "/openapi" }) void servedWithoutCache(String path) { RestAssured.given().when().get(path).then().statusCode(200).header("Cache-Control", "no-cache"); }