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");
}