diff --git a/docusaurus-asgardeo/.gitignore b/docusaurus-asgardeo/.gitignore new file mode 100644 index 0000000000..784d699c9b --- /dev/null +++ b/docusaurus-asgardeo/.gitignore @@ -0,0 +1,7 @@ +.docusaurus +.generated-docs +node_modules +.cache-loader +build +*.log +.DS_Store diff --git a/docusaurus-asgardeo/docusaurus.config.js b/docusaurus-asgardeo/docusaurus.config.js new file mode 100644 index 0000000000..ff210653d9 --- /dev/null +++ b/docusaurus-asgardeo/docusaurus.config.js @@ -0,0 +1,129 @@ +// @ts-check +import { themes as prismThemes } from 'prism-react-renderer'; + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: 'Asgardeo', + tagline: 'Asgardeo Learning Center', + favicon: 'assets/images/asgardeo-favicon.svg', + url: 'https://wso2.com', + baseUrl: '/asgardeo/docs/', + organizationName: 'wso2', + projectName: 'docs-is', + trailingSlash: true, + onBrokenLinks: 'warn', + + i18n: { + defaultLocale: 'en', + locales: ['en'], + }, + + markdown: { + format: 'detect', + }, + + presets: [ + [ + '@docusaurus/preset-classic', + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + path: '.generated-docs', + routeBasePath: '/', + sidebarPath: './sidebars.js', + editUrl: 'https://github.com/wso2/docs-is/edit/master/en/asgardeo/docs/', + showLastUpdateTime: false, + breadcrumbs: true, + }, + blog: false, + theme: { + customCss: './src/css/custom.css', + }, + }), + ], + ], + + stylesheets: [ + '/asgardeo/docs/assets/libs/fontawesome-free-6.4.2-web/css/all.min.css', + ], + + scripts: [ + '/asgardeo/docs/assets/js/redoc.standalone.js', + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + image: 'assets/images/asgardeo-docs-logo-dark.svg', + navbar: { + logo: { + alt: 'Asgardeo', + src: 'assets/images/asgardeo-docs-logo-dark.svg', + srcDark: 'assets/images/asgardeo-docs-logo.svg', + }, + items: [ + { + href: 'https://github.com/wso2/docs-is', + label: 'GitHub', + position: 'right', + }, + ], + }, + footer: { + style: 'light', + links: [ + { + title: 'Docs', + items: [ + { label: 'Get Started', to: '/get-started' }, + { label: 'Guides', to: '/guides' }, + { label: 'APIs', to: '/apis' }, + { label: 'References', to: '/references' }, + ], + }, + { + title: 'Community', + items: [ + { label: 'Discord', href: 'https://discord.com/invite/wso2' }, + { label: 'GitHub', href: 'https://github.com/wso2' }, + { label: 'YouTube', href: 'https://www.youtube.com/user/WSO2TechFlicks' }, + { label: 'X (Twitter)', href: 'https://twitter.com/intent/follow?screen_name=wso2' }, + ], + }, + { + title: 'Support', + items: [ + { label: 'Stack Overflow', href: 'https://stackoverflow.com/questions/tagged/wso2-asgardeo' }, + { label: 'Send us an email', href: 'mailto:asgardeo-help@wso2.com' }, + ], + }, + { + title: 'More', + items: [ + { label: 'Asgardeo Console', href: 'https://console.asgardeo.io/' }, + { label: 'WSO2', href: 'https://wso2.com/' }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} WSO2 LLC. All Rights Reserved.`, + }, + prism: { + theme: prismThemes.github, + darkTheme: prismThemes.dracula, + additionalLanguages: ['java', 'bash', 'yaml', 'json'], + }, + colorMode: { + defaultMode: 'light', + disableSwitch: false, + respectPrefersColorScheme: true, + }, + docs: { + sidebar: { + hideable: true, + autoCollapseCategories: false, + }, + }, + }), +}; + +export default config; diff --git a/docusaurus-asgardeo/package-lock.json b/docusaurus-asgardeo/package-lock.json new file mode 100644 index 0000000000..de5925e50e --- /dev/null +++ b/docusaurus-asgardeo/package-lock.json @@ -0,0 +1,18432 @@ +{ + "name": "asgardeo-docs-docusaurus", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "asgardeo-docs-docusaurus", + "version": "0.1.0", + "dependencies": { + "@docusaurus/core": "^3.10.1", + "@docusaurus/preset-classic": "^3.10.1", + "clsx": "^2.1.1", + "nunjucks": "^3.2.4", + "prism-react-renderer": "^2.4.1", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "^3.10.1", + "@docusaurus/types": "^3.10.1" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.18.0.tgz", + "integrity": "sha512-8siuLG+FIns1AjZ/g2SDVwHz9S+ObacDQISEJvS8XsNei1zl3FXqfqQrBpmrG7ACWCyesXHbicMJtvRbg00FEw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.19.8", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.8.tgz", + "integrity": "sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.19.8", + "@algolia/autocomplete-shared": "1.19.8" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.19.8", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.8.tgz", + "integrity": "sha512-ZvJWO8ZZJDpc1LNM2TTBdmQsZBLMR4rU5iNR2OYvEeFBiaf/0ESnRSSLQbryarJY4SVxtoz6A2ZtDMNM+iQEAA==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.19.8" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.19.8", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.8.tgz", + "integrity": "sha512-h5hf2t8ejF6vlOgvLaZzQbWs5SyH2z4PAWygNAvvD/2RI29hdQ54ldUGwqVuj9Srs+n8XUKTPUqb7fvhBhQrnQ==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.52.0.tgz", + "integrity": "sha512-wtwPgyPmO7b7sQPVgoK29c1VpfS08DnnJCmxX/oU1pV2DlMRJCzQcLN7JSloYpodyKHwM8+9wOzlAM0co3TDmA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.52.0.tgz", + "integrity": "sha512-9KY36bRl4AH7RjqSeDDOKnjsz4IxQFBEOB8/fWmEbdQe+Isbs5jGzVJu9NEPQ1Tgwxlf8Uf07Swj3jZyMNUZ2g==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.52.0.tgz", + "integrity": "sha512-3a/qM3dzJqqfTx7Yrw7uGQ98I3Q0rDfb4Vkv0wEzko96l7YQMxfBVz/VbLq2N+c59GweYv6Vhp8mPeqnWJSITw==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.52.0.tgz", + "integrity": "sha512-Rki7ACbMcvbQW0BuM84x9dkGHY47ABmv4jU6tYssat2k02p3mIUms2YOLUAMeknhmnFsj6lb6ZzOXdMWMyc1sA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.52.0.tgz", + "integrity": "sha512-96s4Uzc3kk+/f4jJXIVVGWP5XlngOGNQ1x6hW9AT59pOixHlOs5tqJg+ZUS/GQ6h/iYP0ceQcmxDQeLyCLTaDQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.52.0.tgz", + "integrity": "sha512-lqeycNpSPe5Qa0OUWpejVvYQjQWV5nQuLT0a4aq7XzRAvCxprV/6Lf841EygdD2nrFnuS58ok7Au1uOtXzpnkg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.52.0.tgz", + "integrity": "sha512-ly1wETVGRo30cx61O7fetESN+ElL9c9K+bD/AVgnT1ar4c6v+/Yqjrhdtu6Fm4D0s4NZP081Isf6tunH1wUXHg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", + "license": "MIT" + }, + "node_modules/@algolia/ingestion": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.52.0.tgz", + "integrity": "sha512-U4EeTvgmluRjj39ykZSAd5X+a6LD5m7/mcOWDmB7hqm1R6QY0yT8jLxpNVEjYhzgEN5hcDGW6X67EWQY8KiYGQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.52.0.tgz", + "integrity": "sha512-FCPnDcILfpTE94u7BVlV4DmnSV5wE3+j25EEF+3dYPrVzkVCSoAHs318oWDGxnxsAgiL4HpL12Jc4XHmw9shpA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.52.0.tgz", + "integrity": "sha512-br3DO7n4N8CXwTRbZS0MnB4WQ9YHfNjCwkCEzVR/wek/qNTDQKDb0nROmkFaNZ8ucUqUVKZi074dbwMwRDlK8Q==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.52.0.tgz", + "integrity": "sha512-b0T/Ca2c9KyEslKsVrGZvbe1UrrKKSdfXhBZ2pbpKahFUzJfziRZ0urbOm7V65O0tO/jwU+Lo/+bIiiyhzGt8w==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.52.0.tgz", + "integrity": "sha512-ozBT8J/mtD4H4IAojw8QPirlcL2gHrI1BGuZ4/ZXXO/rTE1yQ4VIPJj4mTTbwo4FbkS1MoJsD/DsrqLzhnc4/g==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.52.0.tgz", + "integrity": "sha512-gyyWcLD22tnabmoit4iukCXuoRc5HYJuUjPSEa8a0D/f/NlRafpWi52AlAaa4Uu/rsl7saHsJFTNjTptWbu2+A==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.3.tgz", + "integrity": "sha512-RpLYy2sb51oNLjuu1iD3bwBqCBWUzjO0ocp+iaCP/lJtb2CPLcnC2Fftw+4sAzaMELGeWTgExSKADbdo0GFVzA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.29.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.3.tgz", + "integrity": "sha512-SRS46DFR4HqzUzCVgi90/xMoL+zeBDBvWdKYXSEzh79kXswNFEglUpMKxR04//dPqwYXWUBJ3mpUd933ru9Kmg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", + "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-syntax-jsx": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.3.tgz", + "integrity": "sha512-ySZypNLAIH1ClygLDQzVMoGQRViATnkHkYYV6TcNDz+8+jwZCdsguGvsb3EY5d9wyWyhmF1iSuFM0Yh5XPnqSA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", + "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.28.0", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", + "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/postcss-alpha-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz", + "integrity": "sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz", + "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz", + "integrity": "sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-function-display-p3-linear": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz", + "integrity": "sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-function": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz", + "integrity": "sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz", + "integrity": "sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-content-alt-text": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz", + "integrity": "sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-contrast-color-function": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz", + "integrity": "sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-exponential-functions": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", + "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", + "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz", + "integrity": "sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz", + "integrity": "sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz", + "integrity": "sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz", + "integrity": "sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-initial": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", + "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-light-dark-function": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz", + "integrity": "sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", + "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overflow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", + "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overscroll-behavior": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", + "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-resize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", + "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", + "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-minmax": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", + "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", + "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", + "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", + "integrity": "sha512-TQUGBuRvxdc7TgNSTevYqrL8oItxiwPDixk20qCB5me/W8uF7BPbhRrAvFuhEoywQp/woRsUZ6SJ+sU5idZAIA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz", + "integrity": "sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-position-area-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-position-area-property/-/postcss-position-area-property-1.0.0.tgz", + "integrity": "sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz", + "integrity": "sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-property-rule-prelude-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-property-rule-prelude-list/-/postcss-property-rule-prelude-list-1.0.0.tgz", + "integrity": "sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-random-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", + "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz", + "integrity": "sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", + "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-sign-functions": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", + "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", + "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-syntax-descriptor-syntax-production": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-syntax-descriptor-syntax-production/-/postcss-syntax-descriptor-syntax-production-1.0.1.tgz", + "integrity": "sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-system-ui-font-family": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-system-ui-font-family/-/postcss-system-ui-font-family-1.0.0.tgz", + "integrity": "sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz", + "integrity": "sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", + "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", + "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/utilities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", + "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docsearch/core": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.6.3.tgz", + "integrity": "sha512-rUOujwIpxJRgD7+kicVsI3D5sqBvdiRTquzWBpTEXZs8ZXfGbfzpus5HqumaNYTppN2HvH8E2yNuRwYdHJeOlA==", + "license": "MIT", + "peerDependencies": { + "@types/react": ">= 16.8.0 < 20.0.0", + "react": ">= 16.8.0 < 20.0.0", + "react-dom": ">= 16.8.0 < 20.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@docsearch/css": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.6.3.tgz", + "integrity": "sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ==", + "license": "MIT" + }, + "node_modules/@docsearch/react": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.6.3.tgz", + "integrity": "sha512-Bg2wdDsoQVlNCcEKuEJAU04tvHCqgx8rIu+uIoM4pRtcx3TBKJuXutJik3LTA8LRc9YEyHkrYUrmcC0D7BYf+g==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.19.2", + "@docsearch/core": "4.6.3", + "@docsearch/css": "4.6.3" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 20.0.0", + "react": ">= 16.8.0 < 20.0.0", + "react-dom": ">= 16.8.0 < 20.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-core": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz", + "integrity": "sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.19.2", + "@algolia/autocomplete-shared": "1.19.2" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz", + "integrity": "sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.19.2" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-shared": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz", + "integrity": "sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@docusaurus/babel": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.10.1.tgz", + "integrity": "sha512-DZzFO1K3v/GoEt1fx1DiYHF4en+PuhtQf1AkQJa5zu3CoeKSpr5cpQRUlz3jr0m44wyzmSXu9bVpfir+N4+8bg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.25.9", + "@babel/preset-env": "^7.25.9", + "@babel/preset-react": "^7.25.9", + "@babel/preset-typescript": "^7.25.9", + "@babel/runtime": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@docusaurus/logger": "3.10.1", + "@docusaurus/utils": "3.10.1", + "babel-plugin-dynamic-import-node": "^2.3.3", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/bundler": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.10.1.tgz", + "integrity": "sha512-HIqQPvbqnnQRe4NsBd1774KRarjXqS6wHsWELtyuSs1gCfvixJO2jUGH/OEBtr1Gvzpw+ze5CjGMvSJ8UE1KUw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.9", + "@docusaurus/babel": "3.10.1", + "@docusaurus/cssnano-preset": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "babel-loader": "^9.2.1", + "clean-css": "^5.3.3", + "copy-webpack-plugin": "^11.0.0", + "css-loader": "^6.11.0", + "css-minimizer-webpack-plugin": "^5.0.1", + "cssnano": "^6.1.2", + "file-loader": "^6.2.0", + "html-minifier-terser": "^7.2.0", + "mini-css-extract-plugin": "^2.9.2", + "null-loader": "^4.0.1", + "postcss": "^8.5.4", + "postcss-loader": "^7.3.4", + "postcss-preset-env": "^10.2.1", + "terser-webpack-plugin": "^5.3.9", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "webpack": "^5.95.0", + "webpackbar": "^7.0.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/faster": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true + } + } + }, + "node_modules/@docusaurus/core": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.10.1.tgz", + "integrity": "sha512-3pf2fXXw0eVk8WnC3T4LIigRDupcpvngpKo9Vy7mYyBhuddc0klDUuZAIfzMoK6z05pdlk6EFC/vBSX43+1O5w==", + "license": "MIT", + "dependencies": { + "@docusaurus/babel": "3.10.1", + "@docusaurus/bundler": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cli-table3": "^0.6.3", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "core-js": "^3.31.1", + "detect-port": "^1.5.1", + "escape-html": "^1.0.3", + "eta": "^2.2.0", + "eval": "^0.1.8", + "execa": "^5.1.1", + "fs-extra": "^11.1.1", + "html-tags": "^3.3.1", + "html-webpack-plugin": "^5.6.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "open": "^8.4.0", + "p-map": "^4.0.0", + "prompts": "^2.4.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", + "react-loadable-ssr-addon-v5-slorber": "^1.0.3", + "react-router": "^5.3.4", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.4", + "semver": "^7.5.4", + "serve-handler": "^6.1.7", + "tinypool": "^1.0.2", + "tslib": "^2.6.0", + "update-notifier": "^6.0.2", + "webpack": "^5.95.0", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-dev-server": "^5.2.2", + "webpack-merge": "^6.0.1" + }, + "bin": { + "docusaurus": "bin/docusaurus.mjs" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/faster": "*", + "@mdx-js/react": "^3.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true + } + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.10.1.tgz", + "integrity": "sha512-eNfHGcTKCSq6xmcavAkX3RRclHaE2xRCMParlDXLdXVP01/a2e/jKXMj/0ULnLFQSNwwuI62L0Ge8J+nZsR7UQ==", + "license": "MIT", + "dependencies": { + "cssnano-preset-advanced": "^6.1.2", + "postcss": "^8.5.4", + "postcss-sort-media-queries": "^5.2.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/logger": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.10.1.tgz", + "integrity": "sha512-oPjNFnfJsRCkePVjkGrxWGq4MvJKRQT0r9jOP0eRBTZ7Wr9FAbzdP/Gjs0I2Ss6YRkPoEgygKG112OkE6skvJw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.10.1.tgz", + "integrity": "sha512-GRmeb/wQ+iXRrFwcHBfgQhrJxGElgCsoTWZYDhccjsZVne1p8MK/EpQVIloXttz76TCe78kKD5AEG9n1xc1oxQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "@mdx-js/mdx": "^3.0.0", + "@slorber/remark-comment": "^1.0.0", + "escape-html": "^1.0.3", + "estree-util-value-to-estree": "^3.0.1", + "file-loader": "^6.2.0", + "fs-extra": "^11.1.1", + "image-size": "^2.0.2", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "rehype-raw": "^7.0.0", + "remark-directive": "^3.0.0", + "remark-emoji": "^4.0.0", + "remark-frontmatter": "^5.0.0", + "remark-gfm": "^4.0.0", + "stringify-object": "^3.3.0", + "tslib": "^2.6.0", + "unified": "^11.0.3", + "unist-util-visit": "^5.0.0", + "url-loader": "^4.1.1", + "vfile": "^6.0.1", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/module-type-aliases": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.1.tgz", + "integrity": "sha512-YoOZKUdGlp8xSYhuAkGdSo5Ydkbq4V4eK3sD8v0a2hloxCWdQbNBhkc+Ko9QyjpESc0BYcIGM5iHVAy5hdFV6w==", + "license": "MIT", + "dependencies": { + "@docusaurus/types": "3.10.1", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.10.1.tgz", + "integrity": "sha512-mmkgE6Q2+K74tnkou7tXlpDLvoCU/qkSa2GSQ3XUiHWvcebCoDQzS670RR3tO8PmaWlIyWWISYWzZLuMfxunRA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "cheerio": "1.0.0-rc.12", + "combine-promises": "^1.1.0", + "feed": "^4.2.2", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "schema-dts": "^1.1.2", + "srcset": "^4.0.0", + "tslib": "^2.6.0", + "unist-util-visit": "^5.0.0", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.1.tgz", + "integrity": "sha512-2jRVrtzjf8LClGTHQlwlwuD3wQXRx3WEoF7XUarJ8Ou+0onV+SLtejsyfY9JLpfUh9hPhXM4pbBGkyAY4Bi3HQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/module-type-aliases": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "@types/react-router-config": "^5.0.7", + "combine-promises": "^1.1.0", + "fs-extra": "^11.1.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "schema-dts": "^1.1.2", + "tslib": "^2.6.0", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.10.1.tgz", + "integrity": "sha512-huJpaRPMl42nsFwuCXvV8bVDj2MazuwRJIUylI/RSlmZeJssVoZXeCjVf1y+1Drtpa9SKcdGn8yoJ76IRJijtw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-css-cascade-layers": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.10.1.tgz", + "integrity": "sha512-r//fn+MNHkE1wCof8T29VAQezt1enGCpsFxoziBbvLgBM4JfXN2P3rxrBaavHmvLvm7lYkpJeitcDthwnmWCTw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.10.1.tgz", + "integrity": "sha512-9KqOpKNfAyqGZykRb9LhIT/vyRF6sm/ykhjj/39JvaJahDS+jZJE0Z1Wfz9q3DUNDTMNN0Q7u/kk4rKKU+IJuA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "fs-extra": "^11.1.1", + "react-json-view-lite": "^2.3.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.10.1.tgz", + "integrity": "sha512-8o0P1KtmgdYQHH+oInitPpRWI0Of5XednAX4+DMhQNSmGSRNrsEEHg1ebv35m9AgRClfAytCJ5jA9KvcASTyuA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.10.1.tgz", + "integrity": "sha512-pu3xIUo5o/zCMLfUY9BO5KOwSH0zIsAGyFRPvXHayFSA5XIhCU/SFuB0g0ZNjFn9niZLCaNvoeAuOGFJZq0fdw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "@types/gtag.js": "^0.0.20", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.10.1.tgz", + "integrity": "sha512-f6fyGHiCm7kJHBtAisGQS5oNBnpnMTYQZxDXeVrnw/3zWU+LMA22pr6UHGYkBKDbN+qPC5QHG3NuOfzQLq3+Lw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.10.1.tgz", + "integrity": "sha512-C26MbmmqgdjkDq1htaZ3aD7LzEDKFWXfpyQpt0EOUThuq5nV77zDaedV20yHcVo9p+3ey9aZ4pbHA0D3QcZTzg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "fs-extra": "^11.1.1", + "sitemap": "^7.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-svgr": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.1.tgz", + "integrity": "sha512-6SFxsmjWFkVLDmBUvFK6i72QjUwqyQFe4Ovz+SUJophJjOyVG3ZZG5IQpBC/kX/Gfv1yWeU9nWauH6F6Q7QX/Q==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "@svgr/core": "8.1.0", + "@svgr/webpack": "^8.1.0", + "tslib": "^2.6.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.10.1.tgz", + "integrity": "sha512-YO/FL8v1zmbxoTso6mjMz/RDjhaTJxb1UpFFTDdY5847LLDCeyYiYlrhyTbgN1RIN3xnkLKZ9Lj1x8hUzI4JOg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/plugin-content-blog": "3.10.1", + "@docusaurus/plugin-content-docs": "3.10.1", + "@docusaurus/plugin-content-pages": "3.10.1", + "@docusaurus/plugin-css-cascade-layers": "3.10.1", + "@docusaurus/plugin-debug": "3.10.1", + "@docusaurus/plugin-google-analytics": "3.10.1", + "@docusaurus/plugin-google-gtag": "3.10.1", + "@docusaurus/plugin-google-tag-manager": "3.10.1", + "@docusaurus/plugin-sitemap": "3.10.1", + "@docusaurus/plugin-svgr": "3.10.1", + "@docusaurus/theme-classic": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/theme-search-algolia": "3.10.1", + "@docusaurus/types": "3.10.1" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.10.1.tgz", + "integrity": "sha512-VU1RK0qb2pab0si4r7HFK37cYco8VzqLj3u1PspVipSr/z/GPVKHO4/HXbnePqHoWDk8urjyGSeatH0NIMBM1A==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/module-type-aliases": "3.10.1", + "@docusaurus/plugin-content-blog": "3.10.1", + "@docusaurus/plugin-content-docs": "3.10.1", + "@docusaurus/plugin-content-pages": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/theme-translations": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "copy-text-to-clipboard": "^3.2.0", + "infima": "0.2.0-alpha.45", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.5.4", + "prism-react-renderer": "^2.3.0", + "prismjs": "^1.29.0", + "react-router-dom": "^5.3.4", + "rtlcss": "^4.1.0", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.10.1.tgz", + "integrity": "sha512-0YtmIeoNo1fIw65LO8+/1dPgmDV86UmhMkow37gzjytuiCSQm9xob6PJy0L4kuQEMTLfUOGvkXvZr7GPrHquMA==", + "license": "MIT", + "dependencies": { + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/module-type-aliases": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^2.0.0", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^2.3.0", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.10.1.tgz", + "integrity": "sha512-OTaARARVZj2GvkJQjB+1jOIxntRaXea+G+fMsNqrZBAU1O1vJKDW22R7kECOHW27oJCLFN9HKaZeRrfAUyviug==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "^1.19.2", + "@docsearch/react": "^3.9.0 || ^4.3.2", + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/plugin-content-docs": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/theme-translations": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "algoliasearch": "^5.37.0", + "algoliasearch-helper": "^3.26.0", + "clsx": "^2.0.0", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "tslib": "^2.6.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-translations": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.10.1.tgz", + "integrity": "sha512-cLMyaKivjBVWKMJuWqyFVVgtqe8DPJNPkog0bn8W1MDVAKcPdxRFycBfC1We1RaNp7Rdk513bmtW78RR6OBxBw==", + "license": "MIT", + "dependencies": { + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.1.tgz", + "integrity": "sha512-XYMK8k1szDCFMw2V+Xyen0g7Kee1sP3dtFnl7vkGkZOkeAJ/oPDQPL8iz4HBKOo/cwU8QeV6onVjMqtP+tFzsw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/types/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docusaurus/utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.10.1.tgz", + "integrity": "sha512-3ojeJry9xBYdJO6qoyyzqeJFSJBVx2mXhyDzSdjwL2+URFQMf+h25gG38iswGImicK0ELjTd1EL2xzk8hf3QPw==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "escape-string-regexp": "^4.0.0", + "execa": "^5.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^11.1.1", + "github-slugger": "^1.5.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "jiti": "^1.20.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "p-queue": "^6.6.2", + "prompts": "^2.4.2", + "resolve-pathname": "^3.0.0", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "utility-types": "^3.10.0", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/utils-common": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.10.1.tgz", + "integrity": "sha512-5mFSgEADtnFxFH7RLw02QA5MpU5JVUCj0MPeIvi/aF4Fi45tQRIuTwXoXDqJ+1VfQJuYJGz3SI63wmGz4HvXzA==", + "license": "MIT", + "dependencies": { + "@docusaurus/types": "3.10.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.10.1.tgz", + "integrity": "sha512-cRv1X69jwaWv47waglllgZVWzeBFLhl53XT/XED/83BerVBTC5FTP8WTcVl8Z6sZOegDSwitu/wpCSPCDOT6lg==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "fs-extra": "^11.2.0", + "joi": "^17.9.2", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.2.tgz", + "integrity": "sha512-SVjwklkpIV5wrynpYtuYnfYH1QF4/nDuLBX7VXdb+3miglcAgBVZb/5y0cOsehRV/9Vb+3UqhkMq3/NR3ztdkQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.2.tgz", + "integrity": "sha512-fhO8+iR2I+OCw668ISDJdn1aArc9zx033sWejIyzQ8RBeXa9bDSaUeA3ix0poYOfrj1KdOzytmYNv2/uLDfV6g==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.2.tgz", + "integrity": "sha512-nX2AdL6cOFwLdju9G4/nbRnYevmCJbh7N7hvR3gGm97Cs60uEjyd0rpR+YBS7cTg175zzl22pGKXR5USaQMvKg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "@jsonjoy.com/fs-print": "4.57.2", + "@jsonjoy.com/fs-snapshot": "4.57.2", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.2.tgz", + "integrity": "sha512-xhiegylRmhw43Ki2HO1ZBL7DQ5ja/qpRsL29VtQ2xuUHiuDGbgf2uD4p9Qd8hJI5P6RCtGYD50IXHXVq/Ocjcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.2.tgz", + "integrity": "sha512-18LmWTSONhoAPW+IWRuf8w/+zRolPFGPeGwMxlAhhfY11EKzX+5XHDBPAw67dBF5dxDErHJbl40U+3IXSDRXSQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.2.tgz", + "integrity": "sha512-rsPSJgekz43IlNbLyAM/Ab+ouYLWGp5DDBfYBNNEqDaSpsbXfthBn29Q4muFA9L0F+Z3mKo+CWlgSCXrf+mOyQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.57.2" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.2.tgz", + "integrity": "sha512-wK9NSow48i4DbDl9F1CQE5TqnyZOJ04elU3WFG5aJ76p+YxO/ulyBBQvKsessPxdo381Bc2pcEoyPujMOhcRqQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.57.2", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.2.tgz", + "integrity": "sha512-GdduDZuoP5V/QCgJkx9+BZ6SC0EZ/smXAdTS7PfMqgMTGXLlt/bH/FqMYaqB9JmLf05sJPtO0XRbAwwkEEPbVw==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", + "license": "MIT", + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.7.0.tgz", + "integrity": "sha512-hew63shtzzvBcSHbhm+cyAmKe6AIfinT9hzEqSPjDC6opTTMKmTkQ0gHuN2KsWlvqiKw1S/fS94fhag/FJkioQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "@peculiar/asn1-x509-attr": "^2.7.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.7.0.tgz", + "integrity": "sha512-VVsAyGqErT9D1SY4aEqozThXMVI+ssVRiv2DDeYuvpBKLIgZ3hYs3Ay3u/VSoKq6ESFi9cf6rf3IOOzfwh7oMA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.7.0.tgz", + "integrity": "sha512-n7KEs/Q/wrB415cxy4fHOBhegp4NdJ15fkJPwcB/3/8iNBQC2L/N7SChJPKDJPZGYH0jD4Tg4/0vnHmwghnbKw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.7.0.tgz", + "integrity": "sha512-V/nrlQVmhg7lYAsM7E13UDL5erAwFv6kCIVFqNaMIHSVi7dngcT839JkRTkQBqznMG98l2XjxYk74ZztAohZzA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.7.0", + "@peculiar/asn1-pkcs8": "^2.7.0", + "@peculiar/asn1-rsa": "^2.7.0", + "@peculiar/asn1-schema": "^2.7.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.7.0.tgz", + "integrity": "sha512-9GTl1nE8Mx1kTZ+7QyYatDyKsm34QcWRBFkY1iPvWC3X4Dona5s/tlLiQsx5WzVdZqiMBZNYT0buyw4/vbhnjw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.7.0.tgz", + "integrity": "sha512-Bh7m+OuIaSEllPQcSd9OSp93F4ROWH7sbITWV8MI+8dwsjE5111/87VxiWVvYFKyww3vp39geLv9ENqhwWHcew==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.7.0", + "@peculiar/asn1-pfx": "^2.7.0", + "@peculiar/asn1-pkcs8": "^2.7.0", + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "@peculiar/asn1-x509-attr": "^2.7.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.7.0.tgz", + "integrity": "sha512-/qvENQrXyTZURjMqSeofHul0JJt2sNSzSwk36pl2olkHbaioMQgrASDZAlHXl0xUlnVbHj0uGgOrBMTb5x2aJQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.7.0.tgz", + "integrity": "sha512-W8ZfWzLmQnrcky+eh3tni4IozMdqBDiHWU0N+vve/UGjMaUs8c0L7A2oEdkBXS8rTpWDpK/aoI3DG/L/hxmxPg==", + "license": "MIT", + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.7.0.tgz", + "integrity": "sha512-mUn9RRrkGDnG4ALfunDmzyRW5dg+sWCj/pfnCCqEHYbkGxEpvUt6iVJv8Yw1cyp6SWZ26ZE5oSmI5SqEaen15g==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.7.0.tgz", + "integrity": "sha512-NS8e7SOgXipkzUPLF/sce7ukpMpWjhxYsH0n6Y+bHYo4TTxOb95Zv7hqwSuL212mj5YxovjdOKQOgH1As3E94w==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/asn1-x509": "^2.7.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", + "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@slorber/remark-comment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", + "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.1.0", + "micromark-util-symbol": "^1.0.1" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", + "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/webpack": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", + "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@babel/plugin-transform-react-constant-elements": "^7.21.3", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.21.0", + "@svgr/core": "8.1.0", + "@svgr/plugin-jsx": "8.1.0", + "@svgr/plugin-svgo": "8.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/gtag.js": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.20.tgz", + "integrity": "sha512-wwAbk3SA2QeU67unN7zPxjEHmPmlXwZXZvQEpbEUQuMCRGgKyE1m6XDuTUA9b6pCGb/GqJmdfMOY5LuDjJSbbg==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "license": "MIT" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@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/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.19.0" + } + }, + "node_modules/@types/prismjs": { + "version": "1.26.6", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.6.tgz", + "integrity": "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", + "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "license": "MIT" + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/algoliasearch": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.52.0.tgz", + "integrity": "sha512-0ZzY9mjqV7gop/AH8pIBiAS8giXP7WcSiUfoFYIzYAK9QC5c37E4SIVtJVBMwlURc0/uNt2o4RcNRvdHa4CJ5w==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.18.0", + "@algolia/client-abtesting": "5.52.0", + "@algolia/client-analytics": "5.52.0", + "@algolia/client-common": "5.52.0", + "@algolia/client-insights": "5.52.0", + "@algolia/client-personalization": "5.52.0", + "@algolia/client-query-suggestions": "5.52.0", + "@algolia/client-search": "5.52.0", + "@algolia/ingestion": "1.52.0", + "@algolia/monitoring": "1.52.0", + "@algolia/recommend": "5.52.0", + "@algolia/requester-browser-xhr": "5.52.0", + "@algolia/requester-fetch": "5.52.0", + "@algolia/requester-node-http": "5.52.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.28.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.28.2.tgz", + "integrity": "sha512-sexVcXLHrJN54+S0wXD52xV3ySeGZA5T6HMDkb84wT+3UcXCd8af/k2vU5qJTbHv7DoBb4mISJHdyQ2JOo3Aig==", + "license": "MIT", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/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==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/asn1js": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", + "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/autoprefixer": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/baseline-browser-mapping": { + "version": "2.10.25", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.25.tgz", + "integrity": "sha512-QO/VHsXCQdnzADMfmkeOPvHdIAkoB7i0/rGjINPJEetLx75hNttVWGQ/jycHUDP9zZ9rupbm60WRxcwViB0MiA==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", + "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.15.1", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001791", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", + "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cli-table3/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==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "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/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combine-promises": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", + "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "license": "ISC" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compressible/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/configstore": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz", + "integrity": "sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz", + "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-blank-pseudo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", + "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz", + "integrity": "sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==", + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz", + "integrity": "sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "cssnano": "^6.0.1", + "jest-worker": "^29.4.3", + "postcss": "^8.4.24", + "schema-utils": "^4.0.1", + "serialize-javascript": "^6.0.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", + "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssdb": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.8.0.tgz", + "integrity": "sha512-QbLeyz2Bgso1iRlh7IpWk6OKa3lLNGXsujVjDMPl9rOZpxKeiG69icLpbLCFxeURwmcdIfZqQyhlooKJYM4f8Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "MIT-0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", + "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^6.1.2", + "lilconfig": "^3.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", + "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", + "license": "MIT", + "dependencies": { + "autoprefixer": "^10.4.19", + "browserslist": "^4.23.0", + "cssnano-preset-default": "^6.1.2", + "postcss-discard-unused": "^6.0.5", + "postcss-merge-idents": "^6.0.3", + "postcss-reduce-idents": "^6.0.3", + "postcss-zindex": "^6.0.2" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-default": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", + "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^4.0.2", + "postcss-calc": "^9.0.1", + "postcss-colormin": "^6.1.0", + "postcss-convert-values": "^6.1.0", + "postcss-discard-comments": "^6.0.2", + "postcss-discard-duplicates": "^6.0.3", + "postcss-discard-empty": "^6.0.3", + "postcss-discard-overridden": "^6.0.2", + "postcss-merge-longhand": "^6.0.5", + "postcss-merge-rules": "^6.1.1", + "postcss-minify-font-values": "^6.1.0", + "postcss-minify-gradients": "^6.0.3", + "postcss-minify-params": "^6.1.0", + "postcss-minify-selectors": "^6.0.4", + "postcss-normalize-charset": "^6.0.2", + "postcss-normalize-display-values": "^6.0.2", + "postcss-normalize-positions": "^6.0.2", + "postcss-normalize-repeat-style": "^6.0.2", + "postcss-normalize-string": "^6.0.2", + "postcss-normalize-timing-functions": "^6.0.2", + "postcss-normalize-unicode": "^6.1.0", + "postcss-normalize-url": "^6.0.2", + "postcss-normalize-whitespace": "^6.0.2", + "postcss-ordered-values": "^6.0.2", + "postcss-reduce-initial": "^6.1.0", + "postcss-reduce-transforms": "^6.0.2", + "postcss-svgo": "^6.0.3", + "postcss-unique-selectors": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-utils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, + "node_modules/detect-port": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.348", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.348.tgz", + "integrity": "sha512-QC2X59nRlycQQMc4ZXjSVBX+tSgJfgRtcrYHbIZLgOV2dCvefoQGegLR7lLXKgpPpSuVmJU19LMzGrSa2C7k3Q==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/emoticon": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", + "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", + "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-value-to-estree": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz", + "integrity": "sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "license": "MIT" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "license": "MIT", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/file-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/file-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "license": "ISC" + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.7", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.7.tgz", + "integrity": "sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw==", + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", + "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", + "license": "MIT", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infima": { + "version": "0.2.0-alpha.45", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", + "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", + "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", + "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", + "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "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", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "license": "MIT", + "dependencies": { + "package-json": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/launch-editor": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.2.tgz", + "integrity": "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", + "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.2.tgz", + "integrity": "sha512-2nWzSsJzrukurSDna4Z0WywuScK4Id3tSKejgu74u8KCdW4uNrseKRSIDg75C6Yw5ZRqBe0F0EtMNlTbUq8bAQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-fsa": "4.57.2", + "@jsonjoy.com/fs-node": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-to-fsa": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "@jsonjoy.com/fs-print": "4.57.2", + "@jsonjoy.com/fs-snapshot": "4.57.2", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", + "license": "MIT", + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-space/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark/node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark/node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark/node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.2.tgz", + "integrity": "sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg==", + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-releases": { + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", + "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/null-loader/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/null-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/null-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "license": "BSD-2-Clause", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "license": "MIT", + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", + "license": "ISC" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkijs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", + "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/postcss": { + "version": "8.5.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.13.tgz", + "integrity": "sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==", + "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", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", + "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz", + "integrity": "sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", + "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", + "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-colormin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", + "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-convert-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", + "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-custom-media": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", + "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-properties": { + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", + "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", + "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", + "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-comments": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", + "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", + "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-empty": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", + "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", + "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-unused": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", + "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz", + "integrity": "sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", + "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-focus-within": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", + "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", + "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", + "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-lab-function": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz", + "integrity": "sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", + "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", + "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-merge-idents": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", + "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", + "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^6.1.1" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-rules": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", + "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.2", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", + "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", + "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-params": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", + "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", + "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nesting": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-resolve-nested": "^3.1.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", + "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", + "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", + "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", + "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-string": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", + "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", + "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", + "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", + "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", + "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", + "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-ordered-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", + "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", + "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-preset-env": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.6.1.tgz", + "integrity": "sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-alpha-function": "^1.0.1", + "@csstools/postcss-cascade-layers": "^5.0.2", + "@csstools/postcss-color-function": "^4.0.12", + "@csstools/postcss-color-function-display-p3-linear": "^1.0.1", + "@csstools/postcss-color-mix-function": "^3.0.12", + "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.2", + "@csstools/postcss-content-alt-text": "^2.0.8", + "@csstools/postcss-contrast-color-function": "^2.0.12", + "@csstools/postcss-exponential-functions": "^2.0.9", + "@csstools/postcss-font-format-keywords": "^4.0.0", + "@csstools/postcss-gamut-mapping": "^2.0.11", + "@csstools/postcss-gradients-interpolation-method": "^5.0.12", + "@csstools/postcss-hwb-function": "^4.0.12", + "@csstools/postcss-ic-unit": "^4.0.4", + "@csstools/postcss-initial": "^2.0.1", + "@csstools/postcss-is-pseudo-class": "^5.0.3", + "@csstools/postcss-light-dark-function": "^2.0.11", + "@csstools/postcss-logical-float-and-clear": "^3.0.0", + "@csstools/postcss-logical-overflow": "^2.0.0", + "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", + "@csstools/postcss-logical-resize": "^3.0.0", + "@csstools/postcss-logical-viewport-units": "^3.0.4", + "@csstools/postcss-media-minmax": "^2.0.9", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", + "@csstools/postcss-nested-calc": "^4.0.0", + "@csstools/postcss-normalize-display-values": "^4.0.1", + "@csstools/postcss-oklab-function": "^4.0.12", + "@csstools/postcss-position-area-property": "^1.0.0", + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/postcss-property-rule-prelude-list": "^1.0.0", + "@csstools/postcss-random-function": "^2.0.1", + "@csstools/postcss-relative-color-syntax": "^3.0.12", + "@csstools/postcss-scope-pseudo-class": "^4.0.1", + "@csstools/postcss-sign-functions": "^1.1.4", + "@csstools/postcss-stepped-value-functions": "^4.0.9", + "@csstools/postcss-syntax-descriptor-syntax-production": "^1.0.1", + "@csstools/postcss-system-ui-font-family": "^1.0.0", + "@csstools/postcss-text-decoration-shorthand": "^4.0.3", + "@csstools/postcss-trigonometric-functions": "^4.0.9", + "@csstools/postcss-unset-value": "^4.0.0", + "autoprefixer": "^10.4.23", + "browserslist": "^4.28.1", + "css-blank-pseudo": "^7.0.1", + "css-has-pseudo": "^7.0.3", + "css-prefers-color-scheme": "^10.0.0", + "cssdb": "^8.6.0", + "postcss-attribute-case-insensitive": "^7.0.1", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^7.0.12", + "postcss-color-hex-alpha": "^10.0.0", + "postcss-color-rebeccapurple": "^10.0.0", + "postcss-custom-media": "^11.0.6", + "postcss-custom-properties": "^14.0.6", + "postcss-custom-selectors": "^8.0.5", + "postcss-dir-pseudo-class": "^9.0.1", + "postcss-double-position-gradients": "^6.0.4", + "postcss-focus-visible": "^10.0.1", + "postcss-focus-within": "^9.0.1", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^6.0.0", + "postcss-image-set-function": "^7.0.0", + "postcss-lab-function": "^7.0.12", + "postcss-logical": "^8.1.0", + "postcss-nesting": "^13.0.2", + "postcss-opacity-percentage": "^3.0.0", + "postcss-overflow-shorthand": "^6.0.0", + "postcss-page-break": "^3.0.4", + "postcss-place": "^10.0.0", + "postcss-pseudo-class-any-link": "^10.0.1", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^8.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", + "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", + "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", + "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", + "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", + "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sort-media-queries": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", + "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", + "license": "MIT", + "dependencies": { + "sort-css-media-queries": "2.2.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.23" + } + }, + "node_modules/postcss-svgo": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", + "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.2.0" + }, + "engines": { + "node": "^14 || ^16 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", + "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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" + }, + "node_modules/postcss-zindex": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", + "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "license": "MIT", + "dependencies": { + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.0.0" + } + }, + "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/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "license": "ISC" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", + "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", + "license": "MIT", + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-helmet-async": { + "name": "@slorber/react-helmet-async", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-json-view-lite": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz", + "integrity": "sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", + "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz", + "integrity": "sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" + } + }, + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^3.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-directive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", + "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", + "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.2", + "emoticon": "^4.0.1", + "mdast-util-find-and-replace": "^3.0.1", + "node-emoji": "^2.1.0", + "unified": "^11.0.4" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", + "license": "MIT" + }, + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rtlcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", + "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0", + "postcss": "^8.4.21", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-dts": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", + "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", + "license": "Apache-2.0" + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "license": "MIT", + "peer": true + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", + "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", + "license": "MIT", + "dependencies": { + "@peculiar/x509": "^1.14.2", + "pkijs": "^3.3.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz", + "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==", + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.5", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/serve-index": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.3.tgz", + "integrity": "sha512-tAjEd+wt/YwnEbfNB2ht51ybBJxbEWwe5ki/Z//Wh0rpBFTCUSj46GnxUKEWzhfuJTsee8x3lybHxFgUMig2hw==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "license": "MIT", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sort-css-media-queries": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", + "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", + "license": "MIT", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/stylehacks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", + "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz", + "integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==", + "license": "MIT", + "dependencies": { + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser": { + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.2.tgz", + "integrity": "sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/thingies": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/undici-types": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", + "is-installed-globally": "^0.4.0", + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/boxen": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.1", + "chalk": "^5.2.0", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/url-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/url-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webpack": { + "version": "5.106.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.2.tgz", + "integrity": "sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.20.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "loader-runner": "^4.3.1", + "mime-db": "^1.54.0", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.17", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.4" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz", + "integrity": "sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.25", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.8.1", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.22.1", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^5.5.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.4.1.tgz", + "integrity": "sha512-eACpxRN02yaawnt+uUNIF7Qje6A9zArxBbcAJjK1PK3S9Ycg5jIuJ8pW4q8EMnwNZCEGltcjkRx1QzOxOkKD8A==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpackbar": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-7.0.0.tgz", + "integrity": "sha512-aS9soqSO2iCHgqHoCrj4LbfGQUboDCYJPSFOAchEK+9psIjNrfSWW4Y0YEz67MKURNvMmfo0ycOg9d/+OOf9/Q==", + "license": "MIT", + "dependencies": { + "ansis": "^3.2.0", + "consola": "^3.2.3", + "pretty-time": "^1.1.0", + "std-env": "^3.7.0" + }, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "@rspack/core": "*", + "webpack": "3 || 4 || 5" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "license": "MIT", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/docusaurus-asgardeo/package.json b/docusaurus-asgardeo/package.json new file mode 100644 index 0000000000..8db1bb2901 --- /dev/null +++ b/docusaurus-asgardeo/package.json @@ -0,0 +1,35 @@ +{ + "name": "asgardeo-docs-docusaurus", + "version": "0.1.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "prebuild": "node scripts/preprocess.js", + "build": "docusaurus build", + "start": "ulimit -n 4096 && CHOKIDAR_USEPOLLING=1000 npm run prebuild && docusaurus start --no-open", + "dev": "ulimit -n 4096 && CHOKIDAR_USEPOLLING=1000 npm run prebuild && docusaurus start --no-open --poll 1000", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear && rm -rf .generated-docs" + }, + "dependencies": { + "@docusaurus/core": "^3.10.1", + "@docusaurus/preset-classic": "^3.10.1", + "clsx": "^2.1.1", + "nunjucks": "^3.2.4", + "prism-react-renderer": "^2.4.1", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "^3.10.1", + "@docusaurus/types": "^3.10.1" + }, + "browserslist": { + "production": [">0.5%", "not dead", "not op_mini all"], + "development": ["last 3 chrome version", "last 3 firefox version", "last 5 safari version"] + }, + "engines": { + "node": ">=18.0" + } +} diff --git a/docusaurus-asgardeo/scripts/preprocess.js b/docusaurus-asgardeo/scripts/preprocess.js new file mode 100644 index 0000000000..c8ae1f7920 --- /dev/null +++ b/docusaurus-asgardeo/scripts/preprocess.js @@ -0,0 +1,451 @@ +#!/usr/bin/env node + +const nunjucks = require('nunjucks'); +const fs = require('fs'); +const path = require('path'); + +const REPO_ROOT = path.resolve(__dirname, '..', '..'); +const DOCS_SRC = path.join(REPO_ROOT, 'en', 'asgardeo', 'docs'); +const INCLUDES_DIR = path.join(REPO_ROOT, 'en', 'includes'); +const GENERATED_DIR = path.join(__dirname, '..', '.generated-docs'); + +const templateVars = { + product_name: 'Asgardeo', + base_path: '', + product: 'asgardeo', + product_url_format: 'https://api.asgardeo.io', + is_version: '99.0.0', + content: { + sdkconfig: { + baseUrl: 'https://api.asgardeo.io/t/', + }, + }, +}; + +const env = nunjucks.configure(REPO_ROOT, { + autoescape: false, + trimBlocks: true, + lstripBlocks: true, + throwOnUndefined: false, +}); + +const SKIP_DIRS = new Set(['assets', '__pycache__', '.venv', '.DS_Store', 'node_modules']); + +function renderTemplate(filePath) { + try { + const relativePath = path.relative(REPO_ROOT, filePath); + return env.render(relativePath, templateVars); + } catch (err) { + console.error(` ERROR rendering ${filePath}: ${err.message}`); + return fs.readFileSync(filePath, 'utf-8'); + } +} + +function stripFrontmatter(content) { + return content.replace(/^---\s*\n[\s\S]*?^---\s*\n/gm, (match) => { + if (match.includes('template:')) return ''; + return match; + }); +} + +function stripPageNotFound(content) { + if (content.includes('') && content.includes('page-not-found')) { + return '# Page Not Found\n\nThe page you are looking for does not exist.\n'; + } + return content; +} + +function stripScriptBlocks(content) { + return content.replace(/]*>[\s\S]*?<\/script>/gi, ''); +} + +function convertImageSyntax(content) { + return content.replace( + /!\[([^\]]*)\]\(([^)]+)\)\{:\s*([^}]+)\}/g, + (match, alt, src, attrs) => { + const widthMatch = attrs.match(/width=["']?([^"'\s]+)/); + const styleMatch = attrs.match(/style=["']([^"']+)["']/); + let htmlAttrs = ''; + if (widthMatch) htmlAttrs += ` width="${widthMatch[1]}"`; + if (styleMatch) htmlAttrs += ` style="${styleMatch[1]}"`; + if (htmlAttrs) { + return `${alt}`; + } + return `![${alt}](${src})`; + } + ); +} + +function convertLinkSyntax(content) { + return content + .replace(/\[([^\]]*)\]\(([^)]+)\)\{:\s*target=["']_blank["']\s*\}/g, (m, t, u) => `[${t}](${u})`) + .replace(/\{:target="_blank"\}/g, ''); +} + +function resolveRelativePaths(content, sourceFilePath) { + const sourceDir = path.dirname(sourceFilePath); + + content = content.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, (match, alt, src) => { + if (src.startsWith('http://') || src.startsWith('https://') || src.startsWith('/')) return match; + const resolved = path.resolve(sourceDir, src); + const relToDocs = path.relative(DOCS_SRC, resolved); + if (!relToDocs.startsWith('..')) return `![${alt}](/${relToDocs})`; + return `![${alt}](/${path.relative(REPO_ROOT, resolved)})`; + }); + + content = content.replace(/]*src=["']([^"']+)["'][^>]*>/g, (match, src) => { + if (src.startsWith('http://') || src.startsWith('https://') || src.startsWith('/')) return match; + const resolved = path.resolve(sourceDir, src); + const relToDocs = path.relative(DOCS_SRC, resolved); + if (!relToDocs.startsWith('..')) return match.replace(src, `/${relToDocs}`); + return match.replace(src, `/${path.relative(REPO_ROOT, resolved)}`); + }); + + return content; +} + +function stripAttrLists(content) { + return content.replace(/\{:([^}]+)\}/g, (match, attrs) => { + if (attrs.includes('target=')) return ''; + if (attrs.includes('width=') || attrs.includes('style=')) return ''; + return ''; + }); +} + +function fixHtmlTags(content) { + content = content.replace(//gi, '
'); + content = content.replace(/<\/br>/gi, ''); + content = content.replace(//gi, '
'); + return content; +} + +function escapeMdxBraces(content) { + const lines = content.split('\n'); + let inFence = false; + const result = []; + + for (const line of lines) { + const trimmed = line.trimStart(); + if (trimmed.startsWith('```') || trimmed.startsWith('~~~')) { + inFence = !inFence; + result.push(line); + continue; + } + if (inFence) { + result.push(line); + continue; + } + result.push(line.replace(/\{/g, '{').replace(/\}/g, '}')); + } + return result.join('\n'); +} + +function convertAdmonitions(content) { + // Map custom mkdocs admonition types to Docusaurus-supported types + const typeMap = { + example: 'info', + abstract: 'note', + prerequisite: 'info', + question: 'info', + quote: 'info', + bug: 'warning', + failure: 'danger', + important: 'warning', + success: 'tip', + }; + + return content + .replace(/^!{3}\+?\s*(\w+)\s*"(.*?)"\s*$/gm, (_, type, title) => { + const mapped = typeMap[type.toLowerCase()] || type.toLowerCase(); + return `:::${mapped} ${title}`; + }) + .replace(/^!{3}\+?\s*(\w+)\s*$/gm, (_, type) => { + const mapped = typeMap[type.toLowerCase()] || type.toLowerCase(); + return `:::${mapped}`; + }) + .replace(/^!{3}\s*$/gm, ':::note') + .replace(/^\?{3}\+?\s*(\w+)\s*"(.*?)"\s*$/gm, (_, type, title) => `
${title}`) + .replace(/^\?{3}\+?\s*(\w+)\s*$/gm, '
Details') + .replace(/^\?{3}\s*$/gm, '
Details'); +} + +function postProcess(content, sourceFilePath) { + let processed = content; + processed = stripFrontmatter(processed); + processed = stripPageNotFound(processed); + processed = stripScriptBlocks(processed); + processed = convertAdmonitions(processed); + processed = convertImageSyntax(processed); + processed = convertLinkSyntax(processed); + processed = resolveRelativePaths(processed, sourceFilePath); + processed = fixRedocSpecUrls(processed); + processed = stripAttrLists(processed); + processed = fixHtmlTags(processed); + processed = escapeMdxBraces(processed); + return processed; +} + +function fixRedocSpecUrls(content) { + // Fix absolute spec-url paths to include baseUrl + content = content.replace( + /(]*spec-url=")(\/[^"]+)("[^>]*>)/g, + '$1/asgardeo/docs$2$3' + ); + // Fix relative spec-url paths (e.g. ../../apis/...) + content = content.replace( + /(]*spec-url=")(\.\.\/[^"]+)("[^>]*>)/g, + (match, prefix, path, suffix) => { + // Resolve relative path to absolute and add baseUrl + const resolved = path.replace(/\.\.\/+/g, ''); + return `${prefix}/asgardeo/docs/${resolved}${suffix}`; + } + ); + // Inject Asgardeo redoc theme (orange primary color) + content = content.replace( + /theme=''/g, + `theme='{"colors":{"primary":{"main":"#ff7300"}}}'` + ); + return content; +} + +function shouldProcess(file) { + return fs.statSync(file).isFile() && file.endsWith('.md'); +} + +function processDirectory(srcDir, destDir) { + if (!fs.existsSync(destDir)) fs.mkdirSync(destDir, { recursive: true }); + + for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) { + if (entry.name.startsWith('.') || SKIP_DIRS.has(entry.name)) continue; + + const srcPath = path.join(srcDir, entry.name); + const destPath = path.join(destDir, entry.name); + + if (entry.isDirectory()) { + processDirectory(srcPath, destPath); + } else if (shouldProcess(srcPath)) { + const rendered = renderTemplate(srcPath); + const processed = postProcess(rendered, srcPath); + const destDirPath = path.dirname(destPath); + if (!fs.existsSync(destDirPath)) fs.mkdirSync(destDirPath, { recursive: true }); + fs.writeFileSync(destPath, processed, 'utf-8'); + console.log(` Processed: ${path.relative(REPO_ROOT, srcPath)}`); + } + } +} + +function main() { + console.log('Preprocessing MkDocs content for Docusaurus...\n'); + if (fs.existsSync(GENERATED_DIR)) fs.rmSync(GENERATED_DIR, { recursive: true }); + + console.log(`Source: ${DOCS_SRC}`); + console.log(`Output: ${GENERATED_DIR}`); + console.log(`Includes: ${INCLUDES_DIR}\n`); + + processDirectory(DOCS_SRC, GENERATED_DIR); + + deduplicateIndexPages(GENERATED_DIR); + + // Remove source index.md since we create our own index.mdx + const oldIndexPath = path.join(GENERATED_DIR, 'index.md'); + if (fs.existsSync(oldIndexPath)) fs.rmSync(oldIndexPath); + + createHomePage(); + createSDKsPage(); + + const fileCount = fs.readdirSync(GENERATED_DIR, { recursive: true }).filter(f => f.endsWith('.md')).length; + console.log(`\nPreprocessing complete. ${fileCount} files generated.`); +} + +function deduplicateIndexPages(dir) { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + for (const entry of entries) { + if (entry.isDirectory()) { + deduplicateIndexPages(path.join(dir, entry.name)); + } + } + + const dirEntries = fs.readdirSync(dir, { withFileTypes: true }); + const dirName = path.basename(dir); + const hasIndexMd = fs.existsSync(path.join(dir, 'index.md')); + const hasDirNamedMd = fs.existsSync(path.join(dir, `${dirName}.md`)); + + // Case 1: foo.md + foo/index.md at sibling level -> remove foo.md + for (const entry of dirEntries) { + if (!entry.isFile() || !entry.name.endsWith('.md') || entry.name === 'index.md') continue; + const baseName = entry.name.replace(/\.md$/, ''); + const subDir = dirEntries.find(e => e.isDirectory() && e.name === baseName); + if (subDir && fs.existsSync(path.join(dir, subDir.name, 'index.md'))) { + console.log(` Removing duplicate: ${path.relative(GENERATED_DIR, path.join(dir, entry.name))}`); + fs.rmSync(path.join(dir, entry.name)); + } + } + + // Case 2: foo/index.md + foo/foo.md -> rename foo/foo.md to avoid Docusaurus folder-index conflict + if (hasIndexMd && hasDirNamedMd) { + const newName = `${dirName}-guide.md`; + console.log(` Renaming to avoid conflict: ${path.relative(GENERATED_DIR, path.join(dir, `${dirName}.md`))} -> ${path.relative(GENERATED_DIR, path.join(dir, newName))}`); + fs.renameSync(path.join(dir, `${dirName}.md`), path.join(dir, newName)); + } +} + +function createHomePage() { + const homePath = path.join(GENERATED_DIR, 'index.mdx'); + const homeContent = `--- +sidebar_label: Home +--- + +import HomePageCards from '@site/src/components/HomePageCards'; + + +`; + fs.writeFileSync(homePath, homeContent, 'utf-8'); +} + +function createSDKsPage() { + const sdkPath = path.join(GENERATED_DIR, 'sdks', 'index.md'); + const sdkContent = `--- +sidebar_label: SDKs +--- + +import Card from '@site/src/components/Card'; + +# SDKs + +Explore our official and community SDKs to integrate with Asgardeo easily. + +## Official SDKs + +Official SDKs developed and maintained by the Asgardeo team for seamless integration. + +
+ + + + + + + + + + + + + + + +
+ +## Community SDKs + +Third-party SDKs built by the community to support OIDC and OAuth integration with any provider. + +
+ + + + + + + + + + + + + +
+`; + const sdkDir = path.join(GENERATED_DIR, 'sdks'); + if (!fs.existsSync(sdkDir)) fs.mkdirSync(sdkDir, { recursive: true }); + fs.writeFileSync(sdkPath, sdkContent, 'utf-8'); +} + +main(); diff --git a/docusaurus-asgardeo/sidebars.js b/docusaurus-asgardeo/sidebars.js new file mode 100644 index 0000000000..4b330b60df --- /dev/null +++ b/docusaurus-asgardeo/sidebars.js @@ -0,0 +1,1589 @@ +// Curated sidebar matching en/asgardeo mkdocs.yml nav structure. +// Paths are relative to .generated-docs, without the .md extension. + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebars = { + docs: [ + { type: 'doc', id: 'index', label: 'Home', className: 'sidebar-icon-home' }, + { + type: 'category', + label: 'Get started', + className: 'sidebar-icon-rocket', + link: { type: 'doc', id: 'get-started/index' }, + items: [ + { type: 'doc', id: 'get-started/create-asgardeo-account', label: 'Create Account' }, + { + type: 'category', + label: 'Connect App', + items: [ + { + type: 'category', + label: 'React', + className: 'sidebar-icon-ca-react', + items: [ + { type: 'doc', id: 'quick-starts/react', label: 'Quickstart' }, + { type: 'doc', id: 'complete-guides/react/introduction', label: 'Complete Guide' }, + ], + }, + { + type: 'category', + label: 'Vue', + className: 'sidebar-icon-ca-vue', + items: [ + { type: 'doc', id: 'quick-starts/vue', label: 'Quickstart' }, + ], + }, + { + type: 'category', + label: 'Nuxt', + items: [ + { type: 'doc', id: 'quick-starts/nuxt', label: 'Quickstart' }, + ], + }, + { + type: 'category', + label: 'Angular', + className: 'sidebar-icon-ca-angular', + items: [ + { type: 'doc', id: 'quick-starts/angular', label: 'Quickstart' }, + { type: 'doc', id: 'complete-guides/angular/introduction', label: 'Complete Guide' }, + ], + }, + { + type: 'category', + label: 'Javascript', + className: 'sidebar-icon-ca-js', + items: [ + { type: 'doc', id: 'quick-starts/javascript', label: 'Quickstart' }, + { type: 'doc', id: 'complete-guides/javascript/introduction', label: 'Complete Guide' }, + ], + }, + { + type: 'category', + label: 'Next.js', + items: [ + { type: 'doc', id: 'quick-starts/nextjs', label: 'Quickstart' }, + { type: 'doc', id: 'complete-guides/nextjs/introduction', label: 'Complete Guide (Redirect)' }, + { type: 'doc', id: 'complete-guides/app-native/introduction', label: 'Complete Guide (App-Native)' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/introduction', label: 'Complete Guide (B2B)' }, + ], + }, + { + type: 'category', + label: 'Express.js', + items: [ + { type: 'doc', id: 'complete-guides/expressjs/introduction', label: 'Complete Guide' }, + ], + }, + { + type: 'category', + label: '.NET', + items: [ + { type: 'doc', id: 'complete-guides/dotnet/introduction', label: 'Complete Guide' }, + ], + }, + { + type: 'category', + label: 'Spring Boot', + items: [ + { type: 'doc', id: 'quick-starts/springboot', label: 'Quickstart' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Try for a sample app', + items: [ + { type: 'doc', id: 'get-started/try-samples/index', label: 'Try for a sample app' }, + { + type: 'category', + label: 'Single Page apps', + items: [ + { type: 'doc', id: 'get-started/try-samples/qsg-spa-react', label: 'React' }, + { type: 'doc', id: 'get-started/try-samples/qsg-spa-javascript', label: 'JavaScript' }, + ], + }, + { + type: 'category', + label: 'Web apps', + items: [ + { type: 'doc', id: 'get-started/try-samples/qsg-oidc-webapp-java-ee', label: 'OIDC Java EE' }, + { type: 'doc', id: 'get-started/try-samples/qsg-saml-webapp-java-ee', label: 'SAML Java EE' }, + { type: 'doc', id: 'get-started/try-samples/ws-federation-webapp', label: 'WS-Federation' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Secure MCP Servers', + items: [ + { type: 'doc', id: 'quick-starts/mcp-auth-server', label: 'TypeScript' }, + { type: 'doc', id: 'quick-starts/mcp-auth-server-py', label: 'Python' }, + { type: 'doc', id: 'quick-starts/cloudflare-mcp-server', label: 'Cloudflare Quickstart' }, + ], + }, + { + type: 'category', + label: 'Secure Your AI Agents', + items: [ + { type: 'doc', id: 'quick-starts/agent-auth-py', label: 'Python' }, + { type: 'doc', id: 'quick-starts/agent-auth-ts', label: 'TypeScript' }, + ], + }, + ], + }, + { type: 'html', value: '' }, + { + type: 'category', + label: 'Guides', + className: 'sidebar-icon-book', + items: [ + { type: 'doc', id: 'guides/index', label: 'Guides - Overview' }, + { + type: 'category', + label: 'Applications', + items: [ + { type: 'doc', id: 'guides/applications/index', label: 'Applications' }, + { type: 'doc', id: 'guides/applications/register-single-page-app', label: 'Register an SPA' }, + { type: 'doc', id: 'guides/applications/register-oidc-web-app', label: 'Register web app with OIDC' }, + { type: 'doc', id: 'guides/applications/register-saml-web-app', label: 'Register web app with SAML' }, + { type: 'doc', id: 'guides/applications/register-standard-based-app', label: 'Register a standard-based app' }, + { type: 'doc', id: 'guides/applications/register-mobile-app', label: 'Register a mobile app' }, + { type: 'doc', id: 'guides/applications/register-machine-to-machine-app', label: 'Register a machine-to-machine app' }, + { type: 'doc', id: 'guides/applications/register-a-fapi-compliant-app', label: 'Register a FAPI-compliant app' }, + { type: 'doc', id: 'guides/applications/register-react-app', label: 'Register a React app' }, + { type: 'doc', id: 'guides/applications/register-nextjs-app', label: 'Register a Next.js app' }, + ], + }, + { + type: 'category', + label: 'Authentication', + items: [ + { type: 'doc', id: 'guides/authentication/index', label: 'Authentication' }, + { + type: 'category', + label: 'Add login to apps', + items: [ + { type: 'doc', id: 'guides/authentication/add-login-to-apps', label: 'Add login to apps' }, + { type: 'doc', id: 'guides/authentication/add-login-to-single-page-app', label: 'Add login to an SPA' }, + { type: 'doc', id: 'guides/authentication/add-login-to-web-app', label: 'Add login to a web app' }, + { type: 'doc', id: 'guides/authentication/add-login-to-mobile-app', label: 'Add login to a mobile app' }, + ], + }, + { + type: 'category', + label: 'Add login to SaaS apps', + items: [ + { type: 'doc', id: 'guides/authentication/sso-integrations/index', label: 'Add SSO login to SaaS apps' }, + { type: 'doc', id: 'guides/authentication/sso-integrations/add-google-workspace-template', label: 'Google Workspace' }, + { type: 'doc', id: 'guides/authentication/sso-integrations/add-salesforce-template', label: 'Salesforce' }, + { type: 'doc', id: 'guides/authentication/sso-integrations/add-microsoft-365-template', label: 'Microsoft 365' }, + { type: 'doc', id: 'guides/authentication/sso-integrations/add-zoom-template', label: 'Zoom' }, + { type: 'doc', id: 'guides/authentication/sso-integrations/add-slack-template', label: 'Slack' }, + ], + }, + { + type: 'category', + label: 'Add passwordless login', + items: [ + { type: 'doc', id: 'guides/authentication/passwordless-login/index', label: 'Add passwordless login' }, + { type: 'doc', id: 'guides/authentication/passwordless-login/add-passwordless-login-with-magic-link', label: 'Add login with Magic link' }, + { type: 'doc', id: 'guides/authentication/passwordless-login/add-passwordless-login-with-passkey', label: 'Add login with Passkey' }, + { type: 'doc', id: 'guides/authentication/passwordless-login/add-passwordless-login-with-hypr', label: 'Add login with HYPR' }, + { type: 'doc', id: 'guides/authentication/passwordless-login/add-passwordless-login-with-email-otp', label: 'Add login with Email OTP' }, + { type: 'doc', id: 'guides/authentication/passwordless-login/add-passwordless-login-with-sms-otp', label: 'Add login with SMS OTP' }, + { type: 'doc', id: 'guides/authentication/passwordless-login/add-passwordless-login-with-push-notification', label: 'Add login with Push Notification' }, + ], + }, + { + type: 'category', + label: 'Enable user attributes', + items: [ + { type: 'doc', id: 'guides/authentication/user-attributes/index', label: 'Enable user attributes' }, + { type: 'doc', id: 'guides/authentication/user-attributes/enable-attributes-for-oidc-app', label: 'Enable attributes for OIDC apps' }, + { type: 'doc', id: 'guides/authentication/user-attributes/enable-attributes-for-saml-app', label: 'Enable attributes for SAML apps' }, + ], + }, + { type: 'doc', id: 'guides/authentication/manage-consent-for-attributes', label: 'Manage consent for user attributes' }, + { + type: 'category', + label: 'Add federated login', + items: [ + { type: 'doc', id: 'guides/authentication/federated-login/index', label: 'Add federated login' }, + { + type: 'category', + label: 'Add social login', + items: [ + { type: 'doc', id: 'guides/authentication/social-login/index', label: 'Add social login' }, + { type: 'doc', id: 'guides/authentication/social-login/add-facebook-login', label: 'Add Facebook login' }, + { type: 'doc', id: 'guides/authentication/social-login/add-github-login', label: 'Add GitHub login' }, + { type: 'doc', id: 'guides/authentication/social-login/add-google-login', label: 'Add Google login' }, + { type: 'doc', id: 'guides/authentication/social-login/add-microsoft-login', label: 'Add Microsoft login' }, + { type: 'doc', id: 'guides/authentication/social-login/add-apple-login', label: 'Add Apple login' }, + { type: 'doc', id: 'guides/authentication/social-login/add-linkedin-login', label: 'Add LinkedIn login' }, + ], + }, + { + type: 'category', + label: 'Add decentralized login', + items: [ + { type: 'doc', id: 'guides/authentication/decentralized-login/index', label: 'Add decentralized login' }, + { type: 'doc', id: 'guides/authentication/decentralized-login/sign-in-with-ethereum', label: 'Sign-in with Ethereum' }, + ], + }, + { + type: 'category', + label: 'Add eID login', + items: [ + { type: 'doc', id: 'guides/authentication/eid-login/add-signicat-login', label: 'Add Signicat login' }, + { type: 'doc', id: 'guides/authentication/eid-login/add-france-connect-login', label: 'Add FranceConnect login' }, + { type: 'doc', id: 'guides/authentication/eid-login/add-swiss-id-login', label: 'Add SwissID login' }, + ], + }, + { + type: 'category', + label: 'Add standard-based login', + items: [ + { type: 'doc', id: 'guides/authentication/standard-based-login/index', label: 'Add standard-based login' }, + { type: 'doc', id: 'guides/authentication/standard-based-login/add-oidc-idp-login', label: 'Add login with OIDC IdP' }, + { type: 'doc', id: 'guides/authentication/standard-based-login/add-saml-idp-login', label: 'Add login with SAML IdP' }, + ], + }, + ], + }, + { type: 'doc', id: 'guides/authentication/add-identifier-first-login', label: 'Add identifier first login' }, + { + type: 'category', + label: 'Add multi-factor authentication', + items: [ + { type: 'doc', id: 'guides/authentication/mfa/index', label: 'Add multi-factor authentication' }, + { type: 'doc', id: 'guides/authentication/mfa/add-totp-login', label: 'Add TOTP' }, + { type: 'doc', id: 'guides/authentication/mfa/add-emailotp-login', label: 'Add Email OTP' }, + { type: 'doc', id: 'guides/authentication/mfa/add-smsotp-login', label: 'Add SMS OTP' }, + { type: 'doc', id: 'guides/authentication/mfa/add-push-auth-login', label: 'Add Push Notification' }, + { type: 'doc', id: 'guides/authentication/mfa/add-passkey-login', label: 'Add Passkey' }, + { type: 'doc', id: 'guides/authentication/mfa/add-iproov-login', label: 'Add iProov' }, + { type: 'doc', id: 'guides/authentication/mfa/add-duo-login', label: 'Add Duo' }, + { type: 'doc', id: 'guides/authentication/mfa/user-preferred-mfa-login', label: 'Add user-preferred MFA' }, + ], + }, + { + type: 'category', + label: 'Add conditional authentication', + items: [ + { type: 'doc', id: 'guides/authentication/conditional-auth/index', label: 'Add conditional authentication' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/configure-conditional-auth', label: 'Set up conditional authentication' }, + { + type: 'category', + label: 'Add access control', + items: [ + { type: 'doc', id: 'guides/authentication/conditional-auth/access-control', label: 'Add access control' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/user-age-based-template', label: 'User Age-based access' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/group-based-template-access-control', label: 'Group-based access' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/concurrent-session-based-template', label: 'Concurrent session-based access' }, + ], + }, + { + type: 'category', + label: 'Add adaptive MFA', + items: [ + { type: 'doc', id: 'guides/authentication/conditional-auth/adaptive-mfa', label: 'Add adaptive MFA' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/group-based-template', label: 'MFA based on user group' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/sign-in-option-based-template', label: 'MFA based on sign-in option' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/new-device-based-template', label: 'MFA based on user device' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/ip-based-template', label: 'MFA based on IP address' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/add-authentications-based-on-api-calls', label: 'MFA based on advanced conditions (using WSO2 Choreo)' }, + ], + }, + { + type: 'category', + label: 'Specialized scenarios', + items: [ + { type: 'doc', id: 'guides/authentication/conditional-auth/passkey-progressive-enrollment-based-template', label: 'Add passkey progressive enrollment' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/push-device-progressive-enrollment-based-template', label: 'Add push notification device progressive enrollment' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/on-demand-silent-password-migration-template', label: 'Add on-demand silent password migration' }, + { type: 'doc', id: 'guides/authentication/conditional-auth/otp-retry-resend-limits', label: 'OTP Retry and Resend Limits' }, + ], + }, + { type: 'doc', id: 'guides/authentication/conditional-auth/write-your-first-script', label: 'Write a custom authentication script' }, + ], + }, + { + type: 'category', + label: 'App-native authentication', + items: [ + { type: 'doc', id: 'guides/authentication/app-native-authentication/index', label: 'App-native authentication' }, + { type: 'doc', id: 'guides/authentication/app-native-authentication/add-app-native-authentication', label: 'Add app-native authentication' }, + { type: 'doc', id: 'guides/authentication/app-native-authentication/secure-app-native-authentication-flows', label: 'Secure app-native authentication flows' }, + { type: 'doc', id: 'guides/authentication/app-native-authentication/handle-advanced-login-scenarios', label: 'Handle advanced login scenarios' }, + ], + }, + { type: 'doc', id: 'guides/authentication/login-flow-ai', label: 'Login Flow AI' }, + { + type: 'category', + label: 'Configure OIDC flows', + items: [ + { type: 'doc', id: 'guides/authentication/oidc/index', label: 'Configure OIDC flows' }, + { type: 'doc', id: 'guides/authentication/oidc/discover-oidc-configs', label: 'Discover OIDC endpoints' }, + { type: 'doc', id: 'guides/authentication/oidc/oauth-dynamic-client-registration', label: 'Dynamic Client Registration (DCR)' }, + { + type: 'category', + label: 'Login flows', + items: [ + { type: 'doc', id: 'guides/authentication/oidc/implement-auth-code', label: 'Authorization code flow' }, + { type: 'doc', id: 'guides/authentication/oidc/implement-auth-code-with-pkce', label: 'Authorization code flow and PKCE' }, + { type: 'doc', id: 'guides/authentication/oidc/implement-oidc-hybrid-flow', label: 'Hybrid flow' }, + { type: 'doc', id: 'guides/authentication/oidc/implement-login-with-par', label: 'Pushed Authorization Requests (PAR)' }, + { type: 'doc', id: 'guides/authentication/oidc/jarm', label: 'JWT Secured Authorization Response Mode (JARM) for OAuth 2.0' }, + ], + }, + { + type: 'category', + label: 'Grant types', + items: [ + { type: 'doc', id: 'guides/authentication/configure-jwt-bearer-grant', label: 'JWT Bearer Grant' }, + { type: 'doc', id: 'guides/authentication/configure-ciba-grant', label: 'CIBA Grant' }, + ], + }, + { + type: 'category', + label: 'Client authentication methods', + items: [ + { type: 'doc', id: 'guides/authentication/oidc/private-key-jwt-client-auth', label: 'Private key JWT' }, + ], + }, + { + type: 'category', + label: 'Tokens and validation', + items: [ + { type: 'doc', id: 'guides/authentication/oidc/token-validation-resource-server', label: 'Validate tokens at a resource server' }, + { type: 'doc', id: 'guides/authentication/oidc/validate-jwt-with-jwks', label: 'Validate JWT with JWKS' }, + { type: 'doc', id: 'guides/authentication/oidc/validate-id-tokens', label: 'Validate ID tokens' }, + { + type: 'category', + label: 'Encrypt ID tokens', + items: [ + { type: 'doc', id: 'guides/authentication/oidc/encrypt-decrypt-id-tokens', label: 'Encrypt and decrypt ID tokens' }, + { type: 'doc', id: 'guides/authentication/oidc/id-token-encryption-reference', label: 'ID token encryption reference' }, + ], + }, + { type: 'doc', id: 'guides/authentication/oidc/request-user-info', label: 'Request user information' }, + { type: 'doc', id: 'guides/authentication/oidc/revoke-tokens', label: 'Revoke tokens' }, + { type: 'doc', id: 'guides/authentication/configure-token-exchange', label: 'Configure token exchange' }, + ], + }, + { + type: 'category', + label: 'Logout', + items: [ + { type: 'doc', id: 'guides/authentication/oidc/add-logout', label: 'Front-channel logout' }, + { type: 'doc', id: 'guides/authentication/oidc/add-back-channel-logout', label: 'Back-channel logout' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Configure SAML flows', + items: [ + { type: 'doc', id: 'guides/authentication/saml/index', label: 'Configure SAML flows' }, + { type: 'doc', id: 'guides/authentication/saml/discover-saml-configs', label: 'Discover SAML endpoints and settings' }, + { type: 'doc', id: 'guides/authentication/saml/saml-federated-idp-initiated-sso', label: 'Implement SAML federated IdP-initiated SSO' }, + { type: 'doc', id: 'guides/authentication/saml/saml-back-channel-logout', label: 'SAML back-channel logout' }, + ], + }, + { type: 'doc', id: 'guides/authentication/jit-user-provisioning', label: 'Configure Just-in-Time user provisioning' }, + ], + }, + { + type: 'category', + label: 'Authorization', + items: [ + { type: 'doc', id: 'guides/authorization/index', label: 'Authorization' }, + { + type: 'category', + label: 'API authorization', + items: [ + { type: 'doc', id: 'guides/authorization/api-authorization/api-authorization', label: 'Role-based access control' }, + ], + }, + { + type: 'category', + label: 'User impersonation', + items: [ + { type: 'doc', id: 'guides/authorization/user-impersonation/index', label: 'User impersonation' }, + { type: 'doc', id: 'guides/authorization/user-impersonation/via-console', label: 'via Console' }, + { type: 'doc', id: 'guides/authorization/user-impersonation/via-business-application', label: 'via business application (advanced)' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Identity Verification', + items: [ + { type: 'doc', id: 'guides/identity-verification/index', label: 'Identity Verification' }, + { type: 'doc', id: 'guides/identity-verification/configure-identity-verification-provider', label: 'Configure an Identity Verification Provider' }, + { type: 'doc', id: 'guides/identity-verification/add-identity-verification-with-onfido', label: 'Identity Verification with Onfido' }, + ], + }, + { + type: 'category', + label: 'User management', + items: [ + { type: 'doc', id: 'guides/users/index', label: 'User management' }, + { type: 'doc', id: 'guides/users/manage-administrators', label: 'Manage administrators' }, + { + type: 'category', + label: 'Users', + items: [ + { type: 'doc', id: 'guides/users/onboard-users', label: 'Onboard users' }, + { type: 'doc', id: 'guides/users/manage-users', label: 'Manage users' }, + ], + }, + { type: 'doc', id: 'guides/users/manage-groups', label: 'Manage groups' }, + { type: 'doc', id: 'guides/users/manage-roles', label: 'Manage roles' }, + { type: 'doc', id: 'guides/users/manage-sessions', label: 'Manage active sessions' }, + { + type: 'category', + label: 'Outbound provisioning', + items: [ + { type: 'doc', id: 'guides/users/outbound-provisioning/outbound-provisioning-overview', label: 'Overview' }, + { type: 'doc', id: 'guides/users/outbound-provisioning/setup-outbound-provisioning', label: 'Set up outbound provisioning' }, + { type: 'doc', id: 'guides/users/outbound-provisioning/group-based-provisioning', label: 'Group-based provisioning' }, + { + type: 'category', + label: 'Configure an outbound connector', + items: [ + { type: 'doc', id: 'guides/users/outbound-provisioning/outbound-connectors/scim2', label: 'SCIM2' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Migrate users to Asgardeo', + items: [ + { type: 'doc', id: 'guides/users/migrate-users/index', label: 'Migrate users to Asgardeo' }, + { type: 'doc', id: 'guides/users/migrate-users/migrate-users-guide', label: 'Migrate user accounts' }, + { type: 'doc', id: 'guides/users/migrate-users/migrate-passwords', label: 'Migrate user passwords' }, + ], + }, + { + type: 'category', + label: 'Manage attributes and mappings', + items: [ + { type: 'doc', id: 'guides/users/attributes/index', label: 'Manage attributes and mappings' }, + { + type: 'category', + label: 'User attributes', + items: [ + { type: 'doc', id: 'guides/users/attributes/user-attributes/manage-attributes', label: 'Manage attributes' }, + { type: 'doc', id: 'guides/users/attributes/user-attributes/configure-attributes', label: 'Configure attributes' }, + { type: 'doc', id: 'guides/users/attributes/user-attributes/attribute-configurations-reference', label: 'Configurations reference' }, + ], + }, + { type: 'doc', id: 'guides/users/attributes/manage-oidc-attribute-mappings', label: 'OIDC attribute mappings' }, + { type: 'doc', id: 'guides/users/attributes/manage-scopes', label: 'OIDC scopes' }, + { type: 'doc', id: 'guides/users/attributes/manage-scim2-attribute-mappings', label: 'SCIM2 attribute mappings' }, + { type: 'doc', id: 'guides/users/attributes/configure-unique-attributes', label: 'Configure unique attributes' }, + { type: 'doc', id: 'guides/users/attributes/configure-multi-valued-contact-attributes', label: 'Configure multi-valued contact attributes' }, + { + type: 'category', + label: 'Verification and notification settings for attribute updates', + items: [ + { type: 'doc', id: 'guides/users/attributes/user-attribute-change-verification', label: 'Configure settings' }, + { + type: 'category', + label: 'Try it out', + items: [ + { type: 'doc', id: 'guides/users/attributes/email-verification-on-update', label: 'Email address update verification' }, + { type: 'doc', id: 'guides/users/attributes/mobile-verification-on-update', label: 'Mobile number update verification' }, + ], + }, + ], + }, + ], + }, + { + type: 'category', + label: 'Manage user stores', + items: [ + { type: 'doc', id: 'guides/users/user-stores/index', label: 'Manage user stores' }, + { type: 'doc', id: 'guides/users/user-stores/configure-a-user-store', label: 'Connect a remote user store' }, + { type: 'doc', id: 'guides/users/user-stores/configure-high-availability', label: 'Configure high availability' }, + { type: 'doc', id: 'guides/users/user-stores/update-user-stores', label: 'Manage remote user stores' }, + { type: 'doc', id: 'guides/users/user-stores/deployment-best-practices', label: 'Deployment best practices' }, + { type: 'doc', id: 'guides/users/user-stores/advanced-configurations-for-the-agent', label: 'Advanced configuration for the agent' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Workflows', + items: [ + { type: 'doc', id: 'guides/workflows/index', label: 'Workflows' }, + { type: 'doc', id: 'guides/workflows/approval-workflows', label: 'Approval workflows' }, + { type: 'doc', id: 'guides/workflows/workflow-rules', label: 'Approval workflow rules' }, + { type: 'doc', id: 'guides/workflows/workflow-requests', label: 'Workflow requests' }, + ], + }, + { + type: 'category', + label: 'Account configurations', + items: [ + { type: 'doc', id: 'guides/account-configurations/index', label: 'Account configurations' }, + { + type: 'category', + label: 'Login security', + items: [ + { type: 'doc', id: 'guides/account-configurations/login-security/login-attempts', label: 'Login attempts' }, + { type: 'doc', id: 'guides/account-configurations/login-security/password-validation', label: 'Password validation' }, + { type: 'doc', id: 'guides/account-configurations/login-security/bot-detection', label: 'Bot detection' }, + { type: 'doc', id: 'guides/account-configurations/login-security/sift-fraud-detection', label: 'Fraud detection' }, + { type: 'doc', id: 'guides/account-configurations/login-security/session-management', label: 'Session management' }, + ], + }, + { + type: 'category', + label: 'Account recovery', + items: [ + { type: 'doc', id: 'guides/account-configurations/account-recovery/password-recovery', label: 'Password recovery' }, + { type: 'doc', id: 'guides/account-configurations/account-recovery/admin-initiated-password-reset', label: 'Admin Initiated Password Reset' }, + ], + }, + { + type: 'category', + label: 'User onboarding', + items: [ + { type: 'doc', id: 'guides/account-configurations/user-onboarding/self-registration', label: 'Self-registration' }, + { type: 'doc', id: 'guides/account-configurations/user-onboarding/self-registration-flow', label: 'Self-registration flow' }, + { type: 'doc', id: 'guides/account-configurations/user-onboarding/invite-user-to-set-password', label: 'Invite user to set password' }, + ], + }, + { + type: 'category', + label: 'Manage login identifiers', + items: [ + { type: 'doc', id: 'guides/account-configurations/account-login/username-validation', label: 'Configure username validation' }, + { type: 'doc', id: 'guides/user-accounts/account-login/configure-login-identifiers', label: 'Configure alternative login identifiers' }, + ], + }, + { type: 'doc', id: 'guides/account-configurations/account-disabling', label: 'Account disabling' }, + ], + }, + { + type: 'category', + label: 'Flows', + items: [ + { type: 'doc', id: 'guides/flows/index', label: 'Flows' }, + { type: 'doc', id: 'guides/flows/build-a-flow', label: 'Get Started' }, + { type: 'doc', id: 'guides/flows/self-registration', label: 'Self Registration' }, + { type: 'doc', id: 'guides/flows/password-recovery', label: 'Password Recovery' }, + { type: 'doc', id: 'guides/flows/invited-user-registration', label: 'Invited User Registration' }, + { type: 'doc', id: 'guides/flows/flow-ai', label: 'Flow AI' }, + { type: 'doc', id: 'guides/flows/flow-execution-api', label: 'Use the Flow Execution API' }, + { type: 'doc', id: 'guides/flows/flow-execution-components', label: 'Understand Flow Execution Components' }, + { type: 'doc', id: 'guides/flows/troubleshooting', label: 'Troubleshooting' }, + ], + }, + { + type: 'category', + label: 'User self-service', + items: [ + { type: 'doc', id: 'guides/user-self-service/index', label: 'User self-service' }, + { + type: 'category', + label: 'Self-service portal', + items: [ + { type: 'doc', id: 'guides/user-self-service/configure-self-service-portal', label: 'Configure the self-service portal' }, + { type: 'doc', id: 'guides/user-self-service/update-profile-info', label: 'Update profile information' }, + { type: 'doc', id: 'guides/user-self-service/change-password', label: 'Change password' }, + { type: 'doc', id: 'guides/user-self-service/manage-linked-accounts', label: 'Manage linked social accounts' }, + { type: 'doc', id: 'guides/user-self-service/export-profile-information', label: 'Export profile information' }, + { type: 'doc', id: 'guides/user-self-service/manage-consents', label: 'Manage consents' }, + { type: 'doc', id: 'guides/user-self-service/manage-login-sessions', label: 'Manage login sessions' }, + { type: 'doc', id: 'guides/user-self-service/self-register', label: 'Self-register' }, + { type: 'doc', id: 'guides/user-self-service/register-passkey', label: 'Register passkeys' }, + { type: 'doc', id: 'guides/user-self-service/register-push-notification-device', label: 'Register Push Notification Device' }, + { type: 'doc', id: 'guides/user-self-service/user-password-recovery', label: 'Password recovery' }, + { type: 'doc', id: 'guides/user-self-service/enable-totp', label: 'Enroll TOTP' }, + { type: 'doc', id: 'guides/user-self-service/manage-backup-codes', label: 'Manage backup codes' }, + { type: 'doc', id: 'guides/user-self-service/discover-applications', label: 'Discover applications' }, + { type: 'doc', id: 'guides/user-self-service/manage-approvals', label: 'Manage approvals' }, + ], + }, + { type: 'doc', id: 'guides/user-self-service/build-self-service-capabilities', label: 'Build self-service capabilities' }, + ], + }, + { + type: 'category', + label: 'Organizations', + items: [ + { type: 'doc', id: 'guides/organization-management/index', label: 'Organizations' }, + { + type: 'category', + label: 'Getting started', + items: [ + { type: 'doc', id: 'guides/organization-management/organizations-overview', label: 'Overview' }, + ], + }, + { type: 'doc', id: 'guides/organization-management/manage-organizations', label: 'Set up organizations' }, + { + type: 'category', + label: 'Delegate administration', + items: [ + { type: 'doc', id: 'guides/organization-management/manage-b2b-administration', label: 'Set up administration portal' }, + { + type: 'category', + label: 'Onboard administrators', + items: [ + { type: 'doc', id: 'guides/organization-management/onboard-org-admins/index', label: 'Onboard administrators' }, + { type: 'doc', id: 'guides/organization-management/onboard-org-admins/sales-led-approach', label: 'Sales-led approach' }, + { type: 'doc', id: 'guides/organization-management/onboard-org-admins/self-service-approach', label: 'Self-service approach' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Configure organization applications', + items: [ + { type: 'doc', id: 'guides/organization-management/share-applications', label: 'Share applications' }, + { + type: 'category', + label: 'Organization applications', + items: [ + { type: 'doc', id: 'guides/organization-management/organization-applications', label: 'Create applications' }, + { type: 'doc', id: 'guides/organization-management/select-token-issuer-for-organization-apps', label: 'Select token issuer' }, + ], + }, + { type: 'doc', id: 'guides/organization-management/manage-conflicts-in-organizations', label: 'Manage conflicts in organizations' }, + ], + }, + { + type: 'category', + label: 'Authorize API resources', + items: [ + { type: 'doc', id: 'guides/organization-management/api-authorization-overview', label: 'Overview' }, + { type: 'doc', id: 'guides/organization-management/api-authorization-for-b2b', label: 'Authorize applications to API resources' }, + { type: 'doc', id: 'guides/organization-management/organization-roles', label: 'Configure roles to consume authorized APIs' }, + { type: 'doc', id: 'guides/organization-management/generate-tokens-for-organization-apps', label: 'Generate tokens for organization applications' }, + ], + }, + { + type: 'category', + label: 'Manage organization users', + items: [ + { type: 'doc', id: 'guides/organization-management/onboard-users', label: 'Onboard users' }, + { type: 'doc', id: 'guides/organization-management/share-user-profiles', label: 'Share users' }, + ], + }, + { + type: 'category', + label: 'Customize organizations', + items: [ + { + type: 'category', + label: 'Organization settings', + items: [ + { type: 'doc', id: 'guides/organization-management/inheritance-in-organizations/index', label: 'Organization settings' }, + { type: 'doc', id: 'guides/organization-management/inheritance-in-organizations/login-registration-inheritance', label: 'Login and registration settings' }, + { type: 'doc', id: 'guides/organization-management/inheritance-in-organizations/ui-branding-inheritance', label: 'UI branding' }, + { type: 'doc', id: 'guides/organization-management/inheritance-in-organizations/email-sms-templates-inheritance', label: 'Email and SMS templates' }, + { type: 'doc', id: 'guides/organization-management/inheritance-in-organizations/attribute-inheritance', label: 'User attributes' }, + { type: 'doc', id: 'guides/organization-management/inheritance-in-organizations/oidc-scope-inheritance', label: 'OIDC scopes' }, + { type: 'doc', id: 'guides/organization-management/inheritance-in-organizations/flow-inheritance', label: 'Flows' }, + ], + }, + { type: 'doc', id: 'guides/organization-management/service-extensions/service-extensions', label: 'Extend with service extensions' }, + ], + }, + { + type: 'category', + label: 'Offboard organizations', + items: [ + { type: 'doc', id: 'guides/organization-management/disable-delete-organizations', label: 'Disable or delete an organization' }, + ], + }, + { type: 'doc', id: 'guides/organization-management/try-a-b2b-use-case', label: 'Try a B2B use case' }, + ], + }, + { + type: 'category', + label: 'Notification Channels', + items: [ + { type: 'doc', id: 'guides/notification-channels/configure-email-provider', label: 'Configure Email Provider' }, + { type: 'doc', id: 'guides/notification-channels/configure-sms-provider', label: 'Configure SMS Provider' }, + { type: 'doc', id: 'guides/notification-channels/configure-push-provider', label: 'Configure Push Provider' }, + ], + }, + { + type: 'category', + label: 'Customizations', + items: [ + { + type: 'category', + label: 'Customize branding', + items: [ + { type: 'doc', id: 'guides/branding/index', label: 'Customize branding' }, + { type: 'doc', id: 'guides/branding/configure-ui-branding', label: 'Configure UI branding' }, + { type: 'doc', id: 'guides/branding/customize-layouts-with-editor', label: 'Customize layouts' }, + { type: 'doc', id: 'guides/branding/branding-ai', label: 'Branding AI' }, + { type: 'doc', id: 'guides/branding/configure-custom-domains', label: 'Configure custom domains' }, + { type: 'doc', id: 'guides/branding/customize-email-templates', label: 'Customize email templates' }, + { type: 'doc', id: 'guides/branding/customize-sms-templates', label: 'Customize SMS templates' }, + { type: 'doc', id: 'guides/branding/localization', label: 'Localization in Asgardeo' }, + ], + }, + { + type: 'category', + label: 'Extend with service extensions', + items: [ + { type: 'doc', id: 'guides/service-extensions/understanding-service-extensions', label: 'Understanding service extensions' }, + { + type: 'category', + label: 'In-flow extensions', + items: [ + { type: 'doc', id: 'guides/service-extensions/in-flow-extensions/custom-authentication', label: 'Custom authentication' }, + ], + }, + { + type: 'category', + label: 'Pre-flow extensions (Actions)', + items: [ + { type: 'doc', id: 'guides/service-extensions/pre-flow-extensions/setting-up-actions', label: 'Setting up an action' }, + { type: 'doc', id: 'guides/service-extensions/pre-flow-extensions/pre-issue-access-token-action', label: 'Pre issue access token action' }, + { type: 'doc', id: 'guides/service-extensions/pre-flow-extensions/pre-issue-id-token-action', label: 'Pre issue ID token action' }, + { type: 'doc', id: 'guides/service-extensions/pre-flow-extensions/pre-update-password-action', label: 'Pre update password action' }, + { type: 'doc', id: 'guides/service-extensions/pre-flow-extensions/pre-update-profile-action', label: 'Pre update profile action' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Integrate with webhooks', + items: [ + { type: 'doc', id: 'guides/webhooks/understanding-webhooks', label: 'Understanding webhooks' }, + { type: 'doc', id: 'guides/webhooks/setup-webhooks', label: 'Setup webhooks' }, + { type: 'doc', id: 'guides/webhooks/webhook-events-and-payloads', label: 'Webhook events and payloads' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Your Asgardeo', + items: [ + { type: 'doc', id: 'guides/your-asgardeo/index', label: 'Your Asgardeo' }, + { type: 'doc', id: 'guides/your-asgardeo/manage-root-organizations', label: 'Manage root organizations' }, + { + type: 'category', + label: 'Manage environments', + items: [ + { type: 'doc', id: 'guides/your-asgardeo/manage-environments/index', label: 'Manage environments' }, + { type: 'doc', id: 'guides/your-asgardeo/manage-environments/promote-configurations', label: 'Promote configurations across environments' }, + ], + }, + { type: 'doc', id: 'guides/your-asgardeo/asgardeo-self-service', label: 'Self-service' }, + { type: 'doc', id: 'guides/your-asgardeo/recover-password', label: 'Recover your password' }, + { type: 'doc', id: 'guides/your-asgardeo/delete-your-user-account', label: 'Delete your user account' }, + { + type: 'category', + label: 'Subscribe to Asgardeo', + items: [ + { type: 'doc', id: 'guides/your-asgardeo/subscribe-to-asgardeo/index', label: 'Subscribe to Asgardeo' }, + { type: 'doc', id: 'guides/your-asgardeo/subscribe-to-asgardeo/subscribe-via-billing-portal', label: 'via Billing Portal' }, + { type: 'doc', id: 'guides/your-asgardeo/subscribe-to-asgardeo/subscribe-via-azure-marketplace', label: 'via Azure Marketplace' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Asgardeo logs', + items: [ + { type: 'doc', id: 'guides/asgardeo-logs/index', label: 'Asgardeo logs' }, + { type: 'doc', id: 'guides/asgardeo-logs/diagnostic-logs', label: 'Diagnostic logs' }, + { + type: 'category', + label: 'Audit logs', + items: [ + { type: 'doc', id: 'guides/asgardeo-logs/audit-logs/index', label: 'Audit logs' }, + { type: 'doc', id: 'guides/asgardeo-logs/audit-logs/audit-log-catalog', label: 'Audit log catalog' }, + ], + }, + { type: 'doc', id: 'guides/asgardeo-logs/remote-log-publish', label: 'Remote log publish' }, + ], + }, + { + type: 'category', + label: 'Monitoring', + items: [ + { type: 'doc', id: 'guides/monitoring/index', label: 'Monitoring' }, + { type: 'doc', id: 'guides/monitoring/pii-in-asgardeo-logs', label: 'PII in Asgardeo logs' }, + { type: 'doc', id: 'guides/monitoring/asgardeo-events', label: 'Asgardeo events' }, + { type: 'doc', id: 'guides/organization-insights', label: 'Organization insights' }, + ], + }, + { + type: 'category', + label: 'Agentic AI', + items: [ + { + type: 'category', + label: 'MCP Authorization', + items: [ + { type: 'doc', id: 'guides/agentic-ai/mcp/index', label: 'MCP Authorization' }, + { type: 'doc', id: 'guides/agentic-ai/mcp/mcp-server-authorization', label: 'Securing MCP Servers' }, + { type: 'doc', id: 'guides/agentic-ai/mcp/register-mcp-client-app', label: 'Setting up MCP Clients' }, + ], + }, + { + type: 'category', + label: 'Identity for AI Agents', + items: [ + { type: 'doc', id: 'guides/agentic-ai/ai-agents/index', label: 'Identity for AI agents' }, + { type: 'doc', id: 'guides/agentic-ai/ai-agents/register-and-manage-agents', label: 'Register and manage agents' }, + { type: 'doc', id: 'guides/agentic-ai/ai-agents/agent-credentials', label: 'Agent credentials' }, + { type: 'doc', id: 'guides/agentic-ai/ai-agents/access-control-for-agents', label: 'Access control for agents' }, + { type: 'doc', id: 'guides/agentic-ai/ai-agents/agent-authentication', label: 'Agent authentication' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Verifiable Credentials', + items: [ + { type: 'doc', id: 'guides/verifiable-credentials/index', label: 'Overview' }, + { type: 'doc', id: 'guides/verifiable-credentials/issue-vc', label: 'Issue verifiable credentials to a digital wallet' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Tutorials', + className: 'sidebar-icon-graduation', + link: { type: 'doc', id: 'tutorials/index' }, + items: [ + { type: 'doc', id: 'tutorials/auth-users-into-android-apps', label: 'Authenticate users into Android applications' }, + { type: 'doc', id: 'tutorials/auth-users-into-flutter-apps', label: 'Authenticate users into Flutter applications' }, + { type: 'doc', id: 'tutorials/connect-asgardeo-with-ms-entra', label: 'Connect Asgardeo as an OIDC attribute provider (with Microsoft Entra Verified ID)' }, + { type: 'doc', id: 'tutorials/connect-asgardeo-with-mattr', label: 'Connect Asgardeo as an OIDC attribute provider (with MATTR)' }, + { type: 'doc', id: 'tutorials/secure-spring-boot-api', label: 'Secure Spring Boot API with Asgardeo' }, + { type: 'doc', id: 'tutorials/smart-on-fhir', label: 'Integrate Asgardeo with Smart on FHIR healthcare apps' }, + { type: 'doc', id: 'tutorials/secure-agentic-ai-systems', label: 'Secure Agentic AI Systems with Asgardeo' }, + { type: 'doc', id: 'tutorials/end-to-end-mcp-authorization-with-asgardeo', label: 'Implement End-to-End Authorization for MCP servers' }, + ], + }, + { + type: 'category', + label: 'SDKs', + className: 'sidebar-icon-cube', + link: { type: 'doc', id: 'sdks/index' }, + items: [ + { + type: 'category', + label: 'React SDK', + items: [ + { type: 'doc', id: 'sdks/react/overview', label: 'Overview' }, + { + type: 'category', + label: 'APIs', + items: [ + { + type: 'category', + label: 'Contexts', + items: [ + { type: 'doc', id: 'sdks/react/contexts/asgardeo-provider', label: '' }, + ], + }, + { + type: 'category', + label: 'Components', + items: [ + { + type: 'category', + label: 'Action Components', + items: [ + { type: 'doc', id: 'sdks/react/components/action-components/sign-in-button', label: '' }, + { type: 'doc', id: 'sdks/react/components/action-components/sign-out-button', label: '' }, + { type: 'doc', id: 'sdks/react/components/action-components/sign-up-button', label: '' }, + ], + }, + { + type: 'category', + label: 'Control Components', + items: [ + { type: 'doc', id: 'sdks/react/components/control-components/signed-in', label: '' }, + { type: 'doc', id: 'sdks/react/components/control-components/signed-out', label: '' }, + { type: 'doc', id: 'sdks/react/components/control-components/loading', label: '' }, + ], + }, + { + type: 'category', + label: 'User Self-care Components', + items: [ + { type: 'doc', id: 'sdks/react/components/user-selfcare-components/user-dropdown', label: '' }, + { type: 'doc', id: 'sdks/react/components/user-selfcare-components/user-profile', label: '' }, + { type: 'doc', id: 'sdks/react/components/user-selfcare-components/user', label: '' }, + ], + }, + { + type: 'category', + label: 'Organization Components (B2B)', + items: [ + { type: 'doc', id: 'sdks/react/components/organization-components/create-organization', label: '' }, + { type: 'doc', id: 'sdks/react/components/organization-components/organization-profile', label: '' }, + { type: 'doc', id: 'sdks/react/components/organization-components/organization-switcher', label: '' }, + { type: 'doc', id: 'sdks/react/components/organization-components/organization-list', label: '' }, + { type: 'doc', id: 'sdks/react/components/organization-components/organization', label: '' }, + { type: 'doc', id: 'sdks/react/components/organization-components/organization-context', label: '' }, + ], + }, + ], + }, + { + type: 'category', + label: 'hooks', + items: [ + { type: 'doc', id: 'sdks/react/hooks/use-asgardeo', label: 'useAsgardeo()' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Guides', + items: [ + { type: 'doc', id: 'sdks/react/guides/accessing-protected-apis', label: 'Accessing Protected APIs' }, + { type: 'doc', id: 'sdks/react/guides/protecting-routes', label: 'Protecting Routes' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Next.js SDK', + items: [ + { type: 'doc', id: 'sdks/nextjs/overview', label: 'Overview' }, + { + type: 'category', + label: 'APIs', + items: [ + { + type: 'category', + label: 'Contexts', + items: [ + { type: 'doc', id: 'sdks/nextjs/contexts/asgardeo-provider', label: '' }, + ], + }, + { + type: 'category', + label: 'Middleware', + items: [ + { type: 'doc', id: 'sdks/nextjs/middleware/asgardeo-middleware', label: 'asgardeoMiddleware()' }, + ], + }, + { + type: 'category', + label: 'Components', + items: [ + { + type: 'category', + label: 'Action Components', + items: [ + { type: 'doc', id: 'sdks/nextjs/components/action-components/sign-in-button', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/action-components/sign-out-button', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/action-components/sign-up-button', label: '' }, + ], + }, + { + type: 'category', + label: 'Control Components', + items: [ + { type: 'doc', id: 'sdks/nextjs/components/control-components/signed-in', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/control-components/signed-out', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/control-components/loading', label: '' }, + ], + }, + { + type: 'category', + label: 'Authentication Components', + items: [ + { type: 'doc', id: 'sdks/nextjs/components/authentication/sign-in', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/authentication/sign-up', label: '' }, + ], + }, + { + type: 'category', + label: 'User Self-care Components', + items: [ + { type: 'doc', id: 'sdks/nextjs/components/user-selfcare-components/user-dropdown', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/user-selfcare-components/user-profile', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/user-selfcare-components/user', label: '' }, + ], + }, + { + type: 'category', + label: 'Organization Components (B2B)', + items: [ + { type: 'doc', id: 'sdks/nextjs/components/organization-components/create-organization', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/organization-components/organization-profile', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/organization-components/organization-switcher', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/organization-components/organization-list', label: '' }, + { type: 'doc', id: 'sdks/nextjs/components/organization-components/organization', label: '' }, + ], + }, + ], + }, + { + type: 'category', + label: 'hooks', + items: [ + { type: 'doc', id: 'sdks/nextjs/hooks/use-asgardeo', label: 'useAsgardeo()' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Guides', + items: [ + { type: 'doc', id: 'sdks/nextjs/guides/accessing-protected-apis', label: 'Accessing Protected APIs' }, + { type: 'doc', id: 'sdks/nextjs/guides/protecting-routes', label: 'Protecting Routes' }, + ], + }, + ], + }, + ], + }, + { type: 'doc', id: 'sdks/asgardeo-mcp-server', label: 'Asgardeo MCP Server' }, + { + type: 'category', + label: 'APIs', + className: 'sidebar-icon-code', + link: { type: 'doc', id: 'apis/index' }, + items: [ + { + type: 'category', + label: 'Management APIs', + items: [ + { type: 'doc', id: 'apis/action-management-rest-api', label: 'Action Management API' }, + { type: 'doc', id: 'apis/scim2-agents-rest-apis', label: 'Agent Management API' }, + { type: 'doc', id: 'apis/api-resource-management-rest-api', label: 'API resource management API' }, + { type: 'doc', id: 'apis/application-management', label: 'Application management API' }, + { type: 'doc', id: 'apis/app-native-authentication-api', label: 'App-native authentication API' }, + { type: 'doc', id: 'apis/attribute-management', label: 'Attribute management API' }, + { type: 'doc', id: 'apis/authenticators', label: 'Authenticators API' }, + { type: 'doc', id: 'apis/branding-preference-rest-api', label: 'Branding Preferences API' }, + { type: 'doc', id: 'apis/consent-management', label: 'Consent management API' }, + { type: 'doc', id: 'apis/email-template', label: 'Email templates API' }, + { type: 'doc', id: 'apis/event-configuration', label: 'Event configuration API' }, + { type: 'doc', id: 'apis/identity-governance', label: 'Identity governance API' }, + { type: 'doc', id: 'apis/idp', label: 'Identity provider API' }, + { type: 'doc', id: 'apis/identity-verification-providers', label: 'Identity verification provider API' }, + { type: 'doc', id: 'apis/idle-account-identification', label: 'Idle account identification API' }, + { type: 'doc', id: 'apis/notification-sender-v2-rest-api', label: 'Notification sender API' }, + { type: 'doc', id: 'apis/notification-templates', label: 'Notification templates management API' }, + { type: 'doc', id: 'apis/dynamic-client-registration-rest-api', label: 'OAuth Dynamic Client Registration API' }, + { type: 'doc', id: 'apis/organization-discovery', label: 'Organization discovery API' }, + { type: 'doc', id: 'apis/organization-discovery-config-mgt-rest-api', label: 'Organization discovery configuration management API' }, + { type: 'doc', id: 'apis/organization-management', label: 'Organization management API' }, + { + type: 'category', + label: 'Role management', + items: [ + { type: 'doc', id: 'apis/role-management/roles', label: 'Role management (SCIM 2.0) API' }, + ], + }, + { type: 'doc', id: 'apis/rule-metadata-rest-api', label: 'Rule Metadata API' }, + { type: 'doc', id: 'apis/end-user-credential-management-rest-api', label: 'User credential management API' }, + { type: 'doc', id: 'apis/vc-template-management-rest-api', label: 'Verifiable Credential Template Management API' }, + { + type: 'category', + label: 'User management', + items: [ + { + type: 'category', + label: 'SCIM 2.0 API', + items: [ + { type: 'doc', id: 'apis/scim2/index', label: 'SCIM 2.0 API' }, + { type: 'doc', id: 'apis/scim2/scim2-users-rest-api', label: 'SCIM 2.0 Users API' }, + { type: 'doc', id: 'apis/scim2/scim2-groups-rest-api', label: 'SCIM 2.0 Groups API' }, + { type: 'doc', id: 'apis/scim2/scim2-patch-operations', label: 'SCIM 2.0 Patch operations' }, + { type: 'doc', id: 'apis/scim2/scim2-bulk-rest-api', label: 'SCIM 2.0 Bulk API' }, + { type: 'doc', id: 'apis/scim2/scim2-schema-rest-api', label: 'SCIM 2.0 Schema API' }, + { type: 'doc', id: 'apis/scim2/scim2-batch-operations', label: 'SCIM 2.0 Batch Operations' }, + { type: 'doc', id: 'apis/scim2/scim2-resource-types-rest-api', label: 'SCIM 2.0 Resource types API' }, + { type: 'doc', id: 'apis/scim2/scim2-service-provider-configs-rest-api', label: 'SCIM 2.0 Service provider configs API' }, + { type: 'doc', id: 'apis/scim2/build-scim2-user-creation-payload', label: 'SCIM 2.0 Build user creation payload' }, + ], + }, + { type: 'doc', id: 'apis/association-management-by-admin', label: 'User account associations API' }, + { type: 'doc', id: 'apis/user-account-recovery', label: 'Account Recovery API' }, + { type: 'doc', id: 'apis/offline-user-onboard', label: 'Offline user onboard management API' }, + { type: 'doc', id: 'apis/verification-code-management-rest-api', label: 'Verification Code Management API' }, + { type: 'doc', id: 'apis/admin-identity-verification', label: 'Identity verification API' }, + ], + }, + { + type: 'category', + label: 'User sessions', + items: [ + { type: 'doc', id: 'apis/session', label: 'Session management API' }, + { type: 'doc', id: 'apis/extend-sessions', label: 'Session extension API' }, + ], + }, + { + type: 'category', + label: 'User sharing management APIs', + items: [ + { type: 'doc', id: 'apis/organization-user-share-rest-api', label: 'V1 (deprecated)' }, + { type: 'doc', id: 'apis/organization-user-share-v2-rest-api', label: 'V2' }, + ], + }, + { type: 'doc', id: 'apis/user-store', label: 'User store management API' }, + { type: 'doc', id: 'apis/validation', label: 'Validation API' }, + { type: 'doc', id: 'apis/webhook-management-rest-api', label: 'Webhook Management API' }, + { type: 'doc', id: 'apis/webhook-metadata-rest-api', label: 'Webhook Metadata API' }, + { type: 'doc', id: 'apis/workflow-rest-api', label: 'Workflow Management API' }, + ], + }, + { + type: 'category', + label: 'Organization APIs', + items: [ + { type: 'doc', id: 'apis/organization-apis/index', label: 'Organization APIs' }, + { type: 'doc', id: 'apis/organization-apis/authentication', label: 'Get access for organization APIs' }, + { type: 'doc', id: 'apis/organization-apis/action-management-rest-api', label: 'Action Management API' }, + { type: 'doc', id: 'apis/organization-apis/api-resource-management-rest-api', label: 'API resource management API' }, + { + type: 'category', + label: 'Application management API', + items: [ + { type: 'doc', id: 'apis/organization-apis/shared-application-management', label: 'Application management API (Shared Applications)' }, + { type: 'doc', id: 'apis/organization-apis/organization-application-mgt', label: 'Application management API' }, + ], + }, + { type: 'doc', id: 'apis/organization-apis/org-authenticators', label: 'Authenticators API' }, + { type: 'doc', id: 'apis/organization-apis/org-branding-management', label: 'Branding API' }, + { type: 'doc', id: 'apis/organization-apis/org-claim-management', label: 'Claim management API' }, + { type: 'doc', id: 'apis/organization-apis/org-idp', label: 'Identity provider management API' }, + { type: 'doc', id: 'apis/organization-apis/org-account-recovery', label: 'Identity recovery API' }, + { type: 'doc', id: 'apis/organization-apis/org-idle-account-identification', label: 'Idle account identification API' }, + { type: 'doc', id: 'apis/organization-apis/organization-user-invitation', label: 'Invite parent organization\'s users API' }, + { type: 'doc', id: 'apis/organization-apis/notification-sender-v2-rest-api', label: 'Notification sender API' }, + { type: 'doc', id: 'apis/organization-apis/organization-discovery', label: 'Offline user onboard management API' }, + { type: 'doc', id: 'apis/organization-apis/org-management', label: 'Organization management API' }, + { type: 'doc', id: 'apis/organization-apis/org-role-mgt', label: 'Role management API' }, + { type: 'doc', id: 'apis/organization-apis/rule-metadata-rest-api', label: 'Rule Metadata API' }, + { type: 'doc', id: 'apis/organization-apis/end-user-credential-management-rest-api', label: 'User credential management API' }, + { + type: 'category', + label: 'User management', + items: [ + { type: 'doc', id: 'apis/organization-apis/scim2/index', label: 'User management' }, + { type: 'doc', id: 'apis/organization-apis/scim2/scim2-org-user-mgt', label: 'SCIM 2.0 Users API' }, + { type: 'doc', id: 'apis/organization-apis/scim2/scim2-org-group-mgt', label: 'SCIM 2.0 Groups API' }, + { type: 'doc', id: 'apis/organization-apis/scim2/scim2-org-bulk', label: 'SCIM 2.0 Bulk API' }, + { type: 'doc', id: 'apis/organization-apis/org-association-rest-api', label: 'User Account Association API' }, + { type: 'doc', id: 'apis/organization-apis/verification-code-management-rest-api', label: 'Verification Code Management API' }, + ], + }, + { type: 'doc', id: 'apis/organization-apis/organization-user-share', label: 'User sharing management API' }, + { type: 'doc', id: 'apis/organization-apis/organization-user-share-v2', label: 'User sharing management API V2' }, + { type: 'doc', id: 'apis/organization-apis/org-user-store', label: 'User store management API' }, + ], + }, + { + type: 'category', + label: 'End User APIs', + items: [ + { type: 'doc', id: 'apis/scim2-me', label: 'SCIM 2.0 Me API' }, + { type: 'doc', id: 'apis/register-mfa/backup-code', label: 'Backup codes API' }, + { type: 'doc', id: 'apis/register-mfa/export-user-info', label: 'Export user information API' }, + { type: 'doc', id: 'apis/register-mfa/password-recovery', label: 'Password recovery API' }, + { type: 'doc', id: 'apis/register-mfa/totp', label: 'TOTP API' }, + { type: 'doc', id: 'apis/push-notification-device-rest-api', label: 'Push Notification Device API' }, + { type: 'doc', id: 'apis/association-management-by-user', label: 'User account associations API' }, + { type: 'doc', id: 'apis/export-user-info', label: 'Export user information API' }, + { type: 'doc', id: 'apis/user-identity-verification', label: 'Identity Verification' }, + { type: 'doc', id: 'apis/user-organization-api', label: 'Organization Me API' }, + { type: 'doc', id: 'apis/self-password-update-rest-api', label: 'Self password update API' }, + { type: 'doc', id: 'apis/verification-code-management-me-api', label: 'Verification Code Management Me API' }, + { type: 'doc', id: 'apis/approvals-rest-api', label: 'Approval API' }, + ], + }, + ], + }, + { + type: 'category', + label: 'References', + className: 'sidebar-icon-external-link', + link: { type: 'doc', id: 'references/index' }, + items: [ + { type: 'doc', id: 'references/operational-policies', label: 'Operational policies' }, + { type: 'doc', id: 'references/asgardeo-outbound-ip-addresses', label: 'Asgardeo outbound IP addresses' }, + { type: 'doc', id: 'references/user-management/user-roles', label: 'Asgardeo user roles' }, + { type: 'doc', id: 'references/user-management/add-scim2-custom-user-schema-support', label: 'SCIM2 Custom User Schema Support' }, + { + type: 'category', + label: 'App configurations', + items: [ + { type: 'doc', id: 'references/app-settings/index', label: 'App configurations' }, + { type: 'doc', id: 'references/app-settings/oidc-settings-for-app', label: 'OIDC configurations' }, + { type: 'doc', id: 'references/app-settings/saml-settings-for-app', label: 'SAML configurations' }, + ], + }, + { + type: 'category', + label: 'IdP configurations', + items: [ + { type: 'doc', id: 'references/idp-settings/index', label: 'IdP configurations' }, + { type: 'doc', id: 'references/idp-settings/oidc-settings-for-idp', label: 'OIDC configurations' }, + { type: 'doc', id: 'references/idp-settings/saml-settings-for-idp', label: 'SAML configurations' }, + ], + }, + { + type: 'category', + label: 'Conditional authentication', + items: [ + { type: 'doc', id: 'references/conditional-auth/api-reference', label: 'Conditional auth - API' }, + ], + }, + { type: 'doc', id: 'references/remote-user-store/remote-user-store-properties', label: 'Remote agent properties' }, + { type: 'doc', id: 'references/authorization-policies-for-apps', label: 'Authorization policies for apps' }, + { type: 'doc', id: 'references/email-templates', label: 'Email templates' }, + { type: 'doc', id: 'references/sms-templates', label: 'SMS templates' }, + { + type: 'category', + label: 'Service extensions', + items: [ + { + type: 'category', + label: 'In-flow extensions', + items: [ + { + type: 'category', + label: 'Custom authentication', + items: [ + { type: 'doc', id: 'references/service-extensions/in-flow-extensions/custom-authentication/api-contract', label: 'API contract to implement' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Pre-flow extensions (Actions)', + items: [ + { + type: 'category', + label: 'Pre issue access token action', + items: [ + { + type: 'category', + label: 'Version 1.x', + items: [ + { type: 'doc', id: 'references/service-extensions/pre-flow-extensions/pre-issue-access-token-action/pre-issue-access-token-action-v1.0', label: 'API v1.0 contract to implement' }, + { type: 'doc', id: 'references/service-extensions/pre-flow-extensions/pre-issue-access-token-action/pre-issue-access-token-action-v1.1', label: 'API v1.1 contract to implement' }, + ], + }, + { type: 'doc', id: 'references/service-extensions/pre-flow-extensions/pre-issue-access-token-action/sample-success-responses', label: 'Sample success reponses' }, + ], + }, + { + type: 'category', + label: 'Pre issue ID token action', + items: [ + { + type: 'category', + label: 'Version 1.x', + items: [ + { type: 'doc', id: 'references/service-extensions/pre-flow-extensions/pre-issue-id-token-action/pre-issue-id-token-action-v1.0', label: 'API v1.0 contract to implement' }, + ], + }, + { type: 'doc', id: 'references/service-extensions/pre-flow-extensions/pre-issue-id-token-action/sample-success-responses', label: 'Sample success responses' }, + ], + }, + { + type: 'category', + label: 'Pre update password action', + items: [ + { + type: 'category', + label: 'Version 1.x', + items: [ + { type: 'doc', id: 'references/service-extensions/pre-flow-extensions/pre-update-password-action/pre-update-password-action-v1.0', label: 'API v1.0 contract to implement' }, + { type: 'doc', id: 'references/service-extensions/pre-flow-extensions/pre-update-password-action/pre-update-password-action-v1.1', label: 'API v1.1 contract to implement' }, + ], + }, + { + type: 'category', + label: 'Version 2.x', + items: [ + { type: 'doc', id: 'references/service-extensions/pre-flow-extensions/pre-update-password-action/pre-update-password-action-v2.0', label: 'API v2.0 contract to implement' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Pre update profile action', + items: [ + { + type: 'category', + label: 'Version 1.x', + items: [ + { type: 'doc', id: 'references/service-extensions/pre-flow-extensions/pre-update-profile-action/pre-update-profile-action-v1.0', label: 'API v1.0 contract to implement' }, + ], + }, + ], + }, + ], + }, + ], + }, + { type: 'doc', id: 'references/accessibility', label: 'Accessibility compliance' }, + { type: 'doc', id: 'references/data-residency-in-asgardeo', label: 'Data residency in Asgardeo' }, + { type: 'doc', id: 'references/mcp-tool-api-resource-access', label: 'API resources and scopes required for MCP tools' }, + { + type: 'category', + label: 'Production checklist', + items: [ + { type: 'doc', id: 'references/production-checklist/index', label: 'Production checklist' }, + { type: 'doc', id: 'references/production-checklist/readiness-check', label: 'Readiness check' }, + { type: 'doc', id: 'references/production-checklist/security-check', label: 'Security check' }, + { type: 'doc', id: 'references/production-checklist/best-practices', label: 'Best practices' }, + ], + }, + { type: 'doc', id: 'references/rate-limits', label: 'Asgardeo rate limits' }, + { + type: 'category', + label: 'Tutorials', + items: [ + { type: 'doc', id: 'references/tutorials/build-your-own-push-authenticator-app', label: 'Build your own push authenticator app' }, + ], + }, + { + type: 'category', + label: 'IAM concepts', + items: [ + { type: 'doc', id: 'references/grant-types', label: 'OAuth2 grant types' }, + { type: 'doc', id: 'references/pushed-authorization-requests', label: 'OAuth2 Pushed Authorization Requests' }, + { + type: 'category', + label: 'Token binding', + items: [ + { type: 'doc', id: 'references/token-binding/index', label: 'Token binding' }, + { type: 'doc', id: 'references/token-binding/client-request', label: 'Client-request' }, + ], + }, + { type: 'doc', id: 'references/financial-grade-api', label: 'Financial-grade API' }, + { type: 'doc', id: 'references/app-native-authentication', label: 'App-native authentication' }, + { type: 'doc', id: 'references/push-notification-based-authentication', label: 'Push Notification based authentication' }, + { type: 'doc', id: 'references/oid4vci', label: 'OpenID for verifiable credential issuance (OID4VCI)' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Technology Guides', + items: [ + { + type: 'category', + label: 'Actions', + items: [ + { type: 'doc', id: 'complete-guides/actions/introduction', label: 'Introduction' }, + { type: 'doc', id: 'complete-guides/actions/prerequisite', label: 'Prerequisite' }, + { type: 'doc', id: 'complete-guides/actions/pre-issue-access-token-action-use-case', label: 'Pre-Issue Access Token Action Use Case' }, + { type: 'doc', id: 'complete-guides/actions/pre-issue-access-token-action-in-choreo', label: 'Configure Pre-Issue Access Token Action with Choreo' }, + { type: 'doc', id: 'complete-guides/actions/pre-issue-access-token-action-in-vercel', label: 'Configure Pre-Issue Access Token Action with Vercel' }, + { type: 'doc', id: 'complete-guides/actions/pre-issue-access-token-action-in-aws-lambda', label: 'Configure Pre-Issue Access Token Action with AWS Lambda' }, + { type: 'doc', id: 'complete-guides/actions/pre-update-password-action-use-case', label: 'Pre-Update Password Action Use Case' }, + { type: 'doc', id: 'complete-guides/actions/pre-update-password-action-in-choreo', label: 'Configure Pre-Update Password Action with Choreo' }, + { type: 'doc', id: 'complete-guides/actions/pre-update-password-action-in-vercel', label: 'Configure Pre-Update Password Action with Vercel' }, + { type: 'doc', id: 'complete-guides/actions/pre-update-password-action-in-aws-lambda', label: 'Configure Pre-Update Password Action with AWS Lambda' }, + { type: 'doc', id: 'complete-guides/actions/pre-update-profile-action-use-case', label: 'Pre-Update Profile Action Use Case' }, + { type: 'doc', id: 'complete-guides/actions/pre-update-profile-action-in-choreo', label: 'Configure Pre-Update Profile Action with Choreo' }, + { type: 'doc', id: 'complete-guides/actions/pre-update-profile-action-in-vercel', label: 'Configure Pre-Update Profile Action with Vercel' }, + { type: 'doc', id: 'complete-guides/actions/pre-update-profile-action-in-aws-lambda', label: 'Configure Pre-Update Profile Action with AWS Lambda' }, + ], + }, + { + type: 'category', + label: 'React', + items: [ + { type: 'doc', id: 'complete-guides/react/introduction', label: 'Introduction' }, + { type: 'doc', id: 'complete-guides/react/prerequisite', label: 'Prerequisite' }, + { type: 'doc', id: 'complete-guides/react/register-an-application', label: 'Configure an application' }, + { type: 'doc', id: 'complete-guides/react/create-a-react-app', label: 'Create a React app' }, + { type: 'doc', id: 'complete-guides/react/install-asgardeo-sdk', label: 'Configure Asgardeo SDK' }, + { type: 'doc', id: 'complete-guides/react/add-login-and-logout', label: 'Add login and logout' }, + { type: 'doc', id: 'complete-guides/react/display-logged-in-user-details', label: 'Display user details' }, + { type: 'doc', id: 'complete-guides/react/securing-routes-within-the-app', label: 'Securing Routes' }, + { type: 'doc', id: 'complete-guides/react/accessing-protected-api', label: 'Accessing protected API' }, + { type: 'doc', id: 'complete-guides/react/manage-tokens-in-React-apps', label: 'Manage tokens in React' }, + { type: 'doc', id: 'complete-guides/react/next-steps', label: 'Next Steps' }, + ], + }, + { + type: 'category', + label: 'Next.js', + items: [ + { + type: 'category', + label: 'B2B', + items: [ + { type: 'doc', id: 'complete-guides/nextjs-b2b/introduction', label: 'Introduction' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/prerequisite', label: 'Prerequisites' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/register-an-application', label: 'Register an application' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/give-access-to-apis-and-create-roles', label: 'Give access to APIs and create roles' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/create-app', label: 'Create a Next.js app' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/configure-app-for-login', label: 'Configure app for login' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/add-user-sign-up', label: 'Add user sign up' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/add-login-and-logout', label: 'Add login and logout' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/manage-teams', label: 'Manage teams' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/switch-to-a-team', label: 'Switch to a team' }, + { type: 'doc', id: 'complete-guides/nextjs-b2b/manage-team-members', label: 'Manage team members' }, + ], + }, + { + type: 'category', + label: 'Redirect-Based', + items: [ + { type: 'doc', id: 'complete-guides/nextjs/introduction', label: 'Introduction' }, + { type: 'doc', id: 'complete-guides/nextjs/prerequisite', label: 'Prerequisite' }, + { type: 'doc', id: 'complete-guides/nextjs/register-an-application', label: 'Register an application' }, + { type: 'doc', id: 'complete-guides/nextjs/create-app', label: 'Create a Next.js app' }, + { type: 'doc', id: 'complete-guides/nextjs/install-asgardeo-sdk', label: 'Configure Asgardeo SDK' }, + { type: 'doc', id: 'complete-guides/nextjs/add-login-and-logout', label: 'Add login and logout' }, + { type: 'doc', id: 'complete-guides/nextjs/display-logged-in-user-details', label: 'Display user details' }, + { type: 'doc', id: 'complete-guides/nextjs/securing-routes-within-the-app', label: 'Securing Routes' }, + { type: 'doc', id: 'complete-guides/nextjs/accessing-protected-api', label: 'Accessing protected API' }, + { type: 'doc', id: 'complete-guides/nextjs/manage-tokens-in-apps', label: 'Manage tokens in Next.js' }, + { type: 'doc', id: 'complete-guides/nextjs/next-steps', label: 'Next Steps' }, + ], + }, + { + type: 'category', + label: 'App-Native', + items: [ + { type: 'doc', id: 'complete-guides/app-native/introduction', label: 'Introduction' }, + { type: 'doc', id: 'complete-guides/app-native/prerequisites', label: 'Prerequisites' }, + { type: 'doc', id: 'complete-guides/app-native/register-an-application', label: 'Register an application' }, + { type: 'doc', id: 'complete-guides/app-native/create-app', label: 'Create an app for app-native authentication' }, + { type: 'doc', id: 'complete-guides/app-native/configure-provider', label: 'Configure Asgardeo SDK' }, + { type: 'doc', id: 'complete-guides/app-native/add-login-and-logout', label: 'Add login and logout' }, + { type: 'doc', id: 'complete-guides/app-native/add-mfa', label: 'Add MFA using app-native APIs' }, + { type: 'doc', id: 'complete-guides/app-native/add-social-login', label: 'Add Social Login using app-native APIs' }, + { type: 'doc', id: 'complete-guides/app-native/manage-tokens-in-apps', label: 'Manage tokens in app-native apps' }, + { type: 'doc', id: 'complete-guides/app-native/next-steps', label: 'Next Steps' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Express.js', + items: [ + { type: 'doc', id: 'complete-guides/expressjs/introduction', label: 'Introduction' }, + { type: 'doc', id: 'complete-guides/expressjs/prerequisite', label: 'Prerequisite' }, + { type: 'doc', id: 'complete-guides/expressjs/register-an-application', label: 'Configure an application' }, + { type: 'doc', id: 'complete-guides/expressjs/create-an-expressjs-app', label: 'Create an Express.js app' }, + { type: 'doc', id: 'complete-guides/expressjs/install-passport-asgardeo', label: 'Configure Passport Asgardeo' }, + { type: 'doc', id: 'complete-guides/expressjs/add-login-and-logout', label: 'Add login and logout' }, + { type: 'doc', id: 'complete-guides/expressjs/persist-user-sessions', label: 'Persist user sessions' }, + { type: 'doc', id: 'complete-guides/expressjs/display-logged-in-user-details', label: 'Display user details' }, + { type: 'doc', id: 'complete-guides/expressjs/securing-routes-within-the-app', label: 'Securing Routes' }, + { type: 'doc', id: 'complete-guides/expressjs/accessing-protected-api', label: 'Accessing protected API' }, + { type: 'doc', id: 'complete-guides/expressjs/next-steps', label: 'Next Steps' }, + ], + }, + { + type: 'category', + label: 'Angular', + items: [ + { type: 'doc', id: 'complete-guides/angular/introduction', label: 'Introduction' }, + { type: 'doc', id: 'complete-guides/angular/prerequisite', label: 'Prerequisite' }, + { type: 'doc', id: 'complete-guides/angular/register-an-application', label: 'Register an application' }, + { type: 'doc', id: 'complete-guides/angular/create-app', label: 'Create an Angular app' }, + { type: 'doc', id: 'complete-guides/angular/install-asgardeo-sdk', label: 'Configure Asgardeo provider' }, + { type: 'doc', id: 'complete-guides/angular/add-login-and-logout', label: 'Add login and logout' }, + { type: 'doc', id: 'complete-guides/angular/display-logged-in-user-details', label: 'Display user details' }, + { type: 'doc', id: 'complete-guides/angular/securing-routes-within-the-app', label: 'Securing Routes' }, + { type: 'doc', id: 'complete-guides/angular/accessing-protected-api', label: 'Accessing protected API' }, + { type: 'doc', id: 'complete-guides/angular/manage-tokens', label: 'Manage tokens in Angular' }, + { type: 'doc', id: 'complete-guides/angular/next-steps', label: 'Next Steps' }, + ], + }, + { + type: 'category', + label: 'Javascript', + items: [ + { type: 'doc', id: 'complete-guides/javascript/introduction', label: 'Introduction' }, + { type: 'doc', id: 'complete-guides/javascript/prerequisite', label: 'Prerequisite' }, + { type: 'doc', id: 'complete-guides/javascript/register-an-application', label: 'Register an application' }, + { type: 'doc', id: 'complete-guides/javascript/create-app', label: 'Create a JavaScript app' }, + { type: 'doc', id: 'complete-guides/javascript/install-asgardeo-sdk', label: 'Configure Asgardeo SDK' }, + { type: 'doc', id: 'complete-guides/javascript/add-login-and-logout', label: 'Add login and logout' }, + { type: 'doc', id: 'complete-guides/javascript/display-logged-in-user-details', label: 'Display user details' }, + { type: 'doc', id: 'complete-guides/javascript/accessing-protected-api', label: 'Accessing protected API' }, + { type: 'doc', id: 'complete-guides/javascript/manage-tokens-in-apps', label: 'Manage tokens in JavaScript' }, + { type: 'doc', id: 'complete-guides/javascript/next-steps', label: 'Next Steps' }, + ], + }, + { + type: 'category', + label: '.NET', + items: [ + { type: 'doc', id: 'complete-guides/dotnet/introduction', label: 'Introduction' }, + { type: 'doc', id: 'complete-guides/dotnet/prerequisites', label: 'Prerequisites' }, + { type: 'doc', id: 'complete-guides/dotnet/register-an-application', label: 'Register an application' }, + { type: 'doc', id: 'complete-guides/dotnet/create-a-dotnet-app', label: 'Create a .NET app' }, + { type: 'doc', id: 'complete-guides/dotnet/configure-authentication-properties', label: 'Configure auth properties' }, + { type: 'doc', id: 'complete-guides/dotnet/add-login-and-logout', label: 'Add login and logout' }, + { type: 'doc', id: 'complete-guides/dotnet/securing-routes-within-the-app', label: 'Securing Routes' }, + { type: 'doc', id: 'complete-guides/dotnet/display-logged-in-user-details', label: 'Display user details' }, + { type: 'doc', id: 'complete-guides/dotnet/protected-api', label: 'Accessing protected API' }, + { type: 'doc', id: 'complete-guides/dotnet/manage-tokens-in-dotnet-apps', label: 'Manage tokens in .NET' }, + { type: 'doc', id: 'complete-guides/dotnet/next-steps', label: 'Next Steps' }, + ], + }, + ], + }, + { + type: 'category', + label: 'Best Practice Guides', + items: [ + { + type: 'category', + label: 'Frontend Security', + items: [ + { type: 'doc', id: 'complete-guides/fesecurity/introduction', label: 'Introduction' }, + { type: 'doc', id: 'complete-guides/fesecurity/login-options', label: 'In-app vs IdP-based login' }, + { type: 'doc', id: 'complete-guides/fesecurity/public-clients', label: 'Public clients' }, + { type: 'doc', id: 'complete-guides/fesecurity/insecure-tokens', label: 'Insecure token handling' }, + { type: 'doc', id: 'complete-guides/fesecurity/weak-access-control', label: 'Weak access control' }, + { type: 'doc', id: 'complete-guides/fesecurity/unauthorized-privilege-gain', label: 'Unauthorized access' }, + { type: 'doc', id: 'complete-guides/fesecurity/weak-mfa', label: 'Weak MFA' }, + { type: 'doc', id: 'complete-guides/fesecurity/partial-user-logouts', label: 'Partial user logouts' }, + { type: 'doc', id: 'complete-guides/fesecurity/misconfiguration', label: 'Product misconfiguration' }, + { type: 'doc', id: 'complete-guides/fesecurity/xss', label: 'Cross-Site Scripting (XSS)' }, + { type: 'doc', id: 'complete-guides/fesecurity/csrf', label: 'Cross-Site Request Forgery (CSRF)' }, + { type: 'doc', id: 'complete-guides/fesecurity/next-steps', label: 'Next Steps' }, + ], + }, + ], + }, + ], +}; + +export default sidebars; diff --git a/docusaurus-asgardeo/src/assets/fonts/fa/fa-brands-400.ttf b/docusaurus-asgardeo/src/assets/fonts/fa/fa-brands-400.ttf new file mode 100644 index 0000000000..30f55b7435 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/fa/fa-brands-400.ttf differ diff --git a/docusaurus-asgardeo/src/assets/fonts/fa/fa-brands-400.woff2 b/docusaurus-asgardeo/src/assets/fonts/fa/fa-brands-400.woff2 new file mode 100644 index 0000000000..8a480d9b1f Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/fa/fa-brands-400.woff2 differ diff --git a/docusaurus-asgardeo/src/assets/fonts/fa/fa-solid-900.ttf b/docusaurus-asgardeo/src/assets/fonts/fa/fa-solid-900.ttf new file mode 100644 index 0000000000..e479fb2934 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/fa/fa-solid-900.ttf differ diff --git a/docusaurus-asgardeo/src/assets/fonts/fa/fa-solid-900.woff2 b/docusaurus-asgardeo/src/assets/fonts/fa/fa-solid-900.woff2 new file mode 100644 index 0000000000..88b0367aae Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/fa/fa-solid-900.woff2 differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.eot b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.eot new file mode 100644 index 0000000000..4066e7d5e3 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.eot differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.ttf b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.ttf new file mode 100644 index 0000000000..2dc04cf81a Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.ttf differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.woff b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.woff new file mode 100644 index 0000000000..9ac3a190e8 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.woff differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.woff2 b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.woff2 new file mode 100644 index 0000000000..22793f9a19 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-bold.woff2 differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.eot b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.eot new file mode 100644 index 0000000000..bb04818716 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.eot differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.ttf b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.ttf new file mode 100644 index 0000000000..615fdee711 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.ttf differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.woff b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.woff new file mode 100644 index 0000000000..e248e37d6a Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.woff differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.woff2 b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.woff2 new file mode 100644 index 0000000000..3ebe650a75 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-medium.woff2 differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.eot b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.eot new file mode 100644 index 0000000000..6d528a5157 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.eot differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.ttf b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.ttf new file mode 100644 index 0000000000..679bf3e954 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.ttf differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.woff b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.woff new file mode 100644 index 0000000000..c66fc56140 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.woff differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.woff2 b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.woff2 new file mode 100644 index 0000000000..e92be881e2 Binary files /dev/null and b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer-regular.woff2 differ diff --git a/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer.css b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer.css new file mode 100644 index 0000000000..300c429307 --- /dev/null +++ b/docusaurus-asgardeo/src/assets/fonts/gilmer/gilmer.css @@ -0,0 +1,83 @@ +/* +Font: Gilmer +Style: Regular +URL: https://www.youworkforthem.com/font/T9758/gilmer +Foundry: Piotr Lapa +Foundry: https://www.youworkforthem.com/designer/1166/piotr-lapa +Copyright: Copyright © 2018 by Piotr _apa. All rights reserved. +Version: 17 +Created: August 17, 2018 +License: https://www.youworkforthem.com/font-license +License: The WebFont(s) listed in this document must follow the YouWorkForThem + WebFont license rules. All other parties are strictly restricted + from using the WebFonts(s) listed without a purchased license. + All details above must always remain unaltered and visible in your CSS. +*/ + +@font-face { + font-family: 'Gilmer'; + src: url('gilmer-regular.eot'); + src: + url('gilmer-regular.eot?#iefix') format('embedded-opentype'), + url('gilmer-regular.woff2') format('woff2'), + url('gilmer-regular.woff') format('woff'), + url('gilmer-regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +/* +Font: Gilmer +Style: Medium +URL: https://www.youworkforthem.com/font/T9758/gilmer +Foundry: Piotr Lapa +Foundry: https://www.youworkforthem.com/designer/1166/piotr-lapa +Copyright: Copyright © 2018 by Piotr _apa. All rights reserved. +Version: 17 +Created: August 17, 2018 +License: https://www.youworkforthem.com/font-license +License: The WebFont(s) listed in this document must follow the YouWorkForThem + WebFont license rules. All other parties are strictly restricted + from using the WebFonts(s) listed without a purchased license. + All details above must always remain unaltered and visible in your CSS. +*/ + +@font-face { + font-family: 'Gilmer'; + src: url('gilmer-medium.eot'); + src: + url('gilmer-medium.eot?#iefix') format('embedded-opentype'), + url('gilmer-medium.woff2') format('woff2'), + url('gilmer-medium.woff') format('woff'), + url('gilmer-medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; +} + +/* +Font: Gilmer +Style: Bold +URL: https://www.youworkforthem.com/font/T9758/gilmer +Foundry: Piotr Lapa +Foundry: https://www.youworkforthem.com/designer/1166/piotr-lapa +Copyright: Copyright © 2018 by Piotr _apa. All rights reserved. +Version: 17 +Created: August 17, 2018 +License: https://www.youworkforthem.com/font-license +License: The WebFont(s) listed in this document must follow the YouWorkForThem + WebFont license rules. All other parties are strictly restricted + from using the WebFonts(s) listed without a purchased license. + All details above must always remain unaltered and visible in your CSS. +*/ + +@font-face { + font-family: 'Gilmer'; + src: url('gilmer-bold.eot'); + src: + url('gilmer-bold.eot?#iefix') format('embedded-opentype'), + url('gilmer-bold.woff2') format('woff2'), + url('gilmer-bold.woff') format('woff'), + url('gilmer-bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} diff --git a/docusaurus-asgardeo/src/components/Card.jsx b/docusaurus-asgardeo/src/components/Card.jsx new file mode 100644 index 0000000000..e02d8e1f9e --- /dev/null +++ b/docusaurus-asgardeo/src/components/Card.jsx @@ -0,0 +1,43 @@ +import React from 'react'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +export default function Card({ icon, darkIcon, name, artifact, description, docsLink, downloadLink, sourceLink }) { + return ( +
+
+
+
+ {name} + {darkIcon && {name}} +
+
+

{name}

+
+ {artifact} +
+
+
+
+
+

{description}

+
+
+ {docsLink && ( + + + + )} + {downloadLink && ( + + + + )} + {sourceLink && ( + + + + )} +
+
+ ); +} diff --git a/docusaurus-asgardeo/src/components/HomePageCards.jsx b/docusaurus-asgardeo/src/components/HomePageCards.jsx new file mode 100644 index 0000000000..0c6453422c --- /dev/null +++ b/docusaurus-asgardeo/src/components/HomePageCards.jsx @@ -0,0 +1,226 @@ +import React, { useEffect } from 'react'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +const columnData = [ + { + cards: [ + { + title: 'Get Started', + icon: 'rocket', + iconColor: 'icon-color-1', + links: [ + { title: 'Create Account', url: '/get-started/create-asgardeo-account/' }, + { title: 'Connect React App', url: '/quick-starts/react/' }, + { title: 'Connect Angular App', url: '/quick-starts/angular/' }, + { title: 'Connect Javascript App', url: '/quick-starts/javascript/' }, + { title: 'Connect Next.js App', url: '/quick-starts/nextjs/' }, + { title: 'Connect Express.js App', url: '/complete-guides/expressjs/introduction/' }, + { title: 'Connect .NET App', url: '/complete-guides/dotnet/introduction/' }, + { title: 'Connect Spring Boot App', url: '/quick-starts/springboot/' }, + ], + }, + ], + }, + { + cards: [ + { + title: 'Guides', + icon: 'book', + iconColor: 'icon-color-4', + links: [ + { title: 'Applications', url: '/guides/applications/' }, + { title: 'Authentication', url: '/guides/authentication/' }, + { title: 'API authorization', url: '/guides/authorization/' }, + { title: 'Branding', url: '/guides/branding/' }, + { title: 'User management', url: '/guides/users/' }, + { title: 'User self-service', url: '/guides/user-self-service/' }, + { title: 'Organizations', url: '/guides/organization-management/' }, + ], + }, + ], + }, + { + cards: [ + { + title: 'Developer Resources', + icon: 'tools', + iconColor: 'icon-color-3', + links: [ + { title: 'APIs', url: '/apis/' }, + { title: 'Tutorials', url: '/tutorials/' }, + { title: 'SDKs and Integrations', url: '/sdks/' }, + ], + }, + { + title: 'Community and Support', + icon: 'light-bulb', + iconColor: 'icon-color-2', + links: [ + { title: 'Community Help', url: 'https://discord.com/invite/wso2', external: true }, + { title: 'Enterprise Support', url: 'https://wso2.com/asgardeo/pricing/', external: true }, + ], + }, + ], + }, +]; + +const iconSvgs = { + rocket: ( + + + + ), + book: ( + + + + ), + tools: ( + + + + ), + 'light-bulb': ( + + + + ), +}; + +function ArrowIcon() { + return ( + + + + ); +} + +function HomeCard({ title, icon, iconColor, links }) { + return ( +
+
+
{title}
+
+ {iconSvgs[icon]} +
+
+ {links.map((link, i) => ( +
+
+ {link.external ? ( + +
+
{link.title}
+
+ ) : ( + +
+
{link.title}
+
+ )} +
+
+ ))} +
+ ); +} + +export default function HomePageCards() { + useEffect(() => { + const el = document.getElementById('asgardeo-home'); + if (!el) return; + + // Walk up to find the main content column + let markdownEl = el.parentElement; + while (markdownEl && !markdownEl.classList.contains('theme-doc-markdown')) { + markdownEl = markdownEl.parentElement; + } + if (markdownEl) { + markdownEl.style.maxWidth = '100%'; + markdownEl.style.padding = '0'; + } + + // Find and expand the content column + const docItemCol = el.closest('.docItemCol_VOVn'); + if (docItemCol) { + docItemCol.style.maxWidth = '100%'; + } + + // Hide TOC sidebar column + const docItemColEl = el.closest('.docItemCol_VOVn'); + if (docItemColEl) { + const row = docItemColEl.parentElement; + if (row) { + for (const child of row.children) { + if (!child.classList.contains('docItemCol_VOVn')) { + child.style.display = 'none'; + } + } + } + } + + // Widen the container + const container = el.closest('.container'); + if (container) { + container.style.maxWidth = '100%'; + } + }, []); + + return ( + <> + +
+
+
+

How can we help?

+

+ Welcome to Asgardeo documentation! Within these pages, + you will learn how to build a seamless login experience for your applications using + Asgardeo. +

+
+
+ {columnData.map((column, i) => ( +
+ {column.cards.map((card, j) => ( + + ))} +
+ ))} +
+
+ + ); +} diff --git a/docusaurus-asgardeo/src/css/custom.css b/docusaurus-asgardeo/src/css/custom.css new file mode 100644 index 0000000000..b9f30bc84c --- /dev/null +++ b/docusaurus-asgardeo/src/css/custom.css @@ -0,0 +1,1395 @@ +/** + * Custom CSS for Asgardeo Docusaurus docs. + * Migrated from the en/theme/material mkdocs theme. + */ + +/* ========================================================================== + Gilmer Font + ========================================================================== */ + +@font-face { + font-family: 'Gilmer'; + src: url('../assets/fonts/gilmer/gilmer-regular.eot'); + src: + url('../assets/fonts/gilmer/gilmer-regular.eot?#iefix') format('embedded-opentype'), + url('../assets/fonts/gilmer/gilmer-regular.woff2') format('woff2'), + url('../assets/fonts/gilmer/gilmer-regular.woff') format('woff'), + url('../assets/fonts/gilmer/gilmer-regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Gilmer'; + src: url('../assets/fonts/gilmer/gilmer-medium.eot'); + src: + url('../assets/fonts/gilmer/gilmer-medium.eot?#iefix') format('embedded-opentype'), + url('../assets/fonts/gilmer/gilmer-medium.woff2') format('woff2'), + url('../assets/fonts/gilmer/gilmer-medium.woff') format('woff'), + url('../assets/fonts/gilmer/gilmer-medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Gilmer'; + src: url('../assets/fonts/gilmer/gilmer-bold.eot'); + src: + url('../assets/fonts/gilmer/gilmer-bold.eot?#iefix') format('embedded-opentype'), + url('../assets/fonts/gilmer/gilmer-bold.woff2') format('woff2'), + url('../assets/fonts/gilmer/gilmer-bold.woff') format('woff'), + url('../assets/fonts/gilmer/gilmer-bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +/* ========================================================================== + FontAwesome Solid Icons + ========================================================================== */ + +@font-face { + font-family: 'FA-Solid'; + src: url('../assets/fonts/fa/fa-solid-900.woff2') format('woff2'), + url('../assets/fonts/fa/fa-solid-900.ttf') format('truetype'); + font-weight: 900; + font-style: normal; + font-display: block; +} + +/* ========================================================================== + FontAwesome Brand Icons + ========================================================================== */ + +@font-face { + font-family: 'FA-Brands'; + src: url('../assets/fonts/fa/fa-brands-400.woff2') format('woff2'), + url('../assets/fonts/fa/fa-brands-400.ttf') format('truetype'); + font-weight: 400; + font-style: normal; + font-display: block; +} + +/* ========================================================================== + CSS Custom Properties (Light Mode / Default) + ========================================================================== */ + +:root { + --ifm-font-family-base: 'Gilmer', system-ui, -apple-system, sans-serif; + --ifm-heading-font-family: 'Gilmer', system-ui, -apple-system, sans-serif; + + --ifm-font-size-base: 16px; + --ifm-line-height-base: 1.7; + + /* Primary color - Asgardeo orange */ + --ifm-color-primary: #ff7300; + --ifm-color-primary-dark: #e66800; + --ifm-color-primary-darker: #d96200; + --ifm-color-primary-darkest: #b35100; + --ifm-color-primary-light: #ff811a; + --ifm-color-primary-lighter: #ff8926; + --ifm-color-primary-lightest: #ff9f4d; + + /* Code */ + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + + /* Layout */ + --ifm-navbar-height: 62px; + --ifm-navbar-shadow: none; + --ifm-navbar-background-color: #ffffff; + --ifm-navbar-link-color: #1f2024; + --ifm-navbar-link-hover-color: #ff7300; + + --ifm-spacing-horizontal: 1.5rem; + + /* Border radius */ + --ifm-border-radius: 8px; + --ifm-global-radius: 8px; + --ifm-card-border-radius: 12px; + + /* Code block colors (dark theme, same for light mode in mkdocs) */ + --ifm-code-background: #161618; + --ifm-code-color: #d9d9de; + --ifm-pre-background: #161618; + --ifm-pre-color: #d9d9de; + + /* Custom variables */ + --ds-colors-white: #ffffff; + --ds-colors-mystic: #d8dde8; + --ds-colors-shark: #1f2024; + --ds-colors-alabaster: #f9f9f9; + --ds-colors-discord-blurple: #5865F2; + --ds-border-color: #d8dde8; + --ds-surface-bg: #ffffff; + --ds-box-shadow: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1); + --ds-box-shadow-2: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08); + + /* Icon colors */ + --ds-icon-color-1-bg: rgba(233, 246, 252, 1); + --ds-icon-color-1-fg: #27aae1; + --ds-icon-color-2-bg: rgba(255, 236, 246, 1); + --ds-icon-color-2-fg: #cf3b89; + --ds-icon-color-3-bg: rgba(231, 246, 245, 1); + --ds-icon-color-3-fg: #15a79e; + --ds-icon-color-4-bg: rgba(255, 247, 239, 1); + --ds-icon-color-4-fg: #f7931e; +} + +/* ========================================================================== + Dark Mode CSS Custom Properties + ========================================================================== */ + +[data-theme='dark'] { + --ifm-color-primary: #ff811a; + --ifm-color-primary-dark: #ff7300; + --ifm-color-primary-darker: #f56e00; + --ifm-color-primary-darkest: #cc5a00; + --ifm-color-primary-light: #ff8f33; + --ifm-color-primary-lighter: #ff9640; + --ifm-color-primary-lightest: #ffad66; + + --ifm-background-color: #232327; + --ifm-background-surface-color: #232327; + --ifm-navbar-background-color: #232327; + --ifm-footer-background-color: #232327; + + --ifm-navbar-link-color: #e3e3e3; + --ifm-navbar-link-hover-color: #ff811a; + + --ifm-code-background: #161618; + --ifm-code-color: #d9d9de; + --ifm-pre-background: #161618; + --ifm-pre-color: #d9d9de; + + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); + + --ds-border-color: rgba(255, 255, 255, 0.1); + --ds-surface-bg: #1f2024; + --ds-icon-color-1-bg: rgba(233, 246, 252, 0.1); + --ds-icon-color-2-bg: rgba(255, 236, 246, 0.1); + --ds-icon-color-3-bg: rgba(231, 246, 245, 0.1); + --ds-icon-color-4-bg: rgba(255, 247, 239, 0.1); +} + +/* ========================================================================== + Inline Code Styling (Light Mode: light bg, dark code) + ========================================================================== */ + +:root:not([data-theme='dark']) code:not([class*='language-']) { + background-color: #161618; + color: #d9d9de; + border-radius: 0.25rem; + padding: 0.1rem 0.3rem; +} + +[data-theme='dark'] code:not([class*='language-']) { + background-color: #161618; + color: #d9d9de; + border-radius: 0.25rem; + padding: 0.1rem 0.3rem; +} + +/* ========================================================================== + Navbar / Header Styling + ========================================================================== */ + +.navbar { + border-bottom: 1px solid var(--ds-border-color); + box-shadow: none; + padding: 0 1rem; + font-size: 0.7rem; + letter-spacing: 0.1px; +} + +.navbar__inner { + padding: 0; +} + +.navbar__brand { + margin-right: 1rem; +} + +.navbar__logo { + height: 1.4rem; +} + +.navbar__logo img { + height: 1.4rem; +} + +.navbar__items--right > * { + margin-left: 0.5rem; +} + +.navbar__link { + font-size: 0.7rem; + font-weight: 400; +} + +/* Search bar styling in navbar */ +.navbar__search-input { + font-size: 0.7rem; + border-radius: var(--ifm-border-radius); +} + +/* ========================================================================== + Theme / Color Mode Toggle + ========================================================================== */ + +.navbar .clean-btn svg { + height: 20px; + width: 20px; +} + +/* ========================================================================== + Sidebar / Docs Menu Styling + ========================================================================== */ + +.theme-doc-sidebar-container { + border-right: none !important; +} + +.menu { + font-size: 14px; + line-height: 1.3; + padding: 1rem 0; + margin: 0 0 0 1rem; +} + +.menu__list { + margin-bottom: 15px; +} + +.menu__list-item { + margin-top: 0.8em; +} + +.menu__link { + font-size: 14px; + font-weight: 400; + border-radius: var(--ifm-border-radius); + padding: 0.4rem 0.75rem; + color: var(--ifm-font-color-base); +} + +.menu__link:hover { + color: var(--ifm-color-primary); +} + +.menu__link--active { + font-weight: 500; + color: var(--ifm-color-primary); +} + +.menu__caret, +.menu__link--sublist-caret::after { + min-width: 1.25rem; +} + +/* Hide the TOC sidebar when not needed (matching mkdocs behavior) */ +/* The .hide-toc logic can be applied via frontmatter if needed */ + +/* ========================================================================== + Content / Main Area Styling + ========================================================================== */ + +.markdown { + font-size: 16px; + letter-spacing: 0.1px; +} + +.markdown h1 { + color: var(--ifm-heading-color); +} + +.markdown h1:first-child { + --ifm-h1-font-size: 2rem; +} + +/* ========================================================================== + Code Blocks Styling + ========================================================================== */ + +.theme-code-block { + border-radius: 0.4rem; + box-shadow: none; + font-size: 0.875rem; +} + +.prism-code { + border-radius: 0.4rem; +} + +/* ========================================================================== + Admonitions / Callouts Styling + ========================================================================== */ + +.theme-admonition { + font-size: 14px; + border-radius: var(--ifm-border-radius); + border-left-width: 4px; +} + +[data-theme='dark'] .theme-admonition { + background-color: rgba(0, 0, 0, 0.17); + color: rgba(255, 255, 255, 0.65); +} + +/* ========================================================================== + Footer Styling + ========================================================================== */ + +.footer { + --ifm-footer-background-color: var(--ds-colors-alabaster); + color: var(--ifm-font-color-base); + border-top: 1px solid var(--ds-border-color); + padding: 3rem 0 2rem; +} + +[data-theme='dark'] .footer { + --ifm-footer-background-color: #232327; +} + +.footer__links { + margin-bottom: 2rem; +} + +.footer__title { + font-size: 0.85rem; +} + +.footer__item { + font-size: 0.8rem; +} + +.footer__link-item { + font-weight: 500; +} + +.footer__link-item:hover { + color: var(--ifm-color-primary); +} + +.footer__col { + margin-bottom: 1.5rem; +} + +.footer__bottom { + border-top: 1px solid var(--ds-border-color); + margin-top: 2rem; + padding-top: 1.5rem; + font-size: 0.75rem; +} + +[data-theme='dark'] .footer { + --ifm-footer-background-color: #232327; +} + +[data-theme='dark'] .footer__bottom { + background-color: var(--ds-colors-alabaster); + color: var(--ifm-font-color-base); +} + +/* ========================================================================== + Cards Styling (for landing page / section pages) + ========================================================================== */ + +.cards-container { + display: flex; + flex-wrap: wrap; + align-items: stretch; + margin: 50px 0; +} + +.cards-container .card { + display: inline-block; + margin: 5px; + padding: 20px; + border-radius: 4px; + border: 1px solid var(--ifm-color-emphasis-300); + max-width: 330px; + text-align: center; + color: var(--ifm-font-color-base); + text-decoration: none; +} + +.cards-container .card:hover { + background: var(--ifm-color-emphasis-200); + color: var(--ifm-font-color-base); + text-decoration: none; +} + +.cards-container .card > h3 { + margin-top: 0; +} + +.cards-container .card > p:last-child { + margin-bottom: 0; +} + +.cards-container .card.square { + width: 185px; + height: 185px; +} + +.cards-container .card > img { + width: 100px; + max-height: 100px; +} + +.cards-container .card > p > a { + margin: 10px; + color: var(--ifm-font-color-base); +} + +.cards-container .card > p > a:hover { + color: var(--ifm-color-primary); +} + +.center-all { + text-align: center; +} + +.center-all .cards-container { + justify-content: center; +} + +/* ========================================================================== + Buttons Styling + ========================================================================== */ + +.md-button { + border-radius: var(--ifm-border-radius); + color: var(--ifm-font-color-base); + cursor: pointer; + display: inline-block; + font-weight: 500; + transition: color 125ms, background-color 125ms, border-color 125ms; + padding: 8px 16px; + border: 1px solid var(--ifm-color-emphasis-300); + background-color: transparent; + text-decoration: none; +} + +.md-button:hover { + opacity: 0.9; + text-decoration: none; + color: var(--ifm-font-color-base); +} + +.md-button.md-button--primary { + background: linear-gradient(77.74deg, #eb4f63 11.16%, #ff7300 99.55%); + color: #ffffff; + border-color: transparent; +} + +.md-button.md-button--primary:hover { + color: #ffffff; +} + +.md-button.md-button--link { + background-color: transparent; + border-color: transparent; +} + +.md-button.md-button--small { + padding: 6px 12px; +} + +.md-button.md-button--flex { + display: flex; + flex-direction: row; + align-content: center; + align-items: center; + gap: 10px; +} + +/* ========================================================================== + Chip Styling (Beta, Preview, New, Premium badges) + ========================================================================== */ + +.md-chip { + max-width: 100%; + font-family: 'Gilmer', sans-serif; + display: inline-flex; + align-items: center; + justify-content: center; + color: var(--ifm-font-color-base); + background: var(--ifm-color-primary); + cursor: default; + vertical-align: middle; + box-sizing: border-box; + font-size: 0.6125rem; + height: 24px; + border-radius: 6px; + white-space: nowrap; + transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1); + outline: 0px; + text-decoration: none; + border: none; + padding: 0px; +} + +.md-chip__label { + overflow: hidden; + text-overflow: ellipsis; + padding-left: 12px; + padding-right: 12px; + white-space: nowrap; + font-weight: 600; +} + +.md-chip--beta { + background: linear-gradient(131deg, rgba(143, 197, 246, 0.30) 0%, rgba(72, 141, 180, 0.30) 100%); + border: 1px solid #488DB4; +} + +.md-chip--beta .md-chip__label { + background-image: linear-gradient(93deg, #488DB4 0%, #1F3D4E 100%); + background-clip: text; + -webkit-background-clip: text; + color: transparent; +} + +.md-chip--preview { + background: linear-gradient(131deg, rgba(233, 95, 255, 0.30) 0%, rgba(140, 57, 153, 0.30) 100%); + border: 1px solid #8C3999; +} + +.md-chip--preview .md-chip__label { + background-image: linear-gradient(93deg, #8C3999 0%, #2F1333 100%); + background-clip: text; + -webkit-background-clip: text; + color: transparent; +} + +.md-chip--new { + background: linear-gradient(131deg, rgba(117, 237, 161, 0.30) 28.46%, rgba(52, 146, 86, 0.30) 119.09%); + border: 1px solid #349256; +} + +.md-chip--new .md-chip__label { + background-image: linear-gradient(93deg, #349256 28.46%, #102C1A 119.09%); + background-clip: text; + -webkit-background-clip: text; + color: transparent; +} + +.md-chip--premium { + background: linear-gradient(131deg, rgba(224, 184, 52, 0.30) 25.98%, rgba(181, 138, 0, 0.30) 112.91%); + border: 1px solid #928934; +} + +.md-chip--premium .md-chip__label { + background-image: linear-gradient(93deg, #928934 28.46%, #2C2910 119.09%); + background-clip: text; + -webkit-background-clip: text; + color: transparent; +} + +[data-theme='dark'] .md-chip--beta .md-chip__label { + background-image: linear-gradient(93deg, #adcddf 0%, #59859e 100%); + background-clip: text; + -webkit-background-clip: text; + color: transparent; +} + +[data-theme='dark'] .md-chip--preview .md-chip__label { + background-image: linear-gradient(93deg, #ef85ff 0%, #e1bae7 100%); + background-clip: text; + -webkit-background-clip: text; + color: transparent; +} + +[data-theme='dark'] .md-chip--new .md-chip__label { + background-image: linear-gradient(93deg, #5bb77c 28.46%, #65d48d 119.09%); + background-clip: text; + -webkit-background-clip: text; + color: transparent; +} + +[data-theme='dark'] .md-chip--premium .md-chip__label { + background-image: linear-gradient(93deg, #d9d07c 28.46%, #867f46 119.09%); + background-clip: text; + -webkit-background-clip: text; + color: transparent; +} + +/* ========================================================================== + Icon Color Variants (for section landing pages) + ========================================================================== */ + +.icon-color-1 { background-color: var(--ds-icon-color-1-bg); } +.icon-color-1 svg path { fill: var(--ds-icon-color-1-fg) !important; } +.icon-color-2 { background-color: var(--ds-icon-color-2-bg); } +.icon-color-2 svg path { fill: var(--ds-icon-color-2-fg) !important; } +.icon-color-3 { background-color: var(--ds-icon-color-3-bg); } +.icon-color-3 svg path { fill: var(--ds-icon-color-3-fg) !important; } +.icon-color-4 { background-color: var(--ds-icon-color-4-bg); } +.icon-color-4 svg path { fill: var(--ds-icon-color-4-fg) !important; } + +/* ========================================================================== + Card Component Styling (md-card) + ========================================================================== */ + +.md-card { + box-shadow: var(--ds-box-shadow); + border: 1px solid var(--ds-border-color); + border-radius: 12px; + background-color: var(--ds-surface-bg); + padding: 30px; +} + +/* ========================================================================== + Image + Text Layouts + ========================================================================== */ + +.image-text-wrapped-container { + display: flex; + align-items: center; + margin: 0 auto; + max-width: 1000px; +} + +.image-text-wrapped-container .wrapping-text { + flex: 1; + padding: 20px; + margin-bottom: 1em; +} + +.image-text-wrapped-container .wrapped-image { + flex-shrink: 0; + padding: 20px; + max-width: 100%; +} + +.image-text-wrapped-container .wrapped-image > img { + max-width: 100%; + height: auto; + display: block; +} + +.centered-container { + display: flex; + justify-content: left; + align-items: baseline; +} + +.border-text { + margin: 10px; + text-align: center; +} + +/* ========================================================================== + Progress / Visited States + ========================================================================== */ + +.md-nav__link-read_time { + font-size: 10px; + color: var(--ifm-color-emphasis-600); + white-space: nowrap; + word-break: keep-all; + font-style: italic; +} + +.md-nav__link-read_time.visited > .md-nav__link-read_check:after { + display: inline-block; +} + +.md-nav__link-read_time > .md-nav__link-read_check:after { + background-color: #00c853; + -webkit-mask-image: var(--ifm-admonition-icon-success); + mask-image: var(--ifm-admonition-icon-success); + content: ""; + height: 0.6rem; + -webkit-mask-position: center; + mask-position: center; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-size: contain; + mask-size: contain; + position: absolute; + width: 0.6rem; + display: none; + padding-left: 25px; + top: 0.82rem; +} + +/* ========================================================================== + Tabbed Content + ========================================================================== */ + +.tabbed-content.tab_with_no_code { + background: var(--ifm-color-emphasis-100); + padding: 0 20px 10px; + border-radius: 0 0 0.4rem 0.4rem; +} + +/* ========================================================================== + Copy Page Button + ========================================================================== */ + +.copy-page-container { + display: flex; + position: relative; + margin-top: 12px; + margin-bottom: 20px; + width: fit-content; +} + +.copy-page-button.header-group-btn { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 14px; + background-color: var(--ifm-background-color); + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 4px; + cursor: pointer; + font-size: 0.7rem; + font-weight: 700; + color: var(--ifm-color-emphasis-600); + transition: all 0.2s ease-in-out; + height: 34px; + white-space: nowrap; +} + +.copy-page-button.header-group-btn:hover { + color: var(--ifm-color-primary); + border-color: var(--ifm-color-primary); + background-color: rgba(255, 115, 0, 0.05); +} + +.copy-page-button.copied-success { + color: #2e7d32; + border-color: #2e7d32; + background-color: rgba(46, 125, 50, 0.1); +} + +.copy-page-menu { + position: absolute; + top: calc(100% + 4px); + left: 0; + right: auto; + min-width: 230px; + padding: 6px; + background-color: var(--ifm-background-color); + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 6px; + box-shadow: var(--ds-box-shadow-2); + z-index: 100; + display: none; +} + +.copy-page-menu.active { display: block; } + +.copy-page-item { + display: flex; + align-items: center; + gap: 10px; + width: 100%; + padding: 8px 12px; + font-size: 0.75rem; + color: var(--ifm-font-color-base); + background: none; + border: none; + border-radius: 4px; + cursor: pointer; + text-align: left; +} + +.copy-page-item:hover { background-color: var(--ifm-color-emphasis-100); } + +.copy-page-item-text { + display: flex; + flex-direction: column; + flex: 1; +} + +.copy-page-item-title { font-weight: 600; } +.copy-page-item-desc { font-size: 0.65rem; color: var(--ifm-color-emphasis-600); } +.copy-page-divider { height: 1px; background-color: var(--ifm-color-emphasis-300); margin: 6px 0; opacity: 0.5; } + +.copy-page-chevron-icon { transition: transform 0.2s; } +.copy-page-button[aria-expanded="true"] .copy-page-chevron-icon { transform: rotate(180deg); } + +.copy-page-backdrop { + display: none; + position: fixed; + top: 0; left: 0; right: 0; bottom: 0; + z-index: 90; +} +.copy-page-backdrop.active { display: block; } + +@media (max-width: 600px) { + .copy-page-button .btn-text, .copy-page-chevron-icon { display: none; } + .copy-page-button { width: 100px; padding: 0; justify-content: center; } + .copy-page-container { width: 50px; } +} + +/* ========================================================================== + Superfences / Tabs + ========================================================================== */ + +.superfences-tabs { + display: flex; + position: relative; + flex-wrap: wrap; + margin: 1em 0; + border-radius: 0.2em; +} + +html .superfences-tabs > label { + color: #ff7043; + font-weight: normal; + border: none; +} + +html .superfences-tabs > label:hover { + color: #ff7043; + font-weight: bold; +} + +/* ========================================================================== + Responsive Adjustments + ========================================================================== */ + +@media screen and (max-width: 996px) { + .navbar__items { + font-size: 14px; + } + + .menu { + font-size: 14px; + } +} + +@media screen and (min-width: 997px) { + article .markdown { + margin: 0 auto 3rem; + padding: 0.5rem 2rem; + max-width: 900px; + } +} + +/* ========================================================================== + Prism / Syntax Highlighting Overrides + ========================================================================== */ + +/* Override Prism code block to use the dark code theme colors */ +.prism-code { + color: #d9d9de; + background-color: #161618; +} + +/* Token colors matching mkdocs code highlighting */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #47bfffb5; +} + +.token.punctuation { + color: #d9d9de; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #d52a2a; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #a0fbaa; +} + +.token.operator, +.token.entity, +.token.url { + color: #d9d9de; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #4489FF; +} + +.token.function, +.token.class-name { + color: #ec9752; +} + +.token.regex, +.token.important, +.token.variable { + color: #47bfffb5; +} + +/* ========================================================================== + Tables Styling + ========================================================================== */ + +.markdown table { + display: table; + width: 100%; + border-radius: var(--ifm-border-radius); +} + +.markdown th { + font-weight: 600; + font-size: 0.85rem; +} + +.markdown td { + font-size: 0.85rem; +} + +/* ========================================================================== + Breadcrumbs Styling + ========================================================================== */ + +.theme-doc-breadcrumbs { + margin-bottom: 1rem; +} + +.breadcrumbs__link { + font-size: 0.75rem; +} + +/* ========================================================================== + Sidebar Category Icons (top-level only, not sub-items) + ========================================================================== */ + +/* Common styles for all sidebar icons */ +.sidebar-icon-home > .menu__link::before, +.sidebar-icon-rocket > .menu__list-item-collapsible > .menu__link::before, +.sidebar-icon-book > .menu__list-item-collapsible > .menu__link::before, +.sidebar-icon-graduation > .menu__list-item-collapsible > .menu__link::before, +.sidebar-icon-cube > .menu__list-item-collapsible > .menu__link::before, +.sidebar-icon-code > .menu__list-item-collapsible > .menu__link::before, +.sidebar-icon-external-link > .menu__list-item-collapsible > .menu__link::before { + font-family: 'FA-Solid'; + font-weight: 900; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + margin-right: 8px; + display: inline-block; + width: 17px; + text-align: center; + font-size: 14px; +} + +.sidebar-icon-home > .menu__link::before { content: '\f015'; } +.sidebar-icon-rocket > .menu__list-item-collapsible > .menu__link::before { content: '\f135'; } +.sidebar-icon-book > .menu__list-item-collapsible > .menu__link::before { content: '\f518'; } +.sidebar-icon-graduation > .menu__list-item-collapsible > .menu__link::before { content: '\f19d'; } +.sidebar-icon-cube > .menu__list-item-collapsible > .menu__link::before { content: '\f1b2'; } +.sidebar-icon-code > .menu__list-item-collapsible > .menu__link::before { content: '\f121'; } +.sidebar-icon-external-link > .menu__list-item-collapsible > .menu__link::before { content: '\f35d'; } + +/* Connect App tech stack brand icons */ +.sidebar-icon-ca-react > .menu__list-item-collapsible > .menu__link::before, +.sidebar-icon-ca-vue > .menu__list-item-collapsible > .menu__link::before, +.sidebar-icon-ca-angular > .menu__list-item-collapsible > .menu__link::before, +.sidebar-icon-ca-js > .menu__list-item-collapsible > .menu__link::before { + font-family: 'FA-Brands'; + font-weight: 400; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + margin-right: 8px; + display: inline-block; + width: 17px; + text-align: center; + font-size: 14px; +} + +.sidebar-icon-ca-react > .menu__list-item-collapsible > .menu__link::before { content: '\f41b'; } +.sidebar-icon-ca-vue > .menu__list-item-collapsible > .menu__link::before { content: '\f41f'; } +.sidebar-icon-ca-angular > .menu__list-item-collapsible > .menu__link::before { content: '\f420'; } +.sidebar-icon-ca-js > .menu__list-item-collapsible > .menu__link::before { content: '\f3b8'; } + +/* Sidebar divider */ +.sidebar-divider { + border-top: 1px solid var(--ifm-color-emphasis-300); + margin: 15px 0; +} + +/* ========================================================================== + SDK Cards + ========================================================================== */ + +.sdk-type-heading { + margin-top: 2rem; +} + +.sdk-type-description { + color: var(--ifm-color-emphasis-600); + font-weight: 400; + margin-bottom: 1.5rem; +} + +.flex-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); + gap: 20px; + margin-bottom: 2rem; +} + +.sdk-card { + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.sdk-card-header { + display: flex; + flex-direction: column; + gap: 12px; +} + +.sdk-card-info { + display: flex; + align-items: flex-start; + gap: 14px; +} + +.sdk-card-icon-container { + flex-shrink: 0; + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; +} + +.sdk-card-icon { + max-width: 100%; + max-height: 100%; +} + +[data-theme='dark'] .sdk-card-icon--dark { + display: inline; +} + +[data-theme='light'] .sdk-card-icon--dark, +:root:not([data-theme='dark']) .sdk-card-icon--dark { + display: none; +} + +.sdk-card-package-info { + flex: 1; + min-width: 0; +} + +.sdk-card-heading { + margin: 0 0 6px; + font-size: 1rem; +} + +.sdk-card-artifact-id code { + font-size: 0.75rem; + background: var(--ifm-color-emphasis-100); + padding: 2px 8px; + border-radius: 4px; + word-break: break-all; +} + +.sdk-card-description { + margin-top: 12px; + font-size: 0.85rem; + color: var(--ifm-color-emphasis-700); + flex: 1; +} + +.sdk-card-description p { + margin: 0; +} + +.integration-card-source-links { + display: flex; + gap: 8px; + margin-top: 16px; + padding-top: 12px; + border-top: 1px solid var(--ifm-color-emphasis-200); +} + +.integration-card-source-links .source-link { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border-radius: 50%; + color: var(--ifm-color-emphasis-600); + transition: background-color 0.2s, color 0.2s; +} + +.integration-card-source-links .source-link:hover { + background: var(--ifm-color-emphasis-200); + color: var(--ifm-color-primary); +} + +/* ========================================================================== + Home Page Styles + ========================================================================== */ + +/* Hide TOC sidebar on home page */ +.docMainContainer_TBSr:has(#asgardeo-home) ~ .col { + display: none !important; +} + +.docMainContainer_TBSr:has(#asgardeo-home) .row .col.docItemCol_VOVn { + max-width: 100% !important; +} + +/* Override Docusaurus content max-width for home page */ +#asgardeo-home { + max-width: 1400px; + margin: 0 auto; +} + +/* Prevent Docusaurus article/navbar default max-widths from boxing-in the home page */ +.markdown:has(#asgardeo-home) { + max-width: 100% !important; + padding: 0 !important; + margin: 0 auto 3rem !important; +} + +.docMainContainer_TBSr:has(#asgardeo-home) > .container { + max-width: 100% !important; +} + +#asgardeo-home .md-home-search-input-description { + max-width: 800px; + margin-left: auto; + margin-right: auto; +} + +.home-page-container { + position: relative; +} + +:root, +[data-theme='light'] { + --md-home-body-gradient: conic-gradient(from 180deg at 50% 50%, #2a8af6 0deg, #d9a300 180deg, #ff7300 1turn); +} + +[data-theme='dark'] { + --md-home-body-gradient: conic-gradient(from 180deg at 50% 50%, #2a8af6 0deg, #d9a300 180deg, #ff7300 1turn); +} + +.md-home-gradient { + background: var(--md-home-body-gradient); + width: 1000px; + height: 1000px; + display: block; + mix-blend-mode: normal; + filter: blur(75px); + opacity: 0.15; + will-change: filter; + border-radius: 9999px; + max-width: 100%; + top: -500px; + position: absolute; + z-index: -1; +} + +.md-home-search-container { + margin: 0 auto 10px; + text-align: center; +} + +.md-home-search-input-label { + margin-bottom: 0.5em; + font-size: 2rem; +} + +.md-home-search-input-description { + display: block; + max-width: 800px; + margin: 2em auto 5em; + text-align: center; +} + +.md-home-sections { + max-width: 1400px; + margin-bottom: 5rem !important; +} + +.md-column-grid { + margin: auto; + display: flex; + align-items: start; + justify-content: space-between; + width: 100%; +} + +.md-grid-column { + width: 32%; + flex-shrink: 0; +} + +.md-grid-column:last-child { + margin-right: 0; +} + +.md-column-grid-item { + margin: 0 0 20px 0; +} + +/* Override Docusaurus content max-width for home page */ +#asgardeo-home { + max-width: 1400px; + margin: 0 auto; +} + +/* Prevent Docusaurus article/navbar default max-widths from boxing-in the home page */ +.markdown:has(#asgardeo-home) { + max-width: 100% !important; + padding: 0 !important; + margin: 0 auto 3rem !important; +} + +.docMainContainer_TBSr:has(#asgardeo-home) > .container { + max-width: 100% !important; +} + +#asgardeo-home .md-home-search-input-description { + max-width: 800px; + margin-left: auto; + margin-right: auto; +} + +.article-wrapper .home-page-container { + max-width: 100%; +} + +.home-page-container .md-home-search-input-description { + max-width: 800px; + margin-left: auto; + margin-right: auto; +} + +/* Remove Docusaurus article default max-width on home page */ +article:has(.home-page-container) { + max-width: 100% !important; +} + +article:has(.home-page-container) ~ .container { + max-width: 100% !important; +} + +.markdown:has(.home-page-container) { + max-width: 100% !important; + padding: 0 !important; +} + +.md-column-grid-item-header-container { + display: flex; + justify-content: space-between; + margin-bottom: 15px; +} + +.md-column-grid-item-header-text { + font-size: 0.8rem; + font-weight: 600; + line-height: 2.5; +} + +.md-column-grid-item-header-icon { + background: #F7F8FB; + border-radius: 50%; + display: inline-flex; + align-items: center; + justify-content: center; + height: 2rem; + width: 2rem; + flex-shrink: 0; +} + +[data-theme='dark'] .md-column-grid-item-header-icon { + background: rgba(255, 255, 255, 0.08); +} + +.md-list-item > a { + color: var(--ifm-font-color-base); + display: block; + padding: 10px 0; + white-space: nowrap; + border-bottom: 1px solid var(--ifm-color-emphasis-200); + text-decoration: none; +} + +.md-list-item > a:hover { + color: var(--ifm-color-primary); + text-decoration: none; +} + +.md-list-item:last-child > a { + border-bottom: none; +} + +.md-list-item-icon { + margin-right: 0.5rem; + vertical-align: top; + display: inline-block; +} + +.md-list-item-icon svg > path { + fill: var(--ifm-color-primary); +} + +.md-list-item-icon, +.md-list-item-text { + max-width: 92%; + white-space: normal; + display: inline-block; + vertical-align: middle; +} + +@media screen and (max-width: 996px) { + .md-column-grid { + flex-direction: column; + } + + .md-grid-column { + width: 100%; + display: block; + } +} + +/* ========================================================================== + Scrollbar Styling + ========================================================================== */ + +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: var(--ifm-color-emphasis-400); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--ifm-color-emphasis-500); +} diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/account-recovery.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/account-recovery.yaml new file mode 100644 index 0000000000..e3507dc049 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/account-recovery.yaml @@ -0,0 +1,256 @@ +openapi: 3.0.1 +info: + title: Recovery API + description: | + This document specifies a **Organization level Recovery related RESTful API** for Asgardeo. + version: 0.9.0 +servers: + - url: https://api.asgardeo.io/t/{root-organization-name}/o/api/identity/recovery/v0.9 +security: + - OAuth2: [] +paths: + /recover-password: + post: + tags: + - Password Recovery + - Notification + summary: | + Send recovery notification + description: | + This API is used to send password recovery confirmation over defined channels like email/SMS. + + Scope(Permission) required: `internal_org_recovery_create` + parameters: + - name: type + in: query + description: Notification Type + schema: + type: string + - name: notify + in: query + description: If notify=true, notifications will be internally managed. + schema: + type: boolean + requestBody: + description: Optional property parameters can be sent via email based on the + email template. + content: + application/json: + schema: + $ref: '#/components/schemas/RecoveryInitiatingRequest' + required: true + responses: + 202: + description: Successful response + content: + application/json: + schema: + title: key + type: string + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/identity/recovery/v0.9/recover-password?type=email¬ify=true' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "user": { + "username": "john", + "realm": "ENGINEERING", + "tenant-domain": "f5fac8b0-e23e-44de-b4ba-a4d7c304d474" + }, + "properties": [] + }' + /set-password: + post: + tags: + - Password Recovery + - Notification + summary: | + Update password + description: | + This API is used to reset the user password using the confirmation key received through the recovery process. You need to input the `key` and the new `password`. + + Scope(Permission) required: `internal_org_recovery_create` + requestBody: + description: Key, password, and optional metadata properties. + content: + application/json: + schema: + $ref: '#/components/schemas/ResetPasswordRequest' + required: true + responses: + 202: + description: Successful response + content: {} + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 412: + description: Precondition Failed + content: + application/json: + schema: + $ref: '#/components/schemas/RetryError' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/identity/recovery/v0.9/set-password' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "key": "5c765a47-6764-4048-b5cf-55864cb654c0", + "password": "P@ssW0rd", + "properties": [] + }' + /validate-code: + post: + tags: + - Password Recovery + summary: | + Validate confirmation code + description: | + This API is used to validate confirmation codes sent in account recovery scenarios and self-signup. You need to input the confirmation `code` and recovery `step` as parameters. + + Scope(Permission) required: `internal_org_recovery_create` + requestBody: + description: Code, recovery step, and optional parameters.
For recovery **step**, + you can use one of the following according to the recovery scenario that you want to validate the code. +
    +
  • **UPDATE_PASSWORD**
  • +
  • **CONFIRM_SIGN_UP**
  • +
  • **VALIDATE_CHALLENGE_QUESTION**
  • +
  • **VALIDATE_ALL_CHALLENGE_QUESTION**
  • +
+ + content: + application/json: + schema: + $ref: '#/components/schemas/CodeValidationRequest' + required: true + responses: + 202: + description: Accepted + content: {} + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/identity/recovery/v0.9/validate-code' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "code": "84325529-8aa7-4851-8751-5980a7f2d9f7", + "step": "UPDATE_PASSWORD", + "properties": [] + }' +components: + schemas: + User: + type: object + properties: + username: + type: string + realm: + type: string + ResetPasswordRequest: + type: object + properties: + key: + type: string + password: + type: string + properties: + type: array + items: + $ref: '#/components/schemas/Property' + Error: + type: object + properties: + code: + type: string + message: + type: string + description: + type: string + RetryError: + type: object + properties: + code: + type: string + message: + type: string + description: + type: string + key: + type: string + Property: + type: object + properties: + key: + type: string + value: + type: string + RecoveryInitiatingRequest: + type: object + properties: + user: + $ref: '#/components/schemas/User' + properties: + type: array + items: + $ref: '#/components/schemas/Property' + CodeValidationRequest: + type: object + properties: + code: + type: string + step: + type: string + properties: + type: array + items: + $ref: '#/components/schemas/Property' + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{root-organization-name}/oauth/authorize + tokenUrl: https://api.asgardeo.io/t/{root-organization-name}/oauth/token + scopes: + read: Grants read access + write: Grants write access + admin: Grants read and write access to administrative information diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/actions.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/actions.yaml new file mode 100644 index 0000000000..80f6f9235a --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/actions.yaml @@ -0,0 +1,1418 @@ +openapi: 3.0.0 +info: + version: v1 + title: Asgardeo - Action Management Rest API + description: > + The Action Management REST API provides a comprehensive interface to manage actions + within the Asgardeo. Actions enable the extension of product functionality + across various workflows, such as password updates, and profile updates. + This API helps developers and administrators to define and manage actions to meet specific + business needs. +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1' + variables: + root-organization-name: + default: "{root-organization-name}" +security: + - OAuth2: [] +paths: + /actions/types: + get: + tags: + - Action Types + summary: List Action Types + description: "This API returns the detailed summary of the action types.\n\n + Scope (Permission) required: ``internal_org_action_mgt_view``\n\n" + operationId: getActionTypes + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ActionTypesResponse' + example: + - type: PRE_UPDATE_PASSWORD + displayName: Pre Update Password + description: This action invokes before updating a user password. + count: 1 + self: "/o/api/server/v1/actions/preUpdatePassword" + - type: PRE_UPDATE_PROFILE + displayName: Pre Update Profile + description: This action invokes before updating a user profile. + count: 1 + self: "/o/api/server/v1/actions/preUpdateProfile" + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/actions/types' \ + -H 'Authorization: Bearer {bearer_token}' + + /actions/{actionType}: + post: + tags: + - Actions + summary: Add Action + description: "This API creates an action and returns the action details along with the action's unique ID.\n\n + Scope (Permission) required: ``internal_org_action_mgt_create``\n\n" + operationId: createAction + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preUpdatePassword + - preUpdateProfile + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ActionModel' + examples: + preUpdatePassword: + summary: Sample payload for pre update password action + value: + name: Password Update Action + description: This action invokes before updating a user password. + endpoint: + uri: https://myextension.com/pre-update-password + authentication: + properties: + header: x-api-key + value: e12595c1-1435-4bf2-94e8-445135ab505a + type: API_KEY + passwordSharing: + format: SHA256_HASHED + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lFWlhCR0NUQU5CZ2txaGtpRzl3MEJBUXNGQURCaU1Rc3dDUVlEVlFRR0V3SlYNClV6RUxNQWtHQTFVRUNBd0NRMEV4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1RMHdDd1lEVlFRS0RBUlgNClUwOHlNUTB3Q3dZRFZRUUxEQVJYVTA4eU1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdIaGNOTWpNeE1qQTINCk1EazFPVE0zV2hjTk1qVXdNVEEzTURrMU9UTTNXakJpTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNBd0MNClEwRXhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVEwd0N3WURWUVFLREFSWFUwOHlNUTB3Q3dZRFZRUUwNCkRBUlhVMDh5TVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUINCkR3QXdnZ0VLQW9JQkFRQ2E0amx3OEtyWHMzOTZTdktmVFEwMkllUm9hWnF1ZWtvSlNpdzBsOWU5QkkyRWF2blQNCkc4SnlvcDh6MnJPcjZDNmpqZGdVeXR6NWpCaG9wYmdmeHJQMmkwTkd1akpGTE5uU1U4cmNoRDJUSjlRbzh0V3YNCmZqQUtDL1VsUnhTb0VyT1RkejdYUzFDY1BmNm9RZk56TVo2QnkyOXpmSVN1QytyV25qTHFUM002ejBGMGIzK20NCm9paVpmUTA1RjAwaHd6U0U5V0JsTCtHUnh3cHlRUVl3c2JHZlordmlJM0VHdjdzUnYreHFwTFBoVzVTTHpoR3oNCnNaaTlDME0wRzFqYnZWMWQrUFkwTVRoRTYwcmthdmpNKytSUkJlc29pNUprblprc0F0OWhPcXhZM0ExSU1kREENCk5wZEtxaGRGMWFBeURYK3ZUWkZySGZMc3VFQmVjNVBwM3RJWEFnTUJBQUdqWmpCa01BNEdBMVVkRHdFQi93UUUNCkF3SUU4REFVQmdOVkhSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0hRWURWUjBPQkJZRUZIWFhWMm5sb2ZoaThXd2oNCncwRW9hRlNZbldiU01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFOQmdrcWhraUcNCjl3MEJBUXNGQUFPQ0FRRUFSZThESThuNzJlVWxReTlHU3BpeXh2OFFVSEZkaVFhMW5CVzluVlRaZHlKb1NYMHENCmg2TjN4Vk5KWFIzL3pMdkw4TUJWTXZqa3QwT1FxdkVpeWp3bkVXTzZEYnhUUnIzdmRmK3J2NVZ3ZGtZbjRNY00NCkt4NHhGOFphZzh4aHlhWXFVUXpRWG5nNTFyVjErYzR1elh1Z0VoRTVTemRESFlFWHpYNmpvWklnMXlOK2hFUGMNCjc3UlpKSkhtd0lRclRkM2JuWnB5dEI2UmRCam5qU3loMEJlSGxKUUdtUHhvbXhZQVMxaFZzelJkZld0cnhEQUINCmZsSUppbUppSGgzZHlrY3lObHJ3QnU5MDNwTWRVR1FHcXNVeUVqaEZkN3M0QXp1cVlISnI1cll5OTUwZGY5SWINCllTaHUyWWZsVkVzV1pxSlI2MkNpYldCY0pLeUhQWW10QzBjU1JRPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedPasswordReset + - field: flow + operator: notEquals + value: adminInitiatedPasswordUpdate + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedPasswordReset + preUpdateProfile: + summary: Sample payload for pre update profile action + value: + name: Profile Update Action + description: This action invokes before updating a user profile. + endpoint: + uri: https://myextension.com/pre-update-profile + authentication: + properties: + header: x-api-key + value: e12595c1-1435-4bf2-94e8-445135ab505a + type: API_KEY + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedProfileUpdate + - field: claim + operator: notEquals + value: http://wso2.org/claims/country + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedProfileUpdate + description: This represents the information of the action to be created. + required: true + responses: + '201': + description: Action Created + content: + application/json: + schema: + $ref: '#/components/schemas/ActionResponse' + examples: + preUpdatePassword: + summary: Sample response for pre update password action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + name: Password Update Action + description: This action invokes before updating a user password. + status: INACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/pre-update-password + authentication: + type: API_KEY + passwordSharing: + format: SHA256_HASHED + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lFWlhCR0NUQU5CZ2txaGtpRzl3MEJBUXNGQURCaU1Rc3dDUVlEVlFRR0V3SlYNClV6RUxNQWtHQTFVRUNBd0NRMEV4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1RMHdDd1lEVlFRS0RBUlgNClUwOHlNUTB3Q3dZRFZRUUxEQVJYVTA4eU1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdIaGNOTWpNeE1qQTINCk1EazFPVE0zV2hjTk1qVXdNVEEzTURrMU9UTTNXakJpTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNBd0MNClEwRXhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVEwd0N3WURWUVFLREFSWFUwOHlNUTB3Q3dZRFZRUUwNCkRBUlhVMDh5TVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUINCkR3QXdnZ0VLQW9JQkFRQ2E0amx3OEtyWHMzOTZTdktmVFEwMkllUm9hWnF1ZWtvSlNpdzBsOWU5QkkyRWF2blQNCkc4SnlvcDh6MnJPcjZDNmpqZGdVeXR6NWpCaG9wYmdmeHJQMmkwTkd1akpGTE5uU1U4cmNoRDJUSjlRbzh0V3YNCmZqQUtDL1VsUnhTb0VyT1RkejdYUzFDY1BmNm9RZk56TVo2QnkyOXpmSVN1QytyV25qTHFUM002ejBGMGIzK20NCm9paVpmUTA1RjAwaHd6U0U5V0JsTCtHUnh3cHlRUVl3c2JHZlordmlJM0VHdjdzUnYreHFwTFBoVzVTTHpoR3oNCnNaaTlDME0wRzFqYnZWMWQrUFkwTVRoRTYwcmthdmpNKytSUkJlc29pNUprblprc0F0OWhPcXhZM0ExSU1kREENCk5wZEtxaGRGMWFBeURYK3ZUWkZySGZMc3VFQmVjNVBwM3RJWEFnTUJBQUdqWmpCa01BNEdBMVVkRHdFQi93UUUNCkF3SUU4REFVQmdOVkhSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0hRWURWUjBPQkJZRUZIWFhWMm5sb2ZoaThXd2oNCncwRW9hRlNZbldiU01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFOQmdrcWhraUcNCjl3MEJBUXNGQUFPQ0FRRUFSZThESThuNzJlVWxReTlHU3BpeXh2OFFVSEZkaVFhMW5CVzluVlRaZHlKb1NYMHENCmg2TjN4Vk5KWFIzL3pMdkw4TUJWTXZqa3QwT1FxdkVpeWp3bkVXTzZEYnhUUnIzdmRmK3J2NVZ3ZGtZbjRNY00NCkt4NHhGOFphZzh4aHlhWXFVUXpRWG5nNTFyVjErYzR1elh1Z0VoRTVTemRESFlFWHpYNmpvWklnMXlOK2hFUGMNCjc3UlpKSkhtd0lRclRkM2JuWnB5dEI2UmRCam5qU3loMEJlSGxKUUdtUHhvbXhZQVMxaFZzelJkZld0cnhEQUINCmZsSUppbUppSGgzZHlrY3lObHJ3QnU5MDNwTWRVR1FHcXNVeUVqaEZkN3M0QXp1cVlISnI1cll5OTUwZGY5SWINCllTaHUyWWZsVkVzV1pxSlI2MkNpYldCY0pLeUhQWW10QzBjU1JRPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedPasswordReset + - field: flow + operator: notEquals + value: adminInitiatedPasswordUpdate + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedPasswordReset + preUpdateProfile: + summary: Sample response for pre update profile action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + name: Profile Update Action + description: This action invokes before updating a user profile. + status: INACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/pre-update-profile + authentication: + type: API_KEY + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedProfileUpdate + - field: claim + operator: notEquals + value: http://wso2.org/claims/country + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedProfileUpdate + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl - preUpdatePassword + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/actions/preUpdatePassword' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "name": "Password Update Action", + "description": "This action invokes before updating a user password.", + "endpoint": { + "uri": "https://myextension.com/pre-update-password", + "authentication": { + "properties": { + "header": "x-api-key", + "value": "e12595c1-1435-4bf2-94e8-445135ab505a" + }, + "type": "API_KEY" + } + }, + "passwordSharing": { + "format": "SHA256_HASHED" + }, + "attributes": ["http://wso2.org/claims/givenname", "http://wso2.org/claims/dob"] + }' + - lang: Curl - preUpdateProfile + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/actions/preUpdateProfile' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "name": "Profile Update Action", + "description": "This action invokes before updating a user profile.", + "endpoint": { + "uri": "https://myextension.com/pre-update-profile", + "authentication": { + "properties": { + "header": "x-api-key", + "value": "e12595c1-1435-4bf2-94e8-445135ab505a" + }, + "type": "API_KEY" + } + }, + "attributes": ["http://wso2.org/claims/givenname", "http://wso2.org/claims/dob"] + }' + x-codegen-request-body-name: body + + get: + tags: + - Actions + summary: List Actions + description: "This API returns actions according to the action type. \n\n + Scope (Permission) required: ``internal_org_action_mgt_view``\n\n" + operationId: getActionsByActionType + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preUpdatePassword + - preUpdateProfile + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ActionResponseList' + examples: + preUpdatePassword: + summary: Sample response for pre update password action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PASSWORD + name: Password Update Action + description: This action invokes before updating a user password. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/o/api/server/v1/actions/preUpdatePassword/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + preUpdateProfile: + summary: Sample response for pre update profile action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PROFILE + name: Profile Update Action + description: This action invokes before updating a user profile. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/o/api/server/v1/actions/preUpdateProfile/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/actions/{actionType}' \ + -H 'Authorization: Bearer {bearer_token}' + + /actions/{actionType}/{actionId}: + get: + tags: + - Actions + operationId: getActionByActionId + summary: Retrieve Action by ID + description: "This API provides the capability to retrieve the action by action Id. \n\n + Scope (Permission) required: ``internal_org_action_mgt_view``\n\n" + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preUpdatePassword + - preUpdateProfile + - name: actionId + in: path + description: Unique identifier of the action. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ActionResponse' + examples: + preUpdatePassword: + summary: Sample response for pre update password action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PASSWORD + name: Password Update Action + description: This action invokes before updating a user password. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/pre-update-password + authentication: + type: API_KEY + passwordSharing: + format: SHA256_HASHED + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lFWlhCR0NUQU5CZ2txaGtpRzl3MEJBUXNGQURCaU1Rc3dDUVlEVlFRR0V3SlYNClV6RUxNQWtHQTFVRUNBd0NRMEV4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1RMHdDd1lEVlFRS0RBUlgNClUwOHlNUTB3Q3dZRFZRUUxEQVJYVTA4eU1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdIaGNOTWpNeE1qQTINCk1EazFPVE0zV2hjTk1qVXdNVEEzTURrMU9UTTNXakJpTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNBd0MNClEwRXhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVEwd0N3WURWUVFLREFSWFUwOHlNUTB3Q3dZRFZRUUwNCkRBUlhVMDh5TVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUINCkR3QXdnZ0VLQW9JQkFRQ2E0amx3OEtyWHMzOTZTdktmVFEwMkllUm9hWnF1ZWtvSlNpdzBsOWU5QkkyRWF2blQNCkc4SnlvcDh6MnJPcjZDNmpqZGdVeXR6NWpCaG9wYmdmeHJQMmkwTkd1akpGTE5uU1U4cmNoRDJUSjlRbzh0V3YNCmZqQUtDL1VsUnhTb0VyT1RkejdYUzFDY1BmNm9RZk56TVo2QnkyOXpmSVN1QytyV25qTHFUM002ejBGMGIzK20NCm9paVpmUTA1RjAwaHd6U0U5V0JsTCtHUnh3cHlRUVl3c2JHZlordmlJM0VHdjdzUnYreHFwTFBoVzVTTHpoR3oNCnNaaTlDME0wRzFqYnZWMWQrUFkwTVRoRTYwcmthdmpNKytSUkJlc29pNUprblprc0F0OWhPcXhZM0ExSU1kREENCk5wZEtxaGRGMWFBeURYK3ZUWkZySGZMc3VFQmVjNVBwM3RJWEFnTUJBQUdqWmpCa01BNEdBMVVkRHdFQi93UUUNCkF3SUU4REFVQmdOVkhSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0hRWURWUjBPQkJZRUZIWFhWMm5sb2ZoaThXd2oNCncwRW9hRlNZbldiU01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFOQmdrcWhraUcNCjl3MEJBUXNGQUFPQ0FRRUFSZThESThuNzJlVWxReTlHU3BpeXh2OFFVSEZkaVFhMW5CVzluVlRaZHlKb1NYMHENCmg2TjN4Vk5KWFIzL3pMdkw4TUJWTXZqa3QwT1FxdkVpeWp3bkVXTzZEYnhUUnIzdmRmK3J2NVZ3ZGtZbjRNY00NCkt4NHhGOFphZzh4aHlhWXFVUXpRWG5nNTFyVjErYzR1elh1Z0VoRTVTemRESFlFWHpYNmpvWklnMXlOK2hFUGMNCjc3UlpKSkhtd0lRclRkM2JuWnB5dEI2UmRCam5qU3loMEJlSGxKUUdtUHhvbXhZQVMxaFZzelJkZld0cnhEQUINCmZsSUppbUppSGgzZHlrY3lObHJ3QnU5MDNwTWRVR1FHcXNVeUVqaEZkN3M0QXp1cVlISnI1cll5OTUwZGY5SWINCllTaHUyWWZsVkVzV1pxSlI2MkNpYldCY0pLeUhQWW10QzBjU1JRPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedPasswordReset + - field: flow + operator: notEquals + value: adminInitiatedPasswordUpdate + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedPasswordReset + preUpdateProfile: + summary: Sample response for pre update profile action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PROFILE + name: Profile Update Action + description: This action invokes before updating a user profile. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/pre-update-profile + authentication: + type: API_KEY + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedProfileUpdate + - field: claim + operator: notEquals + value: http://wso2.org/claims/country + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedProfileUpdate + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/actions/{actionType}/{actionId}' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Actions + summary: Update Action + description: "This API updates an action and return the updated action. \n\n + Scope (Permission) required: ``internal_org_action_mgt_update``\n\n" + operationId: updateAction + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preUpdatePassword + - preUpdateProfile + - name: actionId + in: path + description: Unique identifier of the action. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ActionUpdateModel' + examples: + preUpdatePassword: + summary: Sample payload for pre update password action update + value: + name: Updated Password Update Action + description: This action invokes before updating a user password. + endpoint: + uri: https://myextension.com/external/pre-update-password + authentication: + properties: {} + type: NONE + passwordSharing: + format: PLAIN_TEXT + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lFWlhCR0NUQU5CZ2txaGtpRzl3MEJBUXNGQURCaU1Rc3dDUVlEVlFRR0V3SlYNClV6RUxNQWtHQTFVRUNBd0NRMEV4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1RMHdDd1lEVlFRS0RBUlgNClUwOHlNUTB3Q3dZRFZRUUxEQVJYVTA4eU1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdIaGNOTWpNeE1qQTINCk1EazFPVE0zV2hjTk1qVXdNVEEzTURrMU9UTTNXakJpTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNBd0MNClEwRXhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVEwd0N3WURWUVFLREFSWFUwOHlNUTB3Q3dZRFZRUUwNCkRBUlhVMDh5TVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUINCkR3QXdnZ0VLQW9JQkFRQ2E0amx3OEtyWHMzOTZTdktmVFEwMkllUm9hWnF1ZWtvSlNpdzBsOWU5QkkyRWF2blQNCkc4SnlvcDh6MnJPcjZDNmpqZGdVeXR6NWpCaG9wYmdmeHJQMmkwTkd1akpGTE5uU1U4cmNoRDJUSjlRbzh0V3YNCmZqQUtDL1VsUnhTb0VyT1RkejdYUzFDY1BmNm9RZk56TVo2QnkyOXpmSVN1QytyV25qTHFUM002ejBGMGIzK20NCm9paVpmUTA1RjAwaHd6U0U5V0JsTCtHUnh3cHlRUVl3c2JHZlordmlJM0VHdjdzUnYreHFwTFBoVzVTTHpoR3oNCnNaaTlDME0wRzFqYnZWMWQrUFkwTVRoRTYwcmthdmpNKytSUkJlc29pNUprblprc0F0OWhPcXhZM0ExSU1kREENCk5wZEtxaGRGMWFBeURYK3ZUWkZySGZMc3VFQmVjNVBwM3RJWEFnTUJBQUdqWmpCa01BNEdBMVVkRHdFQi93UUUNCkF3SUU4REFVQmdOVkhSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0hRWURWUjBPQkJZRUZIWFhWMm5sb2ZoaThXd2oNCncwRW9hRlNZbldiU01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFOQmdrcWhraUcNCjl3MEJBUXNGQUFPQ0FRRUFSZThESThuNzJlVWxReTlHU3BpeXh2OFFVSEZkaVFhMW5CVzluVlRaZHlKb1NYMHENCmg2TjN4Vk5KWFIzL3pMdkw4TUJWTXZqa3QwT1FxdkVpeWp3bkVXTzZEYnhUUnIzdmRmK3J2NVZ3ZGtZbjRNY00NCkt4NHhGOFphZzh4aHlhWXFVUXpRWG5nNTFyVjErYzR1elh1Z0VoRTVTemRESFlFWHpYNmpvWklnMXlOK2hFUGMNCjc3UlpKSkhtd0lRclRkM2JuWnB5dEI2UmRCam5qU3loMEJlSGxKUUdtUHhvbXhZQVMxaFZzelJkZld0cnhEQUINCmZsSUppbUppSGgzZHlrY3lObHJ3QnU5MDNwTWRVR1FHcXNVeUVqaEZkN3M0QXp1cVlISnI1cll5OTUwZGY5SWINCllTaHUyWWZsVkVzV1pxSlI2MkNpYldCY0pLeUhQWW10QzBjU1JRPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + attributes: + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedPasswordReset + - field: flow + operator: notEquals + value: adminInitiatedPasswordUpdate + preUpdateProfile: + summary: Sample payload for pre update profile action update + value: + name: Updated Profile Update Action + description: This action invokes before updating a user profile. + endpoint: + uri: https://myextension.com/external/pre-update-profile + authentication: + properties: {} + type: NONE + attributes: + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedProfileUpdate + - field: claim + operator: notEquals + value: http://wso2.org/claims/postalcode + description: This represents the action to be updated. + required: true + responses: + '200': + description: Action Updated + content: + application/json: + schema: + $ref: '#/components/schemas/ActionResponse' + examples: + preUpdatePassword: + summary: Sample response for pre update password action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + name: Updated Password Update Action + description: This action invokes before updating a user password. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/external/pre-update-password + authentication: + type: NONE + passwordSharing: + format: PLAIN_TEXT + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lFWlhCR0NUQU5CZ2txaGtpRzl3MEJBUXNGQURCaU1Rc3dDUVlEVlFRR0V3SlYNClV6RUxNQWtHQTFVRUNBd0NRMEV4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1RMHdDd1lEVlFRS0RBUlgNClUwOHlNUTB3Q3dZRFZRUUxEQVJYVTA4eU1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdIaGNOTWpNeE1qQTINCk1EazFPVE0zV2hjTk1qVXdNVEEzTURrMU9UTTNXakJpTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNBd0MNClEwRXhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVEwd0N3WURWUVFLREFSWFUwOHlNUTB3Q3dZRFZRUUwNCkRBUlhVMDh5TVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUINCkR3QXdnZ0VLQW9JQkFRQ2E0amx3OEtyWHMzOTZTdktmVFEwMkllUm9hWnF1ZWtvSlNpdzBsOWU5QkkyRWF2blQNCkc4SnlvcDh6MnJPcjZDNmpqZGdVeXR6NWpCaG9wYmdmeHJQMmkwTkd1akpGTE5uU1U4cmNoRDJUSjlRbzh0V3YNCmZqQUtDL1VsUnhTb0VyT1RkejdYUzFDY1BmNm9RZk56TVo2QnkyOXpmSVN1QytyV25qTHFUM002ejBGMGIzK20NCm9paVpmUTA1RjAwaHd6U0U5V0JsTCtHUnh3cHlRUVl3c2JHZlordmlJM0VHdjdzUnYreHFwTFBoVzVTTHpoR3oNCnNaaTlDME0wRzFqYnZWMWQrUFkwTVRoRTYwcmthdmpNKytSUkJlc29pNUprblprc0F0OWhPcXhZM0ExSU1kREENCk5wZEtxaGRGMWFBeURYK3ZUWkZySGZMc3VFQmVjNVBwM3RJWEFnTUJBQUdqWmpCa01BNEdBMVVkRHdFQi93UUUNCkF3SUU4REFVQmdOVkhSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0hRWURWUjBPQkJZRUZIWFhWMm5sb2ZoaThXd2oNCncwRW9hRlNZbldiU01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFOQmdrcWhraUcNCjl3MEJBUXNGQUFPQ0FRRUFSZThESThuNzJlVWxReTlHU3BpeXh2OFFVSEZkaVFhMW5CVzluVlRaZHlKb1NYMHENCmg2TjN4Vk5KWFIzL3pMdkw4TUJWTXZqa3QwT1FxdkVpeWp3bkVXTzZEYnhUUnIzdmRmK3J2NVZ3ZGtZbjRNY00NCkt4NHhGOFphZzh4aHlhWXFVUXpRWG5nNTFyVjErYzR1elh1Z0VoRTVTemRESFlFWHpYNmpvWklnMXlOK2hFUGMNCjc3UlpKSkhtd0lRclRkM2JuWnB5dEI2UmRCam5qU3loMEJlSGxKUUdtUHhvbXhZQVMxaFZzelJkZld0cnhEQUINCmZsSUppbUppSGgzZHlrY3lObHJ3QnU5MDNwTWRVR1FHcXNVeUVqaEZkN3M0QXp1cVlISnI1cll5OTUwZGY5SWINCllTaHUyWWZsVkVzV1pxSlI2MkNpYldCY0pLeUhQWW10QzBjU1JRPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + attributes: + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedPasswordReset + - field: flow + operator: notEquals + value: adminInitiatedPasswordUpdate + preUpdateProfile: + summary: Sample response for pre update profile action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + name: Updated Profile Update Action + description: This action invokes before updating a user profile. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/external/pre-update-profile + authentication: + type: NONE + attributes: + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedProfileUpdate + - field: claim + operator: notEquals + value: http://wso2.org/claims/postalcode + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl - preUpdatePassword + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/actions/preUpdatePassword/{actionId}' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "Updated Password Update Action", + "description": "This is the configuration of pre-action for updating password", + "endpoint": { + "uri": "http://myextensions.com/external/pre-update-password", + "authentication": { + "type": "NONE", + "properties": {} + } + }, + "passwordSharing": { + "format": "PLAIN_TEXT" + }, + "attributes": ["http://wso2.org/claims/dob"] + }' + - lang: Curl - preUpdateProfile + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/actions/preUpdateProfile/{actionId}' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "Updated Profile Update Action", + "description": "This is the configuration of pre-action for updating profile", + "endpoint": { + "uri": "http://myextensions.com/external/pre-update-profile", + "authentication": { + "type": "NONE", + "properties": {} + } + }, + "attributes": ["http://wso2.org/claims/dob"] + }' + x-codegen-request-body-name: body + + delete: + tags: + - Actions + summary: Delete Action + description: "This API deletes an action using the action's type and unique ID. \n\n + Scope (Permission) required: ``internal_org_action_mgt_delete``\n\n" + operationId: deleteAction + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preUpdatePassword + - preUpdateProfile + - name: actionId + in: path + description: Unique identifier of the action. + required: true + schema: + type: string + responses: + '204': + description: Action Deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/actions/{actionType}/{actionId}' \ + -H 'Authorization: Bearer {bearer_token}' + + /actions/{actionType}/{actionId}/activate: + post: + tags: + - Actions + summary: Activate Action + description: "This API activates an action using the action's type and unique ID. \n\n + Scope (Permission) required: ``internal_org_action_mgt_update``\n\n" + operationId: activateAction + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preUpdatePassword + - preUpdateProfile + - name: actionId + in: path + description: Unique identifier of the action. + required: true + schema: + type: string + responses: + '200': + description: Action Activated + content: + application/json: + schema: + $ref: '#/components/schemas/ActionBasicResponse' + examples: + preUpdatePassword: + summary: Sample response for pre update password action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PASSWORD + name: Password Update Action + description: This action invokes before updating a user password. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/o/api/server/v1/actions/preUpdatePassword/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + preUpdateProfile: + summary: Sample response for pre update profile action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PROFILE + name: Profile Update Action + description: This action invokes before updating a user profile. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/o/api/server/v1/actions/preUpdateProfile/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request POST 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/actions/{actionType}/{actionId}/activate' \ + -H 'Authorization: Bearer {bearer_token}' + + /actions/{actionType}/{actionId}/deactivate: + post: + tags: + - Actions + summary: Deactivate Action + description: "This API deactivates an action using the action's type and unique ID. \n\n + Scope (Permission) required: ``internal_org_action_mgt_update``\n\n" + operationId: deactivateAction + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preUpdatePassword + - preUpdateProfile + - name: actionId + in: path + description: Unique identifier of the action. + required: true + schema: + type: string + responses: + '200': + description: Action Deactivated + content: + application/json: + schema: + $ref: '#/components/schemas/ActionBasicResponse' + examples: + preUpdatePassword: + summary: Sample response for pre update password action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PASSWORD + name: Password Update Action + description: This action invokes before updating a user password. + status: INACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/o/api/server/v1/actions/preUpdatePassword/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + preUpdateProfile: + summary: Sample response for pre update profile action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PROFILE + name: Profile Update Action + description: This action invokes before updating a user profile. + status: INACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/o/api/server/v1/actions/preUpdateProfile/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request POST 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/actions/{actionType}/{actionId}/deactivate' \ + -H 'Authorization: Bearer {bearer_token}' + +components: + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/authorize' + tokenUrl: 'http://api.asgardeo.io/t/{root-organization-name}/oauth2/token' + scopes: + read: internal_org_action_mgt_view + write: internal_org_action_mgt_create + update: internal_org_action_mgt_update + delete: internal_org_action_mgt_delete + + schemas: + ActionType: + type: string + description: Action types supported. + enum: + - PRE_UPDATE_PASSWORD + - PRE_UPDATE_PROFILE + ActionModel: + type: object + required: + - name + - endpoint + properties: + name: + type: string + minLength: 1 + maxLength: 255 + description: Name of the action. + example: Pre Update Password Action + description: + type: string + maxLength: 255 + description: Description of the action. + example: This action invokes before setting/updating a user password. + endpoint: + $ref: '#/components/schemas/Endpoint' + rule: + $ref: '#/components/schemas/ORRule' + + Endpoint: + type: object + description: Endpoint configurations of the action. + required: + - uri + - authentication + properties: + uri: + type: string + description: HTTPS URI of the endpoint. + pattern: '^https?://.+' + example: https://myextension.com/token + authentication: + $ref: '#/components/schemas/AuthenticationType' + allowedHeaders: + type: array + description: List of HTTP headers to forward to the extension. + items: + type: string + example: [ "x-geo-location", "host"] + allowedParameters: + type: array + description: List of parameters to forward to the extension. + items: + type: string + example: [ "device-id"] + + EndpointResponse: + type: object + description: Endpoint configurations of the action. + required: + - uri + - authentication + properties: + uri: + type: string + description: HTTPS URI of the endpoint. + pattern: '^https?://.+' + example: https://myextension.com/token + authentication: + $ref: '#/components/schemas/AuthenticationTypeResponse' + allowedHeaders: + type: array + description: List of HTTP headers to forward to the extension. + items: + type: string + example: [ "x-geo-location", "host" ] + allowedParameters: + type: array + description: List of parameters to forward to the extension. + items: + type: string + example: [ "device-id" ] + + ActionResponse: + type: object + properties: + id: + type: string + example: '24f64d17-9824-4e28-8413-de45728d8e84' + description: Unique identifier of the action. + type: + $ref: '#/components/schemas/ActionType' + name: + type: string + minLength: 1 + maxLength: 255 + description: Name of the action. + example: Pre Update Password Action + description: + type: string + maxLength: 255 + description: Description of the action. + example: This action invokes before setting/updating a user password. + status: + type: string + enum: + - ACTIVE + - INACTIVE + description: Status of the action. + example: ACTIVE + createdAt: + type: string + description: Created time of the action. + example: "2025-08-01T12:00:00Z" + updatedAt: + type: string + description: Last updated time of the action. + example: "2025-09-01T13:00:00Z" + endpoint: + $ref: '#/components/schemas/EndpointResponse' + rule: + $ref: '#/components/schemas/ORRuleResponse' + + ActionBasicResponse: + type: object + properties: + id: + type: string + example: '24f64d17-9824-4e28-8413-de45728d8e84' + description: Unique identifier of the action. + type: + $ref: '#/components/schemas/ActionType' + name: + type: string + minLength: 1 + maxLength: 255 + description: Name of the action. + example: Pre Update Password Action + description: + type: string + maxLength: 255 + description: Description of the action. + example: This action invokes before setting/updating a user password. + status: + type: string + enum: + - ACTIVE + - INACTIVE + description: Status of the action. + createdAt: + type: string + description: Created time of the action. + example: "2025-08-01T12:00:00Z" + updatedAt: + type: string + description: Last updated time of the action. + example: "2025-09-01T13:00:00Z" + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + - href: "/o/api/server/v1/actions/preIssueAccessToken/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + + Link: + type: object + properties: + href: + type: string + description: Url of the endpoint. + method: + type: string + enum: + - GET + description: Http method. + rel: + type: string + description: Relation to the resource. + + ActionResponseList: + type: array + items: + $ref: '#/components/schemas/ActionBasicResponse' + + ActionTypesResponse: + type: array + items: + $ref: '#/components/schemas/ActionTypesResponseItem' + + ActionTypesResponseItem: + type: object + properties: + type: + $ref: '#/components/schemas/ActionType' + displayName: + type: string + description: "Display name of the action type." + example: "Pre Update Password." + description: + type: string + description: "Description of the action type." + example: "Extension point configuration for Pre Update Password." + count: + type: integer + description: "Number of actions configured under the action type." + example: 1 + self: + type: string + description: "API endpoint referring to the location of the given action type." + example: "/o/api/server/v1/actions/preUpdatePassword/24f64d17-9824-4e28-8413-de45728d8e84" + + AuthenticationType: + type: object + description: > + The type of authentication required by the action's endpoint. The following options are supported: + + - NONE: No authentication is required.
+ ``{ + "type": "NONE" + }`` + + - BASIC: Basic authentication with a username and password.
+ ``{ + "type": "BASIC", + "properties": { + "username": "auth_username", + "password": "auth_password" + } + }`` + + - API_KEY: API key-based authentication, where the key is provided in an HTTP header.
+ ``{ + "type": "API_KEY", + "properties": { + "header": "X-API-Key", + "value": "12345-abcde-67890" + } + }`` + + - BEARER: Bearer token-based authentication.
+ ``{ + "type": "BEARER", + "properties": { + "accessToken": "0d6fed02-eac0-332b-8998-213a543139a0" + } + }`` + required: + - type + properties: + type: + type: string + enum: + - NONE + - BEARER + - API_KEY + - BASIC + example: BASIC + properties: + type: object + description: Authentication properties specific to the selected type. + additionalProperties: true + example: + type: BASIC + properties: + username: "auth_username" + password: "auth_password" + + AuthenticationTypeResponse: + type: object + description: Authentication configurations of the action. + required: + - type + properties: + type: + type: string + enum: + - NONE + - BEARER + - API_KEY + - BASIC + description: Type of the authentication. + example: BASIC + + ActionUpdateModel: + type: object + properties: + name: + type: string + minLength: 1 + maxLength: 255 + description: Updating name of the action. + example: Pre Issue Access Token Action + description: + type: string + maxLength: 255 + description: Updating description of the action. + example: This action invokes before issuing an access token. + endpoint: + $ref: '#/components/schemas/EndpointUpdateModel' + rule: + $ref: '#/components/schemas/ORRule' + + EndpointUpdateModel: + type: object + description: Updating endpoint configurations of the action. + properties: + uri: + type: string + pattern: '^https?://.+' + description: Updating HTTPS URI of the endpoint. + example: https://myextension.com/token + authentication: + $ref: '#/components/schemas/AuthenticationType' + allowedHeaders: + type: array + description: List of HTTP headers to forward to the extension. + items: + type: string + example: [ "x-geo-location", "host" ] + allowedParameters: + type: array + description: List of parameters to forward to the extension. + items: + type: string + example: [ "device-id" ] + + ORRule: + type: object + description: Represents a rule configuration that combines multiple sub-rules with an OR condition. + If any of the sub-rules evaluate to true, the ORRule is considered satisfied. + properties: + condition: + type: string + description: The logical condition for combining the sub-rules. For ORRule, the value + must always be "OR". + enum: ["OR"] + rules: + type: array + items: + $ref: '#/components/schemas/ANDRule' + minItems: 1 + + ORRuleResponse: + type: object + description: Rule configured for the action. + properties: + condition: + type: string + enum: ["OR"] + rules: + type: array + items: + $ref: '#/components/schemas/ANDRuleResponse' + description: A list of sub-rules that are combined using the OR condition. Each sub-rule is an ANDRule. + minItems: 1 + + ANDRule: + type: object + description: A sub-rule that combines expressions with AND condition. + required: + - condition + - expressions + properties: + condition: + type: string + enum: ["AND"] + description: The logical condition for combining the expressions. For ANDRule, the value must always be "AND". + expressions: + type: array + items: + $ref: '#/components/schemas/Expression' + minItems: 1 + description: A list of expressions that are combined using the AND condition. All expressions must evaluate to true for the ANDRule to pass. + + ANDRuleResponse: + type: object + description: Represents a rule configuration that combines multiple expressions with an AND condition. All expressions in the ANDRule must evaluate to true for the rule to be satisfied. + properties: + condition: + type: string + enum: ["AND"] + description: The logical condition for combining the expressions. For ANDRule, the value must always be "AND". + expressions: + type: array + items: + $ref: '#/components/schemas/ExpressionResponse' + minItems: 1 + description: A list of expressions that are combined using the AND condition. All expressions must evaluate to true for the ANDRule to pass. + + Expression: + type: object + description: Represents a single logical condition or comparison within a rule. An expression defines a field, an operator, and a value that is evaluated. + required: + - field + - operator + - value + properties: + field: + type: string + description: The field or attribute of the entity being evaluated (e.g.,application, role). + example: application + operator: + type: string + description: The comparison operator used to evaluate the field and value. Common operators include "equals", "contains", "startsWith", etc. + example: equals + value: + type: string + description: The value that the field is compared against based on the operator. + example: myapp + + ExpressionResponse: + type: object + description: Expressions in the rule. + properties: + field: + type: string + example: application + operator: + type: string + example: equals + value: + type: string + example: myapp + + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some error message. + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/api-resources.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/api-resources.yaml new file mode 100644 index 0000000000..ace4944daa --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/api-resources.yaml @@ -0,0 +1,779 @@ +openapi: 3.0.0 +info: + description: > + This document explains the RESTful API for API Resource Management in Asgardeo. + version: "v1" + title: Asgardeo - API Resource Management Rest API + +security: + - OAuth2: [] + +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1' + +paths: + /api-resources: + get: + tags: + - API Resources + summary: List all API resources in the server + description: | + List all API resources in the server + + Scope(Permission) required: `internal_org_api_resource_view` + operationId: getAPIResources + parameters: + - $ref: '#/components/parameters/before' + - $ref: '#/components/parameters/after' + - $ref: '#/components/parameters/filter' + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/attributes' + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIResourceListResponse' + 401: + description: Unauthorized + 403: + description: Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/api-resources' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /api-resources/{apiResourceId}: + get: + tags: + - API Resources + summary: Get API resource specified by the id + description: | + Get API resource specified by the id + + Scope(Permission) required: `internal_org_api_resource_view` + parameters: + - $ref: '#/components/parameters/apiResourceId' + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIResourceResponse' + 401: + description: Unauthorized + 403: + description: Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/api-resources/{apiResourceId}' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /api-resources/{apiResourceId}/scopes: + get: + tags: + - API Resource Scopes + summary: Get API resource scopes + description: | + Get API resource scopes specified by the id + + Scope(Permission) required: `internal_org_api_resource_view` + parameters: + - $ref: '#/components/parameters/apiResourceId' + responses: + 200: + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ScopeGetModel' + 401: + description: Unauthorized + 403: + description: Forbidden + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/api-resources/{apiResourceId}/scopes' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /scopes: + get: + tags: + - API Resource Scopes + summary: Get all scopes in the tenant + description: | + Get all scopes in the tenant + + Scope(Permission) required: `internal_org_api_resource_view` + parameters: + - $ref: '#/components/parameters/scopeFilter' + responses: + 200: + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ScopeGetModel' + 401: + description: Unauthorized + 403: + description: Forbidden + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/scopes' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + parameters: + organizationId: + in: path + name: organizationId + description: uuid of the org. + required: true + schema: + type: string + example: "1234-4567-4567" + + apiResourceId: + name: apiResourceId + in: path + description: ID of the API Resource. + required: true + schema: + type: string + example: er34-gf23-bv54-vb90 + + collectionId: + name: collectionId + in: path + description: ID of the API Resource Collection. + required: true + schema: + type: string + example: er34-gf23-bv54-vb90 + + scopeName: + name: scopeName + in: path + description: Name of the Scope. + required: true + schema: + type: string + + applicationId: + name: applicationId + in: path + description: ID of the Application. + required: true + schema: + type: string + + authorizationId: + name: authorizationId + in: path + description: ID of the authorization. + required: true + schema: + type: string + + before: + name: before + in: query + required: false + description: | + Base64 encoded cursor value for backward pagination. + schema: + type: string + example: Ng== + + after: + name: after + in: query + required: false + description: | + Base64 encoded cursor value for forward pagination. + schema: + type: string + example: Ng== + + filter: + name: filter + in: query + required: false + description: | + Condition to filter the retrieval of records. Supports 'sw', 'co', 'ew' and 'eq' operations. + schema: + type: string + example: identifier+eq+greetings + + scopeFilter: + name: filter + in: query + required: false + description: | + Condition to filter the retrieval of scopes by name. Supports 'sw', 'co', 'ew' and 'eq' operations. + schema: + type: string + example: name+co+greetings + + collectionFilter: + name: filter + in: query + required: false + description: | + Condition to filter the retrieval of records. Supports 'sw', 'co', 'ew' and 'eq' operations. + schema: + type: string + example: type+eq+tenant + + limit: + name: limit + in: query + required: false + description: | + Maximum number of records to return. + schema: + type: integer + example: 10 + + attributes: + name: attributes + in: query + required: false + description: Specifies the required attributes in the response. Only 'properties' attribute is currently supported. + schema: + type: string + + collectionAttributes: + name: attributes + in: query + required: false + description: Specifies the required attributes in the response. Only 'apiResources' attribute is currently supported. + schema: + type: string + + schemas: + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + + APIResourceListItem: + type: object + required: + - id + - name + - identifier + - self + properties: + id: + type: string + example: gh43-jk34-vb34-df67 + name: + type: string + example: Greetings API + identifier: + type: string + example: greetings_api + type: + type: string + example: SYSTEM + requiresAuthorization: + type: boolean + example: true + properties: + type: array + items: + $ref: '#/components/schemas/Property' + self: + type: string + example: /o/api/server/v1/api-resources/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + + APIResourceResponse: + type: object + required: + - id + - name + - identifier + - self + properties: + id: + type: string + example: gh43-jk34-vb34-df67 + name: + type: string + example: Greetings API + description: + type: string + example: Greeting API representation + identifier: + type: string + example: greetings_api + type: + type: string + example: BUSINESS + requiresAuthorization: + type: boolean + example: true + scopes: + type: array + items: + $ref: '#/components/schemas/ScopeGetModel' + subscribedApplications: + type: array + items: + $ref: '#/components/schemas/SubscribedApplicationGetModel' + properties: + type: array + items: + $ref: '#/components/schemas/Property' + self: + type: string + example: /o/api/server/v1/api-resources/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + + APIResourceCreationModel: + type: object + required: + - identifier + - name + properties: + name: + type: string + example: Greetings API + identifier: + type: string + example: greetings_api + description: + type: string + example: Greetings API representation + requiresAuthorization: + type: boolean + example: true + scopes: + type: array + items: + $ref: '#/components/schemas/ScopeCreationModel' + + APIResourcePatchModel: + type: object + properties: + name: + type: string + example: Greetings API + description: + type: string + example: Greetings API representation + addedScopes: + type: array + items: + $ref: '#/components/schemas/ScopeCreationModel' + removedScopes: + type: array + items: + type: string + description: This field is not supported yet. + example: + { + "name": "Greetings API", + "description": "Greetings API representation", + "addedScopes": [ + { + "name": "greetings:read", + "displayName": "Read Greetings", + "description": "Allows to read greetings" + } + ] + } + PaginationLink: + type: object + properties: + rel: + type: string + example: before + href: + type: string + example: /o/api/server/v1/api-resources?after=NDoy + + APIResourceListResponse: + type: object + required: + - links + properties: + totalResults: + type: integer + example: 1 + links: + type: array + items: + $ref: '#/components/schemas/PaginationLink' + APIResources: + type: array + items: + $ref: '#/components/schemas/APIResourceListItem' + + APIResourceMap: + type: object + properties: + read: + type: array + items: + $ref: '#/components/schemas/APIResourceCollectionItem' + write: + type: array + items: + $ref: '#/components/schemas/APIResourceCollectionItem' + + APIResourceCollectionListItem: + type: object + required: + - id + - name + - displayName + - self + properties: + id: + type: string + example: gh43-jk34-vb34-df67 + name: + type: string + example: bulkUserImport + displayName: + type: string + example: Bulk User Import + type: + type: string + example: TENANT + apiResources: + $ref: '#/components/schemas/APIResourceMap' + self: + type: string + example: /o/api/server/v1/api-resource-collections/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + + APIResourceCollectionListResponse: + type: object + required: + - links + properties: + totalResults: + type: integer + example: 1 + apiResourceCollections: + type: array + items: + $ref: '#/components/schemas/APIResourceCollectionListItem' + example: + { + "totalResults": 2, + "apiResourceCollections": [ + { + "id": "YXBwbGljYXRpb25z", + "name": "applications", + "displayName": "Applications", + "type": "tenant", + "self": "/o/api/server/v1/api-resource-collections/YXBwbGljYXRpb25z" + }, + { + "id": "b3JnX2VtYWlsVGVtcGxhdGVz", + "name": "org_emailTemplates", + "displayName": "Email Templates", + "type": "organization", + "self": "/o/api/server/v1/api-resource-collections/b3JnX2VtYWlsVGVtcGxhdGVz" + } + ] + } + APIResourceCollectionItem: + type: object + required: + - id + - name + - displayName + - self + properties: + id: + type: string + example: gh43-jk34-vb34-df67 + name: + type: string + example: Greetings API + description: + type: string + example: Greeting API representation + identifier: + type: string + example: greetings_api + type: + type: string + example: BUSINESS + scopes: + type: array + items: + $ref: '#/components/schemas/ScopeGetModel' + self: + type: string + example: /o/api/server/v1/api-resources/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + + APIResourceCollectionResponse: + type: object + required: + - id + - name + - displayName + properties: + id: + type: string + example: gh43-jk34-vb34-df67 + name: + type: string + example: bulkUserImport + displayName: + type: string + example: Bulk User Import + type: + type: string + example: TENANT + apiResources: + $ref: '#/components/schemas/APIResourceMap' + example: + { + "id": "YXBwbGljYXRpb25z", + "name": "applications", + "displayName": "Applications", + "type": "tenant", + "apiResources": { + "read": [ + { + "id": "dea5bc01-f8e2-4a29-bc39-acdcb6c73e0e", + "name": "Userstore Management API", + "scopes": [ + { + "displayName": "View Userstore", + "name": "internal_userstore_view" + } + ], + "self": "/v1/api-resources/dea5bc01-f8e2-4a29-bc39-acdcb6c73e0e" + }, + { + "id": "ec4882d7-9628-413b-9704-1b06fc8c5888", + "name": "Identity Provider Management API", + "scopes": [ + { + "displayName": "View Identity Provider", + "name": "internal_idp_view" + } + ], + "self": "/v1/api-resources/ec4882d7-9628-413b-9704-1b06fc8c5888" + } + ] + } + } + ScopeGetModel: + type: object + required: + - id + - displayName + - name + properties: + id: + type: string + example: sf23-fg34-fy53-hj23 + displayName: + type: string + example: Write + name: + type: string + example: greetings:write + description: + type: string + example: Allow writing greetings + + ScopeCreationModel: + type: object + required: + - name + properties: + name: + type: string + example: 'greetings:write' + displayName: + type: string + example: "Write Greetings" + description: + type: string + example: "Allows writing greetings" + + ScopePatchModel: + type: object + properties: + displayName: + type: string + example: "Write Greetings" + description: + type: string + example: "Allows writing greetings" + + SubscribedApplicationGetModel: + type: object + properties: + name: + type: string + example: Application1 + id: + type: string + example: 23fd-23gd-54vv-sdhf + + Property: + type: object + required: + - name + - value + properties: + name: + type: string + example: "label" + value: + type: string + example: "Internal" + + responses: + BadRequest: + description: Bad Request. Invalid request or validation error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 400 + message: Bad Request + description: Invalid request or validation error + + Conflict: + description: Conflict. Specified resource already exists. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 409 + message: Conflict + description: Specified resource already exists + moreInfo: '' + error: [] + Forbidden: + description: >- + Forbidden. The request must be conditional but no condition has been + specified. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 403 + message: Forbidden + description: >- + The request must be conditional but no condition has been + specified + InternalServerError: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 500 + message: Internal Server Error + description: >- + The server encountered an internal error. Please contact + administrator. + moreInfo: '' + error: [] + NotFound: + description: Not Found. The specified resource does not exist. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 404 + message: Not Found + description: The specified resource does not exist + moreInfo: '' + error: [] + + Unauthorized: + description: Unauthorized. The user is not authorized. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 401 + message: Unauthorized + description: The user is not authorized + moreInfo: '' + error: [] + + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://localhost:9443/oauth2/authorize' + tokenUrl: 'http://localhost:9443/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/application.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/application.yaml new file mode 100644 index 0000000000..9bcf1c8ebc --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/application.yaml @@ -0,0 +1,1310 @@ +openapi: 3.0.0 +info: + description: > + This document explains the RESTful API for application management of organizations in Asgardeo. + version: "v1" + title: Asgardeo - Application Management Rest API +security: + - OAuth2: [] +paths: + /applications: + get: + tags: + - Applications + operationId: getAllApplications + summary: | + List applications + description: | + This API provides the capability to retrieve the list of applications.
+ Scope required: `internal_org_application_mgt_view` + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/sortOrderQueryParam' + - $ref: '#/components/parameters/sortByQueryParam' + - $ref: '#/components/parameters/attributesQueryParam' + - $ref: '#/components/parameters/excludeSystemPortalsQueryParam' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications?limit=30&offset=0' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}: + get: + tags: + - Applications + summary: | + Retrieve application by ID + operationId: getApplication + description: > + This API provides the capability to retrieve the application information + by ID.
+ Scope required: `internal_org_application_mgt_view` + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationResponseModel' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Applications + summary: | + Partially update application by ID + operationId: patchApplication + description: | + This API provides the capability to partially update an application by ID.
+ Scope required: `internal_org_application_mgt_update` + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationPatchModel' + description: This represents the application details to be updated. + required: true + responses: + '200': + description: Successfully Updated + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "authenticationSequence": { + "attributeStepId": 1, + "steps": [ + { + "id": 1, + "options": [ + { + "authenticator": "OpenIDConnectAuthenticator", + "idp": "Enterprise IDP" + } + ] + } + ], + "subjectStepId": 1, + "type": "USER_DEFINED", + "script": "" + } + }' + /applications/{applicationId}/authenticators: + get: + tags: + - Authenticators + summary: | + Get configured authenticators + operationId: getConfiguredAuthenticators + description: | + This API provides the capability to retrieve the configured authenticators. + + Scope required: `internal_org_application_mgt_view` + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ConfiguredAuthenticatorsModal' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}/authenticators' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + parameters: + limitQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + minimum: 1 + default: 30 + limitWithoutDefaultQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + offsetQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + default: 0 + offsetWithoutDefaultQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + filterQueryParam: + in: query + name: filter + required: false + description: | + Condition to filter the records retrieved. + Supports 'sw', 'co', 'ew', and 'eq' operations with 'and', 'or' logical operators. + Note that 'and' and 'or' operators in filters follow the general precedence of logical operators. + For example, A and B or C and D = (A and B) or (C and D)). + Currently supports only filtering based on the 'name', the 'clientId', and the 'issuer' attributes. + + /applications?filter=name+eq+user_portal +
+ /applications?filter=name+co+prod+or+clientId+co+123 + schema: + type: string + sortOrderQueryParam: + in: query + name: sortOrder + required: false + description: | + Define the order in which the retrieved records should be sorted. + _This parameter is not supported yet._ + schema: + type: string + enum: + - ASC + - DESC + sortByQueryParam: + in: query + name: sortBy + required: false + description: | + Attribute by which the retrieved records should be sorted. + _This parameter is not supported yet._ + schema: + type: string + attributesQueryParam: + in: query + name: attributes + required: false + description: | + Specifies the required parameters in the response. + Only 'advancedConfigurations', 'templateId', 'clientId', and 'issuer' attributes are supported currently. + + /applications?attributes=advancedConfigurations,templateId,clientId,issuer + schema: + type: string + excludeSystemPortalsQueryParam: + in: query + name: excludeSystemPortals + required: false + description: | + Specifies whether to exclude system portals in the response. + If not provided, the default is false, meaning system portals will be included. + + /applications?excludeSystemPortals=true + schema: + type: boolean + exportSecretsQueryParam: + in: query + name: exportSecrets + required: false + description: | + Specifies whether to export secrets when exporting an application. + schema: + type: boolean + default: false + inboundProtocolsCustomOnly: + in: query + name: customOnly + required: false + description: | + Send only the custom inbound protocols. + schema: + type: boolean + example: true + default: false + templateIdPathParam: + in: path + name: template-id + required: true + description: | + Application template ID. This should be a valid locale. + schema: + type: string + securitySchemes: + OAuth2: + type: oauth2 + description: "**Authorization code OAuth flow** + **Organization Switch**" + schemas: + Link: + type: object + properties: + href: + type: string + example: "applications?offset=10&limit=10" + rel: + type: string + example: "next" + + ApplicationListResponse: + type: object + properties: + totalResults: + type: integer + description: "Number of results that match the listing operation." + example: 1 + startIndex: + type: integer + description: "Index of the first element of the page, which will be equal to offset + 1." + example: 1 + count: + type: integer + description: "Number of elements in the returned page." + example: 10 + applications: + type: array + items: + $ref: '#/components/schemas/ApplicationListItem' + links: + type: array + items: + $ref: '#/components/schemas/Link' + + ApplicationListItem: + type: object + properties: + id: + type: string + example: "85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + name: + type: string + example: "user-portal" + description: + type: string + example: Application representing user portal + image: + type: string + example: 'https://example.com/logo/my-logo.png' + accessUrl: + type: string + example: 'https://example.com/app/login' + clientId: + type: string + example: 'SmrrDNXRYf1lMmDlnleeHTuXx_Ea' + issuer: + type: string + example: 'http://idp.example.com/metadata.php' + access: + type: string + enum: + - READ + - WRITE + default: READ + self: + type: string + example: "/t/{root-organization-name}/o/api/server/v1/applications/85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + templateId: + type: string + example: "980b8tester24c64a8a09a0d80abf8c337bd2555" + + ApplicationModel: + type: object + required: + - name + properties: + id: + type: string + example: "394b8adcce24c64a8a09a0d80abf8c337bd253de" + readOnly: true + name: + type: string + example: pickup + description: + type: string + example: This is the configuration for Pickup application. + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + accessUrl: + type: string + example: 'https://example.com/login' + templateId: + type: string + example: "980b8tester24c64a8a09a0d80abf8c337bd2555" + isManagementApp: + default: false + type: boolean + example: false + description: Decides whether the application used to access System APIs + claimConfiguration: + $ref: '#/components/schemas/ClaimConfiguration' + inboundProtocolConfiguration: + $ref: '#/components/schemas/InboundProtocols' + authenticationSequence: + $ref: '#/components/schemas/AuthenticationSequence' + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + provisioningConfigurations: + $ref: '#/components/schemas/ProvisioningConfiguration' + + ApplicationResponseModel: + type: object + required: + - name + properties: + id: + type: string + example: "394b8adcce24c64a8a09a0d80abf8c337bd253de" + readOnly: true + name: + type: string + example: pickup + description: + type: string + example: This is the configuration for Pickup application. + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + accessUrl: + type: string + example: 'https://example.com/login' + clientId: + type: string + example: 'SmrrDNXRYf1lMmDlnleeHTuXx_Ea' + issuer: + type: string + example: 'http://idp.example.com/metadata.php' + templateId: + type: string + example: "adwefi2429asdfdf94444rraf44" + isManagementApp: + type: boolean + example: false + description: Decides whether the application used to access System APIs + claimConfiguration: + $ref: '#/components/schemas/ClaimConfiguration' + inboundProtocols: + $ref: '#/components/schemas/InboundProtocolsListResponse' + authenticationSequence: + $ref: '#/components/schemas/AuthenticationSequence' + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + provisioningConfigurations: + $ref: '#/components/schemas/ProvisioningConfiguration' + access: + type: string + enum: + - READ + - WRITE + default: READ + + ApplicationPatchModel: + type: object + properties: + authenticationSequence: + $ref: '#/components/schemas/AuthenticationSequence' + + ProvisioningConfiguration: + type: object + properties: + inboundProvisioning: + $ref: '#/components/schemas/InboundSCIMProvisioningConfiguration' + outboundProvisioningIdps: + type: array + items: + $ref: '#/components/schemas/OutboundProvisioningConfiguration' + InboundSCIMProvisioningConfiguration: + type: object + properties: + proxyMode: + type: boolean + example: false + provisioningUserstoreDomain: + type: string + example: PRIMARY + description: >- + This property becomes only applicable if the proxy-mode config is + set to false + + OutboundProvisioningConfiguration: + type: object + properties: + idp: + type: string + example: Google + connector: + type: string + example: googleapps + blocking: + type: boolean + example: false + rules: + type: boolean + example: false + jit: + type: boolean + example: false + ConfiguredAuthenticatorsModal: + type: object + properties: + stepId: + type: integer + example: 1 + localAuthenticators: + type: array + items: + $ref: '#/components/schemas/LocalConfiguredAuthenticator' + federatedAuthenticators: + type: array + items: + $ref: '#/components/schemas/ConfiguredAuthenticator' + LocalConfiguredAuthenticator: + type: object + properties: + name: + type: string + example: Username & Password + type: + type: string + example: BasicAuthenticator + ConfiguredAuthenticator: + type: object + properties: + name: + type: string + example: Enterprise IDP + type: + type: string + example: OpenIDConnectAuthenticator + AdvancedApplicationConfiguration: + type: object + properties: + saas: + type: boolean + example: false + description: Decides whether the application is accessible across tenants. + discoverableByEndUsers: + type: boolean + example: false + description: Decides whether the application is visible for end users. + certificate: + $ref: '#/components/schemas/Certificate' + skipLoginConsent: + type: boolean + example: false + description: Decides whether user consent needs to be skipped during login flows. + skipLogoutConsent: + type: boolean + example: false + description: Decides whether user consent needs to be skipped during logout flows. + useExternalConsentPage: + type: boolean + example: false + description: Decides whether users should be presented with an external consent page. + returnAuthenticatedIdpList: + type: boolean + example: false + description: Decides whether the list of authenticated identity providers need to be returned in the authentication response. + enableAuthorization: + type: boolean + description: Decides whether authorization policies needs to be engaged during authentication flows. + example: true + additionalSpProperties: + $ref: '#/components/schemas/AdditionalProperties' + AdditionalProperties: + type: array + description: Denotes additional properties of the application. It is only supported by getApplication and getAllApplications request. + items: + $ref: "#/components/schemas/AdditionalSpProperty" + AdditionalSpProperty: + type: object + required: + - name + - value + properties: + name: + type: string + example: "isInternalApp" + value: + type: string + example: "true" + displayName: + type: string + example: "Internal Application" + Certificate: + type: object + properties: + type: + type: string + description: >- + Certificate type. This should be either JWKS or PEM. + value: + type: string + description: >- + Certificate value. If type is JWKS, value should be jwks URL. If + type is PEM, value should be the certificate in PEM format. + InboundProtocols: + type: object + properties: + oidc: + $ref: '#/components/schemas/OpenIDConnectConfiguration' +# saml: +# $ref: '#/components/schemas/SAML2Configuration' +# passiveSts: +# $ref: '#/components/schemas/PassiveStsConfiguration' +# wsTrust: +# $ref: '#/components/schemas/WSTrustConfiguration' +# custom: +# type: array +# items: +# $ref: '#/components/schemas/CustomInboundProtocolConfiguration' + InboundProtocolsListResponse: + type: array + items: + $ref: '#/components/schemas/InboundProtocolListItem' + + InboundProtocolListItem: + type: object + required: + - type + - name + - self + properties: + type: + type: string + example: "samlsso" + name: + type: string + example: "SAML2 Inbound" + self: + type: string + example: "/t/{root-organization-name}/o/api/server/v1/applications/29048810-1447-4ea0-a348-30d15ab65fa3/inbound-protocols/saml" + + ClaimConfiguration: + type: object + properties: + dialect: + type: string + enum: + - CUSTOM + - LOCAL + default: LOCAL + claimMappings: + type: array + items: + $ref: '#/components/schemas/ClaimMappings' + requestedClaims: + type: array + items: + $ref: '#/components/schemas/RequestedClaimConfiguration' + subject: + $ref: '#/components/schemas/SubjectConfig' + role: + $ref: '#/components/schemas/RoleConfig' + SubjectConfig: + type: object + properties: + claim: + $ref: '#/components/schemas/Claim' + includeUserDomain: + type: boolean + example: false + includeTenantDomain: + type: boolean + example: false + useMappedLocalSubject: + type: boolean + example: false + RoleConfig: + type: object + properties: + mappings: + type: array + items: + $ref: '#/components/schemas/RoleMapping' + includeUserDomain: + type: boolean + example: true + claim: + $ref: '#/components/schemas/Claim' + RoleMapping: + type: object + required: + - localRole + - applicationRole + properties: + localRole: + type: string + example: admin + applicationRole: + type: string + example: Administrator + RequestedClaimConfiguration: + type: object + required: + - claim + description: >- + User claims that need to be sent back to the application. If the + claim mappings are local, use local claim URIs. If the custom claim + mappings are configured, use the mapped application claim URI + properties: + claim: + $ref: '#/components/schemas/Claim' + mandatory: + type: boolean + example: false + ClaimMappings: + type: object + required: + - applicationClaim + - localClaim + properties: + applicationClaim: + type: string + description: Claim URI received by the application + example: firstname + localClaim: + $ref: '#/components/schemas/Claim' + Claim: + type: object + required: + - uri + properties: + id: + type: string + example: aHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VybmFtZQ + readOnly: true + uri: + type: string + example: 'http://wso2.org/claims/username' + displayName: + type: string + example: Username + readOnly: true + + SAML2Configuration: + type: object + properties: + metadataFile: + type: string + example: 'Base64 encoded metadata file content' + metadataURL: + type: string + example: 'https://example.com/samlsso/meta' + manualConfiguration: + $ref: '#/components/schemas/SAML2ServiceProvider' + + SingleSignOnProfile: + type: object + properties: + bindings: + type: array + items: + type: string + enum: + - HTTP_POST + - HTTP_REDIRECT + - ARTIFACT + + enableSignatureValidationForArtifactBinding: + type: boolean + description: Enables Signature validation for SAML artifact binding. Applicable only if SAML artifact binding is enabled through the bindings option. + default: false + + attributeConsumingServiceIndex: + type: string + readOnly: true + + enableIdpInitiatedSingleSignOn: + type: boolean + default: false + + assertion: + $ref: '#/components/schemas/SAMLAssertionConfiguration' + + SAMLAttributeProfile: + type: object + properties: + enabled: + type: boolean + default: false + alwaysIncludeAttributesInResponse: + type: boolean + default: false + + SingleLogoutProfile: + type: object + properties: + enabled: + type: boolean + default: true + logoutRequestUrl: + type: string + description: Single logout request accepting endpoint + logoutResponseUrl: + type: string + description: Single logout response accepting endpoint + logoutMethod: + type: string + enum: + - BACKCHANNEL + - FRONTCHANNEL_HTTP_REDIRECT + - FRONTCHANNEL_HTTP_POST + idpInitiatedSingleLogout: + $ref: '#/components/schemas/IdpInitiatedSingleLogout' + + IdpInitiatedSingleLogout: + type: object + properties: + enabled: + type: boolean + default: false + returnToUrls: + type: array + items: + type: string + + SAMLAssertionConfiguration: + type: object + properties: + nameIdFormat: + type: string + default: 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified' + example: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress' + + audiences: + type: array + description: Additional audience values to be added to the SAML Assertions. + example: + - 'https://app.example.com/saml' + items: + type: string + + recipients: + type: array + description: Additional recipient values to be added to the SAML Assertions + example: + - 'https://app.example.com/saml' + items: + type: string + + digestAlgorithm: + type: string + default: "http://www.w3.org/2000/09/xmldsig#sha1" + example: "http://www.w3.org/2000/09/xmldsig#sha1" + encryption: + $ref: '#/components/schemas/AssertionEncryptionConfiguration' + + AssertionEncryptionConfiguration: + type: object + properties: + enabled: + type: boolean + default: false + assertionEncryptionAlgorithm: + type: string + default: "http://www.w3.org/2001/04/xmlenc#aes256-cbc" + keyEncryptionAlgorithm: + type: string + default: "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" + + SAMLRequestValidation: + type: object + properties: + enableSignatureValidation: + type: boolean + default: true + signatureValidationCertAlias: + type: string + + SAMLResponseSigning: + type: object + properties: + enabled: + type: boolean + default: true + signingAlgorithm: + type: string + + SAML2ServiceProvider: + type: object + required: + - issuer + - assertionConsumerUrls + + properties: + issuer: + type: string + serviceProviderQualifier: + type: string + assertionConsumerUrls: + type: array + items: + type: string + minItems: 1 + defaultAssertionConsumerUrl: + type: string + description: If not provided, the first assertion consumer URL on the `assertionConsumerUrls` will be picked as the default assertion consumer URL. + idpEntityIdAlias: + type: string + description: Default value is the IdP's entity ID value specified in the resident IdP. + + singleSignOnProfile: + $ref: '#/components/schemas/SingleSignOnProfile' + + attributeProfile: + $ref: '#/components/schemas/SAMLAttributeProfile' + + singleLogoutProfile: + $ref: '#/components/schemas/SingleLogoutProfile' + + requestValidation: + $ref: '#/components/schemas/SAMLRequestValidation' + + responseSigning: + $ref: '#/components/schemas/SAMLResponseSigning' + + enableAssertionQueryProfile: + type: boolean + default: false + + OpenIDConnectConfiguration: + type: object + required: + - grantTypes + properties: + clientId: + type: string + clientSecret: + type: string + state: + type: string + enum: + - ACTIVE + - REVOKED + readOnly: true + default: ACTIVE + grantTypes: + type: array + example: + - authorization_code + - password + items: + type: string + minItems: 1 + callbackURLs: + type: array + description: Authorized redirect URIs + example: + - 'regexp=(https://app.example.com/callback1|https://app.example.com/callback2)' + items: + type: string + allowedOrigins: + type: array + description: Authorized JavaScript origins. CORS requests will be allowed to these origins. + example: + - 'https://app.example.com' + items: + type: string + publicClient: + type: boolean + default: false + description: >- + Enabling this option will allow the client to authenticate without a + client secret. + example: false + pkce: + $ref: '#/components/schemas/OAuth2PKCEConfiguration' + accessToken: + $ref: '#/components/schemas/AccessTokenConfiguration' + refreshToken: + $ref: '#/components/schemas/RefreshTokenConfiguration' + idToken: + $ref: '#/components/schemas/IdTokenConfiguration' + logout: + $ref: '#/components/schemas/OIDCLogoutConfiguration' + validateRequestObjectSignature: + type: boolean + default: false + example: false + scopeValidators: + type: array + example: + - Role based scope validator + items: + type: string + OAuth2PKCEConfiguration: + type: object + properties: + mandatory: + type: boolean + example: false + supportPlainTransformAlgorithm: + type: boolean + example: true + AccessTokenConfiguration: + type: object + properties: + type: + type: string + example: JWT + userAccessTokenExpiryInSeconds: + type: integer + format: int64 + example: 3600 + applicationAccessTokenExpiryInSeconds: + type: integer + format: int64 + example: 3600 + bindingType: + type: string + description: "OAuth2 access token and refresh token can be bound to an external attribute during the token + generation so that it can be optionally validated during the API invocation." + default: "None" + example: cookie + revokeTokensWhenIDPSessionTerminated: + type: boolean + description: "If enabled, when the IDP session is terminated, all the access tokens bound to the session + will get revoked." + validateTokenBinding: + type: boolean + description: "If enabled, both access token and the token binding needs to be present for a successful API + invocation." + enableJwtScopeAsArray: + type: boolean + description: "If enabled, the scope claim in JWT access tokens will be formatted as a JSON array instead of a space-separated string." + example: false + RefreshTokenConfiguration: + type: object + properties: + expiryInSeconds: + type: integer + format: int64 + example: 86400 + renewRefreshToken: + description: Decides whether the refresh token needs to be renewed during refresh grant flow. + type: boolean + example: true + IdTokenConfiguration: + type: object + properties: + expiryInSeconds: + type: integer + format: int64 + example: 3600 + audience: + type: array + example: + - 'http://idp.xyz.com' + - 'http://idp.abc.com' + items: + type: string + encryption: + $ref: '#/components/schemas/IdTokenEncryptionConfiguration' + IdTokenEncryptionConfiguration: + type: object + properties: + enabled: + type: boolean + default: false + example: false + algorithm: + type: string + example: RSA-OAEP + method: + type: string + example: A128CBC+HS256 + OIDCLogoutConfiguration: + type: object + properties: + backChannelLogoutUrl: + type: string + example: 'https://app.example.com/backchannel/callback' + frontChannelLogoutUrl: + type: string + example: 'https://app.example.com/frontchannel/callback' + PassiveStsConfiguration: + type: object + required: + - realm + - replyTo + properties: + realm: + type: string + replyTo: + type: string + WSTrustConfiguration: + type: object + required: + - audience + - certificateAlias + properties: + audience: + type: string + description: Audience value of the trusted service + example: https://wstrust.endpoint.com + certificateAlias: + type: string + example: "wso2carbon" + CustomInboundProtocolConfiguration: + type: object + required: + - name + - configName + properties: + name: + type: string + example: cas + configName: + type: string + example: cas + properties: + type: array + items: + $ref: '#/components/schemas/PropertyModel' + PropertyModel: + type: object + properties: + key: + type: string + example: app-identifier + value: + type: string + example: 'http://app.wso2.com/employeeApp' + friendlyName: + type: string + example: Application Identifier + AuthenticationSequence: + type: object + properties: + type: + type: string + description: " + - DEFAULT type indicates that the application will use the default authentication sequence specified at the tenant level. When the DEFAULT type is used, the information given in the other fields of the AuthenticationSequence will be ignored and overriden with values defined at the tenant level. + + - USER_DEFINED type indicates that the application will use a user-defined authentication sequence." + enum: + - DEFAULT + - USER_DEFINED + default: DEFAULT + steps: + type: array + items: + $ref: '#/components/schemas/AuthenticationStepModel' + script: + type: string + example: "" + subjectStepId: + type: integer + default: 1 + example: 1 + attributeStepId: + type: integer + default: 1 + example: 1 + + AuthenticationStepModel: + type: object + required: + - id + - options + properties: + id: + type: integer + minimum: 1 + example: 1 + options: + type: array + items: + $ref: '#/components/schemas/Authenticator' + minItems: 1 + Authenticator: + type: object + required: + - idp + - authenticator + properties: + idp: + type: string + example: Enterprise IDP + authenticator: + type: string + example: OpenIDConnectAuthenticator + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some error message. + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1' + variables: + server-url: + default: "https://api.asgardeo.io/t/{root-organization-name}/o/" + root-organization-name: + default: "{root-organization-name}" diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/association-management-by-admin.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/association-management-by-admin.yaml new file mode 100644 index 0000000000..22d24d2b30 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/association-management-by-admin.yaml @@ -0,0 +1,589 @@ +openapi: 3.0.1 +info: + title: User Account Association API + description: | + This document specifies a **User Account Association Management RESTful API** for **Asgardeo**. + The APIs provide the capability for privileged users to retrieve/delete associated local/federated accounts of other users. + version: v1 +servers: + - url: https://api.asgardeo.io/t/{organization-name}/o/api/users/v1 + variables: + serverUrl: + default: https://api.asgardeo.io/t/{organization-name} + tenantDomain: + default: carbon.super +security: + - OAuth2: [] +tags: + - name: admin + description: | + Operations available for privileged users, to be invoked on behalf of another user. +paths: + /{user-id}/associations: + get: + tags: + - admin + summary: Get user's associations + description: | + This API is used to retrieve the associations of the user.
+ + Scope(Permission) required: `internal_org_user_association_view` + parameters: + - name: user-id + in: path + description: user id + required: true + schema: + type: string + responses: + 200: + description: Successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/o/api/users/v1/{user-id}/associations' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer ' + delete: + tags: + - admin + summary: Delete user's all user associations + description: | + This API is used to delete all associations of the user.
+ + Scope(Permission) required: `internal_org_user_association_delete` + parameters: + - name: user-id + in: path + required: true + schema: + type: string + responses: + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/o/api/users/v1/{user-id}/associations' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer ' + /{user-id}/federated-associations: + get: + tags: + - admin + summary: Get user's federated associations + description: | + This API is used to retrieve the federated associations of the user.
+ + Scope(Permission) required: `internal_org_user_association_view` + parameters: + - name: user-id + in: path + description: user id + required: true + schema: + type: string + responses: + 200: + description: Successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/FederatedAssociation' + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/o/api/users/v1/{user-id}/federated-associations' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer ' + post: + tags: + - admin + summary: Create federated user association + description: | + This API allows administrators to explicitly associate a local user with a federated identity.
+ Scope(Permission) required: `internal_org_user_association_create` + parameters: + - name: user-id + in: path + required: true + description: user id + type: string + - name: association + in: body + description: User details to be associated. + required: true + schema: + $ref: '#/definitions/FederatedAssociationRequest' + responses: + 201: + description: Successfully created + schema: + $ref: '#/definitions/FederatedAssociation' + 400: + description: Bad Request + schema: + $ref: '#/definitions/Error' + 401: + description: Unauthorized + schema: + $ref: '#/definitions/Error' + 403: + description: Resource Forbidden + schema: + $ref: '#/definitions/Error' + 500: + description: Server Error + schema: + $ref: '#/definitions/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/o/api/users/v1/{user-id}/federated-associations' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer ' \ + -H 'Content-Type: application/json' \ + -d '{ + "idp": "exampleIdP", + "federatedUserId": "john@example.com" + }' + delete: + tags: + - admin + summary: Delete user's all user-federated associations + description: | + This API is used to delete all federated associations of the user.
+ + Scope(Permission) required: `internal_org_user_association_delete` + parameters: + - name: user-id + in: path + required: true + schema: + type: string + responses: + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/o/api/users/v1/{user-id}/federated-associations' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer ' + /{user-id}/federated-associations/{id}: + delete: + tags: + - admin + summary: Delete the user's federated association + description: | + This API is used to delete a federated association of the user.
+ + Scope(Permission) required: `internal_org_user_association_delete` + parameters: + - name: user-id + in: path + required: true + schema: + type: string + - name: id + in: path + required: true + schema: + type: string + responses: + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/o/api/users/v1/user-id/federated-associations/federated-association-id' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer ' + /federated-associations/bulk: + post: + tags: + - admin + summary: Create and Delete users associations in bulk + description: | + This API is used to create and delete users association in bulk.
+ Maximum number of supported operations in a single request is 1000 by default. + It can be configured using a server level configuration. + Scope required: + * internal_user_fed_association_bulk + parameters: + - name: body + in: body + required: false + schema: + $ref: '#/definitions/BulkFederatedAssociationRequest' + responses: + 200: + description: Success + schema: + $ref: '#/definitions/BulkFederatedAssociationResponse' + 400: + description: Bad Request + schema: + $ref: '#/definitions/Error' + 401: + description: Unauthorized + schema: + $ref: '#/definitions/Error' + 403: + description: Forbidden + schema: + $ref: '#/definitions/Error' + 500: + description: Internal Server Error + schema: + $ref: '#/definitions/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/o/api/users/v1/federated-associations/bulk' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer-token}' \ + -d '{ + "failOnErrors": 0, + "operations": [ + { + "method": "POST", + "bulkId": "qewvaewv", + "path": "/1ca49238-3ab0-474b-9d42-8067780a503c/federated-associations", + "data": { + "idp": "Google", + "federatedUserId": "sam@gmail,com" + } + }, + { + "method": "POST", + "bulkId": "fgnruyt", + "path": "/7589bffc-b315-4dbd-83a5-86f5b8aa4776/federated-associations", + "data": { + "idp": "Google", + "federatedUserId": "mike@gmail,com" + } + }, + { + "method": "DELETE", + "bulkId": "useffger", + "path": "/0a2d94e2-3b98-49ea-89d6-e8dd9e0ff89b/federated-associations" + }, + { + "method": "DELETE", + "bulkId": "eefvrtgnrtn", + "path": "/197fc0fa-c2b0-48e6-92a6-a551afc3d125/federated-associations/0dcc3f5a-3bee-4f36-a91f-8ee60dbae875" + } + ] + }' + +components: + schemas: + Error: + required: + - code + - message + type: object + properties: + code: + type: string + example: some_error_code + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: Some Correlation for Error Instance + User: + type: object + properties: + userId: + type: string + example: 23e22434234234329jj9iin + username: + type: string + example: john + userStoreDomain: + type: string + example: PRIMARY + tenantDomain: + type: string + example: carbon.super + firstName: + type: string + example: john + lastName: + type: string + example: doe + email: + type: string + example: john.doe@wso2.com + FederatedAssociation: + type: object + properties: + id: + type: string + example: eeqweisfhkdfik + idp: + $ref: '#/components/schemas/Idp' + federatedUserId: + type: string + example: john@google.com + Idp: + type: object + properties: + id: + type: string + example: eeqweisfhkdfikaefcqwesfceqwqas + name: + type: string + example: google.com + displayName: + type: string + example: Google + imageUrl: + type: string + example: https://is.example.com/sample.jpg + Property: + type: object + properties: + key: + type: string + example: test-key + value: + type: string + example: test-value + AssociationUserRequest: + type: object + properties: + userId: + type: string + example: john + password: + type: string + example: userpassword + properties: + type: array + items: + $ref: '#/components/schemas/Property' + FederatedAssociationRequest: + type: object + properties: + idp: + type: string + example: exampleIdP + description: Name of the IdP + federatedUserId: + type: string + example: john@example.com + description: User identifier in the federated IdP + BulkFederatedAssociationRequest: + type: object + properties: + failOnErrors: + type: integer + example: 1 + description: | + This represents whether the API should stop processing the operations if any of them fail. The subsequent + operations after the the fail count is reached will not be processed. + If set to 0 or not set, the API will continue processing the operations even if some of them fail. + operations: + type: array + items: + $ref: '#/definitions/BulkFederatedAssociationOperation' + + BulkFederatedAssociationOperation: + type: object + required: + - method + - bulkId + - path + properties: + method: + type: string + enum: + - POST + - DELETE + example: POST + description: | + HTTP method to be used for the operation. Supported methods are POST and, DELETE. These values + If the method is not specified, the operation will be treated as a bad request. + bulkId: + type: string + example: "ytrewq" + path: + type: string + example: "/b1781d25-bde5-460a-a58a-8fe8dbfd8487/federated-associations" + description: | + The path to the resource to be operated on. The path should be relative to the base path of the API. + Full path for a federated association operation would be + `/t/{tenant-domain}/api/users/v1/{user-id}/federated-associations/{association-id}`. + data: + $ref: '#/definitions/UserFederatedAssociationData' + + UserFederatedAssociationData: + type: object + properties: + idp: + type: string + example: "exampleIdP" + description: Name of the IdP + federatedUserId: + type: string + example: "john@example.com" + description: User identifier in the federated IdP + + BulkFederatedAssociationResponse: + type: object + properties: + Operations: + type: array + items: + $ref: '#/definitions/BulkAssociationOperationResponse' + + BulkAssociationOperationResponse: + type: object + properties: + bulkId: + type: string + example: "qwerty" + status: + type: object + properties: + statusCode: + type: integer + example: "400" + errorCode: + type: string + example: "UAA-10012" + errorMessage: + type: string + example: "Error while adding federated user association: 1890c6c0-d1a0-4eb4-8075-320756d75946" + errorDescription: + type: string + example: "The federated association is already associated to a local user" + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/token + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/authenticators.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/authenticators.yaml new file mode 100644 index 0000000000..9327924f7c --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/authenticators.yaml @@ -0,0 +1,618 @@ +openapi: 3.0.0 +info: + version: "v1" + title: 'Authenticators API' + description: 'This document specifies a **Organization level Authenticators RESTful API** for Asgardeo.' + +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1' +security: + - OAuth2: [] + +paths: + /authenticators: + get: + tags: + - Authenticators + summary: List all authenticators in the server + description: | + List all authenticators in the server. + + Scope(Permission) required: `internal_org_authenticator_view` + parameters: + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Authenticators' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/authenticators' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /authenticators/{authenticator-id}/connected-apps: + get: + tags: + - Connected apps of local authenticators + summary: Get connected apps by authenticator ID + operationId: getConnectedAppsOfLocalAuthenticator + description: | + By passing in the appropriate authenticator ID, you can retrieve connected app details. + + Scope(Permission) required: `internal_org_authenticator_view` + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - name: authenticator-id + in: path + description: ID of an authenticator + required: true + schema: + type: string + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectedApps' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/authenticators/meta/tags' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /authenticators/meta/tags: + get: + tags: + - Authenticators + summary: List all authenticator tags + description: | + List all authenticator tags. + + Scope(Permission) required: `internal_org_authenticator_view` + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/Tags' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/authenticators/{authenticator-id}/connected-apps' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /authenticators/custom: + post: + tags: + - User defined local authenticators + summary: | + Create a new user defined local authenticator. + description: | + This API provides the capability to create a new user defined local authenticator. + + Scope(Permission) required: `internal_org_custom_authenticator_create` + operationId: addUserDefinedLocalAuthenticator + responses: + '201': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Authenticator' + examples: + example: + $ref: '#/components/examples/UserDefinedAuthenticatorExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserDefinedLocalAuthenticatorCreation' + description: This represents the user defined local authenticator to be created. + required: true + /authenticators/custom/{authenticator-id}: + put: + tags: + - User defined local authenticators + summary: | + Update a user defined local authenticator. + description: | + This API provides the capability to update a user defined local authenticator configurations. + + Scope(Permission) required: `internal_org_custom_authenticator_update` + operationId: updateUserDefinedLocalAuthenticator + parameters: + - name: authenticator-id + in: path + description: ID of an authenticator + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Authenticator' + examples: + example: + $ref: '#/components/examples/UserDefinedAuthenticatorExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserDefinedLocalAuthenticatorUpdate' + description: This represents the user defined local authenticator to be created. + required: true + delete: + tags: + - User defined local authenticators + summary: | + Delete a user defined local authenticator. + description: | + This API provides the capability to delete a user defined local authenticator. + + Scope required: `internal_org_custom_authenticator_delete` + operationId: deleteUserDefinedLocalAuthenticator + parameters: + - name: authenticator-id + in: path + description: ID of an authenticator + required: true + schema: + type: string + responses: + '204': + description: Successful response + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + +components: + parameters: + filterQueryParam: + in: query + name: filter + required: false + description: | + Condition to filter the retrieval of records. + Only supports filtering based on the 'tag' and 'name' attribute. + For local authenticators and request path authenticators, the 'displayName' is considered as the 'name' attribute during filtering. + The 'name' attribute only supports 'eq' and 'sw operations. Filtering with multiple 'name' attributes is not supported. + The 'tag' attribute only supports 'eq' operation. Filtering with multiple 'tag' attributes is supported with only 'or' as the complex query operation. + E.g. /configs/authenticators?filter=name+sw+fi+and+(tag+eq+2FA+or+tag+eq+MFA) + + schema: + type: string + limitQueryParam: + in: query + name: limit + description: > + Maximum number of records to return. _This option is not yet + supported._ + schema: + type: integer + format: int32 + minimum: 0 + offsetQueryParam: + in: query + name: offset + description: > + Number of records to skip for pagination. _This option is not yet + supported._ + schema: + type: integer + format: int32 + minimum: 0 + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: AUT-00000 + description: An error code. + message: + type: string + example: Some Error Message + description: An error message. + description: + type: string + example: Some Error Description + description: An error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + description: An error trace identifier. + Tags: + type: array + description: The list of tags available for authenticators. + items: + type: string + example: [2FA, MFA] + Authenticators: + type: array + items: + $ref: '#/components/schemas/Authenticator' + Authenticator: + type: object + properties: + id: + type: string + example: QmFzaWNBdXRoZW50aWNhdG9y + readOnly: true + name: + type: string + example: BasicAuthenticator + displayName: + type: string + example: basic + isEnabled: + type: boolean + example: true + definedBy: + type: string + enum: + - SYSTEM + - USER + readOnly: true + type: + type: string + enum: + - LOCAL + - FEDERATED + readOnly: true + image: + type: string + example: basic-authenticator-logo-url + description: + type: string + example: The basic authenticator. + tags: + type: array + items: + type: string + example: [2FA, MFA] + readOnly: true + self: + type: string + example: /t/carbon.super/api/server/v1/configs/authenticators/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + UserDefinedLocalAuthenticatorCreation: + description: This represents the configuration for creating a user defined local authenticator. + type: object + properties: + name: + type: string + description: The name of the user defined local authenticator. It must be started with 'custom-'. + example: custom-authenticator + id: + type: string + example: Y3VzdG9tLWF1dGhlbnRpY2F0b3I + displayName: + type: string + example: Custom Local Authenticator + isEnabled: + type: boolean + example: true + authenticationType: + type: string + enum: + - IDENTIFICATION + - VERIFICATION + image: + type: string + example: https://custom-authenticator-logo-url + description: + type: string + example: The user defined custom local authenticator. + endpoint: + $ref: '#/components/schemas/Endpoint' + required: + - name + - displayName + - isEnabled + - endpoint + UserDefinedLocalAuthenticatorUpdate: + description: This represents the configuration for updating a user defined local authenticator. + type: object + properties: + displayName: + type: string + example: Custom Local Authenticator + isEnabled: + type: boolean + example: true + image: + type: string + example: https://custom-authenticator-logo-url-new + description: + type: string + example: The user defined custom local authenticator. + endpoint: + $ref: '#/components/schemas/Endpoint' + required: + - displayName + - isEnabled + - endpoint + Endpoint: + type: object + properties: + uri: + type: string + example: https://abc.com/token + pattern: '^https?://.+' + authentication: + $ref: '#/components/schemas/AuthenticationType' + allowedHeaders: + type: array + description: List of HTTP headers to forward to the extension. + items: + type: string + example: [ "x-geo-location", "host"] + allowedParameters: + type: array + description: List of parameters to forward to the extension. + items: + type: string + example: [ "device-id"] + AuthenticationType: + type: object + description: > + The type of authentication required by the action's endpoint. The following options are supported: + + - NONE: No authentication is required.
+ ``{ + "type": "NONE" + }`` + + - BASIC: Basic authentication with a username and password.
+ ``{ + "type": "BASIC", + "properties": { + "username": "auth_username", + "password": "auth_password" + } + }`` + + - API_KEY: API key-based authentication, where the key is provided in an HTTP header.
+ ``{ + "type": "API_KEY", + "properties": { + "header": "X-API-Key", + "value": "12345-abcde-67890" + } + }`` + + - BEARER: Bearer token-based authentication.
+ ``{ + "type": "BEARER", + "properties": { + "accessToken": "0d6fed02-eac0-332b-8998-213a543139a0" + } + }`` + required: + - type + - properties + properties: + type: + type: string + enum: + - NONE + - BEARER + - API_KEY + - BASIC + example: BASIC + properties: + type: object + additionalProperties: true + example: + username: "auth_username" + password: "auth_password" + ConnectedApps: + type: object + properties: + totalResults: + type: integer + example: 10 + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "authenticator/123e4567-e89b-12d3-a456-556642440000/connected-apps?offset=50&limit=10", + "rel": "next" + }, { + "href": "authenticator/provider/123e4567-e89b-12d3-a456-556642440000/connected-apps?offset=30&limit=10", + "rel": "previous" + } + ] + connectedApps: + type: array + items: + $ref: '#/components/schemas/ConnectedApp' + ConnectedApp: + type: object + properties: + appId: + type: string + example: app-id + self: + type: string + example: /t/org/api/server/v1/applications/c74d74b2-cb62-4abd-ad66-6c45daeb561c + Link: + type: object + properties: + href: + type: string + description: Path to the target resource. + example: >- + '/t/carbon.super/api/server/v1/authenticators/394b8adcce24c64a8a09a8d80abf8c337bd253de' + rel: + type: string + description: Describes how the current context is related to the target resource. + example: authenticators + readOnly: true + #----------------------------------------------------- + # Descriptions of Authenticators API responses. + #----------------------------------------------------- + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Requested resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + #----------------------------------------------------- + # Applicable authentication mechanisms. + #----------------------------------------------------- + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/token' + scopes: {} + examples: + UserDefinedAuthenticatorExample: + summary: "Response for user defined authenticator" + value: + id: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + name: "custom-authenticator" + displayName: "Custom Local Authenticator" + definedBy: "USER" + type: "LOCAL" + isEnabled: true + tags: [ Custom ] + self: "/o/api/server/v1/configs/authenticators/Y3VzdG9tLWF1dGhlbnRpY2F0b3I=" diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/branding-management.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/branding-management.yaml new file mode 100644 index 0000000000..bd7fb1f6b4 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/branding-management.yaml @@ -0,0 +1,642 @@ +openapi: 3.0.0 +info: + title: Branding Preferences API + description: | + This document specifies a RESTful API for **Managing Branding Preferences of Organizations** in Asgardeo. + version: v1 +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1' + +security: + - OAuth2: [] + +paths: + '/branding-preference': + post: + tags: + - Branding Preference + operationId: addBrandingPreference + summary: Add branding preferences for a tenant. + description: | + This API provides the capability to add a custom branding preference for an organization for the first time insted of the inherited branding from the root organization.
+ Currently this API provides the capability to only configure organization wise branding preference for 'en-US' locale.
+ + Scope(Permission) required: `internal_org_branding_preference_update` + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + description: This represents the branding preferences to be added. + required: true + responses: + '201': + description: Successfully created. + content: + application/json: + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + "409": + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/branding-preference' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "type": "ORG", + "name": "WSO2", + "locale": "en-US", + "preference": { + "organizationDetails": { + "displayName": "Ballerina.io", + "siteTitle": "Login - Ballerina", + "copyrightText": "© 2021 WSO2", + "supportEmail": "support@ballerina.io" + }, + "images": { + "logo": { + "imgURL": "https://ballerina.io/img/ballerina-logo.svg", + "altText": "Ballerina.io Logo" + }, + "favicon": { + "imgURL": "https://central.ballerina.io/favicon.ico" + } + }, + "urls": { + "privacyPolicyURL": "https://ballerina.io/privacy-policy", + "termsOfUseURL": "https://ballerina.io/terms-of-service/", + "cookiePolicyURL": "https://ballerina.io/privacy-policy/#cookie-policy" + }, + "stylesheets": { + "accountApp": "https://firebasestorage.googleapis.com/v0/b/asgardeo-branding.appspot.com/o/ballerina%2Flogin-portal.overrides.css?alt=media&token=0315462e-534e-4f33-83f9-e4c092d0273d", + "myAccountApp": "https://asgardeo-branding/user-portal.css" + }, + "configs": { + "isBrandingEnabled": true, + "removeDefaultBranding": false, + "selfSignUpEnabled": true + } + } + }' + put: + tags: + - Branding Preference + operationId: updateBrandingPreference + summary: Update branding preferences of an organization. + description: | + This API provides the capability to update the branding preference of an organization.
+ + Scope(Permission) required: `internal_org_branding_preference_update` + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + description: This represents the branding preferences to be updated. + required: true + responses: + '200' : + description: Successfully updated + content: + application/json: + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/branding-preference' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "type": "ORG", + "name": "WSO2", + "locale": "en-US", + "preference": { + "organizationDetails": { + "displayName": "Ballerina.io", + "siteTitle": "Login - Ballerina", + "copyrightText": "© 2021 WSO2", + "supportEmail": "support@ballerina.io" + }, + "images": { + "logo": { + "imgURL": "https://ballerina.io/img/ballerina-logo.svg", + "altText": "Ballerina.io Logo" + }, + "favicon": { + "imgURL": "https://central.ballerina.io/favicon.ico" + } + }, + "urls": { + "privacyPolicyURL": "https://ballerina.io/privacy-policy", + "termsOfUseURL": "https://ballerina.io/terms-of-service/", + "cookiePolicyURL": "https://ballerina.io/privacy-policy/#cookie-policy" + }, + "stylesheets": { + "accountApp": "https://firebasestorage.googleapis.com/v0/b/asgardeo-branding.appspot.com/o/ballerina%2Flogin-portal.overrides.css?alt=media&token=0315462e-534e-4f33-83f9-e4c092d0273d", + "myAccountApp": "https://asgardeo-branding/user-portal.css" + }, + "configs": { + "isBrandingEnabled": true, + "removeDefaultBranding": false, + "selfSignUpEnabled": true + } + } + }' + delete: + tags: + - Branding Preference + operationId: deleteBrandingPreference + summary: Deletes branding preferences of a tenant. + description: | + This API provides the capability to delete the branding preferences of an orgnization.
+ + Scope(Permission) required: `internal_org_branding_preference_update` + parameters: + - $ref: '#/components/parameters/typeQueryParam' + - $ref: '#/components/parameters/nameQueryParam' + - $ref: '#/components/parameters/localeQueryParam' + responses: + '204' : + description: Successfully deleted. + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/branding-preference?type=ORG&name=WSO2&locale=en-US' \ + -H 'accept: */*' + '/branding-preference/resolve': + get: + tags: + - Branding Preference + operationId: resolveBrandingPreference + summary: Resolve branding preference of an organization. + description: | + This API provides the capability to retrieve the branding preference of an organization.
+ If there is no branding preference available for the requested locale, API will check for the default locale('en-US') and return it.
+ + Scope(Permission) required: None + parameters: + - $ref: '#/components/parameters/typeQueryParam' + - $ref: '#/components/parameters/nameQueryParam' + - $ref: '#/components/parameters/localeQueryParam' + - $ref: '#/components/parameters/restrictToPublishedQueryParam' + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/{organization-id}/api/server/v1/branding-preference/resolve?type=ORG&name=WSO2&locale=en-US' \ + -H 'accept: application/json' + '/branding-preference/text': + post: + tags: + - Custom Text + operationId: addCustomText + summary: Add custom text for a tenant. + description: | + This API provides the capability to add custom texts for the specified screen & locale.
+ + Scope(Permission) required: `internal_org_branding_preference_update` + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomTextModel' + description: This represents the custom text to be added. + required: true + responses: + '201': + description: Successfully created. + content: + application/json: + schema: + $ref: '#/components/schemas/CustomTextModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + "409": + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/branding-preference/text' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "type": "ORG", + "name": "WSO2", + "locale": "en-US", + "screen": "login", + "preference": { + "login": "Sign In", + "welcome": "Welcome", + "account.linking": "Account Linking", + "username": "Username", + "email.username": "Email address", + "back.to.sign.in": "Back to Sign In", + "or": "Or", + "dont.have.an.account": "Don'\''t have an account?" + } + }' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Custom Text + operationId: updateCustomText + summary: Update custom text of a tenant. + description: | + This API provides the capability to update the custom texts for the specified screen & locale.
+ + Scope(Permission) required: `internal_org_branding_preference_update` + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomTextModel' + description: This represents the custom text content to be updated for the specified screen & locale. + required: true + responses: + '200' : + description: Successfully updated + content: + application/json: + schema: + $ref: '#/components/schemas/CustomTextModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/branding-preference/text' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "type": "ORG", + "name": "WSO2", + "locale": "en-US", + "screen": "login", + "preference": { + "login": "Sign In", + "welcome": "Welcome", + "account.linking": "Account Linking", + "username": "Username", + "email.username": "Email address", + "back.to.sign.in": "Back to Sign In", + "or": "Or", + "dont.have.an.account": "Don'\''t have an account?" + } + }' \ + -H 'Authorization: Bearer {bearer_token}' + delete: + tags: + - Custom Text + operationId: deleteCustomText + summary: Deletes custom text. + description: | + This API provides the capability to delete the custom texts for the specified screen & locale of an organization.
+ If no query parameter was specified in the delete request, all the custom texts configured in the organization will be deleted.
+ + Scope(Permission) required: `internal_org_branding_preference_update` + parameters: + - $ref: '#/components/parameters/typeQueryParam' + - $ref: '#/components/parameters/nameQueryParam' + - $ref: '#/components/parameters/localeQueryParam' + - $ref: '#/components/parameters/screenQueryParam' + responses: + '204' : + description: Successfully deleted. + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/branding-preference/text?type=ORG&name=WSO2&locale=en-US&screen=login' \ + -H 'accept: */*' + '/branding-preference/text/resolve': + get: + tags: + - Custom Text + operationId: resolveCustomText + summary: Resolve custom text of an organization. + description: | + This API provides the capability to retrieve the custom text configurations of an organization/specific application.
+ If there is no custom text available for the requested locale, API will check for the default locale('en-US') and return it.
+ If there is no custom text available for the requested organization, API will check for the parent organization's custom text configurations and return it.
+ + Scope(Permission) required: None + parameters: + - $ref: '#/components/parameters/typeQueryParam' + - $ref: '#/components/parameters/nameQueryParam' + - $ref: '#/components/parameters/localeQueryParam' + - $ref: '#/components/parameters/screenQueryParam' + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: '#/components/schemas/CustomTextModel' + '400': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/{organization-id}/api/server/v1/branding-preference/text/resolve?type=ORG&name=WSO2&locale=en-US&screen=login' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + parameters: + typeQueryParam: + in: query + name: type + required: false + description: Type to filter the retrieval of customizations. + schema: + type: string + enum: + - ORG + - APP + - CUSTOM + example: "ORG" + nameQueryParam: + in: query + name: name + required: false + description: Tenant/Application name to filter the retrieval of customizations. + schema: + type: string + example: "WSO2" + localeQueryParam: + in: query + name: locale + required: false + description: Locale to filter the retrieval of customizations. + schema: + type: string + example: "en-US" + screenQueryParam: + in: query + name: screen + required: false + description: Screen to filter the retrieval of customizations. + schema: + type: string + example: "login" + restrictToPublishedQueryParam: + in: query + name: restrictToPublished + required: false + description: | + Specifies whether to limit resolving to published branding preferences. + If set to true, branding preference will be resolved only using published branding preferences. + If set to false, branding preference will be resolved using both published and unpublished branding preferences. + schema: + type: boolean + default: false + example: true + + schemas: + BrandingPreferenceModel: + required: + - type + - preference + type: object + properties: + type: + type: string + enum: + - ORG + - APP + - CUSTOM + example: "ORG" + name: + type: string + example: "WSO2" + locale: + type: string + example: "en-US" + default: "en-US" + preference: + type: object + description: "This is the JSON structured branding preference" + example: { + "organizationDetails": { + "displayName": "Ballerina.io", + "siteTitle": "Login - Ballerina", + "copyrightText": "© 2021 WSO2", + "supportEmail": "support@ballerina.io" + }, + "images": { + "logo": { + "imgURL": "https://ballerina.io/img/ballerina-logo.svg", + "altText": "Ballerina.io Logo" + }, + "favicon": { + "imgURL": "https://central.ballerina.io/favicon.ico" + } + }, + "urls": { + "privacyPolicyURL": "https://ballerina.io/privacy-policy", + "termsOfUseURL": "https://ballerina.io/terms-of-service/", + "cookiePolicyURL": "https://ballerina.io/privacy-policy/#cookie-policy" + }, + "stylesheets": { + "accountApp": "https://firebasestorage.googleapis.com/v0/b/asgardeo-branding.appspot.com/o/ballerina%2Flogin-portal.overrides.css?alt=media&token=0315462e-534e-4f33-83f9-e4c092d0273d", + "myAccountApp": "https://asgardeo-branding/user-portal.css" + }, + "configs": { + "isBrandingEnabled": true, + "removeDefaultBranding": false, + "selfSignUpEnabled": true + } + } + + CustomTextModel: + required: + - type + - screen + - preference + type: object + properties: + type: + type: string + enum: + - ORG + - APP + - CUSTOM + example: "ORG" + name: + type: string + example: "WSO2" + locale: + type: string + example: "en-US" + default: "en-US" + screen: + type: string + example: "login" + preference: + type: object + description: "This is the JSON structured branding preference" + example: { + "login": "Sign In", + "welcome": "Welcome", + "account.linking": "Account Linking", + "username": "Username", + "email.username": "Email address", + "back.to.sign.in": "Back to Sign In", + "or": "Or", + "dont.have.an.account": "Don't have an account?" + } + + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: BPM-60001 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: 3erfee-232-efewv-2321-43ferfe24r + + #----------------------------------------------------- + # Descriptions of Branding Preference API responses. + #----------------------------------------------------- + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + NotFound: + description: Requested resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Conflict: + description: Conflict. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + + #----------------------------------------------------- + # Applicable authentication mechanisms. + #----------------------------------------------------- + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/claim-management.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/claim-management.yaml new file mode 100644 index 0000000000..3fa57c9b68 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/claim-management.yaml @@ -0,0 +1,677 @@ +openapi: 3.0.1 +info: + title: Claim Management API + description: | + This document specifies an **Organization level Claim Management RESTful API** for Asgardeo. + + This API allows retrieving local/external claims and claim dialects. Organizations have the default claims/claim dialtect defined in Asgardeo and custom claims used by B2B shared apps. + version: v1 +servers: + - url: https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1 + +security: + - OAuth2: [] + +tags: + - name: management + description: Secured Admin-only calls +paths: + /claim-dialects/local/claims: + get: + tags: + - management + summary: Retrieve local claims + description: | + Retrieve local claims.
+ + Scope(Permission) required: `internal_org_claim_meta_view` + operationId: getLocalClaims + parameters: + - name: attributes + in: query + description: Define only the required attributes to be sent in the response + object.
This option is not yet supported. + schema: + type: string + - name: limit + in: query + description: Maximum number of records to return.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: offset + in: query + description: Number of records to skip for pagination.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: filter + in: query + description: Condition to filter the retrieval of records.
This option is not yet supported. + schema: + type: string + - name: sort + in: query + description: Define the order by which the retrieved records should be sorted.
This option is not yet supported. + schema: + type: string + responses: + 200: + description: Local claims. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/LocalClaimRes' + 401: + description: Unauthorized. + content: {} + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 501: + description: Not Implemented. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/claim-dialects/local/claims' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /claim-dialects/local/claims/{claim-id}: + get: + tags: + - management + summary: Retrieve local claim by ID + description: | + Retrieve a local claim matching the given claim ID.
+ + Scope(Permission) required: `internal_org_claim_meta_view` + operationId: getLocalClaim + parameters: + - name: claim-id + in: path + description: Id of the claim. + required: true + schema: + type: string + responses: + 200: + description: Requested claim. + content: + application/json: + schema: + $ref: '#/components/schemas/LocalClaimRes' + 400: + description: Invalid input request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 404: + description: The specified resource is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/claim-dialects/local/claims/{claim-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /claim-dialects: + get: + tags: + - management + summary: Retrieve claim dialects + description: | + Retrieve claim dialects.
+ + Scope(Permission) required: `internal_org_claim_meta_view` + operationId: getClaimDialects + parameters: + - name: limit + in: query + description: Maximum number of records to return.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: offset + in: query + description: Number of records to skip for pagination.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: filter + in: query + description: Condition to filter the retrieval of records.
This option is not yet supported. + schema: + type: string + - name: sort + in: query + description: Define the order by which the retrieved records should be sorted.
This option is not yet supported. + schema: + type: string + responses: + 200: + description: Claim dialects. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ClaimDialectRes' + 401: + description: Unauthorized. + content: {} + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 501: + description: Not Implemented. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/claim-dialects' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /claim-dialects/{dialect-id}: + get: + tags: + - management + summary: Retrieve claim dialect + description: | + Retrieve a claim dialect matching the given dialect id.
+ + Scope(Permission) required: `internal_org_claim_meta_view`
+ operationId: getClaimDialect + parameters: + - name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + responses: + 200: + description: Requested claim dialect. + content: + application/json: + schema: + $ref: '#/components/schemas/ClaimDialectRes' + 400: + description: Invalid input request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 404: + description: The specified resource is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/claim-dialects/{dialect-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /claim-dialects/{dialect-id}/claims: + get: + tags: + - management + summary: Retrieve external claims + description: | + Retrieve External claims.
+ + Scope(Permission) required: `internal_org_claim_meta_view` + operationId: getExternalClaims + parameters: + - name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + - name: limit + in: query + description: Maximum number of records to return.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: offset + in: query + description: Number of records to skip for pagination.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: filter + in: query + description: Condition to filter the retrieval of records.
This option is not yet supported. + schema: + type: string + - name: sort + in: query + description: Define the order by which the retrieved records should be sorted.
This option is not yet supported. + schema: + type: string + responses: + 200: + description: External claims. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ExternalClaimRes' + 401: + description: Unauthorized. + content: {} + 404: + description: The specified resource is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 501: + description: Not Implemented. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/claim-dialects/{dialect-id}/claims' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /claim-dialects/{dialect-id}/claims/{claim-id}: + get: + tags: + - management + summary: Retrieve external claim + description: | + Retrieve an external claim matching the given dialect ID and claim ID.
+ + Scope(Permission) required: `internal_org_claim_meta_view` + operationId: getExternalClaim + parameters: + - name: dialect-id + in: path + description: ID of the claim dialect. + required: true + schema: + type: string + - name: claim-id + in: path + description: ID of the claim. + required: true + schema: + type: string + responses: + 200: + description: Requested claim. + content: + application/json: + schema: + $ref: '#/components/schemas/ExternalClaimRes' + 400: + description: Invalid input request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 404: + description: The specified resource is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/claim-dialects/{dialect-id}/claims/{claim-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + LocalClaimRes: + type: object + properties: + id: + type: string + description: claim ID. + example: 394b8adcce24c64a8a09a8d80abf8c337bd253de + claimURI: + type: string + description: A unique URI specific to the claim. + example: http://wso2.org/claims/username + dialectURI: + type: string + description: URI of the claim dialect. + example: http://wso2.org/claims + description: + type: string + description: Description of the claim. + example: Some description about the claim. + displayOrder: + type: integer + description: The order in which the claim is displayed among other claims + under the same dialect. + example: 10 + displayName: + type: string + description: Name of the claim to be displayed in the UI. + example: Username + readOnly: + type: boolean + description: Specifies if the claim is read-only. + example: true + regEx: + type: string + description: Regular expression used to validate inputs. + example: ^([a-zA-Z)$ + required: + type: boolean + description: Specifies if the claim is required for user registration. + example: true + supportedByDefault: + type: boolean + description: Specifies if the claim will be prompted during user registration + and displayed on the user profile. + example: true + uniquenessScope: + type: string + description: Specifies the scope of uniqueness validation for the claim value. + enum: + - NONE + - WITHIN_USERSTORE + - ACROSS_USERSTORES + example: "NONE" + sharedProfileValueResolvingMethod: + type: string + description: Specifies claim value resolving method for shared user profile. + enum: + - FromOrigin + - FromSharedProfile + - FromFirstFoundInHierarchy + example: "FromOrigin" + attributeMapping: + type: array + description: Userstore attribute mappings. + items: + $ref: '#/components/schemas/AttributeMapping' + properties: + type: array + description: Define any additional properties if required. + items: + $ref: '#/components/schemas/Property' + description: Local claim response. + AttributeMapping: + required: + - mappedAttribute + - userstore + type: object + properties: + mappedAttribute: + type: string + description: Userstore attribute to be mapped to. + example: username + userstore: + type: string + description: Userstore domain name. + example: SECONDARY + description: Claim user store attribute mapping. + ClaimDialectRes: + type: object + properties: + id: + type: string + description: Dialect id. + example: 394b8adcce24c64a8a09a0d80abf8c337bd253de + dialectURI: + type: string + description: URI of the claim dialect. + example: urn:ietf:params:scim:schemas:core:2.0:User + link: + $ref: '#/components/schemas/Link' + description: Claim dialect response. + ExternalClaimRes: + type: object + properties: + id: + type: string + description: External claim ID. + example: 394b8adcce24c64a8a09a0d80abf8c337dd255de + claimURI: + type: string + description: Claim URI of the external claim. + example: ' urn:ietf:params:scim:schemas:core:2.0:User:userName' + claimDialectURI: + type: string + description: Dialect URI of the external claim. + example: urn:ietf:params:scim:schemas:core:2.0:User + mappedLocalClaimURI: + type: string + description: The local claim URI to map with the external claim. + example: http://wso2.org/claims/username + properties: + type: array + description: Define any additional properties if required. + items: + $ref: '#/components/schemas/Property' + description: External claim response. + Property: + required: + - key + - value + type: object + properties: + key: + type: string + value: + type: string + Link: + type: object + properties: + href: + type: string + description: Relative path to the target resource. + example: 394b8adcce24c64a8a09a8d80abf8c337bd253de/claims + rel: + type: string + description: Describes how the current context is related to the target + resource. + example: claims + Error: + required: + - code + - message + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + responses: + Conflict: + description: Element Already Exists. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + Created: + description: Item Created. + headers: + Location: + description: URI of the created resource. + schema: + type: string + content: {} + Forbidden: + description: Resource Forbidden. + content: {} + InvalidInput: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + NoContent: + description: No Content. + content: {} + NotFound: + description: The specified resource is not found. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + OK: + description: OK. + content: {} + ServerError: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Unauthorized. + content: {} + parameters: + limitQueryParam: + name: limit + in: query + description: Maximum number of records to return. + schema: + type: integer + format: int32 + offsetQueryParam: + name: offset + in: query + description: Number of records to skip for pagination. + schema: + type: integer + format: int32 + filterQueryParam: + name: filter + in: query + description: Condition to filter the retrieval of records. + schema: + type: string + sortQueryParam: + name: sort + in: query + description: Define the order by which the retrieved records should be sorted. + schema: + type: string + attributesQueryParam: + name: attributes + in: query + description: Define only the required attributes to be sent in the response + object. + schema: + type: string + dialectIdPathParam: + name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + claimIdPathParam: + name: claim-id + in: path + description: Id of the claim. + required: true + schema: + type: string + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{root-organization-name}/oauth/authorize + tokenUrl: https://api.asgardeo.io/t/{root-organization-name}/oauth/token + scopes: + read: Grants read access + write: Grants write access + admin: Grants read and write access to administrative information diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/end-user-credential-management.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/end-user-credential-management.yaml new file mode 100644 index 0000000000..51626a6f6e --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/end-user-credential-management.yaml @@ -0,0 +1,198 @@ +openapi: 3.0.0 +info: + description: | + The Credential Management REST API provides a comprehensive interface to list and delete + credentials enrolled by end-users within the WSO2 Identity Server. The administrators who are assigned with privileges to list and delete + users (with scopes internal_user_mgt_view and internal_user_mgt_delete) are able to perform these operations. This API currently supports passkey and push + authentication credentials. + + version: '1.0' + title: WSO2 Identity Server - User Credential Management Rest API + +security: + - OAuth2: [] + - BasicAuth: [] + +servers: + - url: https://{server-url}/t/{tenant-domain}/api/server/v1 + variables: + tenant-domain: + default: carbon.super + server-url: + default: localhost:9443 + +paths: + /users/{user-id}/credentials: + get: + summary: List end-user enrolled credentials + description: "Retrieves a list of all user-enrolled credentials. + \n\n Scope (Permission) required: ``internal_user_mgt_view``\n\n" + operationId: getUserCredentialsById + tags: + - List User Credentials + parameters: + - name: user-id + in: path + description: The unique identifier of the user. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Credential' + examples: + response: + value: + [ + { + "credentialId": "TJwhlvGKrEk7xSSKLrhoCsaA", + "displayName": "My Security Key", + "type": "PASSKEY" + }, + { + "credentialId": "996a12a0-b9aab-48ab-8016-d0ffd99ebe1b", + "displayName": "My phone", + "type": "PUSH_AUTH" + } + ] + '400': + description: Bad Request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: User Not Found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + + /users/{user-id}/credentials/{type}/{credential-id}: + delete: + summary: Delete a user-enrolled credential. + description: "Deletes a specific enrolled credential for a user. + \n\n Scope (Permission) required: ``internal_user_mgt_delete``\n\n" + operationId: deleteUserCredentialById + tags: + - Delete User Credential + parameters: + - name: user-id + in: path + description: The unique identifier of the user. + required: true + schema: + type: string + - name: type + in: path + description: The type of the credential. + required: true + schema: + type: string + enum: [passkey, push-auth] + - name: credential-id + in: path + description: The unique identifier of the device to be deleted. + required: true + schema: + type: string + responses: + '204': + description: User Credential Deleted. + '400': + description: Bad Request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' +components: + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://localhost:9443/oauth2/authorize' + tokenUrl: 'https://localhost:9443/oauth2/token' + scopes: + read: internal_user_mgt_view + delete: internal_user_mgt_delete + schemas: + Credential: + type: object + properties: + credentialId: + type: string + description: The unique identifier for the credential. + example: 'a5a81c76-27a3-42d4-82a8-55285d82a4a1' + displayName: + type: string + description: A user-friendly name for the credential. + example: "YubiKey 5C" + type: + type: string + description: The type of the credential. + enum: [passkey, push-auth] + Error: + type: object + properties: + code: + type: string + description: Some error description. + example: 'CM-00001' + message: + type: string + description: Some error message. + example: 'Some error message.' + description: + type: string + description: A more detailed explanation of the error. + example: 'Some error description.' + traceId: + type: string + description: The unique identifier for the request. + example: '8a5f5d4e-1d2c-4f3b-9c6e-7d8f9a0b1c2d' diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/idle-account-identification.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/idle-account-identification.yaml new file mode 100644 index 0000000000..db3e198d0b --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/idle-account-identification.yaml @@ -0,0 +1,135 @@ +openapi: 3.0.0 +info: + description: + "This document specifies a RESTful API for identifying idle business user accounts in Asgardeo. The API provides the capability to retrieve a list of inactive users after a specified date. + \n\n To access the idle account identification API in Asgardeo, you need to first get an access token from your organization." + version: "v1" + title: Asgardeo - Idle Account Identification Rest API +security: + - OAuth2: [] +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/api/idle-account-identification/v1' +paths: + /inactive-users: + get: + tags: + - Get inactive users + description: "Get inactive users after a specified date. \n\n Scope required: ``internal_org_user_mgt_list``" + operationId: getInactiveUsers + parameters: + - in: query + name: inactiveAfter + schema: + type: string + description: Users without login activity after this date are considered inactive. + example: 2023-01-31 + required: true + - in: query + name: excludeBefore + schema: + type: string + description: Users whose last login activity is before the specified date will be excluded from the list of inactive users included in the response. + example: 2023-01-01 + responses: + '200': + $ref: '#/components/responses/Success' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/idle-account-identification/v1/inactive-users?inactiveAfter=2023-01-31&excludeBefore=2023-01-01' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: 80001 + message: + type: string + example: Some error message + description: + type: string + example: Some error description + Unauthorized: + type: object + required: + - code + - message + properties: + code: + type: string + example: 401 + message: + type: string + example: Unauthorized + description: + type: string + example: You are unauthorized to make this request + InactiveUsersList: + type: array + items: + $ref: '#/components/schemas/InactiveUser' + InactiveUser: + type: object + properties: + userId: + type: string + username: + type: string + userStoreDomain: + type: string + required: + - username + example: + userId: 3c780e73-9ca6-4e49-811e-8e697df22a91 + username: JohnDoe + userStoreDomain: DEFAULT + responses: + Unauthorized: + description: Unauthorized + content: + 'application/json': + schema: + $ref: '#/components/schemas/Unauthorized' + Forbidden: + description: Resource Forbidden + ServerError: + description: Internal Server Error + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + BadRequest: + description: Invalid Input Request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Success: + description: Inactive users returned successfully. + content: + 'application/json': + schema: + $ref: '#/components/schemas/InactiveUsersList' + securitySchemes: + OAuth2: + type: oauth2 + description: "**Authorization code OAuth flow** + **Organization Switch** + \n\n Scopes: + \n\n - ```internal_org_user_mgt_list```: Grant permissions to read user records." + diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/idp.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/idp.yaml new file mode 100644 index 0000000000..8908d08ec6 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/idp.yaml @@ -0,0 +1,3171 @@ +openapi: 3.0.0 +info: + description: > + This document specifies the **Identity Provider Management API** for organizations in Asgardeo. The APIs provide the capability to add/update/delete/patch identity providers. + In addition, APIs are available to retrieve metadata about federated authenticators and outbound provisioning connectors that can be configured for any given identity provider. + version: "v1" + title: Asgardeo - Identity provider management API definition +security: + - OAuth2: [] +paths: + /identity-providers: + get: + tags: + - Identity Providers + summary: | + List identity providers + description: > + This API provides the capability to retrieve the list of identity + providers.
+ Scope required: `internal_org_idp_view` + operationId: getIDPs + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/sortQueryParam' + - $ref: '#/components/parameters/sortByQueryParam' + - $ref: '#/components/parameters/requiredAttributesQueryParam' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Identity Providers + summary: | + Add a new identity provider + description: | + This API provides the capability to create a new identity provider.
+ Scope required: `internal_org_idp_create` + operationId: addIDP + responses: + '201': + description: Successful response + headers: + Location: + description: Location of the newly created identity provider. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderResponse' + examples: + identityProviderWithSystemDefinedAuthenticator: + $ref: '#/components/examples/SystemDefinedIdentityProviderResponseExample' + identityProviderWithUserDefineAuthenticator: + $ref: '#/components/examples/UserDefinedIdentityProviderResponseExample' + application/xml: + schema: + $ref: '#/components/schemas/IdentityProviderResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "name": "google", + "description": "IdP for Google Federation", + "image": "google-logo-url", + "isPrimary": false, + "isFederationHub": false, + "homeRealmIdentifier": "localhost", + "certificate": { + "certificates": [ + "string" + ], + "jwksUri": "jwks endpoint of IDP" + }, + "claims": { + "userIdClaim": { + "uri": "http://wso2.org/claims/username" + }, + "mappings": [ + { + "idpClaim": "country", + "localClaim": { + "uri": "http://wso2.org/claims/username" + } + } + ], + "provisioningClaims": [ + { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "defaultValue": "sathya" + } + ] + }, + "federatedAuthenticators": { + "defaultAuthenticatorId": "U0FNTDJBdXRoZW50aWNhdG9y", + "authenticators": [ + { + "authenticatorId": "U0FNTDJBdXRoZW50aWNhdG9y", + "isEnabled": true, + "isDefault": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + } + ] + }, + "provisioning": { + "jit": { + "isEnabled": true, + "scheme": "PROVISION_SILENTLY", + "userstore": "DEFAULT", + "attributeSyncMethod": "OVERRIDE_ALL", + "associateLocalUser": true, + "accountLookupAttributeMappings": [ + { + "federatedAttribute": "email", + "localAttribute": "http://wso2.org/claims/email" + }, + { + "federatedAttribute": "mobile", + "localAttribute": "http://wso2.org/claims/mobile" + } + ] + }, + "outboundConnectors": { + "defaultConnectorId": "U0NJTQ", + "connectors": [ + { + "connectorId": "U0NJTQ", + "isEnabled": true, + "isDefault": false, + "blockingEnabled": false, + "rulesEnabled": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + } + ] + } + } + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderPOSTRequest' + examples: + identityProviderWithSystemDefinedAuthenticator: + $ref: '#/components/examples/IdentityProviderWithSystemDefinedAuthenticatorPOSTRequestExample' + identityProviderWithUserDefineAuthenticator: + $ref: '#/components/examples/IdentityProviderWithUserDefinedAuthenticatorPOSTRequestExample' + application/xml: + schema: + $ref: '#/components/schemas/IdentityProviderPOSTRequest' + description: This represents the identity provider to be created. + required: true + /identity-providers/meta/federated-authenticators: + get: + tags: + - Metadata + summary: | + Metadata about supported federated authenticators of identity providers + description: >- + This API provides the list of supported federated authenticators for an identity provider in Asgardeo.
+ Scope required: `internal_org_idp_view` + operationId: getMetaFederatedAuthenticators + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetaFederatedAuthenticatorListItem' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://localhost:9443/o/api/server/v1/identity-providers/meta/federated-authenticators' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/meta/federated-authenticators/{federated-authenticator-id}: + get: + tags: + - Metadata + summary: | + Metadata about a supported federated authenticator + description: > + This API provides the details of a single supported federated + authenticator for an identity provider in Asgardeo.
+ Scope required: `internal_org_idp_view` + operationId: getMetaFederatedAuthenticator + parameters: + - name: federated-authenticator-id + in: path + description: ID of a federated authenticator + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/MetaFederatedAuthenticator' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://localhost:9443/o/api/server/v1/identity-providers/meta/federated-authenticators/{federated-authenticator-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/meta/outbound-provisioning-connectors: + get: + tags: + - Metadata + summary: > + Metadata about supported outbound provisioning connectors by identity providers in Asgardeo + description: >- + This API provides the list of supported federated authenticators for an + IdP in Asgardeo.
+ Scope required: `internal_org_idp_view` + operationId: getMetaOutboundConnectors + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetaOutboundConnectorListItem' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://localhost:9443/o/api/server/v1/identity-providers/meta/outbound-provisioning-connectors' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/meta/outbound-provisioning-connectors/{outbound-provisioning-connector-id}: + get: + tags: + - Metadata + summary: | + Metadata about supported outbound provisioning connectors + description: >- + This API provides the details of a single supported outbound + provisioning connector for an IdP in Asgardeo.
+ Scope required: `internal_org_idp_view` + operationId: getMetaOutboundConnector + parameters: + - name: outbound-provisioning-connector-id + in: path + description: ID of an Outbound Provisioning Connector + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/MetaOutboundConnector' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://localhost:9443/o/api/server/v1/identity-providers/meta/outbound-provisioning-connectors/{outbound-provisioning-connector-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/{identity-provider-id}: + get: + tags: + - Identity Providers + summary: | + Retrieve identity provider by identity provider's ID + description: > + This API provides the capability to retrieve the identity provider + details by using its ID. Furthermore, by specifying the "Accept : + application/xml" header, it provides the ability to export IdP data as + XML.
+ Scope required: `internal_org_idp_view` + operationId: getIDP + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderResponse' + examples: + identityProviderWithSystemDefinedAuthenticator: + $ref: '#/components/examples/SystemDefinedIdentityProviderResponseExample' + identityProviderWithUserDefineAuthenticator: + $ref: '#/components/examples/UserDefinedIdentityProviderResponseExample' + application/xml: + schema: + $ref: '#/components/schemas/IdentityProviderResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://localhost:9443/o/api/server/v1/identity-providers/{identity-provider-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Identity Providers + summary: > + Patch an identity provider property by ID + description: > + This API provides the capability to update an identity provider property using a patch request. IdP patch is supported only for key-value pairs.
+ Scope required: `internal_org_idp_update` + operationId: patchIDP + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated identity provider. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://localhost:9443/o/api/server/v1/identity-providers/{identity-provider-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '[ + { + "operation": "REPLACE", + "path": "/homeRealmIdentifier", + "value": "google" + } + ]' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchRequest' + required: true + delete: + tags: + - Identity Providers + summary: | + Delete an identity provider by ID + description: > + This API provides the capability to delete an identity provider by + giving its ID.
+ Scope required: `internal_org_idp_delete` + operationId: deleteIDP + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider + required: true + schema: + type: string + - $ref: '#/components/parameters/forceQueryParam' + responses: + '204': + description: Successfully Deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://localhost:9443/o/api/server/v1/identity-providers/{identity-provider-id}?force=false' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/{identity-provider-id}/export: + get: + tags: + - Identity Providers + summary: | + Export identity provider in XML, YAML, or JSON file formats + description: | + This API provides the capability to retrieve the identity provider by ID. The identity provider is retrieved as an `XML`, `YAML`, or `JSON` file. Use `LOCAL` as the ID to export resident IdP configurations.
+ Scope required: `internal_org_idp_view` + operationId: exportIDPToFile + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + - $ref: '#/components/parameters/excludeSecretsQueryParam' + - $ref: '#/components/parameters/fileTypeHeaderParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: string + example: 'Sample application configuration in the requested format' + application/yaml: + schema: + type: string + example: 'Sample application configuration in the requested format' + application/xml: + schema: + type: string + example: 'Sample application configuration in the requested format' + application/octet-stream: + schema: + type: string + example: 'Sample application configuration in the requested format' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://localhost:9443/o/api/server/v1/identity-providers/{identity-provider-id}/export?excludeSecrets=true' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + '/identity-providers/{identity-provider-id}/import': + put: + tags: + - Identity Providers + summary: | + Update identity provider from an exported YAML, XML or JSON file + description: > + This API provides the capability to update an existing identity provider from + the information provided as a file. Use `LOCAL` as the ID to update resident IDP configurations.
+ Scope required: `internal_org_idp_update` + operationId: updateIDPFromFile + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/FileUpload' + description: This represents the application to be updated. + responses: + '200': + description: Successfully Updated. + headers: + Location: + description: Location of the updated application. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/import' \ + -H 'accept: */*' \ + -H 'Content-Type: multipart/form-data' \ + -H 'Authorization: Bearer {bearer_token}' \ + -F 'file=@file-name.xml;type=text/xml' + /identity-providers/import: + post: + tags: + - Identity Providers + summary: | + Create an IdP from an exported XML, YAML, or JSON file + description: > + This API provides the capability to import an identity provider from + the information provided as a file.
+ Scope required: `internal_org_idp_create` + operationId: importIDPFromFile + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/FileUpload' + description: This represents the identity provider to be created. + responses: + '201': + description: Successfully created. + headers: + Location: + description: Location of the newly created identity provider. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/import' \ + -H 'accept: */*' \ + -H 'Content-Type: multipart/form-data' \ + -H 'Authorization: Bearer {bearer_token}' \ + -F 'file=@file-name.xml;type=text/xml' + /identity-providers/{identity-provider-id}/federated-authenticators: + get: + tags: + - Federated Authenticators + summary: | + Federated authenticators of an identity provider + description: > + This API provides a list of federated authenticators enabled for a + specific identity provider identified by its ID.
+ Scope required: `internal_org_idp_view` + operationId: getFederatedAuthenticators + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticatorListResponse' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorListResponseExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorListResponseExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/federated-authenticators' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Federated Authenticators + summary: | + Update Federated authenticators of an identity provider + description: > + This API updates federated authenticators enabled for a + specific identity provider identified by its ID.
+ Scope required: `internal_org_idp_update` + operationId: updateFederatedAuthenticators + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticatorListResponse' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorListResponseExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorListResponseExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/federated-authenticators' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "defaultAuthenticatorId": "U0FNTDJBdXRoZW50aWNhdG9y", + "authenticators": [ + { + "authenticatorId": "U0FNTDJBdXRoZW50aWNhdG9y", + "isEnabled": true, + "isDefault": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticatorRequest' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorsListPUTRequestExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorsListPUTRequestExample' + description: This represents the federated authenticators to be updated + required: true + /identity-providers/{identity-provider-id}/federated-authenticators/{federated-authenticator-id}: + get: + tags: + - Federated Authenticators + summary: | + Retrieve the federated authenticator config of an identity provider + description: > + This API provides the capability to retrieve the federated authenticator information of an identity provider by giving the federated authenticator's ID.
+ Scope required: `internal_org_idp_view` + operationId: getFederatedAuthenticator + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + - name: federated-authenticator-id + in: path + description: ID of the federated authenticator. + required: true + schema: + type: string + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticator' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorResponseExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorResponseExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/federated-authenticators/{federated-authenticator-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Federated Authenticators + summary: > + Update a federated authenticator of an IdP using authenticator id + description: > + This API provides the capability to update an identity provider's + federated authenticator config by specifying the authenticator ID.
+ Scope required: `internal_org_idp_update` + operationId: updateFederatedAuthenticator + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + - name: federated-authenticator-id + in: path + description: ID of the federated authenticator. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated federated authenticator. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticator' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorResponseExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorResponseExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/federated-authenticators/{federated-authenticator-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "isEnabled": true, + "isDefault": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticatorPUTRequest' + description: This represents the federated authenticator to be updated + required: true + '/identity-providers/{identity-provider-id}/provisioning': + get: + tags: + - Provisioning + summary: | + Provisioning entities of an identity provider + description: > + This API provides a list of available provisioning entities for an + identity provider. This includes just-in-time provisioning config and + outbound provisioning connectors
+ Scope required: `internal_org_idp_view` + operationId: getProvisioningConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ProvisioningResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/provisioning' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/{identity-provider-id}/provisioning/outbound-connectors: + get: + tags: + - Provisioning + summary: | + Outbound provisioning connectors of an identity provider + description: > + This API provides a list of outbound provisioning connectors enabled for + an identity provider.
+ Scope required: `internal_org_idp_view` + operationId: getOutboundConnectors + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundConnectorListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/provisioning/outbound-connectors' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Provisioning + summary: | + Update outbound provisioning connectors of an identity provider + description: > + This API provides updates the list of outbound provisioning connectors enabled for an identity provider.
+ Scope required: `internal_org_idp_update` + operationId: updateOutboundConnectors + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundConnectorListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/identity-provider-id/provisioning/outbound-connectors' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "defaultConnectorId": "U0NJTQ", + "connectors": [ + { + "connectorId": "U0NJTQ", + "isEnabled": true, + "isDefault": false, + "blockingEnabled": false, + "rulesEnabled": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundProvisioningRequest' + description: This represents the outbound provisioning connectors to be updated + required: true + /identity-providers/{identity-provider-id}/provisioning/outbound-connectors/{outbound-provisioning-connector-id}: + get: + tags: + - Provisioning + summary: | + Retrieve the outbound provisioning connector of an identity provider + description: > + This API provides the capability to retrieve the outbound provisioning + connector information of an identity provider by specifying the provisioning + connector's ID.
+ Scope required: `internal_org_idp_view` + operationId: getOutboundConnector + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + - name: outbound-provisioning-connector-id + in: path + description: ID of the outbound provisioning connector. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundConnector' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/provisioning/outbound-connectors/{outbound-provisioning-connector-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Provisioning + summary: | + Update an outbound provisioning connector of an identity provider + description: > + This API provides the capability to update an outbound provisioning + connector config of an identity provider by specifying the provisioning + connector's ID.
+ Scope required: `internal_org_idp_update` + operationId: updateOutboundConnector + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + - name: outbound-provisioning-connector-id + in: path + description: ID of the outbound provisioning connector. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated outbound provisioning connector. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundConnector' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/provisioning/outbound-connectors/{outbound-provisioning-connector-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "isEnabled": true, + "isDefault": false, + "blockingEnabled": false, + "rulesEnabled": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundConnectorPUTRequest' + description: This represents the outbound provisioning connector to be updated + required: true + /identity-providers/{identity-provider-id}/claims: + get: + tags: + - Claims + summary: | + Claim config of an identity provider + description: > + This API provides the claim config for an identity provider. This + includes idp-to-local claim mappings, claims to be outbound + provisioned, userID claim URI, and role claim URI.
+ Scope required: `internal_org_idp_view` + operationId: getClaimConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/Claims' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/claims' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Claims + summary: | + Update the claims of an identity provider + description: > + This API provides the capability to update the claim config of an + existing identity provider.
+ Scope required: `internal_org_idp_update` + operationId: updateClaimConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated claim config. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/Claims' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/claims' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "userIdClaim": { + "uri": "http://wso2.org/claims/username" + }, + "roleClaim": { + "uri": "http://wso2.org/claims/username" + }, + "mappings": [ + { + "idpClaim": "country", + "localClaim": { + "uri": "http://wso2.org/claims/username" + } + } + ], + "provisioningClaims": [ + { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "defaultValue": "sathya" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Claims' + description: This represents the claim config to be updated + required: true + '/identity-providers/{identity-provider-id}/provisioning/jit': + get: + tags: + - Provisioning + summary: | + Just-In-Time provisioning config of an identity provider + description: > + This API retrieves the Just-In-Time provisioning config of an identity + provider by specifying the identity provider ID.
+ Scope required: `internal_org_idp_view` + operationId: getJITConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/JustInTimeProvisioning' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/provisioning/jit' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Provisioning + summary: | + Update the just-in-time provisioning config of an identity provider + description: > + This API provides the capability to update the just-in-time provisioning + config of an identity provider by specifying the identity provider's ID. This includes the ability to enable/disable JIT provisioning, change provisioning user store, and enable/disable user prompts for username, password, and consent.
+ Scope required: `internal_org_idp_update` + operationId: updateJITConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated just-in-time provisioning config. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/JustInTimeProvisioning' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/provisioning/jit' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "isEnabled": true, + "scheme": "PROVISION_SILENTLY", + "userstore": "DEFAULT", + "attributeSyncMethod": "OVERRIDE_ALL", + "associateLocalUser": true, + "accountLookupAttributeMappings": [ + { + "federatedAttribute": "email", + "localAttribute": "http://wso2.org/claims/email" + }, + { + "federatedAttribute": "mobile", + "localAttribute": "http://wso2.org/claims/mobile" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JustInTimeProvisioning' + description: This represents the just-in-time provisioning config to be updated. + required: true + '/identity-providers/{identity-provider-id}/connected-apps': + get: + tags: + - Connected Apps + summary: | + Connected applications of an identity provider + description: > + This API provides the list of applications that use this identity provider for federated authentication/provisioning.
+ Scope required: `internal_org_idp_view` + operationId: getConnectedApps + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectedApps' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/identity-providers/{identity-provider-id}/connected-apps' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +servers: + - url: 'https://api.asgardeo.io/{root-organization-name}/o/api/server/v1' + variables: + server-url: + default: https://api.asgardeo.io/{root-organization-name}/o/ + root-organization-name: + default: {root-organization-name} +components: + parameters: + limitQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + format: int32 + offsetQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + format: int32 + filterQueryParam: + in: query + name: filter + required: false + description: > + Condition to filter the retrieval of records. Supports 'sw', 'co', 'ew' + and 'eq' operations and also complex queries with 'and' operations. E.g. + /identity-providers?filter=name+sw+"google"+and+isEnabled+eq+"true" + schema: + type: string + sortQueryParam: + in: query + name: sortOrder + required: false + description: | + Defines the order in which the retrieved records should be sorted. + _This parameter is not supported yet_ + schema: + type: string + enum: + - ASC + - DESC + sortByQueryParam: + in: query + name: sortBy + required: false + description: | + Attribute by which the retrieved records should be sorted. + _This parameter is not supported yet_ + schema: + type: string + requiredAttributesQueryParam: + in: query + name: requiredAttributes + required: false + description: | + Specifies the required parameters in the response. + _This parameter is not supported yet_ + schema: + type: string + forceQueryParam: + in: query + name: force + required: false + description: > + Enforces the forceful deletion of an identity provider, + federated authenticator or an outbound provisioning connector even though + it is referred by a service provider. + schema: + type: boolean + default: false + excludeSecretsQueryParam: + in: query + name: excludeSecrets + required: false + description: | + Specifies whether to exclude secrets when exporting an identity provider. + schema: + type: boolean + default: true + fileTypeHeaderParam: + in: header + name: Accept + required: false + description: | + Content type of the file. + schema: + type: string + default: application/yaml + enum: + - application/json + - application/xml + - application/yaml + - application/x-yaml + - text/yaml + - text/xml + - text/json + securitySchemes: + OAuth2: + type: oauth2 + description: "**Authorization code OAuth flow** + **Organization Switch**" + schemas: + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + MetaProperty: + type: object + required: + - key + properties: + key: + type: string + example: 'httpBinding' + displayName: + type: string + example: 'HTTP Binding' + description: + type: string + example: 'Choose the HTTP Binding or decide from incoming request' + type: + type: string + enum: + - STRING + - BOOLEAN + - INTEGER + example: STRING + displayOrder: + type: integer + example: 10 + regex: + type: string + example: '[a-zA-Z]{3,30}' + isMandatory: + type: boolean + default: false + example: false + isConfidential: + type: boolean + default: false + options: + type: array + items: + type: string + example: ['HTTP-Redirect', 'HTTP-POST', 'As Per Request'] + defaultValue: + type: string + example: HTTP-Redirect + subProperties: + type: array + items: + $ref: '#/components/schemas/MetaProperty' + Property: + required: + - key + type: object + properties: + key: + type: string + example: somePropertyKey + value: + type: string + example: somePropertyValue + PatchRequest: + type: array + items: + $ref: '#/components/schemas/Patch' + Patch: + description: A JSONPatch as defined by RFC 6902. Patch operation is supported only for root-level attributes of + an identity provider. + required: + - operation + - path + properties: + operation: + type: string + description: The operation to be performed. + enum: + - ADD + - REMOVE + - REPLACE + example: REPLACE + path: + type: string + description: A JSON-Pointer + example: '/homeRealmIdentifier' + value: + type: string + description: The value to be used within the operations. + example: 'google' + Link: + type: object + properties: + href: + type: string + description: Path to the target resource. + example: >- + '/api/server/v1/identity-providers/394b8adcce24c64a8a09a8d80abf8c337bd253de' + rel: + type: string + description: Describes how the current context is related to the target resource. + example: identity-providers + readOnly: true + Certificate: + type: object + properties: + certificates: + type: array + items: + type: string + jwksUri: + type: string + example: "https://api.asgardeo.io/t/{organization-name}/oauth2/jwks" + IdentityProviderPOSTRequest: + type: object + required: + - name + properties: + name: + type: string + example: google + description: + type: string + example: "IdP for Google Federation" + image: + type: string + example: "google-logo-url" + isPrimary: + type: boolean + default: false + isFederationHub: + type: boolean + default: false + homeRealmIdentifier: + type: string + example: localhost + certificate: + $ref: '#/components/schemas/Certificate' + alias: + type: string + example: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + claims: + $ref: '#/components/schemas/Claims' + roles: + $ref: '#/components/schemas/Roles' + federatedAuthenticators: + $ref: '#/components/schemas/FederatedAuthenticatorRequest' + provisioning: + $ref: '#/components/schemas/ProvisioningRequest' + IdentityProviderResponse: + type: object + properties: + id: + type: string + example: '123e4567-e89b-12d3-a456-556642440000' + name: + type: string + example: google + description: + type: string + isEnabled: + type: boolean + default: true + example: true + isPrimary: + type: boolean + default: false + image: + type: string + example: "google-logo-url" + isFederationHub: + type: boolean + example: false + homeRealmIdentifier: + type: string + example: localhost + certificate: + $ref: '#/components/schemas/Certificate' + alias: + type: string + example: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + claims: + $ref: '#/components/schemas/Claims' + roles: + $ref: '#/components/schemas/Roles' + federatedAuthenticators: + $ref: '#/components/schemas/FederatedAuthenticatorListResponse' + provisioning: + $ref: '#/components/schemas/ProvisioningResponse' + IdentityProviderListResponse: + type: object + properties: + totalResults: + type: integer + example: 10 + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "identity-provider?offset=50&limit=10", + "rel": "next", + }, { + "href": "identity-provider?offset=30&limit=10", + "rel": "previous", + } + ] + identityProviders: + type: array + items: + $ref: '#/components/schemas/IdentityProviderListItem' + IdentityProviderListItem: + type: object + properties: + id: + type: string + example: 123e4567-e89b-12d3-a456-556642440000 + name: + type: string + example: google + description: + type: string + example: identity provider for google federation + isEnabled: + type: boolean + default: true + example: true + image: + type: string + example: "google-logo-url" + isPrimary: + type: boolean + example: false + isFederationHub: + type: boolean + example: false + homeRealmIdentifier: + type: string + example: localhost + certificate: + $ref: '#/components/schemas/Certificate' + alias: + type: string + example: 'https://localhost:9444/oauth2/token' + claims: + $ref: '#/components/schemas/Claims' + roles: + $ref: '#/components/schemas/Roles' + federatedAuthenticators: + $ref: '#/components/schemas/FederatedAuthenticatorListResponse' + provisioning: + $ref: '#/components/schemas/ProvisioningResponse' + self: + type: string + example: /api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000 + MetaFederatedAuthenticatorListItem: + type: object + properties: + authenticatorId: + type: string + example: U0FNTDJBdXRoZW50aWNhdG9y + name: + type: string + example: SAML2Authenticator + definedBy: + type: string + enum: + - SYSTEM + - USER + self: + type: string + example: /t/{root-organization-name}/o/api/server/v1/identity-providers/meta/federated-authenticators/U0FNTFNTT0F1dGhlbnRpY2F0b3I + MetaFederatedAuthenticator: + type: object + properties: + authenticatorId: + type: string + example: U0FNTFNTT0F1dGhlbnRpY2F0b3I + name: + type: string + example: SAML2Authenticator + displayName: + type: string + example: 'SAML2 Web SSO Configuration' + definedBy: + type: string + enum: + - SYSTEM + - USER + properties: + type: array + items: + $ref: '#/components/schemas/MetaProperty' + FederatedAuthenticatorRequest: + type: object + required: + - defaultAuthenticatorId + properties: + defaultAuthenticatorId: + type: string + description: >- + ID of the federated authenticator to be used as the default + authenticator for the respective identity provider. + example: U0FNTDJBdXRoZW50aWNhdG9y + authenticators: + type: array + items: + $ref: '#/components/schemas/FederatedAuthenticator' + description: >- + Includes the list of federated authenticators supported by the + respective identity provider. This should include the authenticator + specified as the defaultAuthenticator. + FederatedAuthenticator: + type: object + required: + - authenticatorId + properties: + authenticatorId: + type: string + example: U0FNTDJBdXRoZW50aWNhdG9y + name: + type: string + example: "SAML2Authenticator" + readOnly: true + isEnabled: + type: boolean + default: false + example: true + definedBy: + type: string + enum: + - SYSTEM + - USER + isDefault: + type: boolean + default: false + properties: + type: array + items: + $ref: '#/components/schemas/Property' + endpoint: + $ref: '#/components/schemas/Endpoint' + Endpoint: + type: object + required: + - uri + - authentication + properties: + uri: + type: string + example: https://abc.com/token + pattern: '^https?://.+' + authentication: + $ref: '#/components/schemas/AuthenticationType' + allowedHeaders: + type: array + description: List of HTTP headers to forward to the extension. + items: + type: string + example: [ "x-geo-location", "host"] + allowedParameters: + type: array + description: List of parameters to forward to the extension. + items: + type: string + example: [ "device-id"] + AuthenticationType: + type: object + description: > + The type of authentication required by the action's endpoint. The following options are supported: + + - NONE: No authentication is required.
+ ``{ + "type": "NONE" + }`` + + - BASIC: Basic authentication with a username and password.
+ ``{ + "type": "BASIC", + "properties": { + "username": "auth_username", + "password": "auth_password" + } + }`` + + - API_KEY: API key-based authentication, where the key is provided in an HTTP header.
+ ``{ + "type": "API_KEY", + "properties": { + "header": "X-API-Key", + "value": "12345-abcde-67890" + } + }`` + + - BEARER: Bearer token-based authentication.
+ ``{ + "type": "BEARER", + "properties": { + "accessToken": "0d6fed02-eac0-332b-8998-213a543139a0" + } + }`` + required: + - type + properties: + type: + type: string + enum: + - NONE + - BEARER + - API_KEY + - BASIC + example: BASIC + properties: + type: object + additionalProperties: true + example: + username: "auth_username" + password: "auth_password" + FederatedAuthenticatorPUTRequest: + type: object + properties: + authenticatorId: + type: string + example: + readOnly: true + name: + type: string + example: "SAML2Authenticator" + readOnly: true + isEnabled: + type: boolean + default: false + example: true + isDefault: + type: boolean + default: false + example: false + definedBy: + type: string + enum: + - SYSTEM + - USER + properties: + type: array + items: + $ref: '#/components/schemas/Property' + endpoint: + $ref: '#/components/schemas/Endpoint' + FederatedAuthenticatorListResponse: + type: object + properties: + defaultAuthenticatorId: + type: string + example: U0FNTFNTT0F1dGhlbnRpY2F0b3I + authenticators: + type: array + items: + $ref: '#/components/schemas/FederatedAuthenticatorListItem' + FederatedAuthenticatorListItem: + type: object + properties: + authenticatorId: + type: string + example: U0FNTFNTT0F1dGhlbnRpY2F0b3I + name: + type: string + example: SAML2Authenticator + isEnabled: + type: boolean + default: false + example: true + self: + type: string + example: /t/{root-organization-name}/o/api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000/federated-authenticators/U0FNTDJBdXRoZW50aWNhdG9y + MetaOutboundConnectorListItem: + type: object + properties: + connectorId: + type: string + example: U0NJTQ + name: + type: string + example: SCIM + self: + type: string + example: /t/{root-organization-name}/o/api/server/v1/identity-providers/meta/outbound-provisioning-connectos/U0NJTQ + MetaOutboundConnector: + type: object + properties: + connectorId: + type: string + example: U0NJTQ + name: + type: string + example: SCIM + displayName: + type: string + example: SCIM Outbound Provisioning Connector + blockingEnabled: + type: boolean + default: false + rulesEnabled: + type: boolean + default: false + properties: + type: array + items: + $ref: '#/components/schemas/MetaProperty' + ProvisioningRequest: + type: object + properties: + jit: + $ref: '#/components/schemas/JustInTimeProvisioning' + outboundConnectors: + $ref: '#/components/schemas/OutboundProvisioningRequest' + ProvisioningResponse: + type: object + properties: + jit: + $ref: '#/components/schemas/JustInTimeProvisioning' + outboundConnectors: + $ref: '#/components/schemas/OutboundConnectorListResponse' + OutboundProvisioningRequest: + type: object + required: + - defaultConnectorId + properties: + defaultConnectorId: + type: string + example: U0NJTQ + connectors: + type: array + items: + $ref: '#/components/schemas/OutboundConnector' + OutboundConnector: + type: object + required: + - connectorId + properties: + connectorId: + type: string + example: U0NJTQ + name: + type: string + example: SCIM + readOnly: true + isEnabled: + type: boolean + default: false + example: true + isDefault: + type: boolean + default: false + blockingEnabled: + type: boolean + default: false + rulesEnabled: + type: boolean + default: false + properties: + type: array + items: + $ref: '#/components/schemas/Property' + OutboundConnectorPUTRequest: + type: object + properties: + connectorId: + type: string + example: U0NJTQ + readOnly: true + name: + type: string + example: SCIM + readOnly: true + isEnabled: + type: boolean + default: false + example: true + isDefault: + type: boolean + default: false + blockingEnabled: + type: boolean + default: false + rulesEnabled: + type: boolean + default: false + properties: + type: array + items: + $ref: '#/components/schemas/Property' + OutboundConnectorListResponse: + type: object + properties: + defaultConnectorId: + type: string + example: U0NJTQ + connectors: + type: array + items: + $ref: '#/components/schemas/OutboundConnectorListItem' + OutboundConnectorListItem: + type: object + properties: + connectorId: + type: string + example: U0NJTQ + name: + type: string + example: SCIM + readOnly: true + isEnabled: + type: boolean + default: false + example: true + self: + type: string + example: /t/{root-organization-name}/o/api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000/provisioning/outbound-connectors/U0NJTQ + Roles: + type: object + properties: + mappings: + type: array + items: + $ref: '#/components/schemas/RoleMapping' + outboundProvisioningRoles: + type: array + items: + type: string + example: + - manager + - hr-admin + RoleMapping: + type: object + properties: + idpRole: + type: string + example: google-manager + localRole: + type: string + example: manager + Claims: + type: object + properties: + userIdClaim: + $ref: '#/components/schemas/Claim' + roleClaim: + $ref: '#/components/schemas/Claim' + mappings: + type: array + items: + $ref: '#/components/schemas/ClaimMapping' + provisioningClaims: + type: array + items: + $ref: '#/components/schemas/ProvisioningClaim' + ProvisioningClaim: + type: object + properties: + claim: + $ref: '#/components/schemas/Claim' + defaultValue: + type: string + example: sathya + ClaimMapping: + type: object + properties: + idpClaim: + type: string + example: country + localClaim: + $ref: '#/components/schemas/Claim' + Claim: + type: object + required: + - uri + properties: + id: + type: string + example: aHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VybmFtZQ + readOnly: true + uri: + type: string + example: 'http://wso2.org/claims/username' + displayName: + type: string + example: Username + readOnly: true + JustInTimeProvisioning: + type: object + required: + - isEnabled + properties: + isEnabled: + type: boolean + default: false + example: true + scheme: + type: string + enum: + - PROMPT_USERNAME_PASSWORD_CONSENT + - PROMPT_PASSWORD_CONSENT + - PROMPT_CONSENT + - PROVISION_SILENTLY + default: PROVISION_SILENTLY + userstore: + type: string + default: PRIMARY + example: PRIMARY + associateLocalUser: + type: boolean + default: false + example: true + skipJITForLookupFailure: + type: boolean + default: false + example: true + accountLookupAttributeMappings: + type: array + items: + $ref: '#/components/schemas/AccountLookupAttributeMapping' + description: > + List of local and federated attributes to be used for account lookup. + The maximum number of mappings is 2. + attributeSyncMethod: + type: string + enum: + - OVERRIDE_ALL + - NONE + - PRESERVE_LOCAL + default: OVERRIDE_ALL + AccountLookupAttributeMapping: + type: object + properties: + localAttribute: + type: string + example: http://wso2.org/claims/emailaddress + federatedAttribute: + type: string + example: email + ConnectedApps: + type: object + properties: + totalResults: + type: integer + example: 10 + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "identity-provider/123e4567-e89b-12d3-a456-556642440000/connected-apps?offset=50&limit=10", + "rel": "next" + }, { + "href": "identity-provider/123e4567-e89b-12d3-a456-556642440000/connected-apps?offset=30&limit=10", + "rel": "previous" + } + ] + connectedApps: + type: array + items: + $ref: '#/components/schemas/ConnectedApp' + ConnectedApp: + type: object + properties: + appId: + type: string + example: app-id + self: + type: string + example: connected-app-url + IdentityProviderTemplateListResponse: + type: object + properties: + totalResults: + type: integer + example: 10 + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "identity-provider/templates?offset=50&limit=10", + "rel": "next", + }, { + "href": "identity-provider/templates?offset=30&limit=10", + "rel": "previous", + } + ] + templates: + type: array + items: + $ref: '#/components/schemas/IdentityProviderTemplateListItem' + IdentityProviderTemplateListItem: + type: object + properties: + id: + type: string + readOnly: true + example: 123e4567-e89b-12d3-a456-556642440000 + name: + type: string + example: 'google' + description: + type: string + example: 'Identity provider template for google federation' + image: + type: string + example: 'google-logo-url' + category: + type: string + enum: [DEFAULT, CUSTOM] + example: 'DEFAULT' + displayOrder: + type: integer + example: 10 + services: + type: array + items: + $ref: '#/components/schemas/Service' + self: + type: string + example: '/api/server/v1/identity-providers/templates/123e4567-e89b-12d3-a456-556642440000' + IdentityProviderTemplate: + type: object + properties: + id: + type: string + readOnly: true + example: 123e4567-e89b-12d3-a456-556642440000 + name: + type: string + example: google + description: + type: string + example: 'Google federated connector' + image: + type: string + example: 'google-logo-url' + category: + type: string + enum: [DEFAULT, CUSTOM] + example: 'DEFAULT' + displayOrder: + type: integer + example: 10 + idp: + $ref : '#/components/schemas/IdentityProviderPOSTRequest' + required: + - name + - idp + Service: + type: string + example: 'Authentication' + FileUpload: + type: object + properties: + file: + type: string + format: binary + description: file to upload + examples: + UserDefinedAuthenticatorPUTRequestExample: + summary: Put request for user defined authenticators + value: + authenticatorId: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + name: "custom-authenticator" + default: true + definedBy: "USER" + endpoint: + uri: "https://abc.com/token" + authentication: + type: "BASIC" + properties: + username: "auth_username" + password: "auth_password" + allowedHeaders: + - x-geo-location + - host + allowedParameters: + - device-id + SystemDefinedAuthenticatorPUTRequestExample: + summary: "Put request for system defined authenticators" + value: + authenticatorId: "U0FNTDJBdXRoZW50aWNhdG9y" + isEnabled: true + isDefault: true + properties: + - key: "somePropertyKey" + value: "somePropertyValue" + UserDefinedAuthenticatorsListPUTRequestExample: + summary: "Put request for user defined authenticators list" + value: + defaultAuthenticatorId: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + authenticators: + - authenticatorId: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + name: "custom-authenticator" + default: true + definedBy: "USER" + endpoint: + uri: "https://abc.com/token" + authentication: + type: "BASIC" + properties: + username: "auth_username" + password: "auth_password" + allowedHeaders: + - x-geo-location + - host + allowedParameters: + - device-id + SystemDefinedAuthenticatorsListPUTRequestExample: + summary: "Put request for system defined authenticators list" + value: + defaultAuthenticatorId: "U0FNTDJBdXRoZW50aWNhdG9y" + authenticators: + - authenticatorId: "U0FNTDJBdXRoZW50aWNhdG9y" + isEnabled: true + isDefault: true + properties: + - key: "somePropertyKey" + value: "somePropertyValue" + IdentityProviderWithSystemDefinedAuthenticatorPOSTRequestExample: + summary: "POST request for an identity provider with a system defined authenticator" + value: + name: "google" + description: "IdP for Google Federation" + image: "google-logo-url" + templateId: "8ea23303-49c0-4253-b81f-82c0fe6fb4a0" + isPrimary: false + isFederationHub: false + homeRealmIdentifier: "localhost" + certificate: + certificates: + - "string" + jwksUri: "https://api.asgardeo.io/t/{root-organization-name}/o/oauth2/jwks" + alias: "https://localhost:9444/api.asgardeo.io/t/{root-organization-name}/o/oauth2/token" + idpIssuerName: "https://www.idp.com" + claims: + userIdClaim: + uri: "http://wso2.org/claims/username" + roleClaim: + uri: "http://wso2.org/claims/username" + mappings: + - idpClaim: "country" + localClaim: + uri: "http://wso2.org/claims/username" + provisioningClaims: + - claim: + uri: "http://wso2.org/claims/username" + defaultValue: "sathya" + roles: + mappings: + - idpRole: "google-manager" + localRole: "manager" + outboundProvisioningRoles: + - "manager" + - "hr-admin" + groups: + - name: "google-admin" + id: "6b1f8513-3de0-4f28-9cad-b7400dbc94ae" + federatedAuthenticators: + defaultAuthenticatorId: "U0FNTDJBdXRoZW50aWNhdG9y" + authenticators: + - authenticatorId: "U0FNTDJBdXRoZW50aWNhdG9y" + isEnabled: true + isDefault: true + properties: + - key: "somePropertyKey" + value: "somePropertyValue" + provisioning: + jit: + isEnabled: true + scheme: "PROVISION_SILENTLY" + userstore: "PRIMARY" + associateLocalUser: true + attributeSyncMethod: "OVERRIDE_ALL" + accountLookupAttributeMappings: + - federatedAttribute: "email" + localAttribute: "http://wso2.org/claims/email" + - federatedAttribute: "mobile" + localAttribute: "http://wso2.org/claims/mobile" + outboundConnectors: + defaultConnectorId: "U0NJTQ" + connectors: + - connectorId: "U0NJTQ" + isEnabled: true + isDefault: true + blockingEnabled: false + rulesEnabled: false + properties: + - key: "somePropertyKey" + value: "somePropertyValue" + implicitAssociation: + isEnabled: false + lookupAttribute: + - "email" + IdentityProviderWithUserDefinedAuthenticatorPOSTRequestExample: + summary: "POST request for an identity provider with a user defined authenticator" + value: + name: "Custom IDP" + description: "IDP with custom federated authenticator" + image: "https://custom-authenticator-logo-url" + templateId: "external-custom-authenticator" + isPrimary: false + isFederationHub: false + homeRealmIdentifier: "" + certificate: + certificates: + - "" + jwksUri: "" + claims: + userIdClaim: + uri: "http://wso2.org/claims/username" + roleClaim: + uri: "" + mappings: [] + provisioningClaims: [] + roles: + mappings: [ ] + outboundProvisioningRoles: [ ] + federatedAuthenticators: + defaultAuthenticatorId: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + authenticators: + - authenticatorId: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + isEnabled: true + isDefault: true + definedBy: "USER" + endpoint: + uri: "https://abc.com/token" + authentication: + type: "BASIC" + properties: + username: "auth_username" + password: "auth_password" + allowedHeaders: + - x-geo-location + - host + allowedParameters: + - device-id + provisioning: + jit: + isEnabled: true + scheme: "PROVISION_SILENTLY" + userstore: "PRIMARY" + associateLocalUser: true + attributeSyncMethod: "OVERRIDE_ALL" + accountLookupAttributeMappings: + - federatedAttribute: "email" + localAttribute: "http://wso2.org/claims/email" + - federatedAttribute: "mobile" + localAttribute: "http://wso2.org/claims/mobile" + SystemDefinedIdentityProviderResponseExample: + summary: "Response for identity provider creation with system defined authenticator" + value: + id: "123e4567-e89b-12d3-a456-556642440000" + name: "google" + description: "string" + isEnabled: true + isPrimary: false + image: "google-logo-url" + isFederationHub: false + homeRealmIdentifier: "localhost" + certificate: + certificates: + - "string" + jwksUri: "https://api.asgardeo.io/t/{root-organization-name}/o/oauth2/jwks" + alias: "https://api.asgardeo.io/t/{root-organization-name}/o/oauth2/token" + claims: + userIdClaim: + id: "aHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VybmFtZQ" + uri: "http://wso2.org/claims/username" + displayName: "Username" + roleClaim: + id: "aHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VybmFtZQ" + uri: "http://wso2.org/claims/username" + displayName: "Username" + mappings: + - idpClaim: "country" + localClaim: + id: "aHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VybmFtZQ" + uri: "http://wso2.org/claims/username" + displayName: "Username" + provisioningClaims: + - claim: + id: "aHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VybmFtZQ" + uri: "http://wso2.org/claims/username" + displayName: "Username" + defaultValue: "sathya" + roles: + mappings: + - idpRole: "google-manager" + localRole: "manager" + outboundProvisioningRoles: + - "manager" + - "hr-admin" + federatedAuthenticators: + defaultAuthenticatorId: "U0FNTFNTT0F1dGhlbnRpY2F0b3I" + authenticators: + - authenticatorId: "U0FNTFNTT0F1dGhlbnRpY2F0b3I" + name: "SAML2Authenticator" + isEnabled: true + definedBy: "SYSTEM" + tags: + - "Social Login" + - "OIDC" + self: "/o/api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000/federated-authenticators/U0FNTDJBdXRoZW50aWNhdG9y" + provisioning: + jit: + isEnabled: true + scheme: "PROMPT_USERNAME_PASSWORD_CONSENT" + userstore: "PRIMARY" + associateLocalUser: true + attributeSyncMethod: "OVERRIDE_ALL" + accountLookupAttributeMappings: + - federatedAttribute: "email" + localAttribute: "http://wso2.org/claims/email" + - federatedAttribute: "mobile" + localAttribute: "http://wso2.org/claims/mobile" + outboundConnectors: + defaultConnectorId: "U0NJTQ" + connectors: + - connectorId: "U0NJTQ" + name: "SCIM" + isEnabled: true + self: "/o/api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000/provisioning/outbound-connectors/U0NJTQ" + UserDefinedIdentityProviderResponseExample: + summary: "Response for identity provider creation with user defined authenticator" + value: + name: "Custom IDP" + description: "IDP with custom federated authenticator" + image: "https://custom-authenticator-logo-url" + templateId: "external-custom-authenticator" + isEnabled: true + isPrimary: false + isFederationHub: false + homeRealmIdentifier: "" + alias: "" + idpIssuerName: "" + claims: + userIdClaim: + id: "aHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VybmFtZQ" + uri: "http://wso2.org/claims/username" + displayName: "Username" + roleClaim: + uri: "" + mappings: [ ] + provisioningClaims: [ ] + roles: + mappings: [ ] + groups: [ ] + federatedAuthenticators: + defaultAuthenticatorId: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + authenticators: + - authenticatorId: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + name: "custom-authenticator" + isEnabled: true + definedBy: "USER" + tags: + - "Custom" + self: "/o/api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000/federated-authenticators/Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + provisioning: + jit: + isEnabled: true + scheme: "PROVISION_SILENTLY" + userstore: "DEFAULT" + associateLocalUser: false + attributeSyncMethod: "OVERRIDE_ALL" + outboundConnectors: + connectors: [ ] + implicitAssociation: + isEnabled: false + lookupAttribute: [ ] + SystemDefinedAuthenticatorResponseExample: + summary: "System defined federated authenticator" + value: + authenticatorId: "U0FNTDJBdXRoZW50aWNhdG9y" + isEnabled: true + isDefault: true + definedBy: "SYSTEM" + tags: + - "Social Login" + - "OIDC" + properties: + - key: "somePropertyKey" + value: "somePropertyValue" + UserDefinedAuthenticatorResponseExample: + summary: "User defined federated authenticator" + value: + authenticatorId: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + isEnabled: true + isDefault: true + definedBy: "USER" + tags: + - "Custom" + endpoint: + uri: "https://abc.com/token" + authentication: + type: "BASIC" + allowedHeaders: + - x-geo-location + - host + allowedParameters: + - device-id + SystemDefinedAuthenticatorListResponseExample: + summary: "List of authenticators with system defined authenticator" + value: + defaultAuthenticatorId: "U0FNTDJBdXRoZW50aWNhdG9y" + authenticators: + - authenticatorId: "U0FNTDJBdXRoZW50aWNhdG9y" + isEnabled: true + isDefault: true + definedBy: "SYSTEM" + tags: + - "Social Login" + - "OIDC" + self: "/o/api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000/federated-authenticators/U0FNTDJBdXRoZW50aWNhdG9y" + UserDefinedAuthenticatorListResponseExample: + summary: "List of authenticators with user defined authenticator" + value: + defaultAuthenticatorId: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + authenticators: + - authenticatorId: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + name: "custom-authenticator" + isEnabled: true + definedBy: "USER" + tags: + - "Custom" + self: "/o/api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000/federated-authenticators/Y3VzdG9tLWF1dGhlbnRpY2F0b3I" diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/notification-senders-v2.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/notification-senders-v2.yaml new file mode 100644 index 0000000000..2546575ae7 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/notification-senders-v2.yaml @@ -0,0 +1,2274 @@ +openapi: 3.0.0 +info: + title: Notification Senders v2 API + description: This document specifies **Email, SMS and Push notification sender RESTful API** for **Asgardeo** organizations. + To access the notification sender organization APIs in Asgardeo, you need to first get an access token from your organization. + version: "v2" +servers: + - url: https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2 + variables: + serverUrl: + default: https://api.asgardeo.io/t/{root-organization-name}/o/ + root-organization-name: + default: "{root-organization-name}" +security: + - OAuth2: [] +paths: + /notification-senders/email: + get: + tags: + - Email Senders + summary: Get a list of email senders + description: | + This API provides the capability to retrieve the list of email senders.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getEmailSenders + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailProviderList' + examples: + basicAuthWithAuthTypeResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithBasicAuthTypeListResponseExample' + clientCredentialResponseEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithClientCredentialAuthTypeListResponseExample' + httpBasicAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypeListResponseExample' + httpClientCredentialResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypeListResponseExample' + httpBearerTokenResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypeListResponseExample' + httpApiKeyResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypeListResponseExample' + httpNoneAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypeListResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/email' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Email Senders + summary: Create an email sender + description: | + This API provides the capability to create an email sender. If the 'name' is not defined, 'EmailPublisher' is taken as the default name. For SMTP-based providers, Basic and Client Credential authentication types are supported. For HTTP-based providers, Basic, Client Credential, Bearer Token, API Key, and None authentication types are supported.
+ + Scope(Permission) required: `internal_org_notification_senders_create` + operationId: createEmailSender + requestBody: + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/HTTPBasedEmailSenderAdd' + - $ref: '#/components/schemas/SMTPBasedEmailSenderAdd' + examples: + basicAuthWithAuthTypePOSTEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderBasicAuthWithAuthTypePOSTRequestExample' + clientCredentialPOSTEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderClientCredentialPOSTRequestExample' + httpBasicAuthPOSTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypePOSTRequestExample' + httpClientCredentialPOSTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypePOSTRequestExample' + httpBearerTokenPOSTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypePOSTRequestExample' + httpApiKeyPOSTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypePOSTRequestExample' + httpNoneAuthPOSTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypePOSTRequestExample' + responses: + "201": + description: Successful Response + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/HTTPBasedEmailSenderAdd' + - $ref: '#/components/schemas/SMTPBasedEmailSenderAdd' + examples: + basicAuthWithAuthTypeResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithBasicAuthTypeResponseExample' + clientCredentialResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBasicAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypeResponseExample' + httpClientCredentialResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBearerTokenResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypeResponseExample' + httpApiKeyResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypeResponseExample' + httpNoneAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypeResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/email' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "fromAddress": "iam@gmail.com", + "authType": "BASIC", + "properties": [ + { + "key": "mail.smtp.starttls.enable", + "value": true + }, + { + "key": "userName", + "value": "iam" + }, + { + "key": "password", + "value": "iam123" + } + ] + }' + /notification-senders/email/{sender-name}: + get: + tags: + - Email Senders + summary: Retrieve an email sender by name + description: | + This API provides the capability to retrieve an email sender by name. + The URL encoded email sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSender' + examples: + basicAuthWithAuthTypeResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithBasicAuthTypeResponseExample' + clientCredentialResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBasicAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypeResponseExample' + httpClientCredentialResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBearerTokenResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypeResponseExample' + httpApiKeyResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypeResponseExample' + httpNoneAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypeResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/email/{email-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Email Senders + summary: Update an email sender + description: | + This API provides the capability to update an email sender by name. + The URL encoded email sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_update` + operationId: updateEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/HTTPBasedEmailSenderUpdate' + - $ref: '#/components/schemas/SMTPBasedEmailSenderUpdate' + examples: + basicAuthWithAuthTypePUTEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderBasicAuthWithAuthTypePUTRequestExample' + clientCredentialPUTEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderClientCredentialPUTRequestExample' + httpBasicAuthPUTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypePUTRequestExample' + httpClientCredentialPUTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypePUTRequestExample' + httpBearerTokenPUTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypePUTRequestExample' + httpApiKeyPUTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypePUTRequestExample' + httpNoneAuthPUTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypePUTRequestExample' + + required: true + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSender' + examples: + basicAuthWithAuthTypeResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithBasicAuthTypeResponseExample' + clientCredentialResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBasicAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypeResponseExample' + httpClientCredentialResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBearerTokenResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypeResponseExample' + httpApiKeyResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypeResponseExample' + httpNoneAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypeResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/email' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "fromAddress": "iam@gmail.com", + "authType": "BASIC", + "properties": [ + { + "key": "mail.smtp.starttls.enable", + "value": true + }, + { + "key": "userName", + "value": "iam" + }, + { + "key": "password", + "value": "iam123" + } + ] + }' + delete: + tags: + - Email Senders + summary: Delete an email sender by name + description: | + This API provides the capability to delete an email sender by name. + The URL encoded email sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_delete` + operationId: deleteEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/email/{email-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /notification-senders/sms: + get: + tags: + - SMS Senders + summary: Get a list of SMS senders + description: | + This API provides the capability to retrieve a list of SMS notification senders.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getSMSSenders + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSProviderList' + examples: + ListOfSMSProviderResponseExample: + $ref: '#/components/examples/SMSProvidersListResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/sms' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - SMS Senders + summary: Create a SMS sender + description: | + This API provides the capability to create a SMS sender. + If the 'name' is not defined, 'SMSPublisher' is taken as the default name.
+ + Scope(Permission) required: `internal_org_notification_senders_create` + operationId: createSMSSender + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSenderAdd' + examples: + TwilioSMSProviderRequestExample: + $ref: '#/components/examples/TwilioSMSProviderRequestExample' + VonageSMSProviderRequestExample: + $ref: '#/components/examples/VonageSMSProviderRequestExample' + CustomSMSProviderRequestExample: + $ref: '#/components/examples/CustomSMSProviderRequestExample' + responses: + "201": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + examples: + TwilioSMSProviderResponseExample: + $ref: '#/components/examples/TwilioSMSProviderResponseExample' + VonageSMSProviderResponseExample: + $ref: '#/components/examples/VonageSMSProviderResponseExample' + CustomSMSProviderResponseExample: + $ref: '#/components/examples/CustomSMSProviderResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/sms' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "NEXMO", + "providerURL": "https://rest.nexmo.com/sms/json", + "key": "123**45", + "secret": "5tg**ssd", + "sender": "+94 775563324", + "type": "json", + "properties": [ + { + "key": "body.scope", + "value": "internal" + }, + { + "key": "http.headers", + "value": "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + } + ] + }' + /notification-senders/sms/{sender-name}: + get: + tags: + - SMS Senders + summary: Get a SMS sender by name + description: | + This API provides the capability to retrieve a SMS notification sender by name. + The URL encoded SMS sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + examples: + TwilioSMSProviderResponseExample: + $ref: '#/components/examples/TwilioSMSProviderResponseExample' + VonageSMSProviderResponseExample: + $ref: '#/components/examples/VonageSMSProviderResponseExample' + CustomSMSProviderResponseExample: + $ref: '#/components/examples/CustomSMSProviderResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - SMS Senders + summary: Update a SMS sender + description: | + This API provides the capability to update a SMS Sender. + The URL encoded SMS sender name is used as sender-name.
+ + + Scope(Permission) required: `internal_org_notification_senders_update` + operationId: updateSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSenderUpdateRequest' + examples: + TwilioSMSProviderRequestExample: + $ref: '#/components/examples/TwilioSMSProviderRequestExample' + VonageSMSProviderRequestExample: + $ref: '#/components/examples/VonageSMSProviderRequestExample' + CustomSMSProviderRequestExample: + $ref: '#/components/examples/CustomSMSProviderRequestExample' + required: true + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + examples: + TwilioSMSProviderResponseExample: + $ref: '#/components/examples/TwilioSMSProviderResponseExample' + VonageSMSProviderResponseExample: + $ref: '#/components/examples/VonageSMSProviderResponseExample' + CustomSMSProviderResponseExample: + $ref: '#/components/examples/CustomSMSProviderResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "NEXMO", + "providerURL": "https://rest.nexmo.com/sms/json", + "key": "123**45", + "secret": "5tg**ssd", + "sender": "+94 775563324", + "type": "json", + "properties": [ + { + "key": "body.scope", + "value": "internal" + }, + { + "key": "http.headers", + "value": "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + } + ] + }' + delete: + tags: + - SMS Senders + summary: Delete a SMS sender by name + description: | + This API provides the capability to delete a SMS sender by name. + The URL encoded SMS sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_delete` + operationId: deleteSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /notification-senders/push: + get: + tags: + - Push Senders + summary: Get a list of push notification senders + description: | + This API provides the capability to retrieve the list of push notification senders.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getPushSenders + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushProviderList' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/push' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Push Senders + summary: Create a push notification sender + description: | + This API provides the capability to create a push notification sender. + If the 'name' is not defined, 'PushPublisher' is taken as the default name.
+ + Scope(Permission) required: `internal_org_notification_senders_create` + operationId: createSMSSender + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PushSenderAdd' + example: + provider: FCM + properties: + - key: serviceAccountContent + value: "base64EncodedServiceAccountJsonString" + responses: + "201": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/push' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "FCM", + "properties": [ + { + "key": "serviceAccountContent", + "value": "base64EncodedServiceAccountJsonString" + } + ] + }' + /notification-senders/push/{sender-name}: + get: + tags: + - Push Senders + summary: Get a push sender by name + description: | + This API provides the capability to retrieve a push notification sender by name. + The URL encoded push sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getPushSender + parameters: + - name: sender-name + in: path + description: name of the push sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/push/{push-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Push Senders + summary: Update a push notification sender + description: | + This API provides the capability to update a push notification sender. + The URL encoded push notification sender name is used as sender-name.
+ + + Scope(Permission) required: `internal_org_notification_senders_update` + operationId: updatePushSender + parameters: + - name: sender-name + in: path + description: name of the push notification sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PushSenderUpdateRequest' + example: + provider: FCM + properties: + - key: serviceAccountContent + value: "base64EncodedServiceAccountJsonString" + required: true + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/push/{push-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "FCM", + "properties": [ + { + "key": "serviceAccountContent", + "value": "base64EncodedServiceAccountJsonString" + } + ] + }' + delete: + tags: + - Push Senders + summary: Delete a push notification sender by name + description: | + This API provides the capability to delete a push notification sender by name. + The URL encoded push notification sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_delete` + operationId: deletePushSender + parameters: + - name: sender-name + in: path + description: name of the push notification sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/notification-senders/push/{push-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Error: + type: object + properties: + code: + type: string + example: NSM-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + SMTPBasedEmailSenderAdd: + type: object + properties: + name: + type: string + provider: + type: string + example: SMTP + smtpServerHost: + type: string + smtpPort: + type: integer + fromAddress: + type: string + example: iam@gmail.com + authType: + type: string + example: CLIENT_CREDENTIAL + properties: + type: array + example: + - key: body.scope + value: "true" + - key: mail.smtp.starttls.enable + value: true + - key: clientId + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: clientSecret + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: tokenEndpoint + value: "https://login.microsoftonline.com/da76d684-740f-4d94-8717-9d5fb21dd1f9/oauth2/v2.0/token" + - key: scopes + value: "https://graph.microsoft.com/.default" + items: + $ref: '#/components/schemas/Properties' + HTTPBasedEmailSenderAdd: + type: object + properties: + name: + type: string + provider: + type: string + example: HTTP + providerURL: + type: string + example: https://custom.email.provider/send + authType: + type: string + example: BASIC + properties: + type: array + example: + - key: http.client.method + value: POST + - key: contentType + value: JSON + - key: http.headers + value: "X-Version: 1, Header1: value1" + - key: body + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: clientId + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: clientSecret + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: tokenEndpoint + value: "https://login.microsoftonline.com/da76d684-740f-4d94-8717-9d5fb21dd1f9/oauth2/v2.0/token" + - key: scopes + value: "https://graph.microsoft.com/.default" + items: + $ref: '#/components/schemas/Properties' + SMSSenderAdd: + required: + - provider + - contentType + type: object + properties: + name: + type: string + example: SMSPublisher + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + authentication: + $ref: '#/components/schemas/Authentication' + sender: + type: string + example: +94 775563324 + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSenderAdd: + required: + - provider + - properties + type: object + properties: + name: + type: string + example: PushPublisher + provider: + type: string + example: fcm + properties: + type: array + example: + - key: fcm.serviceAccount + value: jsonString + - key: aws.keyId + value: sampleKeyId + items: + $ref: '#/components/schemas/Properties' + EmailSender: + required: + - name + type: object + properties: + name: + type: string + example: EmailPublisher + provider: + type: string + example: SMTP + providerURL: + type: string + example: https://custom.email.provider/send + smtpServerHost: + type: string + example: smtp.gmail.com + smtpPort: + type: integer + example: 587 + fromAddress: + type: string + example: iam@gmail.com + authType: + type: string + example: BASIC + properties: + type: array + example: + - key: mail.smtp.starttls.enable + value: true + items: + $ref: '#/components/schemas/Properties' + SMSSender: + required: + - providerURL + - name + - provider + - contentType + type: object + properties: + name: + type: string + example: SMSPublisher + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + sender: + type: string + example: +94 775563324 + authentication: + $ref: '#/components/schemas/Authentication' + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSender: + required: + - provider + - name + properties: + name: + type: string + example: PushPublisher + provider: + type: string + example: fcm + properties: + type: array + example: + - key: fcm.serviceAccount + value: "jsonString" + - key: aws.keyId + value: "sampleKeyId" + items: + $ref: '#/components/schemas/Properties' + SMSSenderUpdateRequest: + required: + - provider + - contentType + type: object + properties: + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + authentication: + $ref: '#/components/schemas/Authentication' + sender: + type: string + example: +94 775563324 + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + SMTPBasedEmailSenderUpdate: + type: object + properties: + provider: + type: string + example: SMTP + smtpServerHost: + type: string + smtpPort: + type: integer + fromAddress: + type: string + example: iam@gmail.com + authType: + type: string + example: CLIENT_CREDENTIAL + properties: + type: array + example: + - key: body.scope + value: "true" + - key: mail.smtp.starttls.enable + value: true + - key: clientId + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: clientSecret + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: tokenEndpoint + value: "https://login.microsoftonline.com/da76d684-740f-4d94-8717-9d5fb21dd1f9/oauth2/v2.0/token" + - key: scopes + value: "https://graph.microsoft.com/.default" + items: + $ref: '#/components/schemas/Properties' + HTTPBasedEmailSenderUpdate: + type: object + properties: + provider: + type: string + example: HTTP + providerURL: + type: string + example: https://custom.email.provider/send + authType: + type: string + example: BASIC + properties: + type: array + example: + - key: http.client.method + value: POST + - key: contentType + value: JSON + - key: http.headers + value: "X-Version: 1, Header1: value1" + - key: body + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: clientId + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: clientSecret + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: tokenEndpoint + value: "https://login.microsoftonline.com/da76d684-740f-4d94-8717-9d5fb21dd1f9/oauth2/v2.0/token" + - key: scopes + value: "https://graph.microsoft.com/.default" + items: + $ref: '#/components/schemas/Properties' + PushSenderUpdateRequest: + required: + - provider + - properties + type: object + properties: + provider: + type: string + properties: + type: array + example: + - key: fcm.serviceAccount + value: "jsonString" + - key: aws.keyId + value: "sampleKeyId" + items: + $ref: '#/components/schemas/Properties' + Properties: + required: + - key + - value + type: object + properties: + key: + type: string + value: + type: string + example: + - key: email + value: iam@gmail.com + EmailProviderList: + type: array + items: + $ref: '#/components/schemas/EmailSender' + SMSProviderList: + type: array + items: + $ref: '#/components/schemas/SMSSender' + PushProviderList: + type: array + items: + $ref: '#/components/schemas/PushSender' + Schema: + type: object + properties: + id: + type: integer + format: int64 + Authentication: + type: object + description: > + The type of authentication required by the action's endpoint. The following options are supported: + + - CLIENT_CREDENTIAL: Client credential authentication.
+ ``{ + "type": "CLIENT_CREDENTIAL", + "properties": { + "clientId": "3e172dd2-901b-43a9-a26a-728466795f01", + "clientSecret": "83cdc120-ccf6-4163-a4a8-c1ba3e872daa", + "tokenEndpoint": "https://custom.sms.provider/auth/token", + "scopes": "send_scope" + } + }`` + - BASIC: Username and password based authentication.
+ ``{ + "type": "BASIC", + "properties": { + "username": "admin", + "password": "admin123" + } + }`` + - BEARER: Token based based authentication.
+ ``{ + "type": "BEARER", + "properties": { + "token": "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + } + }`` + - API_KEY: API key secret based authentication.
+ ``{ + "type": "API_KEY", + "properties": { + "header": "auth", + "value": "123ert45" + } + }`` + required: + - type + properties: + type: + type: string + enum: + - CLIENT_CREDENTIAL + - BASIC + - BEARER + - API_KEY + - NONE + example: CLIENT_CREDENTIAL + properties: + type: object + description: Authentication properties specific to the selected type. + additionalProperties: true + example: + type: CLIENT_CREDENTIAL + properties: + clientId: 3e172dd2-901b-43a9-a26a-728466795f01 + clientSecret: 83cdc120-ccf6-4163-a4a8-c1ba3e872daa + tokenEndpoint: https://custom.sms.provider/auth/token + scopes: send_scope + parameters: + typeQueryParam: + name: type + in: query + description: | + Type of authenticators. Can be either 'LOCAL' or 'REQUEST_PATH' + required: false + style: form + explode: true + schema: + type: string + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{root-organization-name}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{root-organization-name}/oauth2/token + scopes: {} + examples: + SMTPBasedEmailSenderClientCredentialPOSTRequestExample: + summary: "Post request for SMTP based email providers with client credential authentication" + value: + name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "clientId" + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: "clientSecret" + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: "tokenEndpoint" + value: "https://login.microsoftonline.com/da84-740f-9d5ff9/oauth2/token" + - key: "scopes" + value: "https://graph.microsoft.com/.default" + SMTPBasedEmailSenderBasicAuthWithAuthTypePOSTRequestExample: + summary: "Post request for SMTP based email providers with basic authentication" + value: + name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "BASIC" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "userName" + value: "iam" + - key: "password" + value: "iam123" + HTTPBasedEmailSenderWithBasicAuthTypePOSTRequestExample: + summary: "Post request for HTTP based email providers with basic authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BASIC" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "userName" + value: "iam" + - key: "password" + value: "iam123" + HTTPBasedEmailSenderWithClientCredentialAuthTypePOSTRequestExample: + summary: "Post request for HTTP based email providers with client credential authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "clientId" + value: "client-id-123" + - key: "clientSecret" + value: "client-secret-abc" + - key: "tokenEndpoint" + value: "https://example.com/oauth2/token" + - key: "scopes" + value: "send_scope" + HTTPBasedEmailSenderWithBearerTokenAuthTypePOSTRequestExample: + summary: "Post request for HTTP based email providers with bearer token authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BEARER" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "accessToken" + value: "bearer-token" + HTTPBasedEmailSenderWithAPIKeyAuthTypePOSTRequestExample: + summary: "Post request for HTTP based email providers with API key authentication" + value: + name: "EmailPublisher" + providerURL: "https://api.example.com/api/v1" + authType: "API_KEY" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "apiKeyHeader" + value: "API-Key-Header" + - key: "apiKeyValue" + value: "api-key-value" + HTTPBasedEmailSenderWithNoneAuthTypePOSTRequestExample: + summary: "Post request for HTTP based email providers with no authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "NONE" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + SMTPBasedEmailSenderClientCredentialPUTRequestExample: + summary: "Put request for SMTP based email providers with client credential authentication" + value: + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "clientId" + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: "clientSecret" + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: "tokenEndpoint" + value: "https://login.microsoftonline.com/da84-740f-9d5ff9/oauth2/token" + - key: "scopes" + value: "https://graph.microsoft.com/.default" + SMTPBasedEmailSenderBasicAuthWithAuthTypePUTRequestExample: + summary: "Put request for SMTP based email providers with basic authentication" + value: + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "BASIC" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "userName" + value: "iam" + - key: "password" + value: "iam123" + HTTPBasedEmailSenderWithBasicAuthTypePUTRequestExample: + summary: "Put request for HTTP based email providers with basic authentication" + value: + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BASIC" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "userName" + value: "iam" + - key: "password" + value: "iam123" + HTTPBasedEmailSenderWithClientCredentialAuthTypePUTRequestExample: + summary: "Put request for HTTP based email providers with client credential authentication" + value: + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "clientId" + value: "client-id-123" + - key: "clientSecret" + value: "client-secret-abc" + - key: "tokenEndpoint" + value: "https://example.com/oauth2/token" + - key: "scopes" + value: "send_scope" + HTTPBasedEmailSenderWithBearerTokenAuthTypePUTRequestExample: + summary: "Put request for HTTP based email providers with bearer token authentication" + value: + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BEARER" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "accessToken" + value: "bearer-token" + HTTPBasedEmailSenderWithAPIKeyAuthTypePUTRequestExample: + summary: "Put request for HTTP based email providers with API key authentication" + value: + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "API_KEY" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "apiKeyHeader" + value: "API-Key-Header" + - key: "apiKeyValue" + value: "api-key-value" + HTTPBasedEmailSenderWithNoneAuthTypePUTRequestExample: + summary: "Put request for HTTP based email providers with no authentication" + value: + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "NONE" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + SMTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample: + summary: "Response for SMTP based email providers with client credential authentication" + value: + name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "clientId" + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: "tokenEndpoint" + value: "https://login.microsoftonline.com/da84-740f-9d5ff9/oauth2/token" + - key: "scopes" + value: "https://graph.microsoft.com/.default" + SMTPBasedEmailSenderWithBasicAuthTypeResponseExample: + summary: "Response for SMTP based email providers with basic authentication" + value: + name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "BASIC" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "userName" + value: "iam" + HTTPBasedEmailSenderWithBasicAuthTypeResponseExample: + summary: "Response for HTTP based email providers with basic authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BASIC" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "userName" + value: "iam" + HTTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample: + summary: "Response for HTTP based email providers with client credential authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "clientId" + value: "client-id-123" + - key: "tokenEndpoint" + value: "https://example.com/oauth2/token" + - key: "scopes" + value: "send_scope" + HTTPBasedEmailSenderWithBearerTokenAuthTypeResponseExample: + summary: "Response for HTTP based email providers with bearer token authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BEARER" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + HTTPBasedEmailSenderWithAPIKeyAuthTypeResponseExample: + summary: "Response for HTTP based email providers with API key authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "API_KEY" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "apiKeyHeader" + value: "API-Key-Header" + HTTPBasedEmailSenderWithNoneAuthTypeResponseExample: + summary: "Response for HTTP based email providers with no authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "NONE" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + SMTPBasedEmailSenderWithBasicAuthTypeListResponseExample: + summary: "List response containing an SMTP-based email provider with basic authentication" + value: + - name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "BASIC" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "userName" + value: "iam" + SMTPBasedEmailSenderWithClientCredentialAuthTypeListResponseExample: + summary: "List response containing an SMTP-based email provider with client credential authentication" + value: + - name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "clientId" + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: "tokenEndpoint" + value: "https://login.microsoftonline.com/da84-740f-9d5ff9/oauth2/token" + - key: "scopes" + value: "https://graph.microsoft.com/.default" + HTTPBasedEmailSenderWithBasicAuthTypeListResponseExample: + summary: "List response containing an HTTP-based email provider with basic authentication" + value: + - name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BASIC" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "userName" + value: "iam" + HTTPBasedEmailSenderWithClientCredentialAuthTypeListResponseExample: + summary: "List response containing an HTTP-based email provider with client credential authentication" + value: + - name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "clientId" + value: "client-id-123" + - key: "tokenEndpoint" + value: "https://example.com/oauth2/token" + - key: "scopes" + value: "send_scope" + HTTPBasedEmailSenderWithBearerTokenAuthTypeListResponseExample: + summary: "List response containing an HTTP-based email provider with bearer token authentication" + value: + - name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BEARER" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "accessToken" + value: "bearer-token" + HTTPBasedEmailSenderWithAPIKeyAuthTypeListResponseExample: + summary: "List response containing an HTTP-based email provider with API key authentication" + value: + - name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "API_KEY" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "apiKeyHeader" + value: "API-Key-Header" + - key: "apiKeyValue" + value: "api-key-value" + HTTPBasedEmailSenderWithNoneAuthTypeListResponseExample: + summary: "List response containing an HTTP-based email provider with no authentication" + value: + - name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "NONE" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + TwilioSMSProviderRequestExample: + summary: Post and PUT request for Twilio SMS Provider + value: + provider: Twilio + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: BASIC + properties: + username: "123ert45" + password: "5tg-rts-ssd" + VonageSMSProviderRequestExample: + summary: Post and PUT request for Vonage SMS Provider + value: + provider: Vonage + sender: +94 775563324 + type: json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: BASIC + properties: + username: "123ert45" + password: "5tg-rts-ssd" + CustomSMSProviderRequestExample: + summary: Post and PUT request for Custom SMS Provider + value: + provider: Custom + sender: +94 775563324 + type: json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: CLIENT_CREDENTIAL + properties: + clientId: 3e172dd2-901b-43a9-a26a-728466795f01 + clientSecret: 83cdc120-ccf6-4163-a4a8-c1ba3e872daa + tokenEndpoint: https://custom.sms.provider/auth/token + scopes: send_scope + TwilioSMSProviderResponseExample: + summary: Response for Twilio SMS Provider + value: + name: SMSPublisher + provider: Twilio + key: 123ert45 + secret: 5tg-rts-ssd + sender: +94 775563324 + type: json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: BASIC + properties: + username: "123ert45" + password: "5tg-rts-ssd" + VonageSMSProviderResponseExample: + summary: Response for Vonage SMS Provider + value: + name: SMSPublisher + provider: Vonage + key: 123ert45 + secret: 5tg-rts-ssd + sender: +94 775563324 + type: json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: BASIC + properties: + username: "123ert45" + password: "5tg-rts-ssd" + CustomSMSProviderResponseExample: + summary: Response for Custom SMS Provider + description: This document specifies a **RESTful API** for **WSO2 Identity Server Notification Senders** + value: + name: SMSPublisher + provider: Custom + key: "" + secret: "" + sender: +94 775563324 + type: json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: CLIENT_CREDENTIAL + properties: + clientId: 3e172dd2-901b-43a9-a26a-728466795f01 + clientSecret: 83cdc120-ccf6-4163-a4a8-c1ba3e872daa + tokenEndpoint: https://custom.sms.provider/auth/token + scopes: send_scope + SMSProvidersListResponseExample: + summary: Response for list of SMS Provider + value: + - name: SMSPublisher + provider: Custom + key: "" + secret: "" + sender: +94 775563324 + type: json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: CLIENT_CREDENTIAL + properties: + clientId: 3e172dd2-901b-43a9-a26a-728466795f01 + clientSecret: 83cdc120-ccf6-4163-a4a8-c1ba3e872daa + tokenEndpoint: https://custom.sms.provider/auth/token + scopes: send_scope diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/notification-senders.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/notification-senders.yaml new file mode 100644 index 0000000000..20a6a6264b --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/notification-senders.yaml @@ -0,0 +1,1363 @@ +openapi: 3.0.0 +info: + title: Notification Senders API + description: This document specifies **Email, SMS and Push notification sender RESTful API** for **Asgardeo** organizations. + To access the notification sender organization APIs in Asgardeo, you need to first get an access token from your organization. + version: "v1" +servers: + - url: https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1 + variables: + serverUrl: + default: https://api.asgardeo.io/t/{root-organization-name}/o/ + root-organization-name: + default: "{root-organization-name}" +security: + - OAuth2: [] +paths: + /notification-senders/email: + get: + tags: + - Email Senders + summary: Get a list of email senders + description: | + This API provides the capability to retrieve the list of email senders.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getEmailSenders + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailProviderList' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/email' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Email Senders + summary: Create an email sender + description: | + This API provides the capability to create an email sender.\n\nIf the 'name' is not defined, 'EmailPublisher' is taken as the default name.
+ + Scope(Permission) required: `internal_org_notification_senders_create` + operationId: createEmailSender + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSenderAdd' + example: + fromAddress: iam@gmail.com + userName: iam + password: iam123 + properties: + - key: mail.smtp.starttls.enable + value: true + responses: + "201": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/email' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "fromAddress": "iam@gmail.com", + "userName": "iam", + "password": "iam123", + "properties": [ + { + "key": "mail.smtp.starttls.enable", + "value": true + } + ] + }' + /notification-senders/email/{sender-name}: + get: + tags: + - Email Senders + summary: Retrieve an email sender by name + description: | + This API provides the capability to retrieve an email sender by name. + The URL encoded email sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/email/{email-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Email Senders + summary: Update an email sender + description: | + This API provides the capability to update an email sender by name. + The URL encoded email sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_update` + operationId: updateEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSenderUpdateRequest' + example: + fromAddress: iam@gmail.com + userName: iam + password: iam123 + properties: + - key: mail.smtp.starttls.enable + value: true + required: true + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/email/{email-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "fromAddress": "iam@gmail.com", + "userName": "iam", + "password": "iam123", + "properties": [ + { + "key": "mail.smtp.starttls.enable", + "value": true + } + ] + }' + delete: + tags: + - Email Senders + summary: Delete an email sender by name + description: | + This API provides the capability to delete an email sender by name. + The URL encoded email sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_delete` + operationId: deleteEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/email/{email-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /notification-senders/sms: + get: + tags: + - SMS Senders + summary: Get a list of SMS senders + description: | + This API provides the capability to retrieve a list of SMS notification senders.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getSMSSenders + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSProviderList' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/sms' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - SMS Senders + summary: Create a SMS sender + description: | + This API provides the capability to create a SMS sender. + If the 'name' is not defined, 'SMSPublisher' is taken as the default name.
+ + Scope(Permission) required: `internal_org_notification_senders_create` + operationId: createSMSSender + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSenderAdd' + example: + provider: NEXMO + providerURL: https://rest.nexmo.com/sms/json + key: 123**45 + secret: 5tg**ssd + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + responses: + "201": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/sms' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "NEXMO", + "providerURL": "https://rest.nexmo.com/sms/json", + "key": "123**45", + "secret": "5tg**ssd", + "sender": "+94 775563324", + "type": "json", + "properties": [ + { + "key": "body.scope", + "value": "internal" + }, + { + "key": "http.headers", + "value": "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + } + ] + }' + /notification-senders/sms/{sender-name}: + get: + tags: + - SMS Senders + summary: Get a SMS sender by name + description: | + This API provides the capability to retrieve a SMS notification sender by name. + The URL encoded SMS sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - SMS Senders + summary: Update a SMS sender + description: | + This API provides the capability to update a SMS Sender. + The URL encoded SMS sender name is used as sender-name.
+ + + Scope(Permission) required: `internal_org_notification_senders_update` + operationId: updateSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSenderUpdateRequest' + example: + provider: NEXMO + providerURL: https://rest.nexmo.com/sms/json + key: 123**45 + secret: 5tg**ssd + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + required: true + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "NEXMO", + "providerURL": "https://rest.nexmo.com/sms/json", + "key": "123**45", + "secret": "5tg**ssd", + "sender": "+94 775563324", + "type": "json", + "properties": [ + { + "key": "body.scope", + "value": "internal" + }, + { + "key": "http.headers", + "value": "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + } + ] + }' + delete: + tags: + - SMS Senders + summary: Delete a SMS sender by name + description: | + This API provides the capability to delete a SMS sender by name. + The URL encoded SMS sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_delete` + operationId: deleteSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /notification-senders/push: + get: + tags: + - Push Senders + summary: Get a list of push notification senders + description: | + This API provides the capability to retrieve the list of push notification senders.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getPushSenders + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushProviderList' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/push' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Push Senders + summary: Create a push notification sender + description: | + This API provides the capability to create a push notification sender. + If the 'name' is not defined, 'PushPublisher' is taken as the default name.
+ + Scope(Permission) required: `internal_org_notification_senders_create` + operationId: createSMSSender + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PushSenderAdd' + example: + provider: FCM + properties: + - key: serviceAccountContent + value: "base64EncodedServiceAccountJsonString" + responses: + "201": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/push' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "FCM", + "properties": [ + { + "key": "serviceAccountContent", + "value": "base64EncodedServiceAccountJsonString" + } + ] + }' + /notification-senders/push/{sender-name}: + get: + tags: + - Push Senders + summary: Get a push sender by name + description: | + This API provides the capability to retrieve a push notification sender by name. + The URL encoded push sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_view` + operationId: getPushSender + parameters: + - name: sender-name + in: path + description: name of the push sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/push/{push-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Push Senders + summary: Update a push notification sender + description: | + This API provides the capability to update a push notification sender. + The URL encoded push notification sender name is used as sender-name.
+ + + Scope(Permission) required: `internal_org_notification_senders_update` + operationId: updatePushSender + parameters: + - name: sender-name + in: path + description: name of the push notification sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PushSenderUpdateRequest' + example: + provider: FCM + properties: + - key: serviceAccountContent + value: "base64EncodedServiceAccountJsonString" + required: true + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/push/{push-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "FCM", + "properties": [ + { + "key": "serviceAccountContent", + "value": "base64EncodedServiceAccountJsonString" + } + ] + }' + delete: + tags: + - Push Senders + summary: Delete a push notification sender by name + description: | + This API provides the capability to delete a push notification sender by name. + The URL encoded push notification sender name is used as sender-name.
+ + Scope(Permission) required: `internal_org_notification_senders_delete` + operationId: deletePushSender + parameters: + - name: sender-name + in: path + description: name of the push notification sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/notification-senders/push/{push-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Error: + type: object + properties: + code: + type: string + example: NSM-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + EmailSenderAdd: + required: + - fromAddress + type: object + properties: + name: + type: string + smtpServerHost: + type: string + smtpPort: + type: integer + fromAddress: + type: string + example: iam@gmail.com + userName: + type: string + example: iam + password: + type: string + example: iam123 + properties: + type: array + example: + - key: body.scope + value: "true" + - key: mail.smtp.starttls.enable + value: true + items: + $ref: '#/components/schemas/Properties' + SMSSenderAdd: + required: + - providerURL + - provider + - contentType + type: object + properties: + name: + type: string + example: SMSPublisher + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + sender: + type: string + example: +94 775563324 + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSenderAdd: + required: + - provider + - properties + type: object + properties: + name: + type: string + example: PushPublisher + provider: + type: string + example: fcm + properties: + type: array + example: + - key: fcm.serviceAccount + value: jsonString + items: + $ref: '#/components/schemas/Properties' + EmailSender: + required: + - fromAddress + - name + type: object + properties: + name: + type: string + example: EmailPublisher + smtpServerHost: + type: string + example: smtp.gmail.com + smtpPort: + type: integer + example: 587 + fromAddress: + type: string + example: iam@gmail.com + userName: + type: string + example: iam + password: + type: string + example: iam123 + properties: + type: array + example: + - key: mail.smtp.starttls.enable + value: true + items: + $ref: '#/components/schemas/Properties' + SMSSender: + required: + - providerURL + - name + - provider + - contentType + type: object + properties: + name: + type: string + example: SMSPublisher + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + sender: + type: string + example: +94 775563324 + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSender: + required: + - provider + - name + properties: + name: + type: string + example: PushPublisher + provider: + type: string + example: fcm + properties: + type: array + example: + - key: fcm.serviceAccount + value: "jsonString" + items: + $ref: '#/components/schemas/Properties' + EmailSenderUpdateRequest: + required: + - fromAddress + type: object + properties: + smtpServerHost: + type: string + example: smtp.gmail.com + smtpPort: + type: integer + example: 587 + fromAddress: + type: string + example: iam@gmail.com + userName: + type: string + example: iam + password: + type: string + example: iam123 + properties: + type: array + example: + - key: body.scope + value: "true" + - key: mail.smtp.starttls.enable + value: true + items: + $ref: '#/components/schemas/Properties' + SMSSenderUpdateRequest: + required: + - providerURL + - provider + - contentType + type: object + properties: + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + sender: + type: string + example: +94 775563324 + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSenderUpdateRequest: + required: + - provider + - properties + type: object + properties: + provider: + type: string + properties: + type: array + example: + - key: fcm.serviceAccount + value: "jsonString" + items: + $ref: '#/components/schemas/Properties' + Properties: + required: + - key + - value + type: object + properties: + key: + type: string + value: + type: string + example: + - key: email + value: iam@gmail.com + EmailProviderList: + type: array + items: + $ref: '#/components/schemas/EmailSender' + SMSProviderList: + type: array + items: + $ref: '#/components/schemas/SMSSender' + PushProviderList: + type: array + items: + $ref: '#/components/schemas/PushSender' + parameters: + typeQueryParam: + name: type + in: query + description: | + Type of authenticators. Can be either 'LOCAL' or 'REQUEST_PATH' + required: false + style: form + explode: true + schema: + type: string + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{root-organization-name}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{root-organization-name}/oauth2/token + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-application-mgt.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-application-mgt.yaml new file mode 100644 index 0000000000..ba030ebb94 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-application-mgt.yaml @@ -0,0 +1,2569 @@ +openapi: 3.0.0 +info: + description: > + This document explains the RESTful API for application management of organizations in Asgardeo. + version: "v1" + title: Asgardeo - Application Management Rest API +security: + - OAuth2: [] +paths: + /applications: + get: + tags: + - Applications + operationId: getAllApplications + summary: | + List applications. + description: | + This API provides the capability to retrieve the list of applications in the organization. + Response will contain both the shared applications and the applications registered directly + at the organization.
+ Scope(Permission) required: `internal_org_application_mgt_view` + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/sortOrderQueryParam' + - $ref: '#/components/parameters/sortByQueryParam' + - $ref: '#/components/parameters/attributesQueryParam' + - $ref: '#/components/parameters/excludeSystemPortalsQueryParam' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications?limit=30&offset=0' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Applications + summary: | + Add application. + operationId: createApplication + description: > + This API provides the capability to store the application information that is provided by users. + In the organization only the OAuth2 applications can be created with limited number of configurations + which will facilitate to access the APIs in the organization.
+ Scope(Permission) required: `internal_org_application_mgt_create` + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationModel' + description: This represents the application to be created. + required: true + responses: + '201': + description: Successful response. + headers: + Location: + description: This denotes the location of the newly-created application. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "name": "pickup", + "description": "This is the configuration for Pickup application.", + "imageUrl": "https://example.com/logo/my-logo.png", + "claimConfiguration": { + "dialect": "LOCAL", + "claimMappings": [ + { + "applicationClaim": "firstname", + "localClaim": { + "uri": "http://wso2.org/claims/username" + } + } + ], + "requestedClaims": [ + { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "mandatory": false + } + ], + "subject": { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "includeUserDomain": false, + "includeTenantDomain": false, + "useMappedLocalSubject": false + } + }, + "inboundProtocolConfiguration": { + "oidc": { + "clientId": "string", + "clientSecret": "string", + "grantTypes": [ + "client_credentials", + "password" + ], + "publicClient": false, + "accessToken": { + "type": "JWT", + "userAccessTokenExpiryInSeconds": 3600, + "applicationAccessTokenExpiryInSeconds": 3600, + "bindingType": "cookie", + "revokeTokensWhenIDPSessionTerminated": true, + "validateTokenBinding": true + }, + "refreshToken": { + "expiryInSeconds": 86400, + "renewRefreshToken": true + }, + "idToken": { + "expiryInSeconds": 3600, + "audience": [ + "http://idp.xyz.com", + "http://idp.abc.com" + ], + "encryption": { + "enabled": false, + "algorithm": "RSA-OAEP", + "method": "A128CBC+HS256" + } + }, + "scopeValidators": [ + "Role based scope validator", + "XACML Scope Validator" + ] + } + } + }' + /applications/{applicationId}: + get: + tags: + - Applications + summary: | + Retrieve application by ID. + operationId: getApplication + description: > + This API provides the capability to retrieve the application information by ID.
+ Scope(Permission) required: `internal_org_application_mgt_view` + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationResponseModel' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Applications + summary: | + Partially update application by ID. + operationId: patchApplication + description: | + This API provides the capability to partially update an application by ID.
+ Scope(Permission) required: `internal_org_application_mgt_update` + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationPatchModel' + description: This represents the application details to be updated. + required: true + responses: + '200': + description: Successfully Updated + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "name": "pickup", + "description": "This is the configuration for Pickup application.", + "imageUrl": "https://example.com/logo/my-logo.png", + "claimConfiguration": { + "dialect": "LOCAL", + "claimMappings": [ + { + "applicationClaim": "firstname", + "localClaim": { + "uri": "http://wso2.org/claims/username" + } + } + ], + "requestedClaims": [ + { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "mandatory": false + } + ], + "subject": { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "includeUserDomain": false, + "includeTenantDomain": false, + "useMappedLocalSubject": false + }, + "role": { + "mappings": [ + { + "localRole": "admin", + "applicationRole": "Administrator" + } + ], + "includeUserDomain": true, + "claim": { + "uri": "http://wso2.org/claims/username" + } + } + } + }' + delete: + tags: + - Applications + summary: | + Delete application by ID. + operationId: deleteApplication + description: | + This API provides the capability to delete an application by ID. + This operation will only be allowed for the applications which are registered + directly in the organization.
+ Scope(Permission) required: `internal_org_application_mgt_delete` + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '204': + description: Successfully Deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/authorized-apis: + get: + tags: + - Authorized APIs + summary: | + Get authorized APIs of the application. + operationId: getAuthorizedAPIs + description: | + This API provides the capability to retrieve all the authorized APIs of the application.
+ Scope(Permission) required: `internal_org_application_mgt_view` + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AuthorizedAPIResponse' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}/authorized-apis' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Authorized APIs + summary: | + Authorized an API to the application. + operationId: addAuthorizedAPI + description: | + This API provides the capability to authorized an API to the application. + + Scope(Permission) required: + - `internal_org_application_mgt_update` + + ➕ Additional Scopes + + To authorize organization APIs and business APIs, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Authorize organization API | `internal_org_application_internal_api_update` | + | Authorize business APIs | `internal_org_application_business_api_update` | + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AuthorizedAPICreationModel' + responses: + '201': + description: Created + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}/authorized-apis' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "id": "65b52595-9ca1-4539-aca2-56178643c58b", + "policyIdentifier": "RBAC", + "scopes": [ + "bookings:read" + ] + }' + x-codegen-request-body-name: body + /applications/{applicationId}/authorized-apis/{apiId}: + patch: + tags: + - Authorized APIs + summary: | + Update authorized API scopes. + operationId: patchAuthorizedAPI + description: | + This API provides the capability to update an authorized API of the application.
+ + Scope(Permission) required: + - `internal_org_application_mgt_update` + + ➕ Additional Scopes + + To update authorized organization APIs and business APIs, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Update authorized organization API | `internal_org_application_internal_api_update` | + | Update authorized business APIs | `internal_org_application_business_api_update` | + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + - name: apiId + in: path + description: ID of the API resource. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AuthorizedAPIPatchModel' + responses: + '200': + description: OK + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}/authorized-apis/{api-id}' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "addedScopes": [ + "bookings:write" + ], + "removedScopes": [ + "bookings:read" + ] + }' + x-codegen-request-body-name: body + delete: + tags: + - Authorized APIs + summary: | + Remove API authorization from the application. + operationId: deleteAuthorizedAPI + description: | + This API provides the capability to delete an authorized API of the application.
+ + Scope(Permission) required: + - `internal_org_application_mgt_update` + + ➕ Additional Scopes + + To remove authorized organization APIs and business APIs, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Remove authorized organization API | `internal_org_application_internal_api_update` | + | Remove authorized business APIs | `internal_org_application_business_api_update` | + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + - name: apiId + in: path + description: ID of the API resource. + required: true + schema: + type: string + responses: + '204': + description: No Content + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}/authorized-apis/{api-id}' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/inbound-protocols/: + get: + tags: + - Inbound Protocols + summary: | + Retrieve inbound protocol configurations. + operationId: getInboundAuthenticationConfigurations + description: > + This API provides the capability to retrieve authentication protocol configurations of an application.
+ Scope(Permission) required: `internal_org_application_mgt_view` + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/InboundProtocolsListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}/inbound-protocols/' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/inbound-protocols/oidc: + get: + tags: + - Inbound Protocols - OAuth / OIDC + summary: | + Retrieve OIDC authentication protocol parameters. + description: | + This API provides the capability to retrieve OIDC authentication protocol parameters of an application.
+ + Scope(Permission) required: + - `internal_org_application_mgt_view` + + ➕ Additional Scopes + + To view the client secret, you also need the following additional scope: + + | Action | Scope | + |---------|--------| + | View client secret | `internal_org_application_mgt_client_secret_view` | + operationId: getInboundOAuthConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/OpenIDConnectConfiguration' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}/inbound-protocols/oidc' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Inbound Protocols - OAuth / OIDC + summary: | + Update OIDC authentication protocol parameters. + description: > + This API provides the capability to store OIDC authentication protocol parameters of an application.
+ Scope(Permission) required: `internal_org_application_mgt_update` + operationId: updateInboundOAuthConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: Successful + '201': + description: Created + headers: + Location: + description: This is the location of the newly created OIDC Authentication Configuration. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}/inbound-protocols/oidc' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "clientId": "string", + "clientSecret": "string", + "grantTypes": [ + "client_credentials", + "password" + ], + "publicClient": false, + "accessToken": { + "type": "JWT", + "userAccessTokenExpiryInSeconds": 3600, + "applicationAccessTokenExpiryInSeconds": 3600, + "bindingType": "cookie", + "revokeTokensWhenIDPSessionTerminated": true, + "validateTokenBinding": true + }, + "refreshToken": { + "expiryInSeconds": 86400, + "renewRefreshToken": true + }, + "idToken": { + "expiryInSeconds": 3600, + "audience": [ + "http://idp.xyz.com", + "http://idp.abc.com" + ], + "encryption": { + "enabled": false, + "algorithm": "RSA-OAEP", + "method": "A128CBC+HS256" + } + }, + "scopeValidators": [ + "Role based scope validator", + "XACML Scope Validator" + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OpenIDConnectConfiguration' + description: >- + This represents the OIDC authentication protocol parameters of an + application. + required: true + delete: + tags: + - Inbound Protocols - OAuth / OIDC + summary: | + Delete OIDC authentication protocol parameters. + description: > + This API provides the capability to delete OIDC authentication protocol parameters of an application.
+ Scope(Permission) required: `internal_org_application_mgt_delete` + operationId: deleteInboundOAuthConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '204': + description: Delete Success + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}/inbound-protocols/oidc' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/inbound-protocols/oidc/regenerate-secret: + post: + tags: + - Inbound Protocols - OAuth / OIDC + summary: | + Regenerate the OAuth2/OIDC client secret. + description: | + This API regenerates the OAuth2/OIDC client secret.
+ + Scope(Permission) required: `internal_org_application_mgt_client_secret_create` + operationId: regenerateOAuthClientSecret + parameters: + - name: applicationId + in: path + description: ID of the application + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/OpenIDConnectConfiguration' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/{application-id}/inbound-protocols/oidc/regenerate-secret' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '' + /applications/meta/inbound-protocols: + get: + tags: + - Application Metadata + summary: | + Retrieve the list of inbound authentication protocols available. + description: > + This API provides the capability to retrieve the list of inbound authentication protocols available.
+ Scope(Permission) required: `internal_org_application_mgt_view` + operationId: getInboundProtocols + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AuthProtocolMetadata' + example: + - name: "saml" + displayName: "SAML2 Web SSO Configuration" + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/applications/meta/inbound-protocols?customOnly=true' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + parameters: + limitQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + minimum: 1 + default: 30 + limitWithoutDefaultQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + offsetQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + default: 0 + offsetWithoutDefaultQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + filterQueryParam: + in: query + name: filter + required: false + description: | + Condition to filter the retrieval of records. + Supports 'sw', 'co', 'ew', and 'eq' operations with 'and', 'or' logical operators. + Note that 'and' and 'or' operators in filters follow the general precedence of logical operators. + For example, A and B or C and D = (A and B) or (C and D)). + Currently supports only filtering based on the 'name', the 'clientId', and the 'issuer' attributes. + /applications?filter=name+eq+user_portal +
+ /applications?filter=name+co+prod+or+clientId+co+123 + schema: + type: string + sortOrderQueryParam: + in: query + name: sortOrder + required: false + description: | + Define the order in which the retrieved records should be sorted. + _This parameter is not supported yet._ + schema: + type: string + enum: + - ASC + - DESC + sortByQueryParam: + in: query + name: sortBy + required: false + description: | + Attribute by which the retrieved records should be sorted. + _This parameter is not supported yet._ + schema: + type: string + attributesQueryParam: + in: query + name: attributes + required: false + description: | + Specifies the required parameters in the response. + Only 'advancedConfigurations', 'templateId', 'templateVersion', 'clientId', 'issuer', + and 'associatedRoles.allowedAudience' attributes are currently supported. + /applications?attributes=advancedConfigurations,templateId,templateVersion,clientId,issuer, + associatedRoles.allowedAudience + schema: + type: string + excludeSystemPortalsQueryParam: + in: query + name: excludeSystemPortals + required: false + description: | + Specifies whether to include or exclude system portals in the response. + Default will be treated as false if parameter is not preset in the request. + /applications?excludeSystemPortals=true + schema: + type: boolean + exportSecretsQueryParam: + in: query + name: exportSecrets + required: false + description: | + Specifies whether to export secrets when exporting an application. + schema: + type: boolean + default: false + fileTypeHeaderParam: + in: header + name: Accept + required: false + description: | + Content type of the file. + schema: + type: string + default: application/xml + enum: + - application/json + - application/xml + - application/yaml + - application/x-yaml + - text/yaml + inboundProtocolsCustomOnly: + in: query + name: customOnly + required: false + description: | + Send only the custom inbound protocols. + schema: + type: boolean + example: true + default: false + templateIdPathParam: + in: path + name: template-id + required: true + description: | + Application template ID. This should be a valid locale. + schema: + type: string + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/authorize' + tokenUrl: 'http://api.asgardeo.io/t/{root-organization-name}/oauth2/token' + scopes: {} + schemas: + Link: + type: object + properties: + href: + type: string + example: "applications?offset=10&limit=10" + rel: + type: string + example: "next" + ApplicationListResponse: + type: object + properties: + totalResults: + type: integer + description: "Number of results that match the listing operation." + example: 1 + startIndex: + type: integer + description: "Index of the first element of the page, which will be equal to offset + 1." + example: 1 + count: + type: integer + description: "Number of elements in the returned page." + example: 10 + applications: + type: array + items: + $ref: '#/components/schemas/ApplicationListItem' + links: + type: array + items: + $ref: '#/components/schemas/Link' + ApplicationListItem: + type: object + properties: + id: + type: string + example: "85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + name: + type: string + example: "user-portal" + description: + type: string + example: Application representing user portal + applicationVersion: + type: string + example: "v1.0.0" + image: + type: string + example: 'https://example.com/logo/my-logo.png' + clientId: + type: string + example: 'SmrrDNXRYf1lMmDlnleeHTuXx_Ea' + realm: + type: string + example: 'PassiveSTSSampleApp' + access: + type: string + enum: + - READ + - WRITE + default: READ + self: + type: string + example: "t/{root-organization-name}/o/api/server/v1/applications/85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + associatedRoles: + type: object + $ref: '#/components/schemas/AssociatedRolesConfig' + applicationEnabled: + type: boolean + example: true + ApplicationModel: + type: object + required: + - name + properties: + id: + type: string + example: "394b8adcce24c64a8a09a0d80abf8c337bd253de" + readOnly: true + name: + type: string + example: pickup + description: + type: string + example: This is the configuration for Pickup application. + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + applicationEnabled: + default: true + type: boolean + example: true + description: Decides whether the application is enabled. + associatedRoles: + $ref: '#/components/schemas/AssociatedRolesConfig' + inboundProtocolConfiguration: + $ref: '#/components/schemas/InboundProtocols' + ApplicationResponseModel: + type: object + required: + - name + properties: + id: + type: string + example: "394b8adcce24c64a8a09a0d80abf8c337bd253de" + readOnly: true + name: + type: string + example: pickup + description: + type: string + example: This is the configuration for Pickup application. + applicationVersion: + type: string + example: "v1.0.0" + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + clientId: + type: string + example: 'SmrrDNXRYf1lMmDlnleeHTuXx_Ea' + isManagementApp: + type: boolean + example: false + description: Decides whether the application used to access System APIs + isB2BSelfServiceApp: + type: boolean + example: false + description: Decides whether the application used to for B2B self service + applicationEnabled: + type: boolean + example: true + description: Decides whether the application is enabled. + associatedRoles: + $ref: '#/components/schemas/AssociatedRolesConfig' + claimConfiguration: + $ref: '#/components/schemas/ClaimConfiguration' + inboundProtocols: + $ref: '#/components/schemas/InboundProtocolsListResponse' + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + access: + type: string + enum: + - READ + - WRITE + default: READ + ApplicationPatchModel: + type: object + properties: + name: + type: string + example: pickup + description: + type: string + example: This is the configuration for Pickup application. + applicationVersion: + type: string + example: "v1.0.0" + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + accessUrl: + type: string + example: 'https://example.com/login' + logoutReturnUrl: + type: string + example: 'https://example.com/app/logout' + templateId: + type: string + example: "adwefi2429asdfdf94444rraf44" + templateVersion: + type: string + example: "v1.0.1" + description: Version of the template used to create the application. + applicationEnabled: + type: boolean + example: true + description: Decides whether the application is enabled. + associatedRoles: + $ref: '#/components/schemas/AssociatedRolesConfig' + claimConfiguration: + $ref: '#/components/schemas/ClaimConfiguration' + authenticationSequence: + $ref: '#/components/schemas/AuthenticationSequence' + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + provisioningConfigurations: + $ref: '#/components/schemas/ProvisioningConfiguration' + ResidentApplication: + type: object + properties: + provisioningConfigurations: + $ref: '#/components/schemas/ProvisioningConfiguration' + ProvisioningConfiguration: + type: object + properties: + inboundProvisioning: + $ref: '#/components/schemas/InboundSCIMProvisioningConfiguration' + outboundProvisioningIdps: + type: array + items: + $ref: '#/components/schemas/OutboundProvisioningConfiguration' + InboundSCIMProvisioningConfiguration: + type: object + properties: + proxyMode: + type: boolean + example: false + provisioningUserstoreDomain: + type: string + example: PRIMARY + description: >- + This property becomes only applicable if the proxy-mode config is + set to false + OutboundProvisioningConfiguration: + type: object + properties: + idp: + type: string + example: Google + connector: + type: string + example: googleapps + blocking: + type: boolean + example: false + rules: + type: boolean + example: false + jit: + type: boolean + example: false + ConfiguredAuthenticatorsModal: + type: object + properties: + stepId: + type: integer + example: 1 + localAuthenticators: + type: array + items: + $ref: '#/components/schemas/ConfiguredAuthenticator' + federatedAuthenticators: + type: array + items: + $ref: '#/components/schemas/ConfiguredAuthenticator' + ConfiguredAuthenticator: + type: object + properties: + name: + type: string + example: sampleIdP + type: + type: string + example: SampleAuthenticator + AdvancedApplicationConfiguration: + type: object + properties: + saas: + type: boolean + example: false + description: Decides whether the application is accessible across tenants. + discoverableByEndUsers: + type: boolean + example: false + description: Decides whether the application is visible for end users. + certificate: + $ref: '#/components/schemas/Certificate' + skipLoginConsent: + type: boolean + example: false + description: Decides whether user consent needs to be skipped during login flows. + skipLogoutConsent: + type: boolean + example: false + description: Decides whether user consent needs to be skipped during logout flows. + useExternalConsentPage: + type: boolean + example: false + description: Decides whether users should be presented with an external consent page. + returnAuthenticatedIdpList: + type: boolean + example: false + description: Decides whether the list of authenticated identity providers need to be returned in the authentication response. + enableAuthorization: + type: boolean + description: Decides whether authorization policies needs to be engaged during authentication flows. + example: true + fragment: + type: boolean + description: Decides whether application is a fragment application. + example: false + enableAPIBasedAuthentication: + type: boolean + description: Decides whether API Based Authentication is enabled for this application. + example: false + attestationMetaData: + type: object + description: Decides the client attestation meta data for the application. + properties: + enableClientAttestation: + type: boolean + description: Decides whether client attestation enabled for this application. + example: false + androidPackageName: + type: string + description: Decides the android package name of the application. + example: "com.wso2.mobile.sample" + androidAttestationServiceCredentials: + type: object + description: Decides the credentials for the service account to access Google Play Integrity Service. + appleAppId: + type: string + description: Decides the apple app id which denotes {apple-teamId}.{bundleId}. + example: "APPLETEAMID.com.wso2.mobile.sample" + trustedAppConfiguration: + $ref: '#/components/schemas/TrustedAppConfiguration' + additionalSpProperties: + $ref: '#/components/schemas/AdditionalProperties' + AdditionalProperties: + type: array + description: Denotes additional properties of the application. It is only supported by getApplication and getAllApplications request. + items: + $ref: "#/components/schemas/AdditionalSpProperty" + AdditionalSpProperty: + type: object + required: + - name + - value + properties: + name: + type: string + example: "isInternalApp" + value: + type: string + example: "true" + displayName: + type: string + example: "Internal Application" + TrustedAppConfiguration: + type: object + description: Decides the trusted app configurations for the application. + properties: + isFIDOTrustedApp: + type: boolean + description: Decides whether the application is a FIDO trusted app. + example: false + isConsentGranted: + type: boolean + description: Decides whether consent is granted for the trusted app. + example: false + androidPackageName: + type: string + description: Decides the android package name for the application. + example: "com.wso2.mobile.sample" + androidThumbprints: + type: array + items: + type: string + example: + - "18:94:0A:DE:63:77:B6:84:43:1E:85:8F:03:CF:8A:14:87:9C:DE:DF:EA:7A:25:53:CD:53:5A:AF:C3:54:A5:56" + description: Decides the android thumbprints for the application. + appleAppId: + type: string + description: Decides the apple app id for the application. + example: "APPLETEAMID.com.org.mobile.sample" + Certificate: + type: object + properties: + type: + type: string + description: >- + Certificate type. This should be either JWKS or PEM. + value: + type: string + description: >- + Certificate value. If type is JWKS, value should be jwks URL. If + type is PEM, value should be the certificate in PEM format. + InboundProtocols: + type: object + properties: + oidc: + $ref: '#/components/schemas/OpenIDConnectConfiguration' + InboundProtocolsListResponse: + type: array + items: + $ref: '#/components/schemas/InboundProtocolListItem' + InboundProtocolListItem: + type: object + required: + - type + - name + - self + properties: + type: + type: string + example: "samlsso" + name: + type: string + example: "SAML2 Inbound" + self: + type: string + example: "/api/server/v1/applications/29048810-1447-4ea0-a348-30d15ab65fa3/inbound-protocols/saml" + ClaimConfiguration: + type: object + properties: + dialect: + type: string + enum: + - CUSTOM + - LOCAL + default: LOCAL + claimMappings: + type: array + items: + $ref: '#/components/schemas/ClaimMappings' + requestedClaims: + type: array + items: + $ref: '#/components/schemas/RequestedClaimConfiguration' + subject: + $ref: '#/components/schemas/SubjectConfig' + role: + $ref: '#/components/schemas/RoleConfig' + SubjectConfig: + type: object + properties: + claim: + $ref: '#/components/schemas/Claim' + includeUserDomain: + type: boolean + example: false + includeTenantDomain: + type: boolean + example: false + useMappedLocalSubject: + type: boolean + example: false + mappedLocalSubjectMandatory: + type: boolean + example: false + RoleConfig: + type: object + properties: + mappings: + type: array + items: + $ref: '#/components/schemas/RoleMapping' + includeUserDomain: + type: boolean + example: true + claim: + $ref: '#/components/schemas/Claim' + RoleMapping: + type: object + required: + - localRole + - applicationRole + properties: + localRole: + type: string + example: admin + applicationRole: + type: string + example: Administrator + AssociatedRolesConfig: + type: object + required: + - allowedAudience + properties: + allowedAudience: + type: string + example: "ORGANIZATION" + enum: + - ORGANIZATION + - APPLICATION + default: ORGANIZATION + roles: + type: array + items: + $ref: '#/components/schemas/Role' + Role: + type: object + required: + - id + properties: + id: + type: string + example: "bf5abd05-3667-4a2a-a6c2-2fb9f4d26e47" + name: + type: string + example: "RoleA" + RequestedClaimConfiguration: + type: object + required: + - claim + description: >- + User claims that need to be sent back to the application. If the + claim mappings are local, use local claim URIs. If the custom claim + mappings are configured, use the mapped application claim URI + properties: + claim: + $ref: '#/components/schemas/Claim' + mandatory: + type: boolean + example: false + ClaimMappings: + type: object + required: + - applicationClaim + - localClaim + properties: + applicationClaim: + type: string + description: "Claim URI received by the application" + example: firstname + localClaim: + $ref: '#/components/schemas/Claim' + Claim: + type: object + required: + - uri + properties: + id: + type: string + example: aHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VybmFtZQ + readOnly: true + uri: + type: string + example: 'http://wso2.org/claims/username' + displayName: + type: string + example: Username + readOnly: true + SAML2Configuration: + type: object + properties: + metadataFile: + type: string + example: 'Base64 encoded metadata file content' + metadataURL: + type: string + example: 'https://example.com/samlsso/meta' + manualConfiguration: + $ref: '#/components/schemas/SAML2ServiceProvider' + SingleSignOnProfile: + type: object + properties: + bindings: + type: array + items: + type: string + enum: + - HTTP_POST + - HTTP_REDIRECT + - ARTIFACT + enableSignatureValidationForArtifactBinding: + type: boolean + description: Enables Signature validation for SAML Artifact Binding. Applicable only if SAML Artifact binding is enabled through the bindings option. + default: false + attributeConsumingServiceIndex: + type: string + readOnly: true + enableIdpInitiatedSingleSignOn: + type: boolean + default: false + assertion: + $ref: '#/components/schemas/SAMLAssertionConfiguration' + SAMLAttributeProfile: + type: object + properties: + enabled: + type: boolean + default: false + alwaysIncludeAttributesInResponse: + type: boolean + default: false + SingleLogoutProfile: + type: object + properties: + enabled: + type: boolean + default: true + logoutRequestUrl: + type: string + description: Single logout request accepting endpoint + logoutResponseUrl: + type: string + description: Single logout response accepting endpoint + logoutMethod: + type: string + enum: + - BACKCHANNEL + - FRONTCHANNEL_HTTP_REDIRECT + - FRONTCHANNEL_HTTP_POST + idpInitiatedSingleLogout: + $ref: '#/components/schemas/IdpInitiatedSingleLogout' + IdpInitiatedSingleLogout: + type: object + properties: + enabled: + type: boolean + default: false + returnToUrls: + type: array + items: + type: string + SAMLAssertionConfiguration: + type: object + properties: + nameIdFormat: + type: string + default: 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified' + example: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress' + audiences: + type: array + description: Additional audience values to be added to the SAML Assertions + example: + - 'https://app.example.com/saml' + items: + type: string + recipients: + type: array + description: Additional recipient values to be added to the SAML Assertions + example: + - 'https://app.example.com/saml' + items: + type: string + digestAlgorithm: + type: string + default: "http://www.w3.org/2000/09/xmldsig#sha1" + example: "http://www.w3.org/2000/09/xmldsig#sha1" + encryption: + $ref: '#/components/schemas/AssertionEncryptionConfiguration' + AssertionEncryptionConfiguration: + type: object + properties: + enabled: + type: boolean + default: false + assertionEncryptionAlgorithm: + type: string + default: "http://www.w3.org/2001/04/xmlenc#aes256-cbc" + keyEncryptionAlgorithm: + type: string + default: "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" + SAMLRequestValidation: + type: object + properties: + enableSignatureValidation: + type: boolean + default: true + signatureValidationCertAlias: + type: string + SAMLResponseSigning: + type: object + properties: + enabled: + type: boolean + default: true + signingAlgorithm: + type: string + SAML2ServiceProvider: + type: object + required: + - issuer + - assertionConsumerUrls + properties: + issuer: + type: string + serviceProviderQualifier: + type: string + assertionConsumerUrls: + type: array + items: + type: string + minItems: 1 + defaultAssertionConsumerUrl: + type: string + description: "If not provided, the first assertion consumer URL on the assertionConsumerUrls will be picked as the default assertion consumer URL." + idpEntityIdAlias: + type: string + description: "Default value is the IdP Entity ID value specified in Resident IdP." + singleSignOnProfile: + $ref: '#/components/schemas/SingleSignOnProfile' + attributeProfile: + $ref: '#/components/schemas/SAMLAttributeProfile' + singleLogoutProfile: + $ref: '#/components/schemas/SingleLogoutProfile' + requestValidation: + $ref: '#/components/schemas/SAMLRequestValidation' + responseSigning: + $ref: '#/components/schemas/SAMLResponseSigning' + enableAssertionQueryProfile: + type: boolean + default: false + OpenIDConnectConfiguration: + type: object + required: + - grantTypes + properties: + clientId: + type: string + clientSecret: + type: string + state: + type: string + enum: + - ACTIVE + - REVOKED + readOnly: true + default: ACTIVE + grantTypes: + type: array + example: + - client_credentials + - password + items: + type: string + minItems: 1 + publicClient: + type: boolean + default: false + description: >- + Enabling this option will allow the client to authenticate without a + client secret. + example: false + accessToken: + $ref: '#/components/schemas/AccessTokenConfiguration' + refreshToken: + $ref: '#/components/schemas/RefreshTokenConfiguration' + idToken: + $ref: '#/components/schemas/IdTokenConfiguration' + scopeValidators: + type: array + example: + - Role based scope validator + - XACML Scope Validator + items: + type: string + clientAuthentication: + $ref: '#/components/schemas/ClientAuthenticationConfiguration' + subject: + $ref: '#/components/schemas/SubjectConfiguration' + isFAPIApplication: + type: boolean + default: false + description: Enabling this option will make the application FAPI conformant. + example: false + OAuth2PKCEConfiguration: + type: object + properties: + mandatory: + type: boolean + example: false + supportPlainTransformAlgorithm: + type: boolean + example: true + HybridFlowConfiguration: + type: object + properties: + enable: + type: boolean + example: true + responseType: + type: string + example: code id_token + AccessTokenConfiguration: + type: object + properties: + type: + type: string + example: JWT + userAccessTokenExpiryInSeconds: + type: integer + format: int64 + example: 3600 + applicationAccessTokenExpiryInSeconds: + type: integer + format: int64 + example: 3600 + bindingType: + type: string + description: "OAuth2 access token and refresh token can be bound to an external attribute during the token generation so that it can be optionally validated during the API invocation." + default: "None" + example: cookie + revokeTokensWhenIDPSessionTerminated: + type: boolean + description: "If enabled, when the IDP session is terminated, all the access tokens bound to the session will get revoked." + validateTokenBinding: + type: boolean + description: "If enabled, both access token and the token binding needs to be present for a successful API invocation." + accessTokenAttributes: + type: array + items: + type: string + enableJwtScopeAsArray: + type: boolean + description: "If enabled, the scope claim in JWT access tokens will be formatted as a JSON array instead of a space-separated string." + example: false + RefreshTokenConfiguration: + type: object + properties: + expiryInSeconds: + type: integer + format: int64 + example: 86400 + renewRefreshToken: + description: Decides whether the refresh token needs to be renewed during refresh grant flow. + type: boolean + example: true + SubjectTokenConfiguration: + type: object + properties: + enable: + type: boolean + description: "If enabled, subject token can be issued for token exchange grant type." + applicationSubjectTokenExpiryInSeconds: + type: integer + example: 3600 + IdTokenConfiguration: + type: object + properties: + expiryInSeconds: + type: integer + format: int64 + example: 3600 + audience: + type: array + example: + - 'http://idp.xyz.com' + - 'http://idp.abc.com' + items: + type: string + idTokenSignedResponseAlg: + type: string + example: 'PS256' + encryption: + $ref: '#/components/schemas/IdTokenEncryptionConfiguration' + IdTokenEncryptionConfiguration: + type: object + properties: + enabled: + type: boolean + default: false + example: false + algorithm: + type: string + example: RSA-OAEP + method: + type: string + example: A128CBC+HS256 + ClientAuthenticationConfiguration: + type: object + properties: + tokenEndpointAuthMethod: + type: string + example: 'client_secret_basic' + tokenEndpointAllowReusePvtKeyJwt: + type: boolean + example: false + tokenEndpointAuthSigningAlg: + type: string + example: 'PS256' + tlsClientAuthSubjectDn: + type: string + example: 'CN=John Doe,OU=OrgUnit,O=Organization,L=Colombo,ST=Western,C=LK' + RequestObjectConfiguration: + type: object + properties: + requestObjectSigningAlg: + type: string + example: 'PS256' + encryption: + $ref: '#/components/schemas/RequestObjectEncryptionConfiguration' + RequestObjectEncryptionConfiguration: + type: object + properties: + algorithm: + type: string + example: RSA-OAEP + method: + type: string + example: A128CBC+HS256 + PushAuthorizationRequestConfiguration: + type: object + properties: + requirePushAuthorizationRequest: + type: boolean + example: false + SubjectConfiguration: + type: object + properties: + subjectType: + type: string + example: 'public' + sectorIdentifierUri: + type: string + example: 'https://app.example.com' + OIDCLogoutConfiguration: + type: object + properties: + backChannelLogoutUrl: + type: string + example: 'https://app.example.com/backchannel/callback' + frontChannelLogoutUrl: + type: string + example: 'https://app.example.com/frontchannel/callback' + AuthenticationSequence: + type: object + properties: + type: + type: string + description: " +
    +
  • DEFAULT type indicates that the application will use the default authentication sequence specified at the organization level. When the DEFAULT type is used, the information given in the other fields of the `AuthenticationSequence` will be ignored and overriden with values defined at the organization level.
  • +
  • USER_DEFINED type indicates that the application will use a user-defined authentication sequence.
  • +
" + enum: + - DEFAULT + - USER_DEFINED + default: DEFAULT + steps: + type: array + items: + $ref: '#/components/schemas/AuthenticationStepModel' + requestPathAuthenticators: + type: array + items: + type: string + script: + type: string + subjectStepId: + type: integer + default: 1 + example: 1 + attributeStepId: + type: integer + default: 1 + example: 1 + AuthenticationStepModel: + type: object + required: + - id + - options + properties: + id: + type: integer + minimum: 1 + example: 1 + options: + type: array + items: + $ref: '#/components/schemas/Authenticator' + minItems: 1 + Authenticator: + type: object + required: + - idp + - authenticator + properties: + idp: + type: string + example: LOCAL + authenticator: + type: string + example: basic + AuthProtocolMetadata: + type: object + properties: + name: + type: string + displayName: + type: string + MetadataProperty: + type: object + properties: + options: + type: array + items: + type: string + example: + - 'Option 1' + - 'Option 2' + defaultValue: + type: string + example: 'Option 1' + ClientAuthenticationMethodMetadata: + type: object + properties: + options: + type: array + items: + $ref: '#/components/schemas/ClientAuthenticationMethod' + FapiMetadata: + type: object + properties: + allowedSignatureAlgorithms: + $ref: '#/components/schemas/MetadataProperty' + allowedEncryptionAlgorithms: + $ref: '#/components/schemas/MetadataProperty' + tokenEndpointAuthMethod: + $ref: '#/components/schemas/ClientAuthenticationMethodMetadata' + ClientAuthenticationMethod: + type: object + properties: + name: + type: string + example: private_key_jwt + displayName: + type: string + example: Private Key JWT + GrantTypeMetaData: + type: object + properties: + options: + type: array + items: + $ref: '#/components/schemas/GrantType' + GrantType: + type: object + properties: + name: + type: string + example: authorization_code + displayName: + type: string + example: Code + SAMLMetaData: + type: object + properties: + defaultNameIdFormat: + type: string + example: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress' + certificateAlias: + $ref: '#/components/schemas/MetadataProperty' + responseSigningAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + responseDigestAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + assertionEncryptionAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + keyEncryptionAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + OIDCMetaData: + type: object + properties: + allowedGrantTypes: + $ref: '#/components/schemas/GrantTypeMetaData' + defaultUserAccessTokenExpiryTime: + type: string + example: '3600' + defaultApplicationAccessTokenExpiryTime: + type: string + example: '3600' + defaultRefreshTokenExpiryTime: + type: string + example: '86400' + defaultIdTokenExpiryTime: + type: string + example: '3600' + idTokenEncryptionAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + idTokenEncryptionMethod: + $ref: '#/components/schemas/MetadataProperty' + scopeValidators: + $ref: '#/components/schemas/MetadataProperty' + accessTokenType: + $ref: '#/components/schemas/MetadataProperty' + accessTokenBindingType: + $ref: '#/components/schemas/MetadataProperty' + tokenEndpointAuthMethod: + $ref: '#/components/schemas/ClientAuthenticationMethodMetadata' + tokenEndpointAllowReusePvtKeyJwt: + type: boolean + default: false + tokenEndpointSignatureAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + idTokenSignatureAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + requestObjectSignatureAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + requestObjectEncryptionAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + requestObjectEncryptionMethod: + $ref: '#/components/schemas/MetadataProperty' + subjectType: + $ref: '#/components/schemas/MetadataProperty' + fapiMetadata: + $ref: '#/components/schemas/FapiMetadata' + WSTrustMetaData: + type: object + properties: + certificateAlias: + $ref: '#/components/schemas/MetadataProperty' + CustomInboundProtocolMetaData: + type: object + properties: + displayName: + type: string + example: 'My Custom Protocol' + configName: + type: string + example: 'Custom Protocol' + properties: + type: array + items: + $ref: '#/components/schemas/CustomInboundProtocolProperty' + CustomInboundProtocolProperty: + type: object + properties: + name: + type: string + example: 'encryptionAlgorithm' + displayName: + type: string + example: 'Encryption Algorithm' + type: + type: string + enum: + - STRING + - BOOLEAN + - INTEGER + example: STRING + required: + type: boolean + example: true + availableValues: + type: array + items: + type: string + example: + - 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p' + - 'http://www.w3.org/2001/04/xmlenc#rsa-1_5' + defaultValue: + type: string + example: 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p' + validationRegex: + type: string + example: '^[a-b][A-B]*' + displayOrder: + type: integer + example: 1 + isConfidential: + type: boolean + default: false + AdaptiveAuthTemplates: + type: object + properties: + templatesJSON: + type: string + example: 'Adaptive Auth Templates JSON' + FileUpload: + type: object + properties: + file: + type: string + format: binary + description: file to upload + ApplicationTemplatesList: + type: object + properties: + templates: + type: array + items: + $ref: '#/components/schemas/ApplicationTemplatesListItem' + ApplicationTemplatesListItem: + type: object + properties: + id: + type: string + example: "85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + name: + type: string + example: "OIDC Protocol Template" + description: + type: string + example: "Template to be used for Single Page Applications" + image: + type: string + example: "https://example.com/logo/my-logo.png" + authenticationProtocol: + type: string + example: "oidc" + types: + type: array + items: + type: string + example: + - react + - angular + category: + type: string + enum: [DEFAULT, VENDOR] + example: 'DEFAULT' + displayOrder: + type: integer + example: 2 + templateGroup: + type: string + example: "web-application" + self: + type: string + example: "/t/wso2.com/api/server/v1/applications/templates/85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + ApplicationTemplateModel: + type: object + properties: + id: + type: string + readOnly: true + example: "85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + name: + type: string + example: "OIDC Protocol Template" + description: + type: string + example: "Template to be used for Single Page Applications" + image: + type: string + example: "https://example.com/logo/my-logo.png" + authenticationProtocol: + type: string + example: "oidc" + types: + type: array + items: + type: string + example: + - react + - angular + category: + type: string + enum: [DEFAULT, VENDOR] + example: 'DEFAULT' + templateGroup: + type: string + example: "web-application" + displayOrder: + type: integer + example: 2 + application: + $ref: '#/components/schemas/ApplicationModel' + required: + - name + - application + ApplicationOwner: + type: object + properties: + id: + type: string + example: "85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + required: + - id + AuthorizedAPIResponse: + type: object + properties: + id: + type: string + example: 65b52595-9ca1-4539-aca2-56178643c58b + identifier: + type: string + example: https://greetings.io/v1/greet + displayName: + type: string + example: Greetings API + policyId: + type: string + example: RBAC + type: + type: string + example: BUSINESS + authorizedScopes: + type: array + items: + $ref: '#/components/schemas/AuthorizedScope' + AuthorizedScope: + type: object + properties: + id: + type: string + example: 65b52595-9ca1-4539-aca2-56178643c58b + name: + type: string + example: bookings:read + displayName: + type: string + example: Read Bookings + AuthorizedAPICreationModel: + type: object + properties: + id : + type: string + example: 65b52595-9ca1-4539-aca2-56178643c58b + policyIdentifier: + type: string + example: RBAC + scopes: + type: array + items: + type: string + example: bookings:read + AuthorizedAPIPatchModel: + type: object + properties: + addedScopes: + type: array + items: + type: string + example: bookings:write + removedScopes: + type: array + items: + type: string + example: bookings:read + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some error message. + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + ApplicationSharePOSTRequest: + type: object + properties: + shareWithAllChildren: + type: boolean + default: false + sharedOrganizations: + type: array + items: + type: string + example: + - 682edf68-4835-4bb8-961f-0a16bc6cc866 + - ghfbctgf-4318-46d4-8ee1-7t3s38e23098 + SharedOrganizationsResponse: + type: object + properties: + organizations: + type: array + items: + $ref: '#/components/schemas/BasicOrganizationResponse' + SharedApplicationsResponse: + type: object + properties: + sharedApplications: + type: array + items: + $ref: '#/components/schemas/SharedApplicationResponse' + SharedApplicationResponse: + type: object + properties: + applicationId: + type: string + description: Shared application's id. + example: 'ca322554-fe79-4c04-9c94-492855ef92a3' + organizationId: + type: string + description: Shared application residing organization id. + example: '682edf68-4835-4bb8-961f-0a16bc6cc866' + BasicOrganizationResponse: + type: object + required: + - id + - name + - status + - ref + properties: + id: + type: string + example: 'b4526d91-a8bf-43d2-8b14-c548cf73065b' + name: + type: string + example: 'ABC Builders' + status: + type: string + enum: [ ACTIVE, DISABLED ] + example: ACTIVE + ref: + type: string + example: '/t/wso2.com/api/server/v1/organizations/b4526d91-a8bf-43d2-8b14-c548cf73065b' +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1' + variables: + serverUrl: + default: "https://api.asgardeo.io/t/{root-organization-name}/o/" + root-organization-name: + default: "{root-organization-name}" diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-group-mgt.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-group-mgt.yaml new file mode 100644 index 0000000000..789e75e1b3 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-group-mgt.yaml @@ -0,0 +1,937 @@ +openapi: 3.0.0 +info: + version: "v1" + title: Asgardeo - SCIM 2.0 Group Management API + description: + "This is the RESTful API for SCIM 2.0 Group Management in Asgardeo organizations. + This API allows creating, deleting, listing, and updating users. + \n To access the SCIM 2.0 Group Management APIs in Asgardeo, you need to first get an access token from your organization." +security: + - OAuth2: [] +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2' + variables: + server-url: + default: https://api.asgardeo.io/t/{root-organization-name}/o/ + root-organization-name: + default: "{root-organization-name}" +tags: + - name: Groups Endpoint + description: This endpoint performs actions related to all groups in the organization +paths: + /Groups: + get: + tags: + - Groups Endpoint + summary: Filter Groups + description: "This API returns groups according to the specified filter, sort, and pagination parameters.\n\n + + Scope(Permission) required: ``internal_org_group_mgt_view`` \n\n" + operationId: getGroup + parameters: + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + - name: filter + in: query + description: Filter expression for filtering + schema: + type: string + - name: startIndex + in: query + description: The 1-based index of the first query result + schema: + type: integer + format: int32 + - name: count + in: query + description: Specifies the desired maximum number of query results per page. + schema: + type: integer + format: int32 + - name: domain + in: query + description: The name of the user store where filtering needs to be applied. + schema: + type: string + responses: + 200: + description: Valid groups are found / No Group found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupsListResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Groups Endpoint + summary: Create Group + description: "This API creates a group and returns the details of the created group including its unique ID.\n\n + + Scope(Permission) required: ``internal_org_group_mgt_create``\n\n" + operationId: createGroup + parameters: + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupRequestObject' + required: false + responses: + 201: + description: Valid group is created + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Group is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorGroupNotAvailable' + 409: + description: Group already exist + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorGroupAlreadyAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + x-codegen-request-body-name: body + /Groups/.search: + post: + tags: + - Groups Endpoint + summary: Search Groups + description: "This API returns groups according to the specified filter, sort, and pagination parameters.\n\n + + Scope(Permission) required: ``internal_org_group_mgt_view``\n\n" + operationId: getGroupsByPost + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupSearchRequestObject' + required: false + responses: + 200: + description: Valid groups are found / Valid groups are not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupSearchResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups/.search' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:SearchRequest" + ], + "startIndex": 1, + "filter": "displayName eq manager" + }' + x-codegen-request-body-name: body + /Groups/{id}: + get: + tags: + - Groups Endpoint + summary: Get Group by ID + description: "This API returns the group details of a particular group using its unique ID.\n\n + + Scope(Permission) required: ``internal_org_group_mgt_view``\n\n" + operationId: getGroup by id + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + responses: + 200: + description: Valid group is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid group is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoGroupAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups/{group-id}' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Groups Endpoint + summary: Update Group - PUT + description: "This API updates the group details and returns the updated group details using a PUT operation.\n\n + + Scope(Permission) required: ``internal_org_group_mgt_update`` \n\n" + operationId: updateGroup + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupPutRequestObject' + required: false + responses: + 200: + description: Group is updated + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupPutResponseObject' + 400: + description: Invalid Input + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid group is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoGroupAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups/{group-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "displayName": "manager", + "members": [ + { + "value": "409ca90b-2ba6-4474-9a45-2cf7376e6e43", + "display": "kris" + } + ] + }' + x-codegen-request-body-name: body + delete: + tags: + - Groups Endpoint + summary: Delete Group + description: "This API deletes a particular group using its unique ID.\n\n + + Scope(Permission) required: ``internal_org_group_mgt_delete``\n\n" + operationId: deleteGroup + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + responses: + 204: + description: Group is deleted + content: {} + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid group is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoGroupAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups/{group-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Groups Endpoint + summary: Update Group - PATCH + description: "This API updates the group details and returns the updated group details using a PATCH operation.\n\n + + Scope(Permission) required: ``internal_org_group_mgt_update``\n\n" + operationId: patchGroup + parameters: + - name: id + in: path + description: Unique id of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchGroupOperationRequestObject' + required: false + responses: + 200: + description: Group is updated + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchGroupOperationResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid group is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoGroupAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups/{group-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:PatchOp" + ], + "Operations": [ + { + "op": "add", + "value": { + "members": [ + { + "display": "kris", + "value": "409ca90b-2ba6-4474-9a45-2cf7376e6e43" + } + ] + } + } + ] + }' + x-codegen-request-body-name: body +components: + schemas: + UserResponseObject: + required: + - meta + type: object + properties: + meta: + type: object + properties: + created: + type: string + example: 2018-08-17T10:34:29Z + location: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users/008bba85-451d-414b-87de-c03b5a1f4217 + lastModified: + type: string + example: 2018-08-17T10:34:29Z + resourceType: + type: string + example: User + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:schemas:core:2.0:User + - urn:ietf:params:scim:schemas:extension:enterprise:2.0:User + username: + type: string + example: DEFAULT/kim@gmail.com + id: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + name: + type: object + properties: + givenName: + type: string + example: Kim + familyName: + type: string + example: Berry + emails: + type: array + example: + - kim@gmail.com + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + roles: + type: object + properties: {} + example: + - type: default + value: Internal/everyone + GroupRequestObject: + required: + - displayName + - schemas + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:Group + displayName: + type: string + example: DEFAULT/manager + members: + type: array + items: + type: object + properties: {} + example: + value: 008bba85-451d-414b-87de-c03b5a1f4217 + display: kim + GroupResponseObject: + type: object + properties: + displayName: + type: string + example: DEFAULT/manager + meta: + type: object + properties: + created: + type: string + example: 2019-08-26T14:27:36 + location: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups/7bac6a86-1f21-4937-9fb1-5be4a93ef469 + lastModified: + type: string + example: 2019-08-26T14:27:36 + resourceType: + type: string + example: Group + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:Group + id: + type: string + example: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + members: + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/o/{organization-id}/scim2/Users/3a12bae9-4386-44be-befd-caf349297f45 + display: + type: string + example: kim + value: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + roles: + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/v2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + display: + type: string + example: loginRole + value: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + GroupsListResponseObject: + type: object + properties: + totalResults: + type: integer + example: 3 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 3 + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/groupOb' + GroupSearchRequestObject: + type: object + properties: + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:api:messages:2.0:SearchRequest + startIndex: + type: integer + example: 1 + filter: + type: string + example: displayName eq manager + GroupSearchResponseObject: + type: object + properties: + totalResults: + type: integer + example: 1 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 3 + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/groupOb' + groupOb: + type: object + properties: + displayName: + type: string + example: DEFAULT/manager + meta: + type: object + properties: + created: + type: string + example: 2019-08-26T14:27:36 + location: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups/7bac6a86-1f21-4937-9fb1-5be4a93ef469 + lastModified: + type: string + example: 2019-08-26T14:27:36 + members: + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users/3a12bae9-4386-44be-befd-caf349297f45 + display: + type: string + example: kim + value: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + roles: + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/o/{organization-id}/scim2/v2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + display: + type: string + example: loginRole + value: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + id: + type: string + example: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + GroupPutRequestObject: + type: object + properties: + displayName: + type: string + example: manager + members: + type: array + items: + type: object + properties: {} + example: + value: 409ca90b-2ba6-4474-9a45-2cf7376e6e43 + display: kris + GroupPutResponseObject: + type: object + properties: + displayName: + type: string + example: DEFAULT/manager + meta: + type: object + properties: + created: + type: string + example: 2019-08-26T14:27:36 + location: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups/7bac6a86-1f21-4937-9fb1-5be4a93ef469 + lastModified: + type: string + example: 2019-08-26T14:27:36 + resourceType: + type: string + example: Group + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:Group + id: + type: string + example: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + members: + type: array + items: + type: object + properties: {} + example: + display: kris + value: 409ca90b-2ba6-4474-9a45-2cf7376e6e43 + PatchGroupOperationRequestObject: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:PatchOp + Operations: + type: array + items: + $ref: '#/components/schemas/GroupItemObj' + GroupItemObj: + type: object + properties: + op: + type: string + enum: + - add + - remove + - replace + value: + type: object + properties: + members: + type: array + items: + type: object + properties: {} + example: + display: kris + value: 409ca90b-2ba6-4474-9a45-2cf7376e6e43 + PatchGroupOperationResponseObject: + type: object + properties: + displayName: + type: string + example: DEFAULT/manager + meta: + type: object + properties: + created: + type: string + example: 2019-08-26T14:27:36 + location: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups/7bac6a86-1f21-4937-9fb1-5be4a93ef469 + lastModified: + type: string + example: 2019-08-26T14:27:36 + resourceType: + type: string + example: Group + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:schemas:core:2.0:Group + id: + type: string + example: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + members: + type: array + items: + type: object + properties: {} + example: + - display: kris + value: 409ca90b-2ba6-4474-9a45-2cf7376e6e43 + - display: kim + value: 007bfc66-e4f0-4d53-9dfd-0c4a77b33257 + ErrorInvalidInput: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "400" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: invalidSyntax + detail: + type: string + example: Request is unparsable, syntactically incorrect, or violates schema. + ErrorUnauthorized: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Authorization failure. Authorization information was invalid or missing from your request." + status: + type: string + example: "401" + ErrorForbidden: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Operation is not permitted. You do not have permission to make this request." + status: + type: string + example: "403" + ErrorGroupNotAvailable: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: 'No Group with the id : 89a2a363-c90f-47e9-afae-949d026dad16 in + the user store.' + ErrorNoGroupAvailable: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Group not found in the user store. + ErrorGroupAlreadyAvailable: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "409" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: 'Group with name: DEFAULT/manager already exists in the system.' + securitySchemes: + OAuth2: + type: oauth2 + description: "**Authorization code OAuth flow** + **Organization Switch**" diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-management.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-management.yaml new file mode 100644 index 0000000000..7bfceca0aa --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-management.yaml @@ -0,0 +1,1131 @@ +openapi: 3.0.0 +info: + version: "v1" + title: 'Asgardeo - Organization Management API Definition' + description: | + 'This is the RESTful API for organization management in Asgardeo. This API allows users + to create, update, retrieve and delete organizations.

+ + Important:
+ You need a paid Asgardeo subscription to create hierarchical organizations. If you don't already have one, view the available [subscription plans](https://wso2.com/asgardeo/pricing/){:target="_blank"} and contact the Asgardeo sales team.' +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1' + variables: + server-url: + default: https://api.asgardeo.io/t/{organization-name}/o/api/server/v1 + root-organization-name: + default: "{organization-name}" +security: + - OAuth2: [] + +paths: + /organizations: + post: + tags: + - Organization + description: | + This API is used to create the organization defined in the user input. + + Scope(Permission) required: `internal_org_organization_create` + summary: + Create a new organization. + operationId: organizationPost + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPOSTRequest' + description: This represents the organization to be added. + required: true + responses: + '201': + description: Successful response + headers: + Location: + description: Location of the newly created organization. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "ABC Builders", + "description": "Building constructions", + "attributes": [ + { + "key": "Country", + "value": "USA" + } + ] + }' + x-codegen-request-body-name: body + get: + description: | + This API is used to search and retrieve organizations created for this tenant. + + Organizations can be filtered by id, name, description, created, lastModified, status, parentId, and meta attributes. + + Supported operators: "eq"(equals), "co"(contains), "sw"(starts with), "ew"(ends with), "ge"(greater than or equals), "le"(less than or equals), "gt"(greater than), "lt"(less than) + + Multiple attributes can be combined using the "and" operator. + + Examples: + - filter=name+eq+ABC Builders + - filter=attributes.Country+eq+Sri Lanka + + Scope(Permission) required: `internal_org_organization_view` + summary: + Retrieve organizations created for this tenant which matches the defined search criteria, if any. + operationId: organizationsGet + parameters: + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/afterQueryParam' + - $ref: '#/components/parameters/beforeQueryParam' + - $ref: '#/components/parameters/recursiveQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationsResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /organizations/check-name: + post: + summary: Check organization with given name exist among the organizations hierarchy. + description: | + This API is used to check whether organization with particular name exist or not. + + If the organization name is available for use, the response will be "available": true, else it will be "available": false. + + Scope(Permission) required: `internal_org_organization_view` + operationId: organizationsCheckNamePost + requestBody: + description: OrganizationNameCheckPOSTRequest object containing the organization name. + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationNameCheckPOSTRequest' + required: true + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationNameCheckPOSTResponse' + '404': + $ref: '#/components/responses/NotFound' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations/check-name' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "XYZ Builders" + }' + x-codegen-request-body-name: body + /organizations/{organization-id}: + get: + description: | + This API is used to get an existing organization identified by the organization ID. + + Scope(Permission) required: `internal_org_organization_view` + summary: + Get an existing organization, identified by the organization ID. + parameters: + - name: organization-id + in: path + description: ID of the organization. + required: true + schema: + type: string + example: 5355f3f0-f8b3-457f-805a-b32a668c5125 + - $ref: '#/components/parameters/includePermissionsQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/GetOrganizationResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations/06c1f4e2-3339-44e4-a825-96585e3653b1' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + description: | + This API provides the capability to update an organization property + using patch request. Organization patch is supported only for key-value pairs. + + Scope(Permission) required: `internal_org_organization_update` + summary: + Patch an organization property by ID. Patch is supported only for + key-value pairs. + parameters: + - name: organization-id + in: path + description: ID of the organization to be patched. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPatchRequest' + required: true + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationResponse' + example: + { + "id": "06c1f4e2-3339-44e4-a825-96585e3653b1", + "name": "XYZ Builders", + "description": "Building constructions", + "status": "ACTIVE", + "created": "2021-10-25T12:31:53.406Z", + "lastModified": "2021-10-25T12:31:53.406Z", + "type": "TENANT", + "parent": { + "id": "d90f322f-59d9-39b8-8555-f049fa318397", + "ref": "/o/api/server/v1/organizations/d90f322f-59d9-39b8-8555-f049fa318397" + }, + "hasChildren": false, + "attributes": [ + { + "key": "Country", + "value": "USA" + } + ] + } + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations/06c1f4e2-3339-44e4-a825-96585e3653b1' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '[ + { + "operation": "REPLACE", + "path": "/name", + "value": "XYZ Builders" + }, + { + "operation": "REMOVE", + "path": "/attributes/Country" + }, + { + "operation": "ADD", + "path": "/attributes/Town", + "value": "Colombo-7" + } + ]' + x-codegen-request-body-name: body + put: + description: | + This API provides the capability to update an organization by its id. + + Scope(Permission) required: `internal_org_organization_update` + summary: + Update an organization by ID. + parameters: + - name: organization-id + in: path + description: ID of the organization to be updated. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPUTRequest' + required: true + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationResponse' + example: + { + "id": "06c1f4e2-3339-44e4-a825-96585e3653b1", + "name": "ABCD Builders", + "description": "Building constructions company", + "status": "ACTIVE", + "created": "2021-10-25T12:31:53.406Z", + "lastModified": "2021-10-25T12:31:53.406Z", + "type": "TENANT", + "parent": { + "id": "d90f322f-59d9-39b8-8555-f049fa318397", + "ref": "/o/api/server/v1/organizations/d90f322f-59d9-39b8-8555-f049fa318397" + }, + "hasChildren": false, + "attributes": [ + { + "key": "Town", + "value": "Colombo-7" + } + ] + } + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location --request PUT 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations/06c1f4e2-3339-44e4-a825-96585e3653b1' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "ABCD Builders", + "description": "Building constructions company", + "status": "ACTIVE", + "attributes": [ + { + "key": "Country", + "value": "USA" + } + ] + }' + x-codegen-request-body-name: body + delete: + description: | + This API provides the capability to delete an organization by + giving its ID. + + Scope(Permission) required: `internal_org_organization_delete` + summary: + Delete an organization by using the organization's ID. + parameters: + - name: organization-id + in: path + description: ID of the organization to be deleted. + required: true + schema: + type: string + responses: + '204': + description: Successfully deleted + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations/06c1f4e2-3339-44e4-a825-96585e3653b1' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /organizations/self: + get: + tags: + - Organization + description: | + This API retrieves the organization information associated with the currently accessing organization. + + Scopes (Permissions) required: `internal_org_organization_view` + summary: Get organization details of the currently accessing organization. + operationId: getSelfOrganization + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationResponse' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location --request GET 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations/self' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Organization + description: | + This API updates the editable fields of the organization associated with the currently accessing organization. + Currently only the organization name can be updated using this API. + + Scopes (Permissions) required: `internal_org_organization_update` + summary: Update organization details of the currently accessing organization. + operationId: patchSelfOrganization + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPatchRequest' + description: Partial update payload for the organization. + required: true + responses: + '200': + description: Successfully updated organization. + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations/self' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '[ + { + "operation": "REPLACE", + "path": "/name", + "value": "ABCD Builders" + } + ]' + /organizations/metadata: + get: + tags: + - Organization Metadata + description: | + This API facilitates the retrieval of metadata including discovery attributes of the logged in organization.
+ + Scope(Permission) required: `internal_org_organization_view` + summary: + Get metadata of the logged in organization. + operationId: organizationMetadataGet + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationMetadata' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations/metadata' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /organizations/meta-attributes: + get: + tags: + - Organization Meta Attributes + description: | + This API facilitates the retrieval of organization meta attributes which matches the defined search criteria, if any. + + Supported operators: "eq"(equals), "co"(contains), "sw"(starts with), "ew"(ends with), "ge"(greater than or equals), "le"(less than or equals), "gt"(greater than), "lt"(less than) + + Multiple filters can be combined using the "and" operator. + + Example: filter=attributes+eq+Country + + Scope(Permission) required: `internal_org_organization_view` + summary: Get meta attributes of organizations with filter capabilities. + operationId: organizationsMetaAttributesGet + parameters: + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/afterQueryParam' + - $ref: '#/components/parameters/beforeQueryParam' + - $ref: '#/components/parameters/recursiveQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/MetaAttributesResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations/meta-attributes' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + parameters: + filterQueryParam: + in: query + name: filter + required: false + description: + Condition to filter the retrieval of records. + schema: + type: string + limitQueryParam: + in: query + name: limit + required: false + description: + Maximum number of records to be returned. (Should be greater than 0) + schema: + type: integer + format: int32 + minimum: 0 + offsetQueryParam: + in: query + name: offset + required: false + description: Number of records to skip for pagination. + schema: + type: integer + format: int32 + minimum: 0 + beforeQueryParam: + in: query + name: before + required: false + description: + Points to the previous range of data that can be retrieved. + schema: + type: string + afterQueryParam: + in: query + name: after + required: false + description: + Points to the next range of data to be returned. + schema: + type: string + recursiveQueryParam: + in: query + name: recursive + required: false + description: | + Determines whether a recursive search should happen. + If set to true, will include organizations in all levels of the hierarchy; If set to false, includes only organizations in the next level of the hierarchy. + schema: + type: boolean + default: false + showChildrenQueryParam: + in: query + name: showChildren + required: false + description: + Returns the organization details along with the child organization IDs belonging to this organization. + schema: + type: boolean + default: false + includePermissionsQueryParam: + in: query + name: includePermissions + required: false + description: + Returns the organization details along with permissions assigned for the requested user in this organization. + schema: + type: boolean + default: false + + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: ORG-00000 + description: An error code. + message: + type: string + example: Some Error Message + description: An error message. + description: + type: string + example: Some Error Description + description: An error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + description: An error trace identifier. + + OrganizationPOSTRequest: + type: object + required: + - name + properties: + name: + type: string + example: "ABC Builders" + orgHandle: + type: string + example: "abcbuilders" + description: + type: string + example: "Building constructions" + parentId: + type: string + description: "The parent organization id should be the organization where the request is invoked. If a value is not specified it will be resolved internally." + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + example: + { + "name": "ABC Builders", + "description": "Building constructions", + "attributes": [ + { + "key": "Country", + "value": "USA" + } + ] + } + OrganizationPUTRequest: + type: object + required: + - name + - status + properties: + name: + type: string + example: "ABCD Builders" + orgHandle: + type: string + example: "abcbuilders" + description: + type: string + example: "Building constructions company" + status: + type: string + enum: [ACTIVE, DISABLED] + example: ACTIVE + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + OrganizationNameCheckPOSTRequest: + type: object + properties: + name: + type: string + example: "XYZ Builders" + OrganizationNameCheckPOSTResponse: + type: object + properties: + available: + type: boolean + example: true + Attribute: + type: object + required: + - key + - value + properties: + key: + type: string + example: "Country" + value: + type: string + example: "USA" + OrganizationsResponse: + type: object + properties: + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "/o/api/server/v1/organizations?limit=10&filter=name+co+der&next=MjAyMS0xMi0yMSAwNToxODozMS4wMDQzNDg=", + "rel": "next", + }, { + "href": "/o/api/server/v1/organizations?limit=10&filter=name+co+der&before=MjAyMS0xMi0yMSAwNToxODozMS4wMDQzNDg=", + "rel": "previous", + } + ] + organizations: + type: array + items: + $ref: '#/components/schemas/BasicOrganizationResponse' + Link: + type: object + properties: + href: + type: string + format: uri + description: Endpoint that will return the next or previous page of data. + rel: + type: string + description: Describes whether the provided link is to access the next or previous page of data. + readOnly: true + BasicOrganizationResponse: + type: object + required: + - id + - name + - orgHandle + - status + - version + - ref + properties: + id: + type: string + example: '06c1f4e2-3339-44e4-a825-96585e3653b1' + name: + type: string + example: 'ABC Builders' + orgHandle: + type: string + example: 'abcbuilders' + status: + type: string + enum: [ ACTIVE, DISABLED ] + example: ACTIVE + version: + type: string + example: 'v1.0.0' + hasChildren: + type: boolean + example: false + ref: + type: string + example: '/o/api/server/v1/organizations/06c1f4e2-3339-44e4-a825-96585e3653b1' + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + OrganizationResponse: + type: object + required: + - id + - name + - orgHandle + - status + - version + - created + - lastModified + - type + properties: + id: + type: string + example: '06c1f4e2-3339-44e4-a825-96585e3653b1' + name: + type: string + example: 'ABC Builders' + orgHandle: + type: string + example: 'abcbuilders' + description: + type: string + example: 'Building constructions' + status: + type: string + enum: [ACTIVE, DISABLED] + example: ACTIVE + version: + type: string + example: 'v1.0.0' + created: + type: string + example: '2021-10-25T12:31:53.406Z' + lastModified: + type: string + example: '2021-10-25T12:31:53.406Z' + type: + type: string + example: "TENANT" + enum: + - TENANT + parent: + $ref: '#/components/schemas/ParentOrganization' + hasChildren: + type: boolean + example: false + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + GetOrganizationResponse: + type: object + required: + - id + - name + - orgHandle + - status + - version + - created + - lastModified + - type + properties: + id: + type: string + example: '06c1f4e2-3339-44e4-a825-96585e3653b1' + name: + type: string + example: 'ABC Builders' + orgHandle: + type: string + example: 'abcbuilders' + description: + type: string + example: 'Building constructions' + status: + type: string + enum: [ACTIVE, DISABLED] + example: ACTIVE + version: + type: string + example: 'v1.0.0' + created: + type: string + example: '2021-10-25T12:31:53.406Z' + lastModified: + type: string + example: '2021-10-25T12:31:53.406Z' + type: + type: string + example: "TENANT" + enum: + - TENANT + hasChildren: + type: boolean + example: false + parent: + $ref: '#/components/schemas/ParentOrganization' + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + permissions: + type: array + items: + type: string + ancestorPath: + type: array + description: 'Ancestors up to the request initiated organization' + items: + type: object + properties: + id: + type: string + name: + type: string + depth: + type: integer + example: + [ + { + "id": "10084a8d-113f-4211-a0d5-efe36b082211", + "name": "Global Holding Corp", + "depth": 0 + }, + { + "id": "d90f322f-59d9-39b8-8555-f049fa318397", + "name": "South Asia Division", + "depth": 1 + } + ] + MetaAttributesResponse: + type: object + properties: + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "/o/api/server/v1/organizations/meta-attributes?limit=10&recursive=false&filter=attributes+co+C&after=MjAyMS0xMi0yMSAwNToxODozMS4wMDQzNDg=", + "rel": "next", + }, { + "href": "/o/api/server/v1/organizations/meta-attributes?limit=10&recursive=false&filter=attributes+co+C&before=MjAyMS0xMi0yMSAwNToxODozMS4wMDQzNDg=", + "rel": "previous", + } + ] + attributes: + type: array + items: + type: string + example: + - "Country" + - "Region" + #----------------------------------------------------- + # Organization Parent Object + #----------------------------------------------------- + ParentOrganization: + type: object + required: + - id + - ref + properties: + id: + type: string + example: 'd90f322f-59d9-39b8-8555-f049fa318397' + ref: + type: string + example: '/o/api/server/v1/organizations/d90f322f-59d9-39b8-8555-f049fa318397' + + #----------------------------------------------------- + # Organization Patch Operation Object + #----------------------------------------------------- + OrganizationPatchRequest: + type: array + items: + $ref: '#/components/schemas/OrganizationPatchRequestItem' + OrganizationPatchRequestItem: + description: A JSONPatch as defined by RFC 6902. Patch operation is supported only for root level attributes of an organization. + required: + - operation + - path + properties: + operation: + type: string + description: The operation to be performed. + enum: + - ADD + - REMOVE + - REPLACE + example: REPLACE + path: + type: string + description: A JSON-Pointer + example: '/name' + value: + type: string + description: The value to be used within the operations. + example: 'XYZ Builders' + DiscoveryAttribute: + type: object + required: + - type + - value + properties: + type: + type: string + example: 'emailDomain' + values: + type: array + items: + type: string + example: 'abc.com' + + OrganizationMetadata: + type: object + required: + - id + - name + - orgHandle + - status + - version + - created + - lastModified + - type + properties: + id: + type: string + example: '06c1f4e2-3339-44e4-a825-96585e3653b1' + name: + type: string + example: 'ABC Builders' + orgHandle: + type: string + example: 'abcbuilders' + description: + type: string + example: 'Building constructions' + status: + type: string + enum: [ACTIVE, DISABLED] + example: ACTIVE + version: + type: string + example: 'v1.0.0' + created: + type: string + example: '2021-10-25T12:31:53.406Z' + lastModified: + type: string + example: '2021-10-25T12:31:53.406Z' + type: + type: string + example: "TENANT" + enum: + - TENANT + parent: + $ref: '#/components/schemas/ParentOrganization' + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + permissions: + type: array + items: + type: string + discoveryAttributes: + type: array + items: + $ref: '#/components/schemas/DiscoveryAttribute' + + #-------------------------------------------------------- + # Descriptions of Organization Management API responses. + #-------------------------------------------------------- + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Requested resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + OrgNotFound: + description: Organization Not Found + OrgExist: + description: Organization Exist + #----------------------------------------------------- + # Applicable authentication mechanisms. + #----------------------------------------------------- + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} + description: "**Authorization code OAuth flow** + **Organization Switch**" diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-offline-user-onboard.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-offline-user-onboard.yaml new file mode 100644 index 0000000000..1a9dc39f07 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-offline-user-onboard.yaml @@ -0,0 +1,104 @@ +openapi: 3.0.0 +info: + version: v1 + title: Offline User Onboard Management API + description: >- + This document specifies an **Organization level Offline user onboard management RESTFull API** for + Asgardeo. + +paths: + '/offline-invite-link': + post: + tags: + - Temporary Link + summary: Generates a random link that can be used to set a new password + description: | + 'Generates a random and secured one time link that can be used to set a new password for a user onboarded to the organization' + + Scope(Permission) required: `internal_org_offline_invite` + operationId: generateLink + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/InvitationRequest' + description: This represents the invitation request. + required: true + responses: + '201': + description: Created + content: + text/plain: + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/users/v1/offline-invite-link' \ + -H 'Content-Type: application/json' \ + -H 'Accept: text/plain' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "username": "johnDoe", + "userstore": "DEFAULT" + }' +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/o/api/users/v1' + +security: + - OAuth2: [] +components: + schemas: + InvitationRequest: + type: object + required: + - username + - userstore + properties: + username: + type: string + description: Exisiting user's username + example: "johnDoe" + userstore: + type: string + description: User's userstore domain + example: "DEFAULT" + Error: + type: object + properties: + code: + type: string + example: "Some_error_code" + message: + type: string + example: "Some error message." + description: + type: string + example: "Some error description." + traceId: + type: string + example: "Some Correlation for Error Instance" + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'http://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-user-mgt.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-user-mgt.yaml new file mode 100644 index 0000000000..0f668aae4d --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-user-mgt.yaml @@ -0,0 +1,845 @@ +openapi: 3.0.0 +info: + version: "v1" + title: Asgardeo - SCIM 2.0 User Management API + description: + "This is the RESTful API for SCIM 2.0 User Management in Asgardeo organizations. + This API allows creating, deleting, listing, and updating users. + \n To access the SCIM 2.0 User Management APIs in Asgardeo, you need to first get an access token from your organization." +security: + - OAuth2: [] +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2' + variables: + server-url: + default: https://api.asgardeo.io/t/{root-organization-name}/o/ + root-organization-name: + default: "{root-organization-name}" +tags: + - name: Users Endpoint + description: This endpoint performs actions related to all users in the organization. +paths: + /Users: + get: + tags: + - Users Endpoint + summary: Filter Users + description: "This API returns users according to the filter, sort and pagination parameters. Pagination is not supported across user stores and LDAP multi-attribute group filtering. However, filtering is supported across multiple user stores.\n\n + + Scope(Permission) required: ``internal_org_user_mgt_list``\n\n" + operationId: getUser + parameters: + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + - name: filter + in: query + description: The expression used for filtering. Supported filters are ‘Ew’, ‘Eq’, ‘Co’, ‘Sw’, ‘Ne’ and ‘and’. + schema: + type: string + - name: startIndex + in: query + description: The 1-based index of the first query result + schema: + type: integer + format: int32 + - name: count + in: query + description: Specifies the desired maximum number of query results per page. + schema: + type: integer + format: int32 + - name: domain + in: query + description: The name of the user store where filtering needs to be applied. + schema: + type: string + responses: + 200: + description: Valid users are found / Valid users are not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserObjectListResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Users Endpoint + summary: Create User + description: "This API creates a user and returns the user details along with the user's unique ID.\n\n + + Scope(Permission) required: ``internal_org_user_mgt_create``\n\n" + operationId: createUser + parameters: + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + oneOf: + - $ref: '#/components/schemas/UserObject' + - $ref: '#/components/schemas/UserObjectPassInvite' + required: false + responses: + 201: + description: User is created. + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserResponseObject' + 400: + description: Invalid Input + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 500: + description: Internal Server Error + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInternalServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [], + "name": { + "givenName": "Kim", + "familyName": "Berry" + }, + "userName": "DEFAULT/kim@gmail.com", + "password": "aBcd!23#", + "emails": [ + { + "value": "kim@gmail.com", + "primary": true + } + ], + "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": { + "manager": { + "value": "Taylor" + } + }, + "urn:scim:wso2:schema": { + "verifyEmail": true + } + }' + x-codegen-request-body-name: body + /Users/.search: + post: + tags: + - Users Endpoint + summary: Search Users + description: "This API returns users according to the filter, sort and pagination parameters.\n\n + + Scope(Permission) required: ``internal_org_user_mgt_list``\n\n" + operationId: getUsersByPost + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserSearchRequestObject' + required: false + responses: + 200: + description: Valid users are found / Valid users are not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserObjectListResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users/.search' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:SearchRequest" + ], + "attributes": [ + "name.familyName", + "userName" + ], + "filter": "userName sw ki and name.familyName co err", + "domain": "PRIMARY", + "startIndex": 1, + "count": 10 + }' + x-codegen-request-body-name: body + /Users/{id}: + get: + tags: + - Users Endpoint + summary: Get User by ID + description: "Return user details if a user found.\n\n + + Scope(Permission) required: ``internal_org_user_mgt_view``\n\n" + operationId: getUser by id + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + responses: + 200: + description: Valid user is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid user is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users/{user-id}' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Users Endpoint + summary: Update User - PUT + description: "This API updates user details and return the updated user details using a PUT operation.\n\n + + Scope(Permission) required: ``internal_org_user_mgt_update``\n\n" + operationId: updateUser + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserUpdateObject' + required: false + responses: + 200: + description: Valid user is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid user is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users/{user-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [], + "name": { + "givenName": "Kim", + "familyName": "Berry" + }, + "userName": "DEFAULT/kim@gmail.com", + "emails": [ + { + "value": "kim@gmail.com", + "primary": true + } + ], + "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": { + "manager": { + "value": "Taylor" + } + } + }' + x-codegen-request-body-name: body + delete: + tags: + - Users Endpoint + summary: Delete User by ID + description: "This API deletes a user using the user's unique ID.\n\n + + Scope(Permission) required: ``internal_org_user_mgt_delete``\n\n" + operationId: deleteUser + parameters: + - name: id + in: path + description: Unique ID of the user that you want to delete. + required: true + schema: + type: string + responses: + 204: + description: User is deleted + content: {} + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid user is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users/{user-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Users Endpoint + summary: Update User - PATCH + description: "This API updates user details and returns the updated user details using a PATCH operation.\n\n + + Scope(Permission) required: ``internal_org_user_mgt_update``\n\n + + Supported Operations:``add``, ``replace``, ``remove``\n\n" + operationId: patchUser + parameters: + - name: id + in: path + description: Unique id of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchOperationInput' + required: false + responses: + 200: + description: Valid user is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid user is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users/{user-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:PatchOp" + ], + "Operations": [ + { + "op": "add", + "value": { + "nickName": "shaggy" + } + } + ] + }' + x-codegen-request-body-name: body +components: + schemas: + UserObject: + title: Set a password for the user + required: + - password + type: object + properties: + schemas: + type: object + properties: {} + example: [] + name: + type: object + properties: + givenName: + type: string + description: The `givenName` you specify will be entered for the First Name attribute in the user's profile. + example: Kim + familyName: + type: string + description: The `familyName` you specify will be entered for the Last Name attribute in the user's profile. + example: Berry + userName: + type: string + description: By default, the username should be the email address and it will be stored in the `DEFAULT` user store. However, if username validation is changed to `Alphanumeric` in your Asgardeo organization, you need to specify an alphanumeric value (a-z, A-Z, 0-9) as the username instead of the email. + example: DEFAULT/kim@gmail.com + password: + type: string + description: Use this parameter to set a password for the user account. The user will be able to reset this password later. When setting the password, be sure to follow the password-validation rules configured for your organization. + example: aBcd!23# + emails: + type: array + description: This email will be entered for the Email attribute in the user's profile. + example: + - value: kim@gmail.com + primary: true + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + urn:scim:wso2:schema: + type: object + properties: + verifyEmail: + type: boolean + description: When the administrator sets the password for the new user account, this parameter specifies if the new user should confirm the new account through email. If this parameter is set to `true`, an email is sent to the user's email address requesting confirmation. + example: true + UserObjectPassInvite: + title: Invite the user to set their own password + type: object + properties: + schemas: + type: object + properties: {} + example: [] + name: + type: object + properties: + givenName: + type: string + description: The `givenName` you specify will be entered for the First Name attribute in the user's profile. + example: Kim + familyName: + type: string + description: The `familyName` you specify will be entered for the Last Name attribute in the user's profile. + example: Berry + userName: + type: string + description: By default, the username should be the email address and it will be stored in the `DEFAULT` user store. However, if username validation is changed to `Alphanumeric` in your Asgardeo organization, you need to specify an alphanumeric value (a-z, A-Z, 0-9) as the username instead of the email. + example: DEFAULT/kim@gmail.com + emails: + type: array + description: This email will be entered for the Email attribute in the user's profile. + example: + - value: kim@gmail.com + primary: true + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + urn:scim:wso2:schema: + type: object + properties: + askPassword: + type: boolean + description: If this parameter is set to `true`, users will be allowed configure their own password. An email is sent to the specified email address, which will have instructions for the user to set the password and confirm the new user account. + example: true + UserResponseObject: + required: + - meta + type: object + properties: + meta: + type: object + properties: + created: + type: string + example: 2018-08-17T10:34:29Z + location: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users/008bba85-451d-414b-87de-c03b5a1f4217 + lastModified: + type: string + example: 2018-08-17T10:34:29Z + resourceType: + type: string + example: User + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:schemas:core:2.0:User + - urn:ietf:params:scim:schemas:extension:enterprise:2.0:User + username: + type: string + example: DEFAULT/kim@gmail.com + id: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + name: + type: object + properties: + givenName: + type: string + example: Kim + familyName: + type: string + example: Berry + emails: + type: array + example: + - kim@gmail.com + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + roles: + type: object + properties: {} + example: + - type: default + value: Internal/everyone + UserUpdateObject: + type: object + properties: + schemas: + type: object + properties: {} + example: [] + name: + type: object + properties: + givenName: + type: string + example: Kim + familyName: + type: string + example: Berry + userName: + type: string + example: DEFAULT/kim@gmail.com + emails: + type: array + example: + - value: kim@gmail.com + primary: true + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + PatchOperationInput: + type: object + properties: + schemas: + type: array + items: + type: object + example: urn:ietf:params:scim:api:messages:2.0:PatchOp + Operations: + type: array + items: + $ref: '#/components/schemas/OperationMeItem' + OperationMeItem: + type: object + properties: + op: + type: string + enum: + - add + - remove + - replace + value: + type: object + properties: + nickName: + type: string + example: shaggy + UserObjectListResponseObject: + type: object + properties: + totalResults: + type: integer + example: 1 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 1 + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/UserResponseObject' + UserSearchRequestObject: + type: object + example: + schemas: + - urn:ietf:params:scim:api:messages:2.0:SearchRequest + attributes: + - name.familyName + - userName + filter: userName sw ki and name.familyName co err + domain: PRIMARY + startIndex: 1 + count: 10 + ErrorInvalidInput: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "400" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: invalidSyntax + detail: + type: string + example: Request is unparsable, syntactically incorrect, or violates schema. + ErrorUnauthorized: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Authorization failure. Authorization information was invalid or missing from your request." + status: + type: string + example: "401" + ErrorForbidden: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Operation is not permitted. You do not have permission to make this request." + status: + type: string + example: "403" + ErrorUserNotAvailable: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: 'No user with the id : 008bba85-451d-414b-87de-c03b5a1f4217 in + the user store.' + ErrorInternalServerError: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "500" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Internal Server Error. + securitySchemes: + OAuth2: + type: oauth2 + description: "**Authorization code OAuth flow** + **Organization Switch**" diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-user-store.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-user-store.yaml new file mode 100644 index 0000000000..53230cedfe --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/org-user-store.yaml @@ -0,0 +1,900 @@ +openapi: 3.0.0 +info: + description: > + This document specifies the **Userstore Management RESTful API** for Asgardeo organizations. + version: "v1" + title: Asgardeo - UserStore Management Rest API + +security: + - OAuth2: [] +paths: + /userstores: + post: + tags: + - User Store + summary: Add a secondary user store. + operationId: addUserStore + description: | + This API provides the capability to add a secondary user store. + + **NOTE:** + + To retrieve the available user store classes/types, use the **/o/api/server/v1/userstores/meta/types** API. + + When creating a user store, it will be **disabled by default**. To enable the user store, include the `disabled` property set to `false` in the properties of the payload. + + + Scope(Permission) required: `internal_org_userstore_create` + responses: + '201': + description: Successful response + headers: + Location: + description: >- + Location of the newly created secondary user store. userstore id is generated as base-64-url-encoded(domain-name) value. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreResponse' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/userstores' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "typeId": "VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg", + "description": "Some description about the user store.", + "name": "LDAP-SECONDARY", + "properties": [ + { + "name": "some property name", + "value": "some property value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreReq' + description: Secondary user store to add. + get: + tags: + - User Store + summary: Retrieve the list of secondary user stores + operationId: getSecondaryUserStores + description: | + This API provides the capability to list the configured secondary user stores.
+ + Scope(Permission) required: `internal_org_userstore_view` + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/sortQueryParam' + - $ref: '#/components/parameters/requiredAttributesQueryParam' + responses: + '200': + description: Successful response. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UserStoreListResponse' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/userstores' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /userstores/{userstore-domain-id}: + get: + tags: + - User Store + summary: >- + Retrieve the configurations of secondary user store based on its domain id + operationId: getUserStoreByDomainId + description: | + This API provides the capability to retrieve the configurations of + a secondary user store based on its domain id.
+ + Scope(Permission) required: `internal_org_userstore_view` + parameters: + - $ref: '#/components/parameters/domainNamePathParam' + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreConfigurationsRes' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/userstores/{userstore-domain-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + delete: + tags: + - User Store + summary: Delete a secondary user store + operationId: deleteUserStore + description: | + This API provides the capability to delete a secondary user store based on + matching to the given user store domain id.
+ + Scope(Permission) required: `internal_org_userstore_delete` + parameters: + - $ref: '#/components/parameters/domainNamePathParam' + responses: + '204': + $ref: '#/components/responses/NoContent' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/userstores/{userstore-domain-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - User Store + summary: Update a user store by its domain id + operationId: updateUserStore + description: | + This API provides the capability to edit a user store based on its + domain id
+ + Scope(Permission) required: `internal_org_userstore_update` + parameters: + - in: path + name: userstore-domain-id + required: true + description: Current domain id of the user store + schema: + type: string + example: SkRCQy1TRUNPTkRBUlk + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreResponse' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/userstores/{userstore-domain-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "typeId": "VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg", + "description": "Some description about the user store.", + "name": "LDAP-SECONDARY", + "properties": [ + { + "name": "some property name", + "value": "some property value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreReq' + description: >- + The secondary user store values which are needed to be edited for a + given domain id. + patch: + tags: + - User Store + summary: Patch the secondary user store by it's domain id + operationId: patchUserStore + description: | + This API provides the capability to update the secondary user store's + property using patch request by using its domain id. + + Scope(Permission) required: `internal_org_userstore_update` + parameters: + - $ref: '#/components/parameters/domainNamePathParam' + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreResponse' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/userstores/userstore-domain-id' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '[ + { + "operation": "REPLACE", + "path": "/properties/Disabled", + "value": "true" + } + ]' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchRequest' + required: true + /userstores/{userstore-domain-id}/attribute-mappings: + patch: + tags: + - User Store + summary: Update the secondary user store attribute mappings by it's domain id. + operationId: updateAttributeMappings + description: | + This API provides the capability to update the secondary user store's attribute mappings using patch request by using its domain id.
+ + Scope(Permission) required: `internal_org_userstore_update` + parameters: + - $ref: '#/components/parameters/domainNamePathParam' + responses: + '200': + $ref: '#/components/responses/OK' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AttributeMappingsReq' + required: true + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/userstores/{userstore-domain-id}/attribute-mappings' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '[ + { + "claimURI": "http://wso2.org/claims/username", + "mappedAttribute": "username" + } + ]' + /userstores/meta/types: + get: + tags: + - Meta + summary: Retrieve the available user store classes/types + operationId: getAvailableUserStoreTypes + description: | + This API provides the capability to retrieve the available user store + types
+ + Scope(Permission) required: `internal_org_userstore_view` + responses: + '200': + description: Successful Response. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AvailableUserStoreClassesRes' + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/userstores/meta/types' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /userstores/meta/types/{type-id}: + get: + tags: + - Meta + summary: >- + Retrieve the properties of secondary user store of a given user store type + operationId: getUserStoreManagerProperties + description: | + This API provides the capability to retrieve the properties of secondary + user store of a given class name.
+ + Scope(Permission) required: `internal_org_userstore_view` + parameters: + - in: path + name: type-id + required: true + description: Id of the user store type + schema: + type: string + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/MetaUserStoreType' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/userstores/meta/types/{user-store-type-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /userstores/meta/types/{type-id}/attributes: + get: + tags: + - Meta + summary: >- + Retrieve the meta attributes of a user store of a given user store type. + operationId: getUserStoreAttributeMappings + description: | + This API provides the capability to retrieve the attribute mappings + of a given user store type.
+ + Scope(Permission) required: `internal_org_userstore_view` + parameters: + - in: path + name: type-id + required: true + description: Id of the user store type + schema: + type: string + - $ref: '#/components/parameters/includeIdentityClaimsQueryParam' + responses: + '200': + description: Successful Response. + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreAttributeMappingResponse' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/userstores/meta/types/{user-store-type-id}/attributes' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1' +components: + parameters: + domainNamePathParam: + name: userstore-domain-id + in: path + required: true + description: The unique name of the user store domain + schema: + type: string + example: SkRCQy1TRUNPTkRBUlk + includeIdentityClaimsQueryParam: + in: query + name: includeIdentityClaimMappings + required: false + description: Whether to include the identity claim mappings with user store attributes. + example: true + schema: + type: boolean + limitQueryParam: + in: query + name: limit + required: false + description: maximum number of records to return + schema: + type: integer + format: int32 + offsetQueryParam: + in: query + name: offset + required: false + description: number of records to skip for pagination + schema: + type: integer + format: int32 + filterQueryParam: + in: query + name: filter + required: false + description: Condition to filter the retrieval of records. + schema: + type: string + sortQueryParam: + in: query + name: sort + required: false + description: Define the order of how the retrieved records should be sorted. + schema: + type: string + requiredAttributesQueryParam: + in: query + name: requiredAttributes + required: false + description: Define set of user store attributes (as comma separated) to be returned. + schema: + type: string + fileTypeHeaderParam: + in: header + name: Accept + required: false + description: | + Content type of the file. + schema: + type: string + default: application/yaml + enum: + - application/json + - application/xml + - application/yaml + - application/x-yaml + - text/yaml + - text/xml + - text/json + responses: + NotFound: + description: The specified resource is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Unauthorized. + ServerError: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + InvalidInput: + description: Invalid input request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + Conflict: + description: Element Already Exists. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + Deleted: + description: Item Deleted + Created: + description: User Store Created. + OK: + description: OK. + Success: + description: Connection Established. + NoContent: + description: No Content. + Forbidden: + description: Resource Forbidden. + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth/token' + schemas: + UserStoreReq: + type: object + required: + - typeId + - description + - name + - properties + description: Secondary user store request. + properties: + typeId: + type: string + description: The id of the user store manager class type. + example: VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg + description: + type: string + description: Description of the user store. + example: Some description about the user store. + name: + type: string + description: This is a unique name that identifies the user store. + example: LDAP-SECONDARY + properties: + type: array + description: >- + Various properties related to the user store such as connection URL, + connection password etc. + items: + $ref: '#/components/schemas/Property' + claimAttributeMappings: + type: array + description: Claim attribute mappings. + items: + $ref: '#/components/schemas/ClaimAttributeMapping' + PatchRequest: + type: array + items: + $ref: '#/components/schemas/PatchDocument' + PatchDocument: + description: A JSONPatch document as defined by RFC 6902 + required: + - operation + - path + properties: + operation: + type: string + description: The operation to be performed + enum: + - ADD + - REMOVE + - REPLACE + example: REPLACE + path: + type: string + description: A JSON-Pointer + example: /properties/Disabled + value: + type: string + description: The value to be used within the operations + example: 'true' + ClaimAttributeMapping: + type: object + required: + - claimURI + - mappedAttribute + properties: + claimURI: + type: string + description: A unique URI specific to the claim. + example: "http://wso2.org/claims/username" + mappedAttribute: + type: string + description: Userstore attribute to be mapped to. + example: "username" + AttributeMappingsReq: + type: array + description: Array of ClaimURI attribute mappings. + items: + $ref: '#/components/schemas/ClaimAttributeMapping' + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + Property: + type: object + required: + - name + - value + properties: + name: + type: string + example: some property name + value: + type: string + example: some property value + UserStoreListResponse: + type: object + properties: + id: + type: string + example: SkRCQy1TRUNPTkRBUlk + description: base64 url encoded value of domain name + name: + type: string + example: LDAP-SECONDARY + description: Domain name of the secondary user store. + enabled: + type: boolean + example: true + description: Enabled status of the userstore. + description: + type: string + example: Some description of the user store + isLocal: + type: boolean + example: true + description: Whether the user store is local or not. + self: + type: string + example: /t/{root-organization-name}/o/api/server/v1/userstores/SkRCQy1TRUNPTkRBUlk + description: Location of the created/updated resource. + typeName: + type: string + example: UniqueIDJDBCUserStoreManager + description: User store type name. + properties: + type: array + description: Requested configured user store property for the set + items: + $ref: '#/components/schemas/AddUserStorePropertiesRes' + MetaUserStoreType: + type: object + properties: + typeName: + type: string + example: UniqueIDJDBCUserStoreManager + typeId: + type: string + example: b3JnLndzbzIuY2FyYm9uLnVzZXIuY29yZS5qZGJjLkpEQkNVc2VyU3RvcmVNYW5hZ2Vy + isLocal: + type: boolean + example: true + description: Whether the user store is local or not. + properties: + $ref: '#/components/schemas/UserStorePropertiesRes' + UserStoreResponse: + type: object + properties: + id: + type: string + example: SkRCQy1TRUNPTkRBUlk= + description: base64 url encoded value of domain name + name: + type: string + example: LDAP-SECONDARY + description: domain name of the secondary user store + typeName: + type: string + example: UniqueIDJDBCUserStoreManager + typeId: + type: string + example: VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg + description: + type: string + example: Some description of the user store + properties: + type: array + description: Configured user store proper for the set. + items: + $ref: '#/components/schemas/AddUserStorePropertiesRes' + claimAttributeMappings: + type: array + description: Configured user store claim attribute mappings + items: + $ref: '#/components/schemas/ClaimAttributeMapping' + AvailableUserStoreClassesRes: + type: object + description: Available User Store Classes Response. + properties: + typeId: + type: string + example: VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg + typeName: + type: string + example: UniqueIDJDBCUserStoreManager + isLocal: + type: boolean + example: true + description: Whether the user store is local or not. + self: + type: string + example: /t/{root-organization-name}/o/api/server/v1/userstores/meta/types/VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg + UserStoreConfigurationsRes: + type: object + description: Available User Store Configurations Response. + properties: + typeName: + type: string + example: UniqueIDJDBCUserStoreManager + typeId: + type: string + example: VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg + name: + type: string + example: LDAP-SECONDARY + description: + type: string + example: Some description of the user store + isLocal: + type: boolean + example: true + description: Whether the user store is local or not. + properties: + type: array + description: Configured user store property for the set + items: + $ref: '#/components/schemas/AddUserStorePropertiesRes' + claimAttributeMappings: + type: array + description: Requested configured user store claim attribute mappings. + items: + $ref: '#/components/schemas/ClaimAttributeMapping' + AddUserStorePropertiesRes: + type: object + description: Available User Store Properties. + required: + - name + - value + properties: + name: + type: string + example: ConnectionName + value: + type: string + example: 'CN=,DC=' + UserStorePropertiesRes: + properties: + Mandatory: + type: array + items: + $ref: '#/components/schemas/PropertiesRes' + Optional: + type: array + items: + $ref: '#/components/schemas/PropertiesRes' + Advanced: + type: array + items: + $ref: '#/components/schemas/PropertiesRes' + PropertiesRes: + type: object + properties: + name: + type: string + example: Some Mandatory Property Name + defaultValue: + type: string + example: Some Mandatory Property Value + description: + type: string + example: Description of the property + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + Attribute: + type: object + properties: + name: + type: string + example: category + value: + type: string + example: basic + UserStoreAttributeMappingResponse: + type: object + properties: + typeName: + type: string + description: Type name of the user store. + example: org.wso2.carbon.user.core.ldap.UniqueIDActiveDirectoryUserStoreManager + typeId: + type: string + description: Type id of the user store. + example: b3JnLndzbzIuY2FyYm9uLnVzZXIuY29yZS5qZGJjLkpEQkNVc2VyU3RvcmVNYW5hZ2Vy + isLocal: + type: boolean + description: Whether the user store is local or not. + example: true + attributeMappings: + type: array + description: User store attribute mappings. + items: + $ref: '#/components/schemas/UserStoreAttributeResponse' + UserStoreAttributeResponse: + type: object + properties: + claimId: + type: string + description: Claim id of the attribute. + example: bzIuY2FyYm9uLnVzZXIuY29yZS5qZG + claimURI: + type: string + description: Claim URI of the attribute. + example: http://wso2.org/claims/givenname + mappedAttribute: + type: string + description: Mapped attribute name. + example: givenName + displayName: + type: string + description: Display name of the attribute. + example: First Name diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-discovery.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-discovery.yaml new file mode 100644 index 0000000000..07e32f1daf --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-discovery.yaml @@ -0,0 +1,223 @@ +openapi: 3.0.0 +info: + version: "v1" + title: 'Organization Discovery API' + description: | + This document specifies an **Organization level Organization Discovery RESTful API** for Asgardeo. +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1' + variables: + tenant-domain: + default: carbon.super +security: + - OAuth2: [] + +paths: + /organizations/check-discovery: + post: + tags: + - Organization Discovery + summary: Check whether given discovery attribute exists among the organization hierarchy. + description: | + This API is used to verify whether a specific discovery attribute has already been associated with an organization within the hierarchy. It is available for use within any organization in the hierarchy. + + Scope(Permission) required: `internal_org_organization_discovery_view` + operationId: organizationCheckDiscovery + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationDiscoveryCheckPOSTRequest' + required: true + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationDiscoveryCheckPOSTResponse' + '404': + $ref: '#/components/responses/NotFound' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/o/api/server/v1/organizations/check-discovery' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "type": "emailDomain", + "value": "abc.com" + }' + x-codegen-request-body-name: body +components: + parameters: + filterQueryParam: + in: query + name: filter + required: false + description: + Condition to filter the retrieval of records. + schema: + type: string + limitQueryParam: + in: query + name: limit + required: false + description: + Maximum number of records to be returned. (Should be greater than 0) + schema: + type: integer + format: int32 + minimum: 0 + offsetQueryParam: + in: query + name: offset + required: false + description: Number of records to skip for pagination. + schema: + type: integer + format: int32 + minimum: 0 + beforeQueryParam: + in: query + name: before + required: false + description: + Points to the previous range of data that can be retrieved. + schema: + type: string + afterQueryParam: + in: query + name: after + required: false + description: + Points to the next range of data to be returned. + schema: + type: string + recursiveQueryParam: + in: query + name: recursive + required: false + description: + Determines whether a recursive search should happen. + schema: + type: boolean + default: false + showChildrenQueryParam: + in: query + name: showChildren + required: false + description: + Returns the organization details along with the child organization IDs belonging to this organization. + schema: + type: boolean + default: false + includePermissionsQueryParam: + in: query + name: includePermissions + required: false + description: + Returns the organization details along with permissions assigned for the requested user in this organization. + schema: + type: boolean + default: false + + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: ORG-00000 + description: An error code. + message: + type: string + example: Some Error Message + description: An error message. + description: + type: string + example: Some Error Description + description: An error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + description: An error trace identifier. + OrganizationDiscoveryCheckPOSTRequest: + required: + - type + - value + type: object + properties: + type: + type: string + example: 'emailDomain' + value: + type: string + example: 'abc.com' + OrganizationDiscoveryCheckPOSTResponse: + type: object + required: + - available + properties: + available: + type: boolean + example: true + #-------------------------------------------------------- + # Descriptions of Organization Management API responses. + #-------------------------------------------------------- + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Requested resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + OrgNotFound: + description: Organization Not Found + OrgExist: + description: Organization Exist + #----------------------------------------------------- + # Applicable authentication mechanisms. + #----------------------------------------------------- + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-user-invitation.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-user-invitation.yaml new file mode 100644 index 0000000000..b3db294df5 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-user-invitation.yaml @@ -0,0 +1,740 @@ +openapi: 3.0.0 +info: + version: "v1" + title: "Asgardeo - Parent Organization's User Invitation API" + description: |- + This document specifies an **Parent Organization's User Invitation RESTful API** for **Asgardeo**. This API allows organization administrators to invite users in parent organization, manage the invitations and invitees to accept the invitation. + +security: + - OAuth2: [] + +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1' + variables: + server-url: + default: https://api.asgardeo.io/t/{root-organization-name}/o/ + root-organization-name: + default: "{root-organization-name}" + +paths: + /guests/invite: + post: + tags: + - Parent Organization User Invitation + summary: Invite a parent organization user to a child organization + description: | + Initiates an invitation to a user in the parent organization to onboard to the child organization. + This will be initiated from the child organization. + + Scope(Permission) required: `internal_org_guest_mgt_invite_add` + operationId: invitationTriggerPost + requestBody: + $ref: '#/components/requestBodies/InvitationRequestPayload' + responses: + '201': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/InvitationSuccessListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/guests/invite' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "usernames": [ + "xyz@gmail.com", + "abc@gmail.com" + ], + "roles": [ + "f5b761ca-62f2-48ba-935b-f7b460f58e5c", + "657fgq22-62f2-48ba-935b-f7bfgh6438fd" + ], + "groups": [ + "48badf-rty20-48ba-935b-f7b460f58e5c", + "fd234100-c115-45dc-ad11-70846b783866" + ], + "properties": [ + { + "key": "manageNotificationsInternally", + "value": "true" + } + ] + }' + x-codegen-request-body-name: body + /guests/invitation/introspect: + post: + tags: + - Parent Organization User Invitation + summary: introspect an invitation's confirmation code + description: | + This API can be used to introspect the confirmation code. This will be + invoked from the application with the access token of the user which + was logged into the application and switched to the organization where + the user resides in. + + Scope(Permission) required: `internal_org_guest_mgt_invite_list` + operationId: invitationIntrospectPost + requestBody: + $ref: '#/components/requestBodies/IntrospectRequestPayload' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/IntrospectSuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/guests/invitation/introspect' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "confirmationCode": "2663329b-c8c5-4c71-9500-9ea8c4e77d94" + }' + x-codegen-request-body-name: body + /guests/invitation/accept: + post: + tags: + - Parent Organization User Invitation + summary: Accepts an invitation from a user in the parent organization + description: | + After user clicks on the link provided, the redirected application should invoke this API. + This API is a public API and this should be invoked with the confirmation code which is + appended to the notification. + + Scope(Permission) required: None + operationId: invitationAcceptPost + requestBody: + $ref: '#/components/requestBodies/AcceptanceRequestPayload' + responses: + '204': + description: No Content + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/guests/invitation/accept' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "confirmationCode": "2663329b-c8c5-4c71-9500-9ea8c4e77d94" + }' + x-codegen-request-body-name: body + /guests/invitations: + get: + tags: + - Invitation Management + summary: List down the user invitations + description: | + List down the invitations triggered from the current organization. This should be invoked + from an access token issued from an administrator of that organization. + + Scope(Permission) required: `internal_org_guest_mgt_invite_list` + operationId: invitationListGet + parameters: + - $ref: '#/components/parameters/FilterQueryParam' + - $ref: '#/components/parameters/LimitQueryParam' + - $ref: '#/components/parameters/OffsetQueryParam' + - $ref: '#/components/parameters/sortOrderQueryParam' + - $ref: '#/components/parameters/sortByQueryParam' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/InvitationsListResponse' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/guests/invitations' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '' + /guests/invitations/{invitationId}: + delete: + tags: + - Invitation Management + summary: Delete an invitation + description: | + Based on the requirements the invitations which are initiated by the same organization + can be deleted. This should be invoked from an access token issued from an administrator of that organization. + + Scope(Permission) required: `internal_org_guest_mgt_invite_delete` + operationId: invitationDelete + parameters: + - name: invitationId + in: path + description: ID of the invitation to delete + required: true + schema: + type: string + example: 2d88a90a-3060-46f0-b863-fc481fef8137 + responses: + '204': + description: Successful Response and if the resource not found + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/guests/invitations/{invitationId}'\ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '' +components: + requestBodies: + InvitationRequestPayload: + description: Details that need to initiate an invitation + content: + application/json: + schema: + $ref: '#/components/schemas/InvitationRequestBody' + required: true + IntrospectRequestPayload: + description: Details that need to introspect an invitation + content: + application/json: + schema: + $ref: '#/components/schemas/IntrospectRequestBody' + required: true + AcceptanceRequestPayload: + description: Details that need to confirm an invitation + content: + application/json: + schema: + $ref: '#/components/schemas/AcceptanceRequestBody' + required: true + parameters: + FilterQueryParam: + in: query + name: filter + required: false + description: Filtering the invitation based on the status. Status can be PENDING or EXPIRED. + schema: + type: string + example: status eq PENDING + LimitQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return + _This parameter is not supported yet._ + schema: + type: integer + example: 10 + OffsetQueryParam: + in: query + name: offset + required: false + description: | + Starting index of the pagination + _This parameter is not supported yet._ + schema: + type: integer + example: 0 + sortOrderQueryParam: + in: query + name: sortOrder + required: false + description: | + Sort order of the returned records. Either ASC or DESC + _This parameter is not supported yet._ + schema: + type: string + enum: + - ASC + - DESC + sortByQueryParam: + in: query + name: sortBy + required: false + description: | + Sort by a specific field + _This parameter is not supported yet._ + schema: + type: string + example: createdTime + schemas: + InvitationRequestBody: + type: object + required: + - usernames + properties: + usernames: + type: array + description: List of usernames of the users who will be invited to the organization. This can be an email or an alphanumeric username. + items: + type: string + example: + - xyz@gmail.com + - abc@gmail.com + userDomain: + type: string + description: Userstore domain of the inviting user in the parent organization. If not provided, DEFAULT userstore will be used by default. + example: DEFAULT + roles: + type: array + description: Role assignments which the user will be assigned to. + items: + type: string + example: + - f5b761ca-62f2-48ba-935b-f7b460f58e5c + - 657fgq22-62f2-48ba-935b-f7bfgh6438fd + groups: + type: array + description: Group assignments which the user will be assigned to. + items: + type: string + example: + - 48badf-rty20-48ba-935b-f7b460f58e5c + - fd234100-c115-45dc-ad11-70846b783866 + properties: + type: array + description: Custom properties of invitation which can be used in runtime but doesn't + persist as invitation information. + items: + $ref: '#/components/schemas/Property' + example: + { + "usernames": [ + "xyz@gmail.com", + "abc@gmail.com" + ], + "roles": [ + "f5b761ca-62f2-48ba-935b-f7b460f58e5c", + "657fgq22-62f2-48ba-935b-f7bfgh6438fd" + ], + "groups": [ + "48badf-rty20-48ba-935b-f7b460f58e5c", + "fd234100-c115-45dc-ad11-70846b783866" + ], + "properties": [ + { + "key" : "manageNotificationsInternally", + "value" : "true" + } + ] + } + InvitationSuccessListResponse: + type: array + items: + $ref: '#/components/schemas/InvitationSuccessResponse' + example: + [ + { + "username": "xyz@gmail.com", + "result": { + "status": "Failed", + "errorCode": "OUI-10018", + "errorMessage": "Invitation already exists.", + "errorDescription": "An active invitation already exists for the user." + } + }, + { + "username": "abc@gmail.com", + "result": { + "status": "Successful" + } + } + ] + InvitationSuccessResponse: + type: object + required: + - username + - result + properties: + username: + type: string + description: Username of the user who will be invited to the organization. This can be an + email or an alphanumeric username. + example: alex@gmail.com/alex + result: + type: object + description: Role assignments which the user will be assigned to. + properties: + status: + type: string + example: Successful/Failed + errorCode: + type: string + example: OUI-00000 + errorMessage: + type: string + example: Some Error Message + errorDescription: + type: string + example: Some Error Description + confirmationCode: + type: string + description: Confirmation code for the invitation when internally managed notifications are disabled. + example: "3363329b-c8c5-4c71-9500-9ea8c4e77d45" + IntrospectRequestBody: + type: object + required: + - confirmationCode + properties: + confirmationCode: + type: string + example: 2663329b-c8c5-4c71-9500-9ea8c4e77d94 + IntrospectSuccessResponse: + type: object + required: + - confirmationCode + - username + - userOrganization + - initiatedOrganization + - status + properties: + confirmationCode: + type: string + description: Confirmation code of the invitation which needs to be introspected. + example: 2663329b-c8c5-4c71-9500-9ea8c4e77d94 + username: + type: string + description: Username of the user who will be invited to the organization. This can be an + email or an alphanumeric username. + example: alex@gmail.com/alex + userOrganization: + type: string + description: Organization which the user is residing. + example: 8763329b-c8c5-4c71-9500-9ea8c4e77345 + initiatedOrganization: + type: string + description: Organization which the invitation is initiated. + example: 1239329b-c8c5-4c71-9500-9ea8c4e70987 + status: + type: string + description: Status of the invitation. + example: PENDING/EXPIRED + example: + { + "confirmationCode": "2663329b-c8c5-4c71-9500-9ea8c4e77d94", + "username": "abc@gmail.com", + "userOrganization": "10084a8d-113f-4211-a0d5-efe36b082211", + "initiatedOrganization": "c7af5764-ceb9-4f64-8848-f04520df99ef", + "status": "PENDING" + } + AcceptanceRequestBody: + type: object + required: + - confirmationCode + properties: + confirmationCode: + type: string + example: 2663329b-c8c5-4c71-9500-9ea8c4e77d94 + InvitationsListResponse: + type: object + properties: + invitations: + type: array + items: + $ref: '#/components/schemas/InvitationResponse' + example: + { + "invitations": [ + { + "id": "4ec7e4d6-7979-4b0f-b7e1-e5737b1006b6", + "username": "john", + "email": "john@gmail.com", + "roles": [ + { + "displayName": "Administrator", + "id": "78b97c7a-faf1-441f-8c93-c22e5daf39f0", + "audience": [ + { + "value": "85504311-3a66-4a2f-bda1-eb37592a3d7c", + "display": "Console", + "type": "application" + } + ] + }, + { + "displayName": "Administartor", + "id": "aa82a741-1bf9-4855-b676-d590381f2453", + "audience": [ + { + "value": "43f8a68b-1a39-40a6-a4cd-25e9581c95a0", + "display": "Pet Care App", + "type": "application" + } + ] + } + ], + "groups": [ + { + "displayName": "group2", + "id": "47cb13fa-3c15-4dc4-8f7a-1b5bf63d451b" + }, + { + "displayName": "group1", + "id": "69c833c5-ee01-4ad1-95ab-3e01a58efc73" + } + ], + "status": "PENDING", + "expiredAt": "2024-01-22 13:09:41.702" + }, + { + "id": "78652ff3-b9ab-4252-b73e-f7a1545fd50a", + "username": "abc", + "email": "abc@gmail.com", + "roles": [ + { + "displayName": "Administrator", + "id": "78b97c7a-faf1-441f-8c93-c22e5daf39f0", + "audience": [ + { + "value": "85504311-3a66-4a2f-bda1-eb37592a3d7c", + "display": "Console", + "type": "application" + } + ] + }, + { + "displayName": "Administartor", + "id": "aa82a741-1bf9-4855-b676-d590381f2453", + "audience": [ + { + "value": "43f8a68b-1a39-40a6-a4cd-25e9581c95a0", + "display": "Pet Care App", + "type": "application" + } + ] + } + ], + "groups": [ + { + "displayName": "group2", + "id": "47cb13fa-3c15-4dc4-8f7a-1b5bf63d451b" + }, + { + "displayName": "group1", + "id": "69c833c5-ee01-4ad1-95ab-3e01a58efc73" + } + ], + "status": "PENDING", + "expiredAt": "2024-01-23 12:48:41.064" + } + ] + } + InvitationResponse: + type: object + required: + - id + - username + - email + - status + properties: + id: + type: string + example: f7594498-5b52-4201-abd5-d7cf72565c73 + username: + type: string + example: alex@gmail.com/alex + email: + type: string + example: alex@gmail.com + roles: + type: array + items: + $ref: '#/components/schemas/RoleAssignmentResponse' + groups: + type: array + items: + $ref: '#/components/schemas/GroupAssignmentResponse' + status: + type: string + example: PENDING/EXPIRED + expiredAt: + type: string + example: 2021-08-10T10:15:30.00Z + GroupAssignmentResponse: + type: object + properties: + displayName: + type: string + example: 'sales' + id: + type: string + example: 'f5b761ca-62f2-48ba-935b-f7b460f58e5c' + RoleAssignmentResponse: + type: object + properties: + displayName: + type: string + example: 'loginRole' + id: + type: string + example: '4645709c-ea8c-4495-8590-e1fa0efe3de0' + audience: + type: object + items: + $ref: '#/components/schemas/Audience' + Audience: + type: object + properties: + value: + type: string + example: '3645709f-ea8d-5595-7690-e1fa0efe3df9' + display: + type: string + example: 'My Org' + type: + type: string + example: 'organization' + Property: + type: object + properties: + key: + type: string + example: "manageNotificationsInternally" + value: + type: string + example: "false" + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: OUI-00000 + description: An error code. + message: + type: string + example: Some Error Message + description: An error message. + description: + type: string + example: Some Error Description + description: An error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + description: An error trace identifier. + #-------------------------------------------------------- + # Descriptions of error responses. + #-------------------------------------------------------- + responses: + NotFound: + description: Resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-user-share-v2.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-user-share-v2.yaml new file mode 100644 index 0000000000..0e0ed97419 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-user-share-v2.yaml @@ -0,0 +1,1081 @@ +openapi: 3.0.0 +info: + version: 1.0.0 + title: "User Sharing API (v2)" + description: |- + This document defines the **User Sharing REST API (v2)** for organizations in **Asgardeo**. + It enables organization administrators to: + - Share users across child organizations. + - Configure per-organization user role assignments. + - Manage and revoke shared access. + - Retrieve a user's shared organizations and effective roles. + + **Shared scopes with Organization User Sharing API v1:** The OAuth2 scopes `internal_org_user_share`, `internal_org_user_unshare`, and `internal_org_user_shared_access_view` are shared between this API (Organization User Sharing v2) and the Organization User Sharing v1 API. Authorizing either API automatically grants access to the equivalent endpoints in the other that use the same scopes. + + contact: + name: WSO2 + url: 'https://wso2.com/asgardeo/' + email: iam-dev@wso2.org + license: + name: Apache 2.0 + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2' + variables: + root-organization-name: + default: "{root-organization-name}" + +security: + - OAuth2: [] + +paths: + /users/share: + post: + tags: + - User Sharing + summary: Share users with specific organizations + description: |- + Share one or more users with a selected set of organizations, optionally + assigning roles to each shared user in each target organization. + + This endpoint is treated as a **processing function**: + it triggers a sharing process and responds with `202 Accepted`. + + **Scope required:** `internal_org_user_share` + operationId: shareUsersWithSelected + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UserShareSelectedRequestBody" + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + organizations: + - orgId: "b028ca17-8f89-449c-ae27-fa955e66465d" + policy: "SELECTED_ORG_ONLY" + roleAssignment: + mode: "SELECTED" + roles: + - displayName: "Org Admin" + audience: + display: "My Org 1" + type: "organization" + - orgId: "a17b28ca-9f89-449c-ae27-fa955e66465f" + policy: "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN" + # roleAssignment omitted => treated as mode = NONE (no roles) + responses: + "202": + description: User sharing process triggered successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "User sharing process triggered successfully." + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/users/share' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8", + "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + ] + }, + "organizations": [ + { + "orgId": "b028ca17-8f89-449c-ae27-fa955e66465d", + "policy": "SELECTED_ORG_ONLY", + "roleAssignment": { + "mode": "SELECTED", + "roles": [ + { + "displayName": "Org Admin", + "audience": { + "display": "My Org 1", + "type": "organization" + } + } + ] + } + }, + { + "orgId": "a17b28ca-9f89-449c-ae27-fa955e66465f", + "policy": "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN" + } + ] + }' + + patch: + tags: + - User Sharing + summary: Perform incremental role assignment operations for already shared users + description: |- + Perform **incremental updates** to the shared attributes (eg: role assignments) update of already shared users. + + This endpoint supports **SCIM-like PATCH semantics**: + - `op: "add"` → assign additional roles. + - `op: "remove"` → remove specific roles. + + > **Note:** + > Only **role assignments** updates are managed here as of now. Sharing/unsharing organizations + > is handled via `/users/share`, `/users/share-with-all`, `/users/unshare`, + > and `/users/unshare-with-all`. + + **Scope required:** `internal_org_user_shared_access_update` + operationId: patchUserSharing + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UserSharingPatchRequest" + examples: + addAndRemoveRoles: + summary: Add and remove roles for a shared user in a specific organization + value: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + Operations: + - op: "add" + path: "organizations[orgId eq b028ca17-8f89-449c-ae27-fa955e66465d].roles" + value: + - displayName: "Org Viewer" + audience: + display: "My Org 1" + type: "organization" + - displayName: "App Editor" + audience: + display: "My App 1" + type: "application" + - op: "remove" + path: "organizations[orgId eq b028ca17-8f89-449c-ae27-fa955e66465d].roles" + value: + - displayName: "Org Admin" + audience: + display: "My Org 1" + type: "organization" + responses: + "202": + description: Role assignment patch operation processed successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "Shared user attributes patch process triggered successfully." + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Not Found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/users/share' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + ] + }, + "Operations": [ + { + "op": "add", + "path": "organizations[orgId eq b028ca17-8f89-449c-ae27-fa955e66465d].roles", + "value": [ + { + "displayName": "Org Viewer", + "audience": { + "display": "My Org 1", + "type": "organization" + } + }, + { + "displayName": "App Editor", + "audience": { + "display": "My App 1", + "type": "application" + } + } + ] + }, + { + "op": "remove", + "path": "organizations[orgId eq b028ca17-8f89-449c-ae27-fa955e66465d].roles", + "value": [ + { + "displayName": "Org Admin", + "audience": { + "display": "My Org 1", + "type": "organization" + } + } + ] + } + ] + }' + + /users/share-with-all: + post: + tags: + - User Sharing + summary: Share users with all organizations + description: |- + Share one or more users with **all organizations** according to the specified policy. + + A common `roleAssignment` can be provided to assign roles in all matching organizations. + + This endpoint is treated as a **processing function** and responds with `202 Accepted`. + + **Scope required:** `internal_org_user_share` + operationId: shareUsersWithAll + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UserShareAllRequestBody" + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + policy: "ALL_EXISTING_AND_FUTURE_ORGS" + roleAssignment: + mode: "SELECTED" + roles: + - displayName: "Global Org Viewer" + audience: + display: "My Org 1" + type: "organization" + responses: + "202": + description: Share-all process triggered successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/users/share-with-all' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + ] + }, + "policy": "ALL_EXISTING_AND_FUTURE_ORGS", + "roleAssignment": { + "mode": "SELECTED", + "roles": [ + { + "displayName": "Global Org Viewer", + "audience": { + "display": "My Org 1", + "type": "organization" + } + } + ] + } + }' + + /users/unshare: + post: + tags: + - User Sharing + summary: Unshare users from specific organizations + description: |- + Unshare one or more users from a selected set of organizations. + + > **Note:** + > This only removes the user from the specified organizations. If the user + > was shared with a parent org plus its children via a broader policy, + > you must explicitly include all relevant organization IDs when unsharing. + + This endpoint is treated as a **processing function** and responds with `202 Accepted`. + + **Scope required:** `internal_org_user_unshare` + operationId: unshareUsersFromSelected + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UserUnshareSelectedRequestBody" + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + orgIds: + - "b028ca17-8f89-449c-ae27-fa955e66465d" + - "a17b28ca-9f89-449c-ae27-fa955e66465f" + responses: + "202": + description: Unsharing process triggered successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "User unsharing process triggered successfully." + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/users/unshare' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + ] + }, + "orgIds": [ + "b028ca17-8f89-449c-ae27-fa955e66465d", + "a17b28ca-9f89-449c-ae27-fa955e66465f" + ] + }' + + /users/unshare-with-all: + post: + tags: + - User Sharing + summary: Unshare users from all organizations + description: |- + Completely remove all shared access for one or more users from **all organizations**. + + This endpoint is treated as a **processing function** and responds with `202 Accepted`. + + **Scope required:** `internal_org_user_unshare` + operationId: unshareUsersFromAll + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UserUnshareAllRequestBody" + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + responses: + "202": + description: Unshare-all process triggered successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "User unsharing process triggered successfully." + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/users/unshare-with-all' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + ] + } + }' + + /users/{userId}/share: + get: + tags: + - User Accessible Organizations + summary: List organizations where the user has shared access + description: |- + Retrieve the list of organizations where the specified user has shared access, + including per-organization effective role assignments. + + The response shape depends on how the user was shared: + - If user has been shared via **`ALL_EXISTING_AND_FUTURE_ORGS`** policy → top-level `sharingMode` is returned, + and no per-org `sharingMode` is present on each organization entry. + - If user has been shared via **`SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN`** → no top-level `sharingMode` is returned, + and each organization entry includes its own `sharingMode`. + - If user has not been shared under any future applicable policies mentioned above, the response will simply include the list of shared organizations without any `sharingMode` information. + + This follows the same pattern as **`GET /applications/{applicationId}/share`**. + + **Scope required:** `internal_org_user_shared_access_view` + operationId: getUserSharedOrganizations + parameters: + - in: path + name: userId + required: true + schema: + type: string + description: The ID of the user. + - in: query + name: before + required: false + schema: + type: string + example: "Ng==" + description: Base64 encoded cursor value for backward pagination. + - in: query + name: after + required: false + schema: + type: string + example: "Ng==" + description: Base64 encoded cursor value for forward pagination. + - in: query + name: filter + required: false + schema: + type: string + example: "orgId eq b028ca17-8f89-449c-ae27-fa955e66465d" + description: |- + Condition to filter the retrieval of records. + Supports `sw`, `co`, `ew`, and `eq` operations. + - in: query + name: limit + required: false + schema: + type: integer + example: 10 + description: |- + Maximum number of records to return. If you do not specify this parameter, + this will return all shared organizations. + - in: query + name: recursive + required: false + schema: + type: boolean + description: |- + Determines whether a recursive search should happen. + If set to true, includes shared organizations in all levels of the hierarchy; + if set to false, includes only shared organizations in the next level of the hierarchy. + - in: query + name: attributes + required: false + schema: + type: string + example: "roles" + description: |- + Specifies the required parameters in the response. + Supported values: `roles`, `sharingMode`. + responses: + "200": + description: Successful response with the user's shared organizations. + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/UserSharedOrgsAllResponse" + - $ref: "#/components/schemas/UserSharedOrgsSelectedResponse" + examples: + sharedWithAll: + summary: User shared with all organizations + value: + links: + - href: "/t/{root-organization-name}/o/api/server/v2/users/7a1b7d63-8cfc-4dc9-9332-3f84641b72d8/share?limit=10&after=MTA=" + rel: "next" + sharingMode: + policy: "ALL_EXISTING_AND_FUTURE_ORGS" + roleAssignment: + mode: "SELECTED" + roles: + - displayName: "Global Org Viewer" + audience: + display: "My Org 1" + type: "organization" + organizations: + - orgId: "b028ca17-8f89-449c-ae27-fa955e66465d" + orgName: "Child Org 1" + orgHandle: "child-org-1" + orgStatus: "ACTIVE" + orgRef: "/t/wso2.com/o/api/server/v1/organizations/b028ca17-8f89-449c-ae27-fa955e66465d" + hasChildren: true + depthFromRoot: 1 + parentOrgId: "08f8c1d2-4b3e-4c5a-9f6b-7d8e9f0a1b2c" + parentUserId: "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + sharedUserId: "550e8400-e29b-41d4-a716-446655440000" + sharedType: "SHARED" + roles: + - displayName: "Global Org Viewer" + audience: + display: "My Org 1" + type: "organization" + sharedWithSelected: + summary: User shared with selected organizations + value: + links: + - href: "/t/{root-organization-name}/o/api/server/v2/users/7a1b7d63-8cfc-4dc9-9332-3f84641b72d8/share?limit=10&after=MTA=" + rel: "next" + organizations: + - orgId: "b028ca17-8f89-449c-ae27-fa955e66465d" + orgName: "Child Org 1" + orgHandle: "child-org-1" + orgStatus: "ACTIVE" + orgRef: "/t/wso2.com/o/api/server/v1/organizations/b028ca17-8f89-449c-ae27-fa955e66465d" + hasChildren: true + depthFromRoot: 1 + parentOrgId: "08f8c1d2-4b3e-4c5a-9f6b-7d8e9f0a1b2c" + parentUserId: "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + sharedUserId: "550e8400-e29b-41d4-a716-446655440000" + sharedType: "SHARED" + sharingMode: + policy: "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN" + roleAssignment: + mode: "SELECTED" + roles: + - displayName: "Org Admin" + audience: + display: "My Org 1" + type: "organization" + roles: + - displayName: "Org Admin" + audience: + display: "My Org 1" + type: "organization" + - orgId: "a17b28ca-9f89-449c-ae27-fa955e66465f" + orgName: "Child Org 2" + orgHandle: "child-org-2" + orgStatus: "ACTIVE" + orgRef: "/t/wso2.com/o/api/server/v1/organizations/a17b28ca-9f89-449c-ae27-fa955e66465f" + hasChildren: false + depthFromRoot: 1 + parentOrgId: "08f8c1d2-4b3e-4c5a-9f6b-7d8e9f0a1b2c" + parentUserId: "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + sharedUserId: "3f2504e0-4f89-41d3-9a0c-0305e82c3301" + sharedType: "SHARED" + sharingMode: + policy: "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN" + roleAssignment: + mode: "NONE" + roles: [] + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + label: Basic + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/users/{userId}/share' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + - lang: Curl + label: With pagination and attributes + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/users/{userId}/share?limit=10&after=Ng==&attributes=roles,sharingMode&recursive=true' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + - lang: Curl + label: With filter + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v2/users/{userId}/share?filter=orgId+eq+b028ca17-8f89-449c-ae27-fa955e66465d' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + +components: + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: "https://api.asgardeo.io/t/{root-organization-name}/oauth2/authorize" + tokenUrl: "https://api.asgardeo.io/t/{root-organization-name}/oauth2/token" + scopes: + internal_org_user_share: "Share users across organizations." + internal_org_user_unshare: "Unshare users from organizations." + internal_org_user_shared_access_view: "View shared organizations and roles for a user." + internal_org_user_shared_access_update: "Update shared attributes (e.g., roles) for shared users." + + schemas: + + # ===== Core request models ===== + + UserCriteria: + type: object + description: Criteria for selecting users to share/unshare. + properties: + userIds: + type: array + description: List of user IDs. + items: + type: string + required: + - userIds + + UserShareSelectedRequestBody: + type: object + description: |- + Request body for sharing users with a **selected set of organizations**. + required: + - userCriteria + - organizations + properties: + userCriteria: + $ref: "#/components/schemas/UserCriteria" + organizations: + type: array + description: List of organizations to share users with, along with policies and optional role assignments. + items: + $ref: "#/components/schemas/UserOrgShareConfig" + + UserOrgShareConfig: + type: object + description: Per-organization sharing configuration for selected organizations. + required: + - orgId + - policy + properties: + orgId: + type: string + description: Organization ID to share the users with. + policy: + type: string + description: |- + Sharing scope for this organization. + + Possible values: + - `SELECTED_ORG_ONLY` + - `SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN` + roleAssignment: + $ref: "#/components/schemas/RoleAssignment" + description: |- + Optional role assignment configuration for this organization. + If omitted, the default behavior is to assign **no roles** (equivalent to `mode = NONE`). + + UserShareAllRequestBody: + type: object + description: |- + Request body for sharing users with **all organizations** controlled by the selected policy. + required: + - userCriteria + - policy + properties: + userCriteria: + $ref: "#/components/schemas/UserCriteria" + policy: + type: string + description: |- + Global sharing policy. + + Possible values: + - `ALL_EXISTING_AND_FUTURE_ORGS` + roleAssignment: + $ref: "#/components/schemas/RoleAssignment" + description: |- + Optional global role assignment configuration that applies to all organizations + covered by this policy. If omitted, default behavior is **no roles**. + + UserUnshareSelectedRequestBody: + type: object + description: |- + Request body for unsharing users from selected organizations. + required: + - userCriteria + - orgIds + properties: + userCriteria: + $ref: "#/components/schemas/UserCriteria" + orgIds: + type: array + description: List of organization IDs from which users should be unshared. + items: + type: string + + UserUnshareAllRequestBody: + type: object + description: |- + Request body for unsharing users from **all organizations**. + required: + - userCriteria + properties: + userCriteria: + $ref: "#/components/schemas/UserCriteria" + + # ===== PATCH models ===== + + UserSharingPatchRequest: + type: object + description: |- + PATCH request for performing incremental role assignment operations + on already shared users. + required: + - userCriteria + - Operations + properties: + userCriteria: + $ref: "#/components/schemas/UserCriteria" + Operations: + type: array + items: + $ref: "#/components/schemas/UserSharingPatchOperation" + + UserSharingPatchOperation: + type: object + description: |- + A single PATCH operation (SCIM-like) for user sharing. + + Currently supported: + - `op: "add"` → Add roles. + - `op: "remove"` → Remove roles. + required: + - op + - path + properties: + op: + type: string + description: "Operation type. Supported values: `add`, `remove`." + path: + type: string + description: |- + JSON-like path in the format: + - `organizations[orgId eq \"\"].roles` + value: + type: array + description: |- + List of roles to add/remove under the specified path. + items: + $ref: "#/components/schemas/RoleShareConfig" + + # ===== Role assignment models ===== + + RoleAssignment: + type: object + description: |- + Role assignment configuration for shared users. + + This controls which roles are assigned to the user in the target organization. + + - `NONE` → Do not assign any roles via user sharing. + - `SELECTED` → Assign only the roles listed under `roles`. + properties: + mode: + type: string + enum: + - NONE + - SELECTED + default: SELECTED + description: Mode of role assignment. + roles: + type: array + description: |- + List of roles to assign when `mode = SELECTED`. + Required when `mode = SELECTED`. Ignored when `mode = NONE`. + items: + $ref: "#/components/schemas/RoleShareConfig" + + RoleShareConfig: + type: object + description: |- + Role to be assigned to the shared user in the sub-organization. + required: + - displayName + - audience + properties: + displayName: + type: string + description: "Human-readable name of the role." + example: "Org Admin" + audience: + type: object + required: + - display + - type + properties: + display: + type: string + description: "Display name of the audience (organization or application)." + example: "My Org 1" + type: + type: string + description: |- + Type of the role audience: + - `organization` + - `application` + example: "organization" + + # ===== Sharing Mode models ===== + + SharingModeAll: + type: object + description: |- + Top-level sharing mode present when the user is shared with ALL organizations. + Policy is always `ALL_EXISTING_AND_FUTURE_ORGS`. + required: + - policy + - roleAssignment + properties: + policy: + type: string + enum: + - ALL_EXISTING_AND_FUTURE_ORGS + description: Global sharing policy covering all existing and future organizations. + roleAssignment: + $ref: "#/components/schemas/RoleAssignment" + + SharingModeSelected: + type: object + description: |- + Per-org sharing mode present when the user is shared with SELECTED organizations. + Policy is always `SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN`. + required: + - policy + - roleAssignment + properties: + policy: + type: string + enum: + - SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN + description: Sharing policy scoped to a selected organization and its children. + roleAssignment: + $ref: "#/components/schemas/RoleAssignment" + + # ===== Organization entry models ===== + + UserSharedOrganizationBase: + type: object + description: Common fields for a shared organization entry. + properties: + orgId: + type: string + description: ID of the child organization. + orgName: + type: string + description: Name of the child organization. + orgHandle: + type: string + description: Unique, human-readable handle of the organization. + example: "sampleOrg" + orgStatus: + type: string + description: Current status of the organization. + example: "ACTIVE" + orgRef: + type: string + description: API reference of the organization resource. + example: "/t/wso2.com/o/api/server/v1/organizations/b4526d91-a8bf-43d2-8b14-c548cf73065b" + hasChildren: + type: boolean + description: Indicates whether the organization has child organizations. + depthFromRoot: + type: integer + description: Depth of the organization in the hierarchy, where root is 0. + example: 1 + parentOrgId: + type: string + nullable: true + description: ID of the parent (sharing initiated) organization. + parentUserId: + type: string + nullable: true + description: ID of the user in the parent (sharing initiated) organization. + sharedUserId: + type: string + description: ID of the shared user object in the target organization. + sharedType: + type: string + description: Shared type of the user. + example: "SHARED" + roles: + type: array + description: Effective roles assigned to this user in this organization via user sharing. + items: + $ref: "#/components/schemas/RoleShareConfig" + + UserSharedOrganizationAllEntry: + description: |- + Organization entry when user is shared via ALL_EXISTING_AND_FUTURE_ORGS policy. + No per-org sharingMode is present. + allOf: + - $ref: "#/components/schemas/UserSharedOrganizationBase" + + UserSharedOrganizationSelectedEntry: + description: |- + Organization entry when user is shared via SELECTED org policy. + Includes per-org sharingMode with policy SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN. + allOf: + - $ref: "#/components/schemas/UserSharedOrganizationBase" + - type: object + required: + - sharingMode + properties: + sharingMode: + $ref: "#/components/schemas/SharingModeSelected" + + # ===== Top-level response models ===== + + UserSharedOrgsAllResponse: + type: object + description: |- + Response when the user is shared with ALL organizations. + - Top-level `sharingMode` is present with policy `ALL_EXISTING_AND_FUTURE_ORGS`. + - Per-org `sharingMode` is absent on each organization entry. + required: + - sharingMode + - organizations + properties: + links: + type: array + items: + $ref: "#/components/schemas/Link" + sharingMode: + $ref: "#/components/schemas/SharingModeAll" + organizations: + type: array + items: + $ref: "#/components/schemas/UserSharedOrganizationAllEntry" + + UserSharedOrgsSelectedResponse: + type: object + description: |- + Response when the user is shared with SELECTED organizations. + - Top-level `sharingMode` is absent. + - Each organization entry includes its own `sharingMode` with policy + `SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN`. + required: + - organizations + properties: + links: + type: array + items: + $ref: "#/components/schemas/Link" + organizations: + type: array + items: + $ref: "#/components/schemas/UserSharedOrganizationSelectedEntry" + + # ===== Common models ===== + + Link: + type: object + properties: + href: + type: string + example: "/t/{root-organization-name}/o/api/server/v2/users/7a1b7d63-8cfc-4dc9-9332-3f84641b72d8/share?limit=10&after=MTA=" + rel: + type: string + example: "next" + + ProcessSuccessResponse: + type: object + description: |- + Indicates that a sharing / unsharing / patch process has been triggered. + properties: + status: + type: string + example: "Processing" + details: + type: string + example: "User sharing process triggered successfully." + + Error: + type: object + description: | + Error response model with a code, message, description, and trace ID. + required: + - code + - message + - traceId + properties: + code: + type: string + example: "US-00000" + message: + type: string + example: "Some error message." + description: + type: string + example: "Some error description." + traceId: + type: string + example: "e0fbcfeb-7fc2-4b62-8b82-72d3c5fbcdeb" diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-user-share.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-user-share.yaml new file mode 100644 index 0000000000..37803a7d1a --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/organization-user-share.yaml @@ -0,0 +1,800 @@ +openapi: 3.0.0 +info: + version: "v1" + title: 'User Sharing API (deprecated)' + description: |- + This document defines the **User Sharing REST API for organizations** in **Asgardeo**. This enables organization administrators to share users across child organizations, manage and revoke shared access, and retrieve users' shared organizations and roles. + + **Shared scopes with Organization User Sharing API v2:** The OAuth2 scopes `internal_org_user_share`, `internal_org_user_unshare`, and `internal_org_user_shared_access_view` are shared between this API (Organization User Sharing v1) and the Organization User Sharing v2 API. Authorizing either API automatically grants access to the equivalent endpoints in the other that use the same scopes. + +security: + - OAuth2: [] + +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1' + variables: + tenant-domain: + default: "{tenant-domain}" + +paths: + /users/share: + post: + tags: + - User Sharing + summary: Share a user across specific organizations + description: | + This API shares one or more users across specified organizations, assigning roles based on the provided policy. The policy defines the sharing scope for each organization, including whether access extends to child organizations. + + > **Important**
+ > If you switch a user from a general sharing policy to a selective sharing policy or vice versa, without unsharing a user, it can lead to access issues. To ensure a smooth transition, first unshare the user from all organizations and share them again with the desired organization(s) under the updated policy.
+ > If you overlook this step and notice unexpected user-sharing behavior when new organizations are created, use the `/o/users/unshare-with-all` API to reset access before applying the new sharing policy. + + Scope(Permission) required: `internal_org_user_share` + operationId: processUserSharing + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserShareRequestBody' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + organizations: + - orgId: "b028ca17-8f89-449c-ae27-fa955e66465d" + policy: "SELECTED_ORG_ONLY" + roles: + - displayName: "role_2" + audience: + display: "My Org 1" + type: "organization" + - orgId: "a17b28ca-9f89-449c-ae27-fa955e66465f" + policy: "SELECTED_ORG_WITH_EXISTING_IMMEDIATE_AND_FUTURE_CHILDREN" + roles: [] + required: true + responses: + '202': + description: Sharing process triggered successfully. + content: + application/json: + schema: + $ref: '#/components/schemas/ProcessSuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/users/share' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8", + "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + ] + }, + "organizations": [ + { + "orgId": "b028ca17-8f89-449c-ae27-fa955e66465d", + "policy": "SELECTED_ORG_ONLY", + "roles": [ + { + "displayName": "role_2", + "audience": { + "display": "My Org 1", + "type": "organization" + } + } + ] + }, + { + "orgId": "a17b28ca-9f89-449c-ae27-fa955e66465f", + "policy": "SELECTED_ORG_WITH_EXISTING_IMMEDIATE_AND_FUTURE_CHILDREN", + "roles": [] + } + ] + }' + x-codegen-request-body-name: body + + /users/share-with-all: + post: + tags: + - User Sharing + summary: Share a user with all organizations + description: | + This API shares users across all organizations, applying the provided roles to each organization. The policy determines the scope of sharing, including whether it applies to all current organizations or future organizations as well. + + > **Important**
+ > If you switch a user from a general sharing policy to a selective sharing policy or vice versa, without unsharing a user, it can lead to access issues. To ensure a smooth transition, first unshare the user from all organizations and share them again with the desired organization(s) under the updated policy.
+ > If you overlook this step and notice unexpected user-sharing behavior when new organizations are created, use the `/o/users/unshare-with-all` API to reset access before applying the new sharing policy. + + Scope(Permission) required: `internal_org_user_share` + operationId: processUserSharingAll + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserShareWithAllRequestBody' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + policy: "ALL_EXISTING_ORGS_ONLY" + roles: + - displayName: "role_1" + audience: + display: "My Org 1" + type: "organization" + - displayName: "role_2" + audience: + display: "My App 1" + type: "application" + required: true + responses: + '202': + description: Sharing process triggered successfully. + content: + application/json: + schema: + $ref: '#/components/schemas/ProcessSuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/users/share-with-all' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8", + "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + ] + }, + "policy": "ALL_EXISTING_ORGS_ONLY", + "roles": [ + { + "displayName": "role_1", + "audience": { + "display": "My Org 1", + "type": "organization" + } + }, + { + "displayName": "role_2", + "audience": { + "display": "My App 1", + "type": "application" + } + } + ] + }' + x-codegen-request-body-name: body + + /users/unshare: + post: + tags: + - User Sharing + summary: Unshare a user from specific organizations + description: | + The parent organization admins can use this API to unshare a shared user from a selected list of organizations. + The payload includes the list of user IDs and the organizations from which the users should be unshared. + + Note the following details: + - unsharing can only be done from the same organization that initially shared the user. + - if you have shared a user with an organization and its children, unsharing the user from that + organization will not unshare the user from the child organizations. + You must explicitly declare all the organization IDs from which the user should be removed. + + Scope(Permission) required: `internal_org_user_unshare` + operationId: processUserUnsharing + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserUnshareRequestBody' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + organizations: + - "b028ca17-8f89-449c-ae27-fa955e66465d" + - "a17b28ca-9f89-449c-ae27-fa955e66465f" + required: true + responses: + '202': + description: Unsharing process triggered successfully. + content: + application/json: + schema: + $ref: '#/components/schemas/ProcessSuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/users/unshare' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8", + "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + ] + }, + "organizations": [ + "b028ca17-8f89-449c-ae27-fa955e66465d", + "a17b28ca-9f89-449c-ae27-fa955e66465f" + ] + }' + x-codegen-request-body-name: body + + /users/unshare-with-all: + post: + tags: + - User Sharing + summary: Remove a user's shared access + description: | + This API removes all shared access for one or more users, unsharing them from all organizations. + Note that unsharing can only be done from the same organization that initially shared the user. + + Scope(Permission) required: `internal_org_user_unshare` + operationId: removeUserSharing + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserUnshareWithAllRequestBody' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + required: true + responses: + '202': + description: Share removal process triggered successfully. + content: + application/json: + schema: + $ref: '#/components/schemas/ProcessSuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/users/unshare-with-all' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8", + "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + ] + } + }' + x-codegen-request-body-name: body + + /users/{userId}/shared-organizations: + get: + tags: + - User Accessible Organizations + summary: Get the list of organizations accessible by the user + description: | + This API retrieves the list of organizations where the specified user has shared access. + + Scope(Permission) required: `internal_org_user_shared_access_view` + parameters: + - in: path + name: userId + required: true + schema: + type: string + description: The ID of the user. + - in: query + name: after + schema: + type: string + description: The cursor indicating the item after which the next page of results will begin. + - in: query + name: before + schema: + type: string + description: The cursor pointing to the item before which the previous page of results should be returned. + - in: query + name: limit + schema: + type: integer + description: The maximum number of results to return per page. + - in: query + name: filter + schema: + type: string + description: A filter to apply to the results, such as by organization name or other criteria. + - in: query + name: recursive + schema: + type: boolean + default: false + description: Whether to retrieve organizations recursively, including child organizations. + responses: + '200': + description: Successful Response with Accessible Organizations + content: + application/json: + schema: + $ref: '#/components/schemas/UserSharedOrganizationsResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/users/{userId}/shared-organizations' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + + /users/{userId}/shared-roles: + get: + tags: + - User Accessible Roles + summary: Get roles assigned to a user in an organization + description: | + This API fetches the roles assigned to the specified user within a particular organization.
+ Note that the roles returned are only the roles assigned by the organization that initially shared the user. + Any additional roles assigned to the user from the shared organizations are not included in this response. + + Scope(Permission) required: `internal_org_user_shared_access_view` + parameters: + - in: path + name: userId + required: true + schema: + type: string + description: The ID of the user for whom roles are being retrieved. + - in: query + name: orgId + required: true + schema: + type: string + description: The organization ID for which roles are being fetched. + - in: query + name: after + schema: + type: string + description: The cursor indicating the item after which the next page of results will begin. + - in: query + name: before + schema: + type: string + description: The cursor pointing to the item before which the previous page of results should be returned. + - in: query + name: limit + schema: + type: integer + description: The maximum number of results to return per page. + - in: query + name: filter + schema: + type: string + description: Filter to apply when retrieving the roles. + - in: query + name: recursive + schema: + type: boolean + description: Set to true to retrieve roles recursively. + responses: + '200': + description: Successful Response with Accessible Roles + content: + application/json: + schema: + $ref: '#/components/schemas/UserSharedRolesResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/o/api/server/v1/users/{userId}/shared-roles?orgId={orgId}' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + +components: + + securitySchemes: + + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/token' + scopes: + share: internal_org_user_share + unshare: internal_org_user_unshare + view: internal_org_user_shared_access_view + + schemas: + + UserShareRequestBody: + type: object + description: | + The request body for sharing users with multiple child organizations. + Includes a list of users, organizations, sharing scope as policy, and roles. + required: + - userCriteria + - organizations + properties: + userCriteria: + type: object + description: Contains a list of user IDs to be shared. + properties: + userIds: + type: array + description: List of user IDs. + items: + type: string + description: The ID of a user to be shared. + organizations: + type: array + description: List of organizations specifying sharing scope and roles. + items: + type: object + required: + - orgId + - policy + properties: + orgId: + type: string + description: The ID of the organization to share the users with. + policy: + type: string + description: | + The scope of sharing for this organization. Possible values are: + + - SELECTED_ORG_ONLY:
+ Share the resource only with the selected organization. + - SELECTED_ORG_WITH_ALL_EXISTING_CHILDREN_ONLY:
+ Share with the selected organization and all its existing child organizations. New child organizations created after the policy is applied will **not** be included. + - SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN:
+ Share with the selected organization, all its current child organizations, and automatically include any future child organizations created later. + - SELECTED_ORG_WITH_EXISTING_IMMEDIATE_CHILDREN_ONLY:
+ Share only with the selected organization’s immediate existing child organizations. Future immediate children are **not** included. + - SELECTED_ORG_WITH_EXISTING_IMMEDIATE_AND_FUTURE_CHILDREN:
+ Share with the selected organization’s immediate existing child organizations and automatically include any immediate child organizations created in the future. + roles: + type: array + description: A list of roles to be shared with the organization. + items: + $ref: '#/components/schemas/RoleWithAudience' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + organizations: + - orgId: "b028ca17-8f89-449c-ae27-fa955e66465d" + policy: "SELECTED_ORG_ONLY" + roles: + - displayName: "role_2" + audience: + display: "My Org 1" + type: "organization" + - orgId: "a17b28ca-9f89-449c-ae27-fa955e66465f" + policy: "SELECTED_ORG_ONLY" + roles: [] + + UserShareWithAllRequestBody: + type: object + description: | + Process a request to share users with all organizations. + The payload contains the roles applicable across all organizations and a policy that defines the scope of sharing. + required: + - userCriteria + - policy + properties: + userCriteria: + type: object + description: Contains a list of user IDs to be shared. + properties: + userIds: + type: array + description: List of user IDs. + items: + type: string + description: The ID of a user to be shared. + policy: + type: string + description: | + The scope of sharing for this organization. Possible values are: + + - ALL_EXISTING_ORGS_ONLY:
+ Share the resource with all organizations that exist at the time the policy is applied. New organizations created after the policy is applied will **not** be included. + - ALL_EXISTING_AND_FUTURE_ORGS:
+ Share the resource with all current organizations and automatically include any organizations created in the future. + - IMMEDIATE_EXISTING_ORGS_ONLY:
+ Share the resource only with immediate child organizations that exist when the policy is applied. Future immediate child organizations are **not** included. + - IMMEDIATE_EXISTING_AND_FUTURE_ORGS:
+ Share the resource with immediate existing child organizations and automatically include any immediate child organizations created in the future. + roles: + type: array + description: A list of roles shared across all organizations. + items: + $ref: '#/components/schemas/RoleWithAudience' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + policy: "ALL_EXISTING_ORGS_ONLY" + roles: + - displayName: "role_1" + audience: + display: "My Org 1" + type: "organization" + - displayName: "role_2" + audience: + display: "My App 1" + type: "application" + + UserUnshareRequestBody: + type: object + description: | + The request body for unsharing users from multiple organizations. + Includes a list of user IDs and a list of organization IDs. + required: + - userCriteria + - organizations + properties: + userCriteria: + type: object + description: Contains a list of user IDs to be unshared. + properties: + userIds: + type: array + description: List of user IDs. + items: + type: string + description: The ID of a user to be unshared. + organizations: + type: array + description: List of organization IDs from which the users should be unshared. + items: + type: string + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + organizations: + - "b028ca17-8f89-449c-ae27-fa955e66465d" + - "a17b28ca-9f89-449c-ae27-fa955e66465f" + + UserUnshareWithAllRequestBody: + type: object + description: | + The request body for unsharing users from all organizations. + Includes a list of user IDs. + required: + - userCriteria + properties: + userCriteria: + type: object + description: Contains a list of user IDs to be unshared. + properties: + userIds: + type: array + description: List of user IDs. + items: + type: string + description: The ID of a user to be unshared. + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + + UserSharedOrganizationsResponse: + type: object + description: | + Response listing organizations where a user has shared access, including sharing policies, shared type and pagination links for navigating results. + properties: + links: + type: array + description: Pagination links for navigating the result set. + items: + type: object + properties: + href: + type: string + description: URL to navigate to the next or previous page. + rel: + type: string + description: Indicates if the link is for the "next" or "previous" page. + sharedOrganizations: + type: array + description: A list of shared access details for the user across multiple organizations + items: + type: object + properties: + orgId: + type: string + description: ID of the child organization + example: "b028ca17-8f89-449c-ae27-fa955e66465d" + orgName: + type: string + description: Name of the child organization + example: "Organization Name" + sharedUserId: + type: string + description: ID of the shared user + example: "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + sharedType: + type: string + description: Shared type of the user (SHARED/INVITED) + example: "SHARED" + rolesRef: + type: string + description: URL reference to retrieve paginated roles for the shared user in this organization + example: "/o/api/server/v1/users/{userId}/shared-roles?orgId={orgId}" + + UserSharedRolesResponse: + type: object + description: | + Response showing the roles assigned to a user within a specific organization, with pagination support for large role sets. + properties: + links: + type: array + description: Pagination links for navigating the result set. + items: + type: object + properties: + href: + type: string + description: URL to navigate to the next or previous page. + rel: + type: string + description: Indicates if the link is for the "next" or "previous" page. + roles: + type: array + description: A list of roles with audience details + items: + $ref: '#/components/schemas/RoleWithAudience' + + RoleWithAudience: + type: object + description: | + Represents a user role within a specific audience (organization or application), defined by its display name and audience type. + required: + - displayName + - audience + properties: + displayName: + type: string + description: Display name of the role + example: "role_1" + audience: + type: object + required: + - display + - type + properties: + display: + type: string + description: Display name of the audience + example: "My Org 1" + type: + type: string + description: Type of the audience, e.g., 'organization' or 'application' + example: "organization" + + ProcessSuccessResponse: + type: object + description: | + Indicates that the sharing or unsharing process has started successfully, with the current status and relevant details. + properties: + status: + type: string + description: Status of the process. + example: "Processing" + details: + type: string + description: Additional information about the process. + example: "User sharing process triggered successfully." + + Error: + type: object + description: | + Details of an error, including code, message, description, and a trace ID to help with debugging. + required: + - code + - message + - traceId + properties: + code: + type: string + example: "OUI-00000" + description: An error code. + message: + type: string + example: "Some Error Message" + description: An error message. + description: + type: string + example: "Some Error Description" + description: An error description. + traceId: + type: string + format: uuid + example: "e0fbcfeb-7fc2-4b62-8b82-72d3c5fbcdeb" + description: A trace ID in UUID format to help with debugging. diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/role-management.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/role-management.yaml new file mode 100644 index 0000000000..4698d9575d --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/role-management.yaml @@ -0,0 +1,1156 @@ +openapi: 3.0.0 +info: + title: Asgardeo - SCIM 2.0 Roles V2 API + version: v2 + description: | + This is the RESTful API for SCIM 2.0 Roles API in Asgardeo organizations. + This API allows listing roles and updating users and groups of the roles. +servers: + - url: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/v2 + variables: + server-url: + default: https://api.asgardeo.io/t/{root-organization-name}/o/ + root-organization-name: + default: "{root-organization-name}" +security: + - OAuth2: [] + +paths: + /v2/Roles: + get: + tags: + - Roles Endpoint + summary: Filter Roles + description: | + This API returns roles according to the specified filter, sort and pagination parameters. + + Scope(Permission) required: `internal_org_role_mgt_view` + operationId: getRoleV2 + parameters: + - name: filter + in: query + description: Filter expression for filtering + schema: + type: string + - name: startIndex + in: query + description: The 1-based index of the first query result + schema: + type: integer + format: int32 + - name: count + in: query + description: Specifies the desired maximum number of query results per page. + schema: + type: integer + format: int32 + - name: sortBy + in: query + description: | + Specifies the attribute whose value + SHALL be used to order the returned responses + schema: + type: string + - name: sortOder + in: query + description: The order in which the "sortBy" parameter is applied. + schema: + type: string + responses: + "200": + description: Valid roles are found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RolesListResponseObjectV2' + "401": + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + "403": + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + "404": + description: No Role found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoRoleAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/v2/Roles' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Roles Endpoint + summary: Create Role + description: | + This API creates a role and returns the details of the created role + including its unique ID. These roles can only be associated with the + applications which are created in the organization level. You cannot + use these roles with the shared applications from the root organization. + + Scope(Permission) required: + - `internal_org_role_mgt_create` + + ➕ Additional Scopes + + To assign permissions, users, or groups to the role you create, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Assign permissions | `internal_org_role_mgt_permissions_update` | + | Assign users | `internal_org_role_mgt_users_update` | + | Assign groups | `internal_org_role_mgt_groups_update` | + operationId: createRoleV2 + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RoleCreationObjectV2' + responses: + '201': + description: Valid role is created + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RolePostResponseObjectV2' + '401': + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + '403': + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + '409': + description: Role already exist + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorRoleAlreadyAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/v2/Roles' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:schemas:extension:2.0:Role" + ], + "displayName": "loginRole", + "audience": { + "value": "3645709f-ea8d-5595-7690-e1fa0efe3df9", + "type": "application" + }, + "users": [ + { + "value": "008bba85-451d-414b-87de-c03b5a1f4217" + } + ], + "groups": [ + { + "value": "7bac6a86-1f21-4937-9fb1-5be4a93ef469" + } + ], + "permissions": [ + { + "value": "internal_login", + "display": "Internal Login" + } + ] + }' + x-codegen-request-body-name: body + /v2/Roles/.search: + post: + tags: + - Roles Endpoint + summary: Search Roles + description: | + This API returns roles according to the specified filter, sort and pagination parameters. + + Scope(Permission) required: `internal_org_role_mgt_view` + operationId: getRolesByPostV2 + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RoleSearchRequestObjectV2' + required: false + responses: + "200": + description: Valid roles are found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RoleSearchResponseObjectV2' + "401": + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + "403": + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + "404": + description: Valid roles are not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RoleSearchErrorResponseObject' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/v2/Roles/.search' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:SearchRequest" + ], + "startIndex": 1, + "filter": "displayName eq loginRole" + }' + x-codegen-request-body-name: body + /v2/Roles/{id}: + get: + tags: + - Roles Endpoint + summary: Get Role by ID + description: | + This API returns the role details of a particular role using its unique ID. + + Scope(Permission) required: `internal_org_role_mgt_view` + operationId: getRolebyIdV2 + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + responses: + "200": + description: Valid role is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RoleGetResponseObjectV2' + "401": + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + "403": + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + "404": + description: Valid role is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoRoleAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/v2/Roles/{role-id}' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Roles Endpoint + summary: Update Role - PUT + description: | + This API updates the **assigned users and groups** of a shared and non-shared roles.
+ Also, you can update role name, permissions of non-shared roles.
+ **Role audience and associated applications** can't be updated through this API. + + Scope(Permission) required: + - `internal_org_role_mgt_update` + + ➕ Additional Scopes + + To update permissions, users, or groups assignments of the role, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Update permissions | `internal_org_role_mgt_permissions_update` | + | Update users | `internal_org_role_mgt_users_update` | + | Update groups | `internal_org_role_mgt_groups_update` | + operationId: updateRoleV2 + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RolePutRequestObjectV2' + required: false + responses: + "200": + description: Role is updated + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RolePutResponseObjectV2' + "400": + description: Invalid Input + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + "401": + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + "403": + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + "404": + description: Valid role is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoRoleAvailable' + "406": + description: Not Acceptable + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNotAcceptable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/v2/Roles/{role-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "displayName": "loginRole", + "audience": { + "value": "3645709f-ea8d-5595-7690-e1fa0efe3df9", + "display": "My Org", + "type": "organization" + }, + "users": [ + { + "value": "409ca90b-2ba6-4474-9a45-2cf7376e6e43" + } + ], + "groups": [ + { + "value": "7bac6a86-1f21-4937-9fb1-5be4a93ef469" + } + ], + "permissions": [ + { + "value": "internal_login", + "display": "Internal Login" + } + ], + "associatedApplications": [ + { + "value": "9bbc6a86-1f21-4937-9fb1-5be4a93ef499", + "display": "XY Web Application" + }, + { + "value": "67bc6a86-1f21-4937-9fb1-5be4a93ef488", + "display": "XY Mobile Application" + } + ] + }' + x-codegen-request-body-name: body + delete: + tags: + - Roles Endpoint + summary: Delete Role + description: | + This API deletes a particular role using its unique ID. From this + operation in the organization level, you only can delete + the roles that are created directly in the organization level. + You cannot delete the roles that are shared from the root + organization. + Scope(Permission) required: `internal_org_role_mgt_delete` + operationId: deleteRoleV2 + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + responses: + '204': + description: Role is deleted + '401': + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + '403': + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + '404': + description: Valid role is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoRoleAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/v2/Roles/{role-id}' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Roles Endpoint + summary: Update Role - PATCH + description: | + This API updates the **assigned users and groups** of shared and non shared roles.
+ You can also update the role name and the permissions of non shared roles.
+ **Role audience and associated applications** cannot be updated through this API. + + Scope(Permission) required: + - `internal_org_role_mgt_update` + + ➕ Additional Scopes + + To update permissions, users, or groups assignments of the role, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Update permissions | `internal_org_role_mgt_permissions_update` | + | Update users | `internal_org_role_mgt_users_update` | + | Update groups | `internal_org_role_mgt_groups_update` | + operationId: patchRole + parameters: + - name: id + in: path + description: Unique id of the resource type. + required: true + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchRoleOperationRequestObjectV2' + required: false + responses: + "200": + description: Role is updated + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchRoleOperationResponseObjectV2' + "401": + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + "403": + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + "404": + description: Valid role is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoRoleAvailable' + "406": + description: Not Acceptable + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNotAcceptable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{root-organization-name}/o/scim2/v2/Roles/{role-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:PatchOp" + ], + "Operations": [ + { + "op": "add", + "path": "groups", + "value": [ + { + "value": "7bac6a86-1f21-4937-9fb1-5be4a93ef469" + } + ] + }, + { + "op": "add", + "path": "users", + "value": [ + { + "value": "9cac6a86-1f21-4937-9fb1-5be4a93ef349" + } + ] + }, + { + "op": "remove", + "path": "users[value eq 0565f472-28fe-4d93-83ad-096c66ed4a47]" + }, + { + "op": "remove", + "path": "groups[value eq 9065f445-265e-4rfg3-83ad-666c66ed4a55]" + } + ] + }' + x-codegen-request-body-name: body +components: + schemas: + RolesListResponseObjectV2: + type: object + properties: + totalResults: + type: integer + example: 3 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 3 + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/RoleObV2' + RoleSearchRequestObjectV2: + type: object + properties: + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:api:messages:2.0:SearchRequest + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + filter: + type: string + example: displayName eq loginRole + RoleSearchResponseObjectV2: + type: object + properties: + totalResults: + type: integer + example: 1 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 3 + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/RoleObV2' + RoleObV2: + type: object + properties: + displayName: + type: string + example: loginRole + meta: + type: object + properties: + location: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + id: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My Org + type: + type: string + example: organization + properties: + type: array + items: + type: object + properties: + name: + type: string + example: isSharedRole + value: + type: string + example: 'true' + RoleCreationObjectV2: + type: object + required: + - displayName + - schemas + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:extension:2.0:Role + displayName: + type: string + example: loginRole + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + type: + type: string + enum: + - application + - organization + example: application + users: + type: array + items: + type: object + example: + value: 008bba85-451d-414b-87de-c03b5a1f4217 + groups: + type: array + items: + type: object + example: + value: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + permissions: + type: array + items: + type: object + properties: + value: + type: string + example: internal_login + display: + type: string + example: Internal Login + RoleGetResponseObjectV2: + type: object + properties: + displayName: + type: string + example: loginRole + meta: + type: object + properties: + location: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + resourceType: + type: string + example: Role + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:extension:2.0:Role + id: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My Org + type: + type: string + example: organization + enum: + - application + - organization + users: + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Users/3a12bae9-4386-44be-befd-caf349297f45 + display: + type: string + example: kim + value: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + groups: + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Groups/7bac6a86-1f21-4937-9fb1-5be4a93ef469 + display: + type: string + example: DEFAULT/manager + value: + type: string + example: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + permissions: + type: array + items: + type: object + properties: + value: + type: string + example: internal_login + display: + type: string + example: Internal Login + associatedApplications: + type: array + example: + - value: 9bbc6a86-1f21-4937-9fb1-5be4a93ef499 + display: XY Web Application + - value: 67bc6a86-1f21-4937-9fb1-5be4a93ef488 + display: XY Mobile Application + items: + type: object + properties: + value: + type: string + display: + type: string + properties: + type: array + items: + type: object + properties: + name: + type: string + example: isSharedRole + value: + type: string + example: 'true' + RolePostResponseObjectV2: + type: object + properties: + displayName: + type: string + example: loginRole + meta: + type: object + properties: + location: + type: string + example: >- + https://api.asgardeo.io/t/{root-organization-name}/o/scim2/v2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + resourceType: + type: string + example: Role + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:extension:2.0:Role + id: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My App + type: + type: string + enum: + - application + - organization + example: application + RolePutRequestObjectV2: + type: object + properties: + displayName: + type: string + example: loginRole + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My Org + type: + type: string + example: organization + users: + type: array + items: + type: object + properties: {} + example: + value: 409ca90b-2ba6-4474-9a45-2cf7376e6e43 + groups: + type: array + items: + type: object + properties: {} + example: + value: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + permissions: + type: array + items: + type: object + properties: + value: + type: string + example: internal_login + display: + type: string + example: Internal Login + associatedApplications: + type: array + example: + - value: 9bbc6a86-1f21-4937-9fb1-5be4a93ef499 + display: XY Web Application + - value: 67bc6a86-1f21-4937-9fb1-5be4a93ef488 + display: XY Mobile Application + items: + type: object + properties: + value: + type: string + display: + type: string + RolePutResponseObjectV2: + type: object + properties: + displayName: + type: string + example: loginRole + meta: + type: object + properties: + location: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + resourceType: + type: string + example: Role + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:extension:2.0:Role + id: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My Org + type: + type: string + example: organization + enum: + - application + - organization + PatchRoleOperationRequestObjectV2: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:PatchOp + Operations: + type: array + example: + - op: add + path: groups + value: + - value: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + - op: add + path: users + value: + - value: 9cac6a86-1f21-4937-9fb1-5be4a93ef349 + - op: remove + path: "users[value eq 0565f472-28fe-4d93-83ad-096c66ed4a47]" + - op: remove + path: "groups[value eq 9065f445-265e-4rfg3-83ad-666c66ed4a55]" + items: + $ref: '#/components/schemas/RolePatchOperationobjV2' + RolePatchOperationobjV2: + type: object + properties: + op: + type: string + enum: + - add + - remove + - replace + path: + type: string + value: + type: array + items: + type: object + properties: + value: + type: string + PatchRoleOperationResponseObjectV2: + type: object + properties: + displayName: + type: string + example: loginRole + meta: + type: object + properties: + location: + type: string + example: https://api.asgardeo.io/t/{root-organization-name}/o/scim2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + resourceType: + type: string + example: Role + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:schemas:extension:2.0:Role + id: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My Org + type: + type: string + example: organization + enum: + - application + - organization + ErrorInvalidInput: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "400" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: invalidSyntax + detail: + type: string + example: "Request is unparsable, syntactically incorrect, or violates schema." + ErrorUnauthorized: + required: + - status + type: object + properties: + status: + type: string + example: "401" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: Unauthorized + ErrorNotAcceptable: + required: + - status + type: object + properties: + status: + type: string + example: "406" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: Not Acceptable + ErrorForbidden: + required: + - status + type: object + properties: + status: + type: string + example: "403" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: Forbidden + ErrorNoRoleAvailable: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Role not found in the system. + ErrorRoleAlreadyAvailable: + type: object + required: + - status + - schema + - detail + properties: + status: + type: string + example: '409' + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: 'Role with name: Internal/loginRole already exists in the system.' + RoleSearchErrorResponseObject: + required: + - itemsPerPage + - schemas + - startIndex + - totalResults + type: object + properties: + totalResults: + type: integer + example: 0 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 0 + schemas: + type: array + items: + type: object + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{root-organization-name}/oauth/authorize + tokenUrl: https://api.asgardeo.io/t/{root-organization-name}/oauth/token + scopes: + read: Grants read access + write: Grants write access + admin: Grants read and write access to administrative information + description: "**Authorization code OAuth flow** + **Organization Switch**" diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/rule-metadata.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/rule-metadata.yaml new file mode 100644 index 0000000000..afa5c7204a --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/rule-metadata.yaml @@ -0,0 +1,301 @@ +openapi: 3.0.1 +info: + title: WSO2 Identity Server Rule Metadata REST API + description: "The Rule Metadata API provides the essential metadata required to configure rules dynamically based on the flow context. \nThe metadata retrieved by this API is designed to support rule configuration in the user interface (UI) by delivering information about each configurable field, the set of applicable comparison operators (e.g., equals, contains) for each field, and lists of possible values or options for fields.\n" + contact: + name: WSO2 + url: https://wso2.com/identity-and-access-management/ + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: v1 +servers: +- url: "https://{server-url}/t/{tenant-domain}/api/server/v1" + variables: + tenant-domain: + default: carbon.super + server-url: + default: localhost:9443 +security: +- OAuth2: [] +paths: + /rules/metadata: + get: + tags: + - Metadata + summary: Get metadata for rule configuration. + description: |+ + This API provides a list of fields, associated metadata, and applicable operators for each field based on the specified flow type. This information is used to populate the UI for rule configuration. + + Scope (Permission) required: ``internal_org_rule_metadata_view`` + + operationId: getExpressionMeta + parameters: + - name: flow + in: query + description: | + Specifies the flow to retrieve rule metadata. This ensures that the metadata returned is relevant to the given flow. + + Note: At present, only the 'preUpdatePassword' and 'preUpdateProfile' flows are supported. + required: true + style: form + explode: true + schema: + type: string + enum: + - preIssueAccessToken + - preUpdatePassword + - preUpdateProfile + - preLogin + - postLogin + - inLogin + - preRegistration + - inRegistration + - inPasswordExpiry + responses: + "200": + description: Applicable fields and operators + content: + application/json: + schema: + $ref: '#/components/schemas/ExpressionMeta' + examples: + preUpdatePassword: + summary: Sample response for pre-update password flow + value: + - field: + name: flow + displayName: flow + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + value: + inputType: options + valueType: string + values: + - name: adminInitiatedPasswordReset + displayName: Admin initiated password reset + - name: adminInitiatedPasswordUpdate + displayName: Admin initiated password update + - name: adminInitiatedUserInviteToSetPassword + displayName: Admin initiated user invite to set password + - name: applicationInitiatedPasswordUpdate + displayName: Application initiated password update + - name: userInitiatedPasswordReset + displayName: User initiated password reset + - name: userInitiatedPasswordUpdate + displayName: User initiated password update + - name: adminInitiatedRegistration + displayName: Admin initiated registration + - name: applicationInitiatedRegistration + displayName: Application initiated registration + - name: userInitiatedRegistration + displayName: User initiated registration + preUpdateProfile: + summary: Sample response for pre-update profile flow + value: + - field: + name: flow + displayName: flow + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + value: + inputType: options + valueType: string + values: + - name: adminInitiatedProfileUpdate + displayName: Admin initiated profile update + - name: applicationInitiatedProfileUpdate + displayName: Application initiated profile update + - name: userInitiatedProfileUpdate + displayName: User initiated profile update + - field: + name: claim + displayName: claim + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + value: + inputType: options + valueType: reference + valueReferenceAttribute: claimURI + valueDisplayAttribute: displayName + links: + - href: /claim-dialects/local/claims?exclude-hidden-claims=true + method: GET + rel: values + "400": + description: Bad Request + "401": + description: Unauthorized + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://localhost:9443/api/server/v1/rules/metadata?flow=preUpdatePassword' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + ExpressionMeta: + type: array + description: Represents the metadata for rule expressions. It includes field definitions and associated operators. + items: + $ref: '#/components/schemas/FieldDefinition' + FieldDefinition: + type: object + properties: + field: + $ref: '#/components/schemas/Field' + operators: + type: array + description: | + Specifies the list of valid operators that can be applied to this field in rule expressions. Each operator defines a comparison or matching condition (e.g., \"equals\", \"contains\", \"greaterThan\") that determines how the field's value will be evaluated within a rule. + items: + $ref: '#/components/schemas/Operator' + value: + $ref: '#/components/schemas/Value' + Field: + type: object + properties: + name: + type: string + description: Name of the field. This is an immutable attribute and uniquely identifies the field allowed in the rule. + example: role + displayName: + type: string + description: Display name of the field. Use as a user friendly label of the field to show in UI. + example: user.role + dependantFields: + type: array + description: Lists the names of fields on which this field depends for its display or selection in the next expression. + example: [] + items: + type: string + Value: + type: object + properties: + inputType: + type: string + description: | + Defines how the field should be presented and populated in the rule configuration UI. This property indicates whether the field allows direct user input or if the values are selected from predefined options. Possible types include: + + - "input": Allows for direct user entry, such as text or numeric input. + - "options": Provides a list of selectable values, often fetched from an external data source, enabling users to pick from predefined choices. + enum: + - input + - options + valueType: + type: string + description: | + Specifies the expected data type for the field’s value within a rule expression. This property defines how the field's value should be interpreted when used in rule conditions. Possible types include: + - "string": Text value. + - "number": Numerical value. + - "boolean": True or false. + - "date": Date value. + - "reference": A reference to an external identifier, often used with options-type fields to indicate that the value is an ID or a unique attribute from related data." + enum: + - string + - number + - boolean + - date + - reference + valueReferenceAttribute: + type: string + description: "The key attribute in the options data (e.g., 'id') used to represent the option's selected value in rule expressions. Only available when 'valueType' is 'reference'." + example: id + valueDisplayAttribute: + type: string + description: "The attribute to show as the label for each option in the dropdown (e.g., 'name') when listing options. Only available when 'valueType' is 'reference'." + example: name + links: + type: array + description: Endpoints to retrieve or search for options dynamically. Included only when 'valueType' is 'reference'. + example: + - href: /scim2/roles?offset=0&limit=10 + method: GET + rel: values + - href: /scim2/roles/.search + method: GET + rel: filter + items: + $ref: '#/components/schemas/Link' + values: + type: array + description: "List of selectable values for options fields when 'valueType' is 'string', 'number', 'boolean', or 'date'." + items: + $ref: '#/components/schemas/ValueObject' + Operator: + type: object + properties: + name: + type: string + description: Name of the operator. The immutable identifier of the operator referenced within the rule expression. + displayName: + type: string + description: Display name of the operator. Use as a user friendly label of the operator to show in UI. + ValueObject: + type: object + properties: + name: + type: string + description: The name that uniquely identifies the option. + displayName: + type: string + description: The display name for the option. + Link: + type: object + properties: + href: + type: string + description: Url of the endpoint. + method: + type: string + description: Http method. + enum: + - GET + rel: + type: string + description: Indicates the endpoint’s relation to retrieving or filtering field values. + enum: + - values + - filter + Error: + type: object + properties: + code: + type: string + description: Error code + example: RMS-00000 + message: + type: string + description: Error message. + example: Some error message. + description: + type: string + description: Detailed error description. + example: Some error description. + traceId: + type: string + description: Trace identifier to refer at troubleshooting logs to troubleshoot the problem. + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://localhost:9443/oauth2/authorize + tokenUrl: https://localhost:9443/oauth2/token + scopes: + read: internal_rule_metadata_view diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/scim-bulk.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/scim-bulk.yaml new file mode 100644 index 0000000000..e7ee41952a --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/scim-bulk.yaml @@ -0,0 +1,193 @@ +openapi: 3.0.1 +info: + title: SCIM 2.0 Bulk API + description: | + This document specifies **Organization level SCIM 2.0 Bulk Resource Management RESTful API** for Asgardeo. + version: "v1" +servers: + - url: https://api.asgardeo.io/t/{organization-name}/o/scim2 + +security: + - OAuth2: [] + +paths: + /Bulk: + post: + tags: + - Bulk Endpoint + summary: Create, Update, Delete Users and Groups in bulk and update Roles in bulk + description: | + This API is used to create/update/replace/delete SCIM resources in bulk. You need to specify different operations in the request payload corresponding to the type of bulk update:
+ - **POST** operation: Adds new resources. + - **PUT** operation: Replaces an existing resource. + - **PATCH** operation: Updates attributes of an existing resource. + - **DELETE** operation: Removes an existing resource. + Learn more about [defining batch operations](../../scim2-batch-operations). + + Scopes required: ``internal_org_bulk_resource_create`` or a [operation-wise scope](../../../scim2/scim2-batch-operations/#scopepermission-required-for-batch-operations) + operationId: createBulkUsers + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/BulkUserRequestObject' + required: false + responses: + 201: + description: Valid user is created + content: + application/scim+json: + schema: + $ref: '#/components/schemas/BulkUserResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 409: + description: Users already exists + content: {} + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/o/scim2/Bulk' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + -d '{ + "failOnErrors": 1, + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:BulkRequest" + ], + "Operations": [ + { + "method": "POST", + "path": "/Users", + "bulkId": "ytrewq", + "data": { + "schemas": [ + "urn:ietf:params:scim:schemas:core:2.0:User" + ], + "username": "jesse", + "password": "jesspass" + "userstore": "DEFAULT" + } + } + ] + }' + x-codegen-request-body-name: body +components: + schemas: + BulkUserRequestObject: + type: object + properties: + failOnErrors: + type: integer + example: 1 + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:BulkRequest + Operations: + type: array + items: + $ref: '#/components/schemas/BulkUserOb' + BulkUserOb: + type: object + properties: + method: + type: string + example: POST + path: + type: string + example: /Users + bulkId: + type: string + example: ytrewq + data: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + username: + type: string + example: jesse + password: + type: string + example: jesspass + BulkUserResponseObject: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:BulkResponse + Operations: + $ref: '#/components/schemas/OperationObBulk' + OperationObBulk: + type: object + properties: + bulkId: + type: string + example: qwerty + method: + type: string + example: POST + location: + type: string + example: https://api.asgardeo.io/t/{organization-name}/scim2/Users/81cbba1b-c259-485d-8ba4-79afb03e5bd1 + status: + type: object + properties: + code: + type: string + example: "201" + ErrorUnauthorized: + required: + - status + type: object + properties: + status: + type: string + example: "401" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: Unauthorized + ErrorForbidden: + required: + - status + type: object + properties: + status: + type: string + example: "403" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: Forbidden + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{organization-name}/oauth/authorize + tokenUrl: https://api.asgardeo.io/t/{organization-name}/oauth/token + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/organization-apis/restapis/verification-code-management.yaml b/docusaurus-asgardeo/static/apis/organization-apis/restapis/verification-code-management.yaml new file mode 100644 index 0000000000..f7eeb86092 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/organization-apis/restapis/verification-code-management.yaml @@ -0,0 +1,175 @@ +openapi: 3.1.0 +info: + title: Verification Code Management API + description: | + This API manages verification codes for various verification scenarios including validation and resending. + version: 1.0.0 +servers: + - url: https://api.asgardeo.io/t/{organization-name}/o/api/identity/user/v1.0 +security: + - OAuth2: [] +paths: + /validate-code: + post: + tags: + - Verification Code + summary: Validate code + description: | + This API is used to validate the code generated during the verification process associated with a user. + + Scope(Permission) required: `internal_org_user_code_mgt_create` + operationId: validateCode + requestBody: + description: The validation code retrieved for the verification scenario, and optional property parameters. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CodeValidationRequest' + responses: + '202': + description: Accepted + content: {} + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X POST \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "code": "string", + "properties": [] + }' \ + "https://api.asgardeo.io/t/{organization-name}/o/api/identity/user/v1.0/validate-code" + /resend-code: + post: + tags: + - Verification Code + summary: Resend code + description: | + This API is used to resend the confirmation code if it is missing. + + Scope(Permission) required: `internal_org_user_code_mgt_create` + operationId: resendCode + requestBody: + description: User information and optional property parameters to resend the verification code. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ResendCodeRequest' + responses: + '201': + description: Created + content: {} + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X POST \ + -H 'Authorization: Bearer ' \ + -H 'Content-Type: application/json' \ + -d '{ + "user": { + "username": "string", + "realm": "string" + }, + "properties": [ + { + "key": "string", + "value": "string" + } + ] + }' \ + 'https://api.asgardeo.io/t/{organization-name}/o/api/identity/user/v1.0/resend-code' +components: + schemas: + CodeValidationRequest: + type: object + properties: + code: + type: string + properties: + type: array + items: + $ref: '#/components/schemas/Property' + Error: + type: object + properties: + code: + type: string + message: + type: string + description: + type: string + traceId: + type: string + Property: + type: object + properties: + key: + type: string + value: + type: string + ResendCodeRequest: + type: object + properties: + user: + $ref: '#/components/schemas/User' + properties: + type: array + items: + $ref: '#/components/schemas/Property' + User: + type: object + properties: + username: + type: string + realm: + type: string + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: { + internal_org_user_code_mgt_create: Grants create access to user code management in the organization + } + description: "**Authorization code OAuth flow** + **Organization Switch**" diff --git a/docusaurus-asgardeo/static/apis/restapis/actions.yaml b/docusaurus-asgardeo/static/apis/restapis/actions.yaml new file mode 100644 index 0000000000..b4eea16bb4 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/actions.yaml @@ -0,0 +1,1683 @@ +openapi: 3.0.0 +info: + version: v1 + title: Asgardeo - Action Management Rest API + description: > + The Action Management REST API provides a comprehensive interface to manage actions + within the Asgardeo. Actions enable the extension of product functionality + across various workflows, such as access token issuance, password updates, and profile updates. + This API helps developers and administrators to define and manage actions to meet specific + business needs. +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' +security: + - OAuth2: [] +paths: + /actions/types: + get: + tags: + - Action Types + summary: List Action Types + description: "This API returns the detailed summary of the action types.\n\n + Scope (Permission) required: ``internal_action_mgt_view``\n\n" + operationId: getActionTypes + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ActionTypesResponse' + example: + - type: PRE_ISSUE_ACCESS_TOKEN + displayName: Pre Issue Access Token + description: This action invokes before issuing an access token. + count: 1 + self: "/api/server/v1/actions/preIssueAccessToken" + - type: PRE_UPDATE_PASSWORD + displayName: Pre Update Password + description: This action invokes before updating a user password. + count: 1 + self: "/api/server/v1/actions/preUpdatePassword" + - type: PRE_UPDATE_PROFILE + displayName: Pre Update Profile + description: This action invokes before updating a user profile. + count: 1 + self: "/api/server/v1/actions/preUpdateProfile" + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/types' \ + -H 'Authorization: Bearer {bearer_token}' + + /actions/{actionType}: + post: + tags: + - Actions + summary: Add Action + description: "This API creates an action and returns the action details along with the action's unique ID.\n\n + Scope (Permission) required: ``internal_action_mgt_create``\n\n" + operationId: createAction + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preIssueAccessToken + - preUpdatePassword + - preUpdateProfile + - preRegistration + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ActionModel' + examples: + preIssueAccessToken: + summary: Sample payload for pre issue access token action + value: + name: Pre Issue Access Token + description: This action invokes before issuing an access token. + endpoint: + uri: https://myextension.com/token + authentication: + properties: + username: auth_username + password: auth_password + type: BASIC + allowedHeaders: + - x-geo-location + - host + allowedParameters: + - device-id + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: application + operator: equals + value: 29ed9110-d0eb-48e3-918c-4832e8c9c81f + - field: grantType + operator: notEquals + value: authorization_code + - condition: AND + expressions: + - field: grantType + operator: equals + value: client_credentials + preUpdatePassword: + summary: Sample payload for pre update password action + value: + name: Password Update Action + description: This action invokes before updating a user password. + endpoint: + uri: https://myextension.com/pre-update-password + authentication: + properties: + header: x-api-key + value: e12595c1-1435-4bf2-94e8-445135ab505a + type: API_KEY + passwordSharing: + format: SHA256_HASHED + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lFWlhCR0NUQU5CZ2txaGtpRzl3MEJBUXNGQURCaU1Rc3dDUVlEVlFRR0V3SlYNClV6RUxNQWtHQTFVRUNBd0NRMEV4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1RMHdDd1lEVlFRS0RBUlgNClUwOHlNUTB3Q3dZRFZRUUxEQVJYVTA4eU1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdIaGNOTWpNeE1qQTINCk1EazFPVE0zV2hjTk1qVXdNVEEzTURrMU9UTTNXakJpTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNBd0MNClEwRXhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVEwd0N3WURWUVFLREFSWFUwOHlNUTB3Q3dZRFZRUUwNCkRBUlhVMDh5TVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUINCkR3QXdnZ0VLQW9JQkFRQ2E0amx3OEtyWHMzOTZTdktmVFEwMkllUm9hWnF1ZWtvSlNpdzBsOWU5QkkyRWF2blQNCkc4SnlvcDh6MnJPcjZDNmpqZGdVeXR6NWpCaG9wYmdmeHJQMmkwTkd1akpGTE5uU1U4cmNoRDJUSjlRbzh0V3YNCmZqQUtDL1VsUnhTb0VyT1RkejdYUzFDY1BmNm9RZk56TVo2QnkyOXpmSVN1QytyV25qTHFUM002ejBGMGIzK20NCm9paVpmUTA1RjAwaHd6U0U5V0JsTCtHUnh3cHlRUVl3c2JHZlordmlJM0VHdjdzUnYreHFwTFBoVzVTTHpoR3oNCnNaaTlDME0wRzFqYnZWMWQrUFkwTVRoRTYwcmthdmpNKytSUkJlc29pNUprblprc0F0OWhPcXhZM0ExSU1kREENCk5wZEtxaGRGMWFBeURYK3ZUWkZySGZMc3VFQmVjNVBwM3RJWEFnTUJBQUdqWmpCa01BNEdBMVVkRHdFQi93UUUNCkF3SUU4REFVQmdOVkhSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0hRWURWUjBPQkJZRUZIWFhWMm5sb2ZoaThXd2oNCncwRW9hRlNZbldiU01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFOQmdrcWhraUcNCjl3MEJBUXNGQUFPQ0FRRUFSZThESThuNzJlVWxReTlHU3BpeXh2OFFVSEZkaVFhMW5CVzluVlRaZHlKb1NYMHENCmg2TjN4Vk5KWFIzL3pMdkw4TUJWTXZqa3QwT1FxdkVpeWp3bkVXTzZEYnhUUnIzdmRmK3J2NVZ3ZGtZbjRNY00NCkt4NHhGOFphZzh4aHlhWXFVUXpRWG5nNTFyVjErYzR1elh1Z0VoRTVTemRESFlFWHpYNmpvWklnMXlOK2hFUGMNCjc3UlpKSkhtd0lRclRkM2JuWnB5dEI2UmRCam5qU3loMEJlSGxKUUdtUHhvbXhZQVMxaFZzelJkZld0cnhEQUINCmZsSUppbUppSGgzZHlrY3lObHJ3QnU5MDNwTWRVR1FHcXNVeUVqaEZkN3M0QXp1cVlISnI1cll5OTUwZGY5SWINCllTaHUyWWZsVkVzV1pxSlI2MkNpYldCY0pLeUhQWW10QzBjU1JRPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedPasswordReset + - field: flow + operator: notEquals + value: adminInitiatedPasswordUpdate + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedPasswordReset + preUpdateProfile: + summary: Sample payload for pre update profile action + value: + name: Profile Update Action + description: This action invokes before updating a user profile. + endpoint: + uri: https://myextension.com/pre-update-profile + authentication: + properties: + header: x-api-key + value: e12595c1-1435-4bf2-94e8-445135ab505a + type: API_KEY + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedProfileUpdate + - field: claim + operator: notEquals + value: http://wso2.org/claims/country + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedProfileUpdate + description: This represents the information of the action to be created. + required: true + responses: + '201': + description: Action Created + content: + application/json: + schema: + $ref: '#/components/schemas/ActionResponse' + examples: + preIssueAccessToken: + summary: Sample response for pre issue access token action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + name: Pre Issue Access Token + description: This action invokes before issuing an access token. + status: INACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/token + authentication: + type: BASIC + allowedHeaders: + - x-geo-location + - host + allowedParameters: + - device-id + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: application + operator: equals + value: 29ed9110-d0eb-48e3-918c-4832e8c9c81f + - field: grantType + operator: notEquals + value: authorization_code + - condition: AND + expressions: + - field: grantType + operator: equals + value: client_credentials + preUpdatePassword: + summary: Sample response for pre update password action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + name: Password Update Action + description: This action invokes before updating a user password. + status: INACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/pre-update-password + authentication: + type: API_KEY + passwordSharing: + format: SHA256_HASHED + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lFWlhCR0NUQU5CZ2txaGtpRzl3MEJBUXNGQURCaU1Rc3dDUVlEVlFRR0V3SlYNClV6RUxNQWtHQTFVRUNBd0NRMEV4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1RMHdDd1lEVlFRS0RBUlgNClUwOHlNUTB3Q3dZRFZRUUxEQVJYVTA4eU1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdIaGNOTWpNeE1qQTINCk1EazFPVE0zV2hjTk1qVXdNVEEzTURrMU9UTTNXakJpTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNBd0MNClEwRXhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVEwd0N3WURWUVFLREFSWFUwOHlNUTB3Q3dZRFZRUUwNCkRBUlhVMDh5TVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUINCkR3QXdnZ0VLQW9JQkFRQ2E0amx3OEtyWHMzOTZTdktmVFEwMkllUm9hWnF1ZWtvSlNpdzBsOWU5QkkyRWF2blQNCkc4SnlvcDh6MnJPcjZDNmpqZGdVeXR6NWpCaG9wYmdmeHJQMmkwTkd1akpGTE5uU1U4cmNoRDJUSjlRbzh0V3YNCmZqQUtDL1VsUnhTb0VyT1RkejdYUzFDY1BmNm9RZk56TVo2QnkyOXpmSVN1QytyV25qTHFUM002ejBGMGIzK20NCm9paVpmUTA1RjAwaHd6U0U5V0JsTCtHUnh3cHlRUVl3c2JHZlordmlJM0VHdjdzUnYreHFwTFBoVzVTTHpoR3oNCnNaaTlDME0wRzFqYnZWMWQrUFkwTVRoRTYwcmthdmpNKytSUkJlc29pNUprblprc0F0OWhPcXhZM0ExSU1kREENCk5wZEtxaGRGMWFBeURYK3ZUWkZySGZMc3VFQmVjNVBwM3RJWEFnTUJBQUdqWmpCa01BNEdBMVVkRHdFQi93UUUNCkF3SUU4REFVQmdOVkhSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0hRWURWUjBPQkJZRUZIWFhWMm5sb2ZoaThXd2oNCncwRW9hRlNZbldiU01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFOQmdrcWhraUcNCjl3MEJBUXNGQUFPQ0FRRUFSZThESThuNzJlVWxReTlHU3BpeXh2OFFVSEZkaVFhMW5CVzluVlRaZHlKb1NYMHENCmg2TjN4Vk5KWFIzL3pMdkw4TUJWTXZqa3QwT1FxdkVpeWp3bkVXTzZEYnhUUnIzdmRmK3J2NVZ3ZGtZbjRNY00NCkt4NHhGOFphZzh4aHlhWXFVUXpRWG5nNTFyVjErYzR1elh1Z0VoRTVTemRESFlFWHpYNmpvWklnMXlOK2hFUGMNCjc3UlpKSkhtd0lRclRkM2JuWnB5dEI2UmRCam5qU3loMEJlSGxKUUdtUHhvbXhZQVMxaFZzelJkZld0cnhEQUINCmZsSUppbUppSGgzZHlrY3lObHJ3QnU5MDNwTWRVR1FHcXNVeUVqaEZkN3M0QXp1cVlISnI1cll5OTUwZGY5SWINCllTaHUyWWZsVkVzV1pxSlI2MkNpYldCY0pLeUhQWW10QzBjU1JRPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedPasswordReset + - field: flow + operator: notEquals + value: adminInitiatedPasswordUpdate + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedPasswordReset + preUpdateProfile: + summary: Sample response for pre update profile action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + name: Profile Update Action + description: This action invokes before updating a user profile. + status: INACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/pre-update-profile + authentication: + type: API_KEY + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedProfileUpdate + - field: claim + operator: notEquals + value: http://wso2.org/claims/country + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedProfileUpdate + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl - preIssueAccessToken + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/preIssueAccessToken' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "name": "Pre Issue Access Token", + "description": "This action invokes before issuing an access token.", + "endpoint": { + "uri": "https://myextension.com/token", + "authentication": { + "properties": { + "username": "auth_username", + "password": "auth_password" + }, + "type": "BASIC" + }, + "allowedHeaders": [ "x-geo-location", "host" ], + "allowedParameters": [ "device-id" ] + } + }' + - lang: Curl - preUpdatePassword + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/preUpdatePassword' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "name": "Password Update Action", + "description": "This action invokes before updating a user password.", + "endpoint": { + "uri": "https://myextension.com/pre-update-password", + "authentication": { + "properties": { + "header": "x-api-key", + "value": "e12595c1-1435-4bf2-94e8-445135ab505a" + }, + "type": "API_KEY" + } + }, + "passwordSharing": { + "format": "SHA256_HASHED" + }, + "attributes": ["http://wso2.org/claims/givenname", "http://wso2.org/claims/dob"] + }' + - lang: Curl - preUpdateProfile + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/preUpdateProfile' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "name": "Profile Update Action", + "description": "This action invokes before updating a user profile.", + "endpoint": { + "uri": "https://myextension.com/pre-update-profile", + "authentication": { + "properties": { + "header": "x-api-key", + "value": "e12595c1-1435-4bf2-94e8-445135ab505a" + }, + "type": "API_KEY" + } + }, + "attributes": ["http://wso2.org/claims/givenname", "http://wso2.org/claims/dob"] + }' + x-codegen-request-body-name: body + + get: + tags: + - Actions + summary: List Actions + description: "This API returns actions according to the action type. \n\n + Scope (Permission) required: ``internal_action_mgt_view``\n\n" + operationId: getActionsByActionType + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preIssueAccessToken + - preUpdatePassword + - preUpdateProfile + - preRegistration + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ActionResponseList' + examples: + preIssueAccessToken: + summary: Sample response for pre issue access token action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_ISSUE_ACCESS_TOKEN + name: Pre Issue Access Token + description: This action invokes before issuing an access token. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/api/server/v1/actions/preIssueAccessToken/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + preUpdatePassword: + summary: Sample response for pre update password action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PASSWORD + name: Password Update Action + description: This action invokes before updating a user password. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/api/server/v1/actions/preUpdatePassword/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + preUpdateProfile: + summary: Sample response for pre update profile action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PROFILE + name: Profile Update Action + description: This action invokes before updating a user profile. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/api/server/v1/actions/preUpdateProfile/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/{actionType}' \ + -H 'Authorization: Bearer {bearer_token}' + + /actions/{actionType}/{actionId}: + get: + tags: + - Actions + operationId: getActionByActionId + summary: Retrieve Action by ID + description: "This API provides the capability to retrieve the action by action Id. \n\n + Scope (Permission) required: ``internal_action_mgt_view``\n\n" + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preIssueAccessToken + - preUpdatePassword + - preUpdateProfile + - preRegistration + - name: actionId + in: path + description: Unique identifier of the action. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ActionResponse' + examples: + preIssueAccessToken: + summary: Sample response for pre issue access token action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_ISSUE_ACCESS_TOKEN + name: Pre Issue Access Token + description: This action invokes before issuing an access token. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/token + authentication: + type: BASIC + allowedHeaders: + - x-geo-location + - host + allowedParameters: + - device-id + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: application + operator: equals + value: 29ed9110-d0eb-48e3-918c-4832e8c9c81f + - field: grantType + operator: notEquals + value: authorization_code + - condition: AND + expressions: + - field: grantType + operator: equals + value: client_credentials + preUpdatePassword: + summary: Sample response for pre update password action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PASSWORD + name: Password Update Action + description: This action invokes before updating a user password. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/pre-update-password + authentication: + type: API_KEY + passwordSharing: + format: SHA256_HASHED + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lFWlhCR0NUQU5CZ2txaGtpRzl3MEJBUXNGQURCaU1Rc3dDUVlEVlFRR0V3SlYNClV6RUxNQWtHQTFVRUNBd0NRMEV4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1RMHdDd1lEVlFRS0RBUlgNClUwOHlNUTB3Q3dZRFZRUUxEQVJYVTA4eU1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdIaGNOTWpNeE1qQTINCk1EazFPVE0zV2hjTk1qVXdNVEEzTURrMU9UTTNXakJpTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNBd0MNClEwRXhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVEwd0N3WURWUVFLREFSWFUwOHlNUTB3Q3dZRFZRUUwNCkRBUlhVMDh5TVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUINCkR3QXdnZ0VLQW9JQkFRQ2E0amx3OEtyWHMzOTZTdktmVFEwMkllUm9hWnF1ZWtvSlNpdzBsOWU5QkkyRWF2blQNCkc4SnlvcDh6MnJPcjZDNmpqZGdVeXR6NWpCaG9wYmdmeHJQMmkwTkd1akpGTE5uU1U4cmNoRDJUSjlRbzh0V3YNCmZqQUtDL1VsUnhTb0VyT1RkejdYUzFDY1BmNm9RZk56TVo2QnkyOXpmSVN1QytyV25qTHFUM002ejBGMGIzK20NCm9paVpmUTA1RjAwaHd6U0U5V0JsTCtHUnh3cHlRUVl3c2JHZlordmlJM0VHdjdzUnYreHFwTFBoVzVTTHpoR3oNCnNaaTlDME0wRzFqYnZWMWQrUFkwTVRoRTYwcmthdmpNKytSUkJlc29pNUprblprc0F0OWhPcXhZM0ExSU1kREENCk5wZEtxaGRGMWFBeURYK3ZUWkZySGZMc3VFQmVjNVBwM3RJWEFnTUJBQUdqWmpCa01BNEdBMVVkRHdFQi93UUUNCkF3SUU4REFVQmdOVkhSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0hRWURWUjBPQkJZRUZIWFhWMm5sb2ZoaThXd2oNCncwRW9hRlNZbldiU01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFOQmdrcWhraUcNCjl3MEJBUXNGQUFPQ0FRRUFSZThESThuNzJlVWxReTlHU3BpeXh2OFFVSEZkaVFhMW5CVzluVlRaZHlKb1NYMHENCmg2TjN4Vk5KWFIzL3pMdkw4TUJWTXZqa3QwT1FxdkVpeWp3bkVXTzZEYnhUUnIzdmRmK3J2NVZ3ZGtZbjRNY00NCkt4NHhGOFphZzh4aHlhWXFVUXpRWG5nNTFyVjErYzR1elh1Z0VoRTVTemRESFlFWHpYNmpvWklnMXlOK2hFUGMNCjc3UlpKSkhtd0lRclRkM2JuWnB5dEI2UmRCam5qU3loMEJlSGxKUUdtUHhvbXhZQVMxaFZzelJkZld0cnhEQUINCmZsSUppbUppSGgzZHlrY3lObHJ3QnU5MDNwTWRVR1FHcXNVeUVqaEZkN3M0QXp1cVlISnI1cll5OTUwZGY5SWINCllTaHUyWWZsVkVzV1pxSlI2MkNpYldCY0pLeUhQWW10QzBjU1JRPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedPasswordReset + - field: flow + operator: notEquals + value: adminInitiatedPasswordUpdate + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedPasswordReset + preUpdateProfile: + summary: Sample response for pre update profile action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PROFILE + name: Profile Update Action + description: This action invokes before updating a user profile. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/pre-update-profile + authentication: + type: API_KEY + attributes: + - http://wso2.org/claims/givenname + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: adminInitiatedProfileUpdate + - field: claim + operator: notEquals + value: http://wso2.org/claims/country + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedProfileUpdate + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/{actionType}/{actionId}' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Actions + summary: Update Action + description: "This API updates an action and return the updated action. \n\n + Scope (Permission) required: ``internal_action_mgt_update``\n\n" + operationId: updateAction + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preIssueAccessToken + - preUpdatePassword + - preUpdateProfile + - preRegistration + - name: actionId + in: path + description: Unique identifier of the action. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ActionUpdateModel' + examples: + preIssueAccessToken: + summary: Sample payload for pre issue access token action update + value: + name: Updated Pre Issue Access Token + description: This action invokes before issuing an access token. + endpoint: + uri: https://myextension.com/external/token + authentication: + properties: + token: 346dfbb5-6a8c-447a-9aaa-88fa2dd95962 + type: BEARER + allowedHeaders: + - x-geo-location + - host + allowedParameters: + - device-id + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: application + operator: equals + value: 29ed9110-d0eb-48e3-918c-4832e8c9c81f + - field: grantType + operator: notEquals + value: password + preUpdatePassword: + summary: Sample payload for pre update password action update + value: + name: Updated Password Update Action + description: This action invokes before updating a user password. + endpoint: + uri: https://myextension.com/external/pre-update-password + authentication: + properties: {} + type: NONE + passwordSharing: + format: PLAIN_TEXT + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lFWlhCR0NUQU5CZ2txaGtpRzl3MEJBUXNGQURCaU1Rc3dDUVlEVlFRR0V3SlYNClV6RUxNQWtHQTFVRUNBd0NRMEV4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1RMHdDd1lEVlFRS0RBUlgNClUwOHlNUTB3Q3dZRFZRUUxEQVJYVTA4eU1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdIaGNOTWpNeE1qQTINCk1EazFPVE0zV2hjTk1qVXdNVEEzTURrMU9UTTNXakJpTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNBd0MNClEwRXhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVEwd0N3WURWUVFLREFSWFUwOHlNUTB3Q3dZRFZRUUwNCkRBUlhVMDh5TVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUINCkR3QXdnZ0VLQW9JQkFRQ2E0amx3OEtyWHMzOTZTdktmVFEwMkllUm9hWnF1ZWtvSlNpdzBsOWU5QkkyRWF2blQNCkc4SnlvcDh6MnJPcjZDNmpqZGdVeXR6NWpCaG9wYmdmeHJQMmkwTkd1akpGTE5uU1U4cmNoRDJUSjlRbzh0V3YNCmZqQUtDL1VsUnhTb0VyT1RkejdYUzFDY1BmNm9RZk56TVo2QnkyOXpmSVN1QytyV25qTHFUM002ejBGMGIzK20NCm9paVpmUTA1RjAwaHd6U0U5V0JsTCtHUnh3cHlRUVl3c2JHZlordmlJM0VHdjdzUnYreHFwTFBoVzVTTHpoR3oNCnNaaTlDME0wRzFqYnZWMWQrUFkwTVRoRTYwcmthdmpNKytSUkJlc29pNUprblprc0F0OWhPcXhZM0ExSU1kREENCk5wZEtxaGRGMWFBeURYK3ZUWkZySGZMc3VFQmVjNVBwM3RJWEFnTUJBQUdqWmpCa01BNEdBMVVkRHdFQi93UUUNCkF3SUU4REFVQmdOVkhSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0hRWURWUjBPQkJZRUZIWFhWMm5sb2ZoaThXd2oNCncwRW9hRlNZbldiU01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFOQmdrcWhraUcNCjl3MEJBUXNGQUFPQ0FRRUFSZThESThuNzJlVWxReTlHU3BpeXh2OFFVSEZkaVFhMW5CVzluVlRaZHlKb1NYMHENCmg2TjN4Vk5KWFIzL3pMdkw4TUJWTXZqa3QwT1FxdkVpeWp3bkVXTzZEYnhUUnIzdmRmK3J2NVZ3ZGtZbjRNY00NCkt4NHhGOFphZzh4aHlhWXFVUXpRWG5nNTFyVjErYzR1elh1Z0VoRTVTemRESFlFWHpYNmpvWklnMXlOK2hFUGMNCjc3UlpKSkhtd0lRclRkM2JuWnB5dEI2UmRCam5qU3loMEJlSGxKUUdtUHhvbXhZQVMxaFZzelJkZld0cnhEQUINCmZsSUppbUppSGgzZHlrY3lObHJ3QnU5MDNwTWRVR1FHcXNVeUVqaEZkN3M0QXp1cVlISnI1cll5OTUwZGY5SWINCllTaHUyWWZsVkVzV1pxSlI2MkNpYldCY0pLeUhQWW10QzBjU1JRPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + attributes: + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedPasswordReset + - field: flow + operator: notEquals + value: adminInitiatedPasswordUpdate + preUpdateProfile: + summary: Sample payload for pre update profile action update + value: + name: Updated Profile Update Action + description: This action invokes before updating a user profile. + endpoint: + uri: https://myextension.com/external/pre-update-profile + authentication: + properties: {} + type: NONE + attributes: + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedProfileUpdate + - field: claim + operator: notEquals + value: http://wso2.org/claims/postalcode + description: This represents the action to be updated. + required: true + responses: + '200': + description: Action Updated + content: + application/json: + schema: + $ref: '#/components/schemas/ActionResponse' + examples: + preIssueAccessToken: + summary: Sample response for pre issue access token action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + name: Updated Pre Issue Access Token + description: This action invokes before issuing an access token. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/external/token + authentication: + type: BEARER + allowedHeaders: + - x-geo-location + - host + allowedParameters: + - device-id + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: application + operator: equals + value: 29ed9110-d0eb-48e3-918c-4832e8c9c81f + - field: grantType + operator: notEquals + value: password + preUpdatePassword: + summary: Sample response for pre update password action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + name: Updated Password Update Action + description: This action invokes before updating a user password. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/external/pre-update-password + authentication: + type: NONE + passwordSharing: + format: PLAIN_TEXT + certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lFWlhCR0NUQU5CZ2txaGtpRzl3MEJBUXNGQURCaU1Rc3dDUVlEVlFRR0V3SlYNClV6RUxNQWtHQTFVRUNBd0NRMEV4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1RMHdDd1lEVlFRS0RBUlgNClUwOHlNUTB3Q3dZRFZRUUxEQVJYVTA4eU1SSXdFQVlEVlFRRERBbHNiMk5oYkdodmMzUXdIaGNOTWpNeE1qQTINCk1EazFPVE0zV2hjTk1qVXdNVEEzTURrMU9UTTNXakJpTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNBd0MNClEwRXhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVEwd0N3WURWUVFLREFSWFUwOHlNUTB3Q3dZRFZRUUwNCkRBUlhVMDh5TVJJd0VBWURWUVFEREFsc2IyTmhiR2h2YzNRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUINCkR3QXdnZ0VLQW9JQkFRQ2E0amx3OEtyWHMzOTZTdktmVFEwMkllUm9hWnF1ZWtvSlNpdzBsOWU5QkkyRWF2blQNCkc4SnlvcDh6MnJPcjZDNmpqZGdVeXR6NWpCaG9wYmdmeHJQMmkwTkd1akpGTE5uU1U4cmNoRDJUSjlRbzh0V3YNCmZqQUtDL1VsUnhTb0VyT1RkejdYUzFDY1BmNm9RZk56TVo2QnkyOXpmSVN1QytyV25qTHFUM002ejBGMGIzK20NCm9paVpmUTA1RjAwaHd6U0U5V0JsTCtHUnh3cHlRUVl3c2JHZlordmlJM0VHdjdzUnYreHFwTFBoVzVTTHpoR3oNCnNaaTlDME0wRzFqYnZWMWQrUFkwTVRoRTYwcmthdmpNKytSUkJlc29pNUprblprc0F0OWhPcXhZM0ExSU1kREENCk5wZEtxaGRGMWFBeURYK3ZUWkZySGZMc3VFQmVjNVBwM3RJWEFnTUJBQUdqWmpCa01BNEdBMVVkRHdFQi93UUUNCkF3SUU4REFVQmdOVkhSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0hRWURWUjBPQkJZRUZIWFhWMm5sb2ZoaThXd2oNCncwRW9hRlNZbldiU01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFOQmdrcWhraUcNCjl3MEJBUXNGQUFPQ0FRRUFSZThESThuNzJlVWxReTlHU3BpeXh2OFFVSEZkaVFhMW5CVzluVlRaZHlKb1NYMHENCmg2TjN4Vk5KWFIzL3pMdkw4TUJWTXZqa3QwT1FxdkVpeWp3bkVXTzZEYnhUUnIzdmRmK3J2NVZ3ZGtZbjRNY00NCkt4NHhGOFphZzh4aHlhWXFVUXpRWG5nNTFyVjErYzR1elh1Z0VoRTVTemRESFlFWHpYNmpvWklnMXlOK2hFUGMNCjc3UlpKSkhtd0lRclRkM2JuWnB5dEI2UmRCam5qU3loMEJlSGxKUUdtUHhvbXhZQVMxaFZzelJkZld0cnhEQUINCmZsSUppbUppSGgzZHlrY3lObHJ3QnU5MDNwTWRVR1FHcXNVeUVqaEZkN3M0QXp1cVlISnI1cll5OTUwZGY5SWINCllTaHUyWWZsVkVzV1pxSlI2MkNpYldCY0pLeUhQWW10QzBjU1JRPT0NCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + attributes: + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedPasswordReset + - field: flow + operator: notEquals + value: adminInitiatedPasswordUpdate + preUpdateProfile: + summary: Sample response for pre update profile action + value: + id: 24f64d17-9824-4e28-8413-de45728d8e84 + name: Updated Profile Update Action + description: This action invokes before updating a user profile. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + endpoint: + uri: https://myextension.com/external/pre-update-profile + authentication: + type: NONE + attributes: + - http://wso2.org/claims/dob + rule: + condition: OR + rules: + - condition: AND + expressions: + - field: flow + operator: equals + value: userInitiatedProfileUpdate + - field: claim + operator: notEquals + value: http://wso2.org/claims/postalcode + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl - preIssueAccessToken + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/preIssueAccessToken/{actionId}' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "Pre Issue Access Token action", + "description": "This is the configuration of pre-action for issuing access token from myextensions.com.", + "endpoint": { + "uri": "http://myextensions.com/access-token", + "authentication": { + "type": "API_KEY", + "properties": { + "header": "sample_header", + "value": "sample_value" + } + }, + "allowedHeaders": [ "x-geo-location", "host" ], + "allowedParameters": [ "device-id" ] + } + }' + - lang: Curl - preUpdatePassword + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/preUpdatePassword/{actionId}' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "Updated Password Update Action", + "description": "This is the configuration of pre-action for updating password", + "endpoint": { + "uri": "http://myextensions.com/external/pre-update-password", + "authentication": { + "type": "NONE", + "properties": {} + } + }, + "passwordSharing": { + "format": "PLAIN_TEXT" + }, + "attributes": ["http://wso2.org/claims/dob"] + }' + - lang: Curl - preUpdateProfile + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/preUpdateProfile/{actionId}' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "Updated Profile Update Action", + "description": "This is the configuration of pre-action for updating profile", + "endpoint": { + "uri": "http://myextensions.com/external/pre-update-profile", + "authentication": { + "type": "NONE", + "properties": {} + } + }, + "attributes": ["http://wso2.org/claims/dob"] + }' + x-codegen-request-body-name: body + + delete: + tags: + - Actions + summary: Delete Action + description: "This API deletes an action using the action's type and unique ID. \n\n + Scope (Permission) required: ``internal_action_mgt_delete``\n\n" + operationId: deleteAction + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preIssueAccessToken + - preUpdatePassword + - preUpdateProfile + - preRegistration + - name: actionId + in: path + description: Unique identifier of the action. + required: true + schema: + type: string + responses: + '204': + description: Action Deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/{actionType}/{actionId}' \ + -H 'Authorization: Bearer {bearer_token}' + + /actions/{actionType}/{actionId}/activate: + post: + tags: + - Actions + summary: Activate Action + description: "This API activates an action using the action's type and unique ID. \n\n + Scope (Permission) required: ``internal_action_mgt_update``\n\n" + operationId: activateAction + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preIssueAccessToken + - preUpdatePassword + - preUpdateProfile + - preRegistration + - name: actionId + in: path + description: Unique identifier of the action. + required: true + schema: + type: string + responses: + '200': + description: Action Activated + content: + application/json: + schema: + $ref: '#/components/schemas/ActionBasicResponse' + examples: + preIssueAccessToken: + summary: Sample response for pre issue access token action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_ISSUE_ACCESS_TOKEN + name: Pre Issue Access Token + description: This action invokes before issuing an access token. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/api/server/v1/actions/preIssueAccessToken/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + preUpdatePassword: + summary: Sample response for pre update password action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PASSWORD + name: Password Update Action + description: This action invokes before updating a user password. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/api/server/v1/actions/preUpdatePassword/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + preUpdateProfile: + summary: Sample response for pre update profile action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PROFILE + name: Profile Update Action + description: This action invokes before updating a user profile. + status: ACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/api/server/v1/actions/preUpdateProfile/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request POST 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/{actionType}/{actionId}/activate' \ + -H 'Authorization: Bearer {bearer_token}' + + /actions/{actionType}/{actionId}/deactivate: + post: + tags: + - Actions + summary: Deactivate Action + description: "This API deactivates an action using the action's type and unique ID. \n\n + Scope (Permission) required: ``internal_action_mgt_update``\n\n" + operationId: deactivateAction + parameters: + - name: actionType + in: path + description: Name of the Action Type. + required: true + schema: + enum: + - preIssueAccessToken + - preUpdatePassword + - preUpdateProfile + - preRegistration + - name: actionId + in: path + description: Unique identifier of the action. + required: true + schema: + type: string + responses: + '200': + description: Action Deactivated + content: + application/json: + schema: + $ref: '#/components/schemas/ActionBasicResponse' + examples: + preIssueAccessToken: + summary: Sample response for pre issue access token action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_ISSUE_ACCESS_TOKEN + name: Pre Issue Access Token + description: This action invokes before issuing an access token. + status: INACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/api/server/v1/actions/preIssueAccessToken/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + preUpdatePassword: + summary: Sample response for pre update password action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PASSWORD + name: Password Update Action + description: This action invokes before updating a user password. + status: INACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/api/server/v1/actions/preUpdatePassword/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + preUpdateProfile: + summary: Sample response for pre update profile action + value: + - id: 24f64d17-9824-4e28-8413-de45728d8e84 + type: PRE_UPDATE_PROFILE + name: Profile Update Action + description: This action invokes before updating a user profile. + status: INACTIVE + createdAt: 2025-08-01T12:00:00Z + updatedAt: 2025-09-01T13:00:00Z + links: + - href: "/api/server/v1/actions/preUpdateProfile/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request POST 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/actions/{actionType}/{actionId}/deactivate' \ + -H 'Authorization: Bearer {bearer_token}' + +components: + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + scopes: + read: internal_action_mgt_view + write: internal_action_mgt_create + update: internal_action_mgt_update + delete: internal_action_mgt_delete + + schemas: + ActionType: + type: string + description: Action types supported. + enum: + - PRE_ISSUE_ACCESS_TOKEN + - PRE_UPDATE_PASSWORD + - PRE_UPDATE_PROFILE + - PRE_REGISTRATION + ActionModel: + type: object + required: + - name + - endpoint + properties: + name: + type: string + minLength: 1 + maxLength: 255 + description: Name of the action. + example: Pre Issue Access Token Action + description: + type: string + maxLength: 255 + description: Description of the action. + example: This action invokes before issuing an access token. + endpoint: + $ref: '#/components/schemas/Endpoint' + rule: + $ref: '#/components/schemas/ORRule' + + Endpoint: + type: object + description: Endpoint configurations of the action. + required: + - uri + - authentication + properties: + uri: + type: string + description: HTTPS URI of the endpoint. + pattern: '^https?://.+' + example: https://myextension.com/token + authentication: + $ref: '#/components/schemas/AuthenticationType' + allowedHeaders: + type: array + description: List of HTTP headers to forward to the extension. + items: + type: string + example: [ "x-geo-location", "host"] + allowedParameters: + type: array + description: List of parameters to forward to the extension. + items: + type: string + example: [ "device-id"] + + EndpointResponse: + type: object + description: Endpoint configurations of the action. + required: + - uri + - authentication + properties: + uri: + type: string + description: HTTPS URI of the endpoint. + pattern: '^https?://.+' + example: https://myextension.com/token + authentication: + $ref: '#/components/schemas/AuthenticationTypeResponse' + allowedHeaders: + type: array + description: List of HTTP headers to forward to the extension. + items: + type: string + example: [ "x-geo-location", "host" ] + allowedParameters: + type: array + description: List of parameters to forward to the extension. + items: + type: string + example: [ "device-id" ] + + ActionResponse: + type: object + properties: + id: + type: string + example: '24f64d17-9824-4e28-8413-de45728d8e84' + description: Unique identifier of the action. + type: + $ref: '#/components/schemas/ActionType' + name: + type: string + minLength: 1 + maxLength: 255 + description: Name of the action. + example: Pre Issue Access Token + description: + type: string + maxLength: 255 + description: Description of the action. + example: This action invokes before issuing an access token. + status: + type: string + enum: + - ACTIVE + - INACTIVE + description: Status of the action. + example: ACTIVE + createdAt: + type: string + description: Created time of the action. + example: "2025-08-01T12:00:00Z" + updatedAt: + type: string + description: Last updated time of the action. + example: "2025-09-01T13:00:00Z" + endpoint: + $ref: '#/components/schemas/EndpointResponse' + rule: + $ref: '#/components/schemas/ORRuleResponse' + + ActionBasicResponse: + type: object + properties: + id: + type: string + example: '24f64d17-9824-4e28-8413-de45728d8e84' + description: Unique identifier of the action. + type: + $ref: '#/components/schemas/ActionType' + name: + type: string + minLength: 1 + maxLength: 255 + description: Name of the action. + example: Pre Issue Access Token Action + description: + type: string + maxLength: 255 + description: Description of the action. + example: This action invokes before issuing an access token. + status: + type: string + enum: + - ACTIVE + - INACTIVE + description: Status of the action. + createdAt: + type: string + description: Created time of the action. + example: "2025-08-01T12:00:00Z" + updatedAt: + type: string + description: Last updated time of the action. + example: "2025-09-01T13:00:00Z" + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + - href: "/api/server/v1/actions/preIssueAccessToken/24f64d17-9824-4e28-8413-de45728d8e84" + method: GET + rel: self + + Link: + type: object + properties: + href: + type: string + description: Url of the endpoint. + method: + type: string + enum: + - GET + description: Http method. + rel: + type: string + description: Relation to the resource. + + ActionResponseList: + type: array + items: + $ref: '#/components/schemas/ActionBasicResponse' + + ActionTypesResponse: + type: array + items: + $ref: '#/components/schemas/ActionTypesResponseItem' + + ActionTypesResponseItem: + type: object + properties: + type: + $ref: '#/components/schemas/ActionType' + displayName: + type: string + description: "Display name of the action type." + example: "Pre Issue Access Token." + description: + type: string + description: "Description of the action type." + example: "Extension point configuration for Pre Issue Access Token." + count: + type: integer + description: "Number of actions configured under the action type." + example: 1 + self: + type: string + description: "API endpoint referring to the location of the given action type." + example: "/api/server/v1/actions/preIssueAccessToken/24f64d17-9824-4e28-8413-de45728d8e84" + + AuthenticationType: + type: object + description: > + The type of authentication required by the action's endpoint. The following options are supported: + + - NONE: No authentication is required.
+ ``{ + "type": "NONE" + }`` + + - BASIC: Basic authentication with a username and password.
+ ``{ + "type": "BASIC", + "properties": { + "username": "auth_username", + "password": "auth_password" + } + }`` + + - API_KEY: API key-based authentication, where the key is provided in an HTTP header.
+ ``{ + "type": "API_KEY", + "properties": { + "header": "X-API-Key", + "value": "12345-abcde-67890" + } + }`` + + - BEARER: Bearer token-based authentication.
+ ``{ + "type": "BEARER", + "properties": { + "accessToken": "0d6fed02-eac0-332b-8998-213a543139a0" + } + }`` + required: + - type + properties: + type: + type: string + enum: + - NONE + - BEARER + - API_KEY + - BASIC + example: BASIC + properties: + type: object + description: Authentication properties specific to the selected type. + additionalProperties: true + example: + type: BASIC + properties: + username: "auth_username" + password: "auth_password" + + AuthenticationTypeResponse: + type: object + description: Authentication configurations of the action. + required: + - type + properties: + type: + type: string + enum: + - NONE + - BEARER + - API_KEY + - BASIC + description: Type of the authentication. + example: BASIC + + ActionUpdateModel: + type: object + properties: + name: + type: string + minLength: 1 + maxLength: 255 + description: Updating name of the action. + example: Pre Issue Access Token Action + description: + type: string + maxLength: 255 + description: Updating description of the action. + example: This action invokes before issuing an access token. + endpoint: + $ref: '#/components/schemas/EndpointUpdateModel' + rule: + $ref: '#/components/schemas/ORRule' + + EndpointUpdateModel: + type: object + description: Updating endpoint configurations of the action. + properties: + uri: + type: string + pattern: '^https?://.+' + description: Updating HTTPS URI of the endpoint. + example: https://myextension.com/token + authentication: + $ref: '#/components/schemas/AuthenticationType' + allowedHeaders: + type: array + description: List of HTTP headers to forward to the extension. + items: + type: string + example: [ "x-geo-location", "host" ] + allowedParameters: + type: array + description: List of parameters to forward to the extension. + items: + type: string + example: [ "device-id" ] + + ORRule: + type: object + description: Represents a rule configuration that combines multiple sub-rules with an OR condition. + If any of the sub-rules evaluate to true, the ORRule is considered satisfied. + properties: + condition: + type: string + description: The logical condition for combining the sub-rules. For ORRule, the value + must always be "OR". + enum: ["OR"] + rules: + type: array + items: + $ref: '#/components/schemas/ANDRule' + minItems: 1 + + ORRuleResponse: + type: object + description: Rule configured for the action. + properties: + condition: + type: string + enum: ["OR"] + rules: + type: array + items: + $ref: '#/components/schemas/ANDRuleResponse' + description: A list of sub-rules that are combined using the OR condition. Each sub-rule is an ANDRule. + minItems: 1 + + ANDRule: + type: object + description: A sub-rule that combines expressions with AND condition. + required: + - condition + - expressions + properties: + condition: + type: string + enum: ["AND"] + description: The logical condition for combining the expressions. For ANDRule, the value must always be "AND". + expressions: + type: array + items: + $ref: '#/components/schemas/Expression' + minItems: 1 + description: A list of expressions that are combined using the AND condition. All expressions must evaluate to true for the ANDRule to pass. + + ANDRuleResponse: + type: object + description: Represents a rule configuration that combines multiple expressions with an AND condition. All expressions in the ANDRule must evaluate to true for the rule to be satisfied. + properties: + condition: + type: string + enum: ["AND"] + description: The logical condition for combining the expressions. For ANDRule, the value must always be "AND". + expressions: + type: array + items: + $ref: '#/components/schemas/ExpressionResponse' + minItems: 1 + description: A list of expressions that are combined using the AND condition. All expressions must evaluate to true for the ANDRule to pass. + + Expression: + type: object + description: Represents a single logical condition or comparison within a rule. An expression defines a field, an operator, and a value that is evaluated. + required: + - field + - operator + - value + properties: + field: + type: string + description: The field or attribute of the entity being evaluated (e.g.,application, role). + example: application + operator: + type: string + description: The comparison operator used to evaluate the field and value. Common operators include "equals", "contains", "startsWith", etc. + example: equals + value: + type: string + description: The value that the field is compared against based on the operator. + example: myapp + + ExpressionResponse: + type: object + description: Expressions in the rule. + properties: + field: + type: string + example: application + operator: + type: string + example: equals + value: + type: string + example: myapp + + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some error message. + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + diff --git a/docusaurus-asgardeo/static/apis/restapis/admin-identity-verification.yaml b/docusaurus-asgardeo/static/apis/restapis/admin-identity-verification.yaml new file mode 100644 index 0000000000..30d5eab44a --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/admin-identity-verification.yaml @@ -0,0 +1,498 @@ +openapi: 3.0.3 +info: + title: Identity Verification API + description: |- + This is the RESTful API for admins to manage users' identity verification information stored in Asgardeo. +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/users/v1' +security: + - OAuth2: [] + - BasicAuth: [] +paths: + /{user-id}/idv/verify: + post: + tags: + - Admin - Identity Verification + summary: Verify an Identity + description: > + This API provides the capability to verify a user with the configured verification required attributes +
Scope(Permission) required: `internal_idv_claim_verify` + operationId: verifyIdentity + parameters: + - name: user-id + in: path + description: user id of the user + required: true + schema: + type: string + requestBody: + description: Verify an identity + content: + application/json: + schema: + $ref: '#/components/schemas/verifyRequest' + required: true + responses: + '201': + description: Accepted + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/verificationPostResponse' + '200': + description: Successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/verificationPostResponse' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /{user-id}/idv/claims: + get: + tags: + - Admin - Identity Verification + summary: Get the identity verification claims of a user + description: > + This API provides the capability to retrieve the verification details of a user. +
Scope(Permission) required: `internal_idv_claim_view` + operationId: getIdVClaims + parameters: + - name: user-id + in: path + description: user id of the user + required: true + schema: + type: string + - $ref: '#/components/parameters/idVPQueryParam' + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/verificationClaimResponse' + '400': + description: Invalid status value + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + post: + tags: + - Admin - Identity Verification + summary: Add identity verification claim. + description: > + This API provides the capability to add verification claim data +
Scope(Permission) required: `internal_idv_claim_add` + operationId: addIdVClaim + parameters: + - name: user-id + in: path + description: user id of the user + required: true + schema: + type: string + responses: + '201': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/verificationClaimPostResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/verificationClaimPostRequest' + description: This represents the identity provider to be created. + required: true + put: + tags: + - Admin - Identity Verification + summary: Update identity verification claims of a user. + description: > + This API provides the capability to update verification claims of a user +
Scope(Permission) required: `internal_idv_claim_update` + operationId: updateIdVClaims + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/verificationClaimPostRequest' + description: This represents the identity provider to be created. + required: true + parameters: + - name: user-id + in: path + description: user id of the user + required: true + schema: + type: string + responses: + '201': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/verificationClaimPostResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + /{user-id}/idv/claims/{claim-id}: + get: + tags: + - Admin - Identity Verification + summary: Get identity verification claim + description: > + This API provides the capability to retrieve a identity verification claim of a user. +
Scope(Permission) required: `internal_idv_claim_view` + operationId: getIdVClaim + parameters: + - name: user-id + in: path + description: user id of the user + required: true + schema: + type: string + - name: claim-id + in: path + description: Claim that needs to retrieve verification metadata + required: true + schema: + type: string + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/verificationClaimResponse' + '400': + description: Invalid status value + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + put: + tags: + - Admin - Identity Verification + summary: Update identity verification claim + description: > + This API provides the capability to update a identity verification claim of a user. +
Scope(Permission) required: `internal_idv_claim_update` + operationId: updateIdVClaim + parameters: + - name: claim-id + in: path + description: Claim that needs to retrieve verification metadata + required: true + schema: + type: string + - name: user-id + in: path + description: user id of the user + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/verificationClaimResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/verificationClaimUpdateRequest' + required: true + +components: + parameters: + limitQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + format: int32 + offsetQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + format: int32 + idVPQueryParam: + in: query + name: idVProviderId + required: false + description: | + Id of the identity verification provider. + schema: + type: string + schemas: + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-***-***-8dd0-7b7d38e13047 + verificationPostResponse: + type: object + properties: + idVProviderId: + type: string + example: "d75b8685-****-****-****-80a3eecb5af2" + claims: + type: array + items: + $ref: '#/components/schemas/verificationClaimResponse' + verificationClaimResponse: + type: object + properties: + id: + type: string + example: aHR0cDovL3dzbzIub3JnL*********91c2VybmFtZQ + readOnly: true + uri: + type: string + example: 'http://wso2.org/claims/dob' + isVerified: + type: boolean + example: true + idVProviderId: + type: string + example: '2159375-r567-****-****-5566424414527' + claimMetadata: + $ref: '#/components/schemas/claimMetadata' + verificationClaimRequest: + type: object + properties: + uri: + type: string + example: 'http://wso2.org/claims/dob' + isVerified: + type: boolean + example: true + idVProviderId: + type: string + example: '2159375-r567-****-****-5566424414527' + claimMetadata: + $ref: '#/components/schemas/claimMetadata' + verificationClaimUpdateRequest: + type: object + properties: + isVerified: + type: boolean + example: true + claimMetadata: + $ref: '#/components/schemas/claimMetadata' + required: + - isVerified + - claimMetadata + claimMetadata: + type: object + additionalProperties: true + example: '{"source": "Provider", "trackingId": "123e4567-****-****-a456-556642440000" }' + verificationClaimPostRequest: + type: array + items: + $ref: '#/components/schemas/verificationClaimRequest' + verificationClaimPostResponse: + type: array + items: + $ref: '#/components/schemas/verificationClaimResponse' + verifyRequest: + type: object + properties: + idVProviderId: + type: string + example: "d75b8685-****-****-****-80a3eecb5af2" + claims: + type: array + items: + type: string + example: + - http://wso2.org/claims/dob + - http://wso2.org/claims/country + properties: + type: array + items: + $ref: '#/components/schemas/ProviderProperty' + required: + - identityVerificationProvider + - properties + ProviderProperty: + type: object + properties: + key: + type: string + example: status + value: + type: string + example: "INITIATED" + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://localhost:9443/oauth2/authorize' + tokenUrl: 'https://localhost:9443/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/api-resources.yaml b/docusaurus-asgardeo/static/apis/restapis/api-resources.yaml new file mode 100644 index 0000000000..9a0f89f38d --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/api-resources.yaml @@ -0,0 +1,1138 @@ +openapi: 3.0.0 +info: + description: > + This document explains the RESTful API for API Resource Management in Asgardeo. + version: "v1" + title: Asgardeo - API Resource Management Rest API + +security: + - OAuth2: [] + +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' + +paths: + /api-resources: + post: + tags: + - API Resources + operationId: addAPIResource + summary: Add a new API resource + description: | + Add a new API resource + + Scope(Permission) required: `internal_api_resource_create` + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIResourceResponse' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + 403: + description: Forbidden + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 409: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/APIResourceCreationModel' + description: This represents the API resource to be created. + required: true + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/api-resources' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "Greetings API", + "identifier": "greetings_api", + "description": "Greetings API representation", + "requiresAuthorization": true, + "scopes": [ + { + "name": "greetings:write", + "displayName": "Write Greetings", + "description": "Allows writing greetings" + } + ] + }' + x-codegen-request-body-name: body + get: + tags: + - API Resources + summary: List all API resources in the server + description: | + List all API resources in the server + + Scope(Permission) required: `internal_api_resource_view` + operationId: getAPIResources + parameters: + - $ref: '#/components/parameters/before' + - $ref: '#/components/parameters/after' + - $ref: '#/components/parameters/filter' + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/attributes' + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIResourceListResponse' + 401: + description: Unauthorized + 403: + description: Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/api-resources' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /api-resources/{apiResourceId}: + get: + tags: + - API Resources + summary: Get API resource specified by the id + description: | + Get API resource specified by the id + + Scope(Permission) required: `internal_api_resource_view` + parameters: + - $ref: '#/components/parameters/apiResourceId' + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIResourceResponse' + 401: + description: Unauthorized + 403: + description: Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/api-resources/{apiResourceId}' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - API Resources + summary: Patch API resource specified by the id + description: | + Patch API resource specified by the id. Patch operation only supports "name", "description" updating and "addedScopes" fields at the moment. + "removedScopes" field is not yet supported. + + Scope(Permission) required: `internal_api_resource_update` + parameters: + - $ref: '#/components/parameters/apiResourceId' + responses: + 204: + description: Not Content + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + 403: + description: Forbidden + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 409: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 501: + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/APIResourcePatchModel' + description: This represents the API resource to be patched. + required: true + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/api-resources/{apiResourceId}' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "Greetings API", + "description": "Greetings API representation", + "addedScopes": [ + { + "name": "greetings:read", + "displayName": "Read Greetings", + "description": "Allows to read greetings" + } + ] + }' + x-codegen-request-body-name: body + delete: + tags: + - API Resources + summary: Delete API resource specified by the id + description: | + Delete API resource specified by the id + + Scope(Permission) required: `internal_api_resource_delete` + parameters: + - $ref: '#/components/parameters/apiResourceId' + responses: + 204: + description: No Content + 401: + description: Unauthorized + 403: + description: Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/api-resources/{apiResourceId}' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /api-resources/{apiResourceId}/scopes: + get: + tags: + - API Resource Scopes + summary: Get API resource scopes + description: | + Get API resource scopes specified by the id + + Scope(Permission) required: `internal_api_resource_view` + parameters: + - $ref: '#/components/parameters/apiResourceId' + responses: + 200: + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ScopeGetModel' + 401: + description: Unauthorized + 403: + description: Forbidden + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/api-resources/{apiResourceId}/scopes' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - API Resource Scopes + summary: Add scopes to API resource + description: | + Put scopes API resource specified by the id + + Scope(Permission) required: `internal_api_resource_update` + parameters: + - $ref: '#/components/parameters/apiResourceId' + responses: + 204: + description: No Content + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + 403: + description: Forbidden + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 409: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ScopeCreationModel' + example: + [ + { + "name": "greetings:write", + "displayName": "Write Greetings", + "description": "Allows writing greetings" + }, + { + "name": "greetings:read", + "displayName": "Read Greetings", + "description": "Allows reading greetings" + } + ] + description: This represents the API resource to be patched. + required: true + x-codeSamples: + - lang: Curl + source: | + curl --location --request PUT 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/api-resources/{apiResourceId}/scopes' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '[ + { + "name": "greetings:write", + "displayName": "Write Greetings", + "description": "Allows writing greetings" + }, + { + "name": "greetings:read", + "displayName": "Read Greetings", + "description": "Allows reading greetings" + } + ]' + x-codegen-request-body-name: body + /api-resources/{apiResourceId}/scopes/{scopeName}: + delete: + tags: + - API Resource Scopes + summary: Delete API scope specified by the name + description: | + Delete API scope specified by the name + + Scope(Permission) required: `internal_api_resource_delete` + parameters: + - $ref: '#/components/parameters/apiResourceId' + - $ref: '#/components/parameters/scopeName' + responses: + 401: + description: Unauthorized + 403: + description: Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/api-resources/{apiResourceId}/scopes/{scopeName}' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /scopes: + get: + tags: + - API Resource Scopes + summary: Get all scopes in the tenant + description: | + Get all scopes in the tenant + + Scope(Permission) required: `internal_api_resource_view` + parameters: + - $ref: '#/components/parameters/scopeFilter' + responses: + 200: + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ScopeGetModel' + 401: + description: Unauthorized + 403: + description: Forbidden + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/scopes' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /meta/api-resource-collections: + get: + tags: + - API Resource Collections + summary: List all API resource collections in the server + description: | + List all API resource collections in the server + + Scope(Permission) required: `internal_api_resource_view` + operationId: getAPIResourceCollections + parameters: + - $ref: '#/components/parameters/collectionFilter' + - $ref: '#/components/parameters/collectionAttributes' + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIResourceCollectionListResponse' + 401: + description: Unauthorized + 403: + description: Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/meta/api-resource-collections' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /meta/api-resource-collections/{collectionId}: + get: + tags: + - API Resource Collections + summary: Get API resource collection specified by the id + description: | + Get API resource collection specified by the id + + Scope(Permission) required: `internal_api_resource_view` + operationId: getAPIResourceCollectionByCollectionId + parameters: + - $ref: '#/components/parameters/collectionId' + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIResourceCollectionResponse' + 401: + description: Unauthorized + 403: + description: Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/meta/api-resource-collections/{collectionId}' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + parameters: + organizationId: + in: path + name: organizationId + description: uuid of the org. + required: true + schema: + type: string + example: "1234-4567-4567" + + apiResourceId: + name: apiResourceId + in: path + description: ID of the API Resource. + required: true + schema: + type: string + example: er34-gf23-bv54-vb90 + + collectionId: + name: collectionId + in: path + description: ID of the API Resource Collection. + required: true + schema: + type: string + example: er34-gf23-bv54-vb90 + + scopeName: + name: scopeName + in: path + description: Name of the Scope. + required: true + schema: + type: string + + applicationId: + name: applicationId + in: path + description: ID of the Application. + required: true + schema: + type: string + + authorizationId: + name: authorizationId + in: path + description: ID of the authorization. + required: true + schema: + type: string + + before: + name: before + in: query + required: false + description: | + Base64 encoded cursor value for backward pagination. + schema: + type: string + example: Ng== + + after: + name: after + in: query + required: false + description: | + Base64 encoded cursor value for forward pagination. + schema: + type: string + example: Ng== + + filter: + name: filter + in: query + required: false + description: | + Condition to filter the retrieval of records. Supports 'sw', 'co', 'ew' and 'eq' operations. + schema: + type: string + example: identifier+eq+greetings + + scopeFilter: + name: filter + in: query + required: false + description: | + Condition to filter the retrieval of scopes by name. Supports 'sw', 'co', 'ew' and 'eq' operations. + schema: + type: string + example: name+co+greetings + + collectionFilter: + name: filter + in: query + required: false + description: | + Condition to filter the retrieval of records. Supports 'sw', 'co', 'ew' and 'eq' operations. + schema: + type: string + example: type+eq+tenant + + limit: + name: limit + in: query + required: false + description: | + Maximum number of records to return. + schema: + type: integer + example: 10 + + attributes: + name: attributes + in: query + required: false + description: Specifies the required attributes in the response. Only 'properties' attribute is currently supported. + schema: + type: string + + collectionAttributes: + name: attributes + in: query + required: false + description: Specifies the required attributes in the response. Only 'apiResources' attribute is currently supported. + schema: + type: string + + schemas: + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + + APIResourceListItem: + type: object + required: + - id + - name + - identifier + - self + properties: + id: + type: string + example: gh43-jk34-vb34-df67 + name: + type: string + example: Greetings API + identifier: + type: string + example: greetings_api + type: + type: string + example: SYSTEM + requiresAuthorization: + type: boolean + example: true + properties: + type: array + items: + $ref: '#/components/schemas/Property' + self: + type: string + example: /api/server/v1/api-resources/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + + APIResourceResponse: + type: object + required: + - id + - name + - identifier + - self + properties: + id: + type: string + example: gh43-jk34-vb34-df67 + name: + type: string + example: Greetings API + description: + type: string + example: Greeting API representation + identifier: + type: string + example: greetings_api + type: + type: string + example: BUSINESS + requiresAuthorization: + type: boolean + example: true + scopes: + type: array + items: + $ref: '#/components/schemas/ScopeGetModel' + subscribedApplications: + type: array + items: + $ref: '#/components/schemas/SubscribedApplicationGetModel' + properties: + type: array + items: + $ref: '#/components/schemas/Property' + self: + type: string + example: /api/server/v1/api-resources/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + + APIResourceCreationModel: + type: object + required: + - identifier + - name + properties: + name: + type: string + example: Greetings API + identifier: + type: string + example: greetings_api + description: + type: string + example: Greetings API representation + requiresAuthorization: + type: boolean + example: true + scopes: + type: array + items: + $ref: '#/components/schemas/ScopeCreationModel' + + APIResourcePatchModel: + type: object + properties: + name: + type: string + example: Greetings API + description: + type: string + example: Greetings API representation + addedScopes: + type: array + items: + $ref: '#/components/schemas/ScopeCreationModel' + removedScopes: + type: array + items: + type: string + description: This field is not supported yet. + example: + { + "name": "Greetings API", + "description": "Greetings API representation", + "addedScopes": [ + { + "name": "greetings:read", + "displayName": "Read Greetings", + "description": "Allows to read greetings" + } + ] + } + PaginationLink: + type: object + properties: + rel: + type: string + example: before + href: + type: string + example: /api/server/v1/api-resources?after=NDoy + + APIResourceListResponse: + type: object + required: + - links + properties: + totalResults: + type: integer + example: 1 + links: + type: array + items: + $ref: '#/components/schemas/PaginationLink' + APIResources: + type: array + items: + $ref: '#/components/schemas/APIResourceListItem' + + APIResourceMap: + type: object + properties: + read: + type: array + items: + $ref: '#/components/schemas/APIResourceCollectionItem' + write: + type: array + items: + $ref: '#/components/schemas/APIResourceCollectionItem' + + APIResourceCollectionListItem: + type: object + required: + - id + - name + - displayName + - self + properties: + id: + type: string + example: gh43-jk34-vb34-df67 + name: + type: string + example: bulkUserImport + displayName: + type: string + example: Bulk User Import + type: + type: string + example: TENANT + apiResources: + $ref: '#/components/schemas/APIResourceMap' + self: + type: string + example: /api/server/v1/api-resource-collections/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + + APIResourceCollectionListResponse: + type: object + required: + - links + properties: + totalResults: + type: integer + example: 1 + apiResourceCollections: + type: array + items: + $ref: '#/components/schemas/APIResourceCollectionListItem' + example: + { + "totalResults": 2, + "apiResourceCollections": [ + { + "id": "YXBwbGljYXRpb25z", + "name": "applications", + "displayName": "Applications", + "type": "tenant", + "self": "/api/server/v1/api-resource-collections/YXBwbGljYXRpb25z" + }, + { + "id": "b3JnX2VtYWlsVGVtcGxhdGVz", + "name": "org_emailTemplates", + "displayName": "Email Templates", + "type": "organization", + "self": "/api/server/v1/api-resource-collections/b3JnX2VtYWlsVGVtcGxhdGVz" + } + ] + } + APIResourceCollectionItem: + type: object + required: + - id + - name + - displayName + - self + properties: + id: + type: string + example: gh43-jk34-vb34-df67 + name: + type: string + example: Greetings API + description: + type: string + example: Greeting API representation + identifier: + type: string + example: greetings_api + type: + type: string + example: BUSINESS + scopes: + type: array + items: + $ref: '#/components/schemas/ScopeGetModel' + self: + type: string + example: /t/carbon.super/api/server/v1/api-resources/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + + APIResourceCollectionResponse: + type: object + required: + - id + - name + - displayName + properties: + id: + type: string + example: gh43-jk34-vb34-df67 + name: + type: string + example: bulkUserImport + displayName: + type: string + example: Bulk User Import + type: + type: string + example: TENANT + apiResources: + $ref: '#/components/schemas/APIResourceMap' + example: + { + "id": "YXBwbGljYXRpb25z", + "name": "applications", + "displayName": "Applications", + "type": "tenant", + "apiResources": { + "read": [ + { + "id": "dea5bc01-f8e2-4a29-bc39-acdcb6c73e0e", + "name": "Userstore Management API", + "scopes": [ + { + "displayName": "View Userstore", + "name": "internal_userstore_view" + } + ], + "self": "/v1/api-resources/dea5bc01-f8e2-4a29-bc39-acdcb6c73e0e" + }, + { + "id": "ec4882d7-9628-413b-9704-1b06fc8c5888", + "name": "Identity Provider Management API", + "scopes": [ + { + "displayName": "View Identity Provider", + "name": "internal_idp_view" + } + ], + "self": "/v1/api-resources/ec4882d7-9628-413b-9704-1b06fc8c5888" + } + ] + } + } + ScopeGetModel: + type: object + required: + - id + - displayName + - name + properties: + id: + type: string + example: sf23-fg34-fy53-hj23 + displayName: + type: string + example: Write + name: + type: string + example: greetings:write + description: + type: string + example: Allow writing greetings + + ScopeCreationModel: + type: object + required: + - name + properties: + name: + type: string + example: 'greetings:write' + displayName: + type: string + example: "Write Greetings" + description: + type: string + example: "Allows writing greetings" + + SubscribedApplicationGetModel: + type: object + properties: + name: + type: string + example: Application1 + id: + type: string + example: 23fd-23gd-54vv-sdhf + + Property: + type: object + required: + - name + - value + properties: + name: + type: string + example: "label" + value: + type: string + example: "Internal" + + responses: + BadRequest: + description: Bad Request. Invalid request or validation error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 400 + message: Bad Request + description: Invalid request or validation error + + Conflict: + description: Conflict. Specified resource already exists. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 409 + message: Conflict + description: Specified resource already exists + moreInfo: '' + error: [] + Forbidden: + description: >- + Forbidden. The request must be conditional but no condition has been + specified. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 403 + message: Forbidden + description: >- + The request must be conditional but no condition has been + specified + InternalServerError: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 500 + message: Internal Server Error + description: >- + The server encountered an internal error. Please contact + administrator. + moreInfo: '' + error: [] + NotFound: + description: Not Found. The specified resource does not exist. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 404 + message: Not Found + description: The specified resource does not exist + moreInfo: '' + error: [] + + Unauthorized: + description: Unauthorized. The user is not authorized. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + example: + code: 401 + message: Unauthorized + description: The user is not authorized + moreInfo: '' + error: [] + + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'http://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/app-native-authentication-api.yaml b/docusaurus-asgardeo/static/apis/restapis/app-native-authentication-api.yaml new file mode 100644 index 0000000000..3eb8935101 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/app-native-authentication-api.yaml @@ -0,0 +1,455 @@ +openapi: 3.0.0 +info: + description: > + This document specifies an **Authentication RESTful API** for **Asgardeo** which can be used to perform a complete API-based user authentication. + + > This API is part of the **App-Native Authentication** capability that can authenticate users within the context of the application without external redirects. + Refer to the feature documentation for more information. + version: v1 + title: Asgardeo - Application-native Authentication Rest API + contact: + name: WSO2 + url: 'https://wso2.com/products/identity-server/' + license: + name: Apache 2.0 + url: 'https://www.apache.org/licenses/LICENSE-2.0.html' + +servers: + - url: 'https://{server-url}/t/{tenant-domain}/oauth2/' + variables: + tenant-domain: + default: "carbon.super" + server-url: + default: "localhost:9443" + +paths: + /authorize: + get: + operationId: Initiate Authentication* + description: | + This API is used to initiate application-native authentication. + + *While this is not an API specific to app-native authentication, a standard OAuth2 authorization request is used + to initiate app-native authentication with the exception of setting the `response_mode` to `direct`. Subsequent requests should be made to the `/authn` endpoint described under [Handle Authentication](#operation/Handle%20Authentication). + parameters: + - name: response_type + in: query + required: true + schema: + type: string + enum: + - code + - name: client_id + in: query + required: true + schema: + type: string + - name: response_mode + in: query + required: true + schema: + type: string + enum: + - direct + - name: redirect_uri + in: query + required: true + schema: + type: string + - name: scope + in: query + required: false + schema: + type: string + - name: state + in: query + required: false + schema: + type: string + responses: + '200': + description: Ok + content: + application/json: + schema: + $ref: '#/components/schemas/AuthResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /authn: + post: + operationId: Handle Authentication + description: This API provides the capability to perform user authentication. + requestBody: + required: true + description: Authentication request body. + content: + application/json: + schema: + $ref: '#/components/schemas/AuthRequest' + responses: + '200': + description: Ok + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/AuthResponse' + - $ref: '#/components/schemas/SuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' +components: + schemas: + AuthRequest: + description: | + Authentication request body. + required: + - flowId + - selectedAuthenticator + type: object + properties: + flowId: + type: string + description: A unique identifier for the authentication flow. + The value of the flowId will remain the same for the entire authentication flow. + example: 3bd1f207-e5b5-4b45-8a91-13b0acfb2151 + selectedAuthenticator: + $ref: '#/components/schemas/SelectedAuthenticator' + SelectedAuthenticator: + type: object + description: Contains the data related to a selected authenticator. + required: + - authenticatorId + properties: + authenticatorId: + type: string + description: The unique identifier of the selected authenticator. + example: QmFzaWNBdXRoZW50aWNhdG9yOkxPQ0FM + params: + type: object + description: | + The parameters required for the authenticator to perform user authentication. + additionalProperties: + type: string + example: + username: johnd + password: a#m1N + AuthResponse: + type: object + description: Authentication response body. + required: + - flowId + - flowStatus + - flowType + - nextStep + - links + properties: + flowId: + type: string + description: A unique identifier for the authentication flow. + The value of the flowId will remain the same for the entire authentication flow. + example: 3bd1f207-e5b5-4b45-8a91-13b0acfb2151 + flowStatus: + type: string + enum: + - INCOMPLETE + - FAIL_INCOMPLETE + description: | + The status of the authentication flow. + - INCOMPLETE - The authentication flow is incomplete and requires further steps. + - FAIL_INCOMPLETE - The authentication flow has failed and requires further steps. + example: INCOMPLETE + flowType: + type: string + enum: + - AUTHENTICATION + description: The type of the authentication flow. This version only contains flowType AUTHENTICATION. + example: AUTHENTICATION + nextStep: + $ref: '#/components/schemas/NextStep' + links: + type: array + items: + $ref: '#/components/schemas/Link' + description: Contains the urls related to the authentication flow. + NextStep: + type: object + description: Contains the authenticator data related to the next step. + required: + - stepType + - authenticators + properties: + stepType: + type: string + enum: + - MULTI_OPTIONS_PROMPT + - AUTHENTICATOR_PROMPT + description: | + The type of the next step in the authentication flow. + - MULTI_OPTIONS_PROMPT - The next step is for authenticator selection. + - AUTHENTICATOR_PROMPT - The next step is for authenticating the user through a + configured authenticator. + example: AUTHENTICATOR_PROMPT + authenticators: + type: array + items: + $ref: '#/components/schemas/Authenticator' + description: Contains the data related to the available authentication steps. + acceptErrorParams: + type: boolean + description: | + Denote that the server is capable of handling errors on behalf of the application. When this is set to `true` + and when the application is handling part of the authentication process (ex: handling federation) when there + are errors, the application can send the params in the error response to the server to handle it appropriately. + example: false + messages: + type: array + items: + $ref: '#/components/schemas/Message' + description: Contains any messages related to the authentication step. + Authenticator: + type: object + description: Contains the data related to an authenticator. + required: + - authenticatorId + - authenticator + - idp + - metadata + properties: + authenticatorId: + type: string + description: | + The authenticator identifier. Note that this identifier is mutable and can change over time. + Therefore do not base any logic on this value. + example: QmFzaWNBdXRoZW50aWNhdG9yOkxPQ0FM + authenticator: + type: string + description: The authenticator identifier. + example: Username & Password + idp: + type: string + description: The identity provider identifier. + example: LOCAL + metadata: + $ref: '#/components/schemas/AuthenticatorMetadata' + requiredParams: + type: array + items: + type: string + description: | + Contains the required parameters that should be sent to the server for processing the current step of the + authentication request. + example: [ "username", "password" ] + AuthenticatorMetadata: + type: object + description: Contains the metadata related to an authenticator. + required: + - i18nKey + properties: + i18nKey: + type: string + description: The i18n key for the authenticator. This can be used to get the localized text for the + authenticator. + example: authenticator.basic + promptType: + type: string + enum: + - USER_PROMPT + - INTERNAL_PROMPT + - REDIRECTION_PROMPT + description: | + The type of the prompt. The prompt can be one of the following. + - USER_PROMPT - The prompt is for the user to input the required parameters for the authenticator. + - INTERNAL_PROMPT - The prompt is for the system to perform an internal action which will result in + obtaining the required parameters. ex: prompt for fido authentication, prompt for native federated authentication. + - REDIRECTION_PROMPT - The prompt is for the user to be redirected to a different url which will result in obtaining + the required parameters. ex: Authenticate using a federated authenticator which requires the user to be + redirect to the federation identity provider. In this case a redirectUrl will be available in `additionalData`. + example: USER_PROMPT + params: + type: array + items: + $ref: '#/components/schemas/Param' + description: | + Contains the data related to input parameters of the authenticator. Only present if the `promptType` is `USER_PROMPT`. + additionalData: + type: object + additionalProperties: + type: string + description: | + Contains any additional data related to the authenticator which would be needed for the application to perform + authentication. ex: Fido2 challenge, redirectUrl for federated authentication. + example: + redirectUrl: https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fexample-app.com%2Fredirect&state=e12f-ed27-49e5-ad0a-8bbb5671d81e%2COIDC&client_id=231644702133-ds23592jt.apps.googleusercontent.com&scope=openid + Param: + type: object + description: Contains the data related to an input parameter of the authenticator. + required: + - param + - type + - isConfidential + - order + - i18nKey + properties: + param: + type: string + description: The parameter identifier. + example: username + type: + type: string + enum: + - STRING + - INTEGER + - BOOLEAN + description: Indicates the data type of the parameter. + example: STRING + isConfidential: + type: boolean + description: Indicates whether the parameter is confidential or not. + example: false + order: + type: integer + description: Indicates the recommended display order of the parameter. + example: 1 + validationRegex: + type: string + description: Contains the regex pattern to validate the parameter value. + example: ^[\S]{3,50}$ + i18nKey: + type: string + description: The i18n key for the parameter. This can be used to get the localized text for the parameter. + example: param.username + Message: + type: object + description: Contains the data related to a message for the authentication step. + required: + - type + - messageId + - message + - i18nKey + properties: + type: + type: string + enum: + - INFO + - ERROR + description: Indicates the type of the message. + example: ERROR + messageId: + type: string + description: The message identifier. + example: msg_invalid_un_pw + message: + type: string + description: The message. + example: Invalid username or password. + i18nKey: + type: string + description: The i18n key for the message. This can be used to get the localized text for the message. + example: message.msg_invalid_un_pw + context: + type: array + items: + $ref: '#/components/schemas/Context' + description: | + Contains any context information related to the message. The context information can be used to + create localized messages. The available different context information is bound to the messageId. + ex: failed attempt remaining count. + Context: + type: object + description: A property map to contain any context information for messages. + required: + - key + - value + properties: + key: + type: string + example: remainingAttempts + value: + type: string + example: 2 + Link: + type: object + description: Contains the data related to a link. + required: + - name + - href + - method + properties: + name: + type: string + description: The identifier of the link. + example: authentication + href: + type: string + description: The relative url of the link. + example: /api/authenticate/v1 + method: + type: string + enum: + - GET + - POST + description: The supported http methods of the link. + example: POST + SuccessResponse: + type: object + description: Response with authorization code received after a successful authentication. + properties: + flowStatus: + type: string + enum: + - SUCCESS_COMPLETED + description: | + The status of the authentication flow. + - SUCCESS_COMPLETED - The authentication flow has been successfully completed. + example: SUCCESS_COMPLETED + authData: + type: object + description: | + Data related to the successful authentication. This will contain the authorization code which can be used to + obtain the access token. + additionalProperties: + type: string + example: + code: dbde709c-c5a5-3643-8604-30ef32b44c90 + state: loginpg + Error: + type: object + description: Contains the data related to an error. + required: + - code + - message + - description + - traceId + properties: + code: + type: string + example: ABA-00000 + message: + type: string + example: Some error message. + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 diff --git a/docusaurus-asgardeo/static/apis/restapis/application-management.yaml b/docusaurus-asgardeo/static/apis/restapis/application-management.yaml new file mode 100644 index 0000000000..b812cc3e5e --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/application-management.yaml @@ -0,0 +1,5633 @@ +openapi: 3.0.0 +info: + description: > + This document explains the RESTful API for application management in Asgardeo. + version: "v1" + title: Asgardeo - Application Management Rest API +security: + - OAuth2: [] +paths: + /applications: + get: + tags: + - Applications + operationId: getAllApplications + summary: | + List applications + description: "This API provides the capability to retrieve the list of applications.\n\n Scope(Permission) required: ``internal_application_mgt_view``" + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/sortOrderQueryParam' + - $ref: '#/components/parameters/sortByQueryParam' + - $ref: '#/components/parameters/attributesQueryParam' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications?limit=30&offset=0' \ + -H 'accept: application/json' + -H 'Authorization: Bearer {bearer_token}' + /applications/: + post: + tags: + - Applications + summary: | + Add application + operationId: createApplication + description: | + This API provides the capability to store application information provided by users. + + Scope(Permission) required: + - `internal_application_mgt_create` + + ➕ Additional Scopes + + To create an application with an authentication script, you also need the following additional scope: + + | Action | Scope | + |---------|--------| + | Create an application with an authentication script | `internal_application_script_update` | + + **Recommendation:** For authentication script updates, we recommend using the [/applications/{applicationId}/authenticationSequence/script](#tag/Applications/operation/updateAuthenticationScript) endpoint. + parameters: + - in: query + name: template + required: true + description: "Pre-defined template to use when creating the application. +

The pre-defined template IDs are as follows: +
    +
  • SAML - `776a73da-fd8e-490b-84ff-93009f8ede85`
  • +
  • OIDC - `b9c5e11e-fc78-484b-9bec-015d247561b8`
  • +
  • Single Page App - `6a90e4b0-fbff-42d7-bfde-1efd98f07cd7`
  • +
  • Android Mobile - `44a2d9d9-bc0c-4b54-85df-1cf08f4002ec`
  • +
" + schema: + type: string + requestBody: + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ApplicationModelOIDC' + - $ref: '#/components/schemas/ApplicationModelSAML' + - $ref: '#/components/schemas/ApplicationModelPassiveSTS' + - $ref: '#/components/schemas/ApplicationModelCustom' + description: This represents the application to be created. + required: true + responses: + '201': + description: Successful response. + headers: + Location: + description: This denotes the location of the newly-created application. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/?template={template-id}' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "pickup-dispatch", + "description": "This is the configuration for Pickup-dispatch application.", + "imageUrl": "https://example.com/logo/my-logo.png", + "accessUrl": "https://example.com/login", + "templateId": "b9c5e11e-fc78-484b-9bec-015d247561b8", + "templateVersion": "v1.0.0", + "isManagementApp": false, + "claimConfiguration": { + "dialect": "LOCAL", + "claimMappings": [ + { + "applicationClaim": "firstname", + "localClaim": { + "uri": "http://wso2.org/claims/username" + } + } + ], + "requestedClaims": [ + { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "mandatory": false + } + ], + "subject": { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "includeUserDomain": false, + "includeTenantDomain": false, + "useMappedLocalSubject": false + }, + "role": { + "mappings": [ + { + "localRole": "admin", + "applicationRole": "Administrator" + } + ], + "includeUserDomain": true, + "claim": { + "uri": "http://wso2.org/claims/username" + } + } + }, + "inboundProtocolConfiguration": { + "oidc": { + "clientId": "rMfbPgCi5oWljNhv8c4Pugfuo8Aa", + "clientSecret": "MkHGGiTdAPfTyUKfXLdyOwelMywt", + "grantTypes": [ + "authorization_code", + "password" + ], + "callbackURLs": [ + "regexp=(https://app.example.com/callback1|https://app.example.com/callback2)" + ], + "allowedOrigins": [ + "https://app.example.com" + ], + "publicClient": false, + "pkce": { + "mandatory": false, + "supportPlainTransformAlgorithm": true + }, + "accessToken": { + "type": "JWT", + "userAccessTokenExpiryInSeconds": 3600, + "applicationAccessTokenExpiryInSeconds": 3600, + "bindingType": "cookie", + "revokeTokensWhenIDPSessionTerminated": true, + "validateTokenBinding": true + }, + "refreshToken": { + "expiryInSeconds": 86400, + "renewRefreshToken": true + }, + "idToken": { + "expiryInSeconds": 3600, + "audience": [ + "http://idp.xyz.com", + "http://idp.abc.com" + ], + "encryption": { + "enabled": false, + "algorithm": "RSA-OAEP", + "method": "A128CBC+HS256" + } + }, + "logout": { + "backChannelLogoutUrl": "https://app.example.com/backchannel/callback", + "frontChannelLogoutUrl": "https://app.example.com/frontchannel/callback" + }, + "validateRequestObjectSignature": false, + "scopeValidators": [ + "Role based scope validator" + ] + } + }, + "authenticationSequence": { + "type": "DEFAULT", + "steps": [ + { + "id": 1, + "options": [ + { + "idp": "LOCAL", + "authenticator": "basic" + } + ] + } + ], + "script": "string", + "subjectStepId": 1, + "attributeStepId": 1 + }, + "advancedConfigurations": { + "saas": false, + "discoverableByEndUsers": false, + "certificate": { + "type": "string", + "value": "string" + }, + "skipLoginConsent": false, + "skipLogoutConsent": false, + "useExternalConsentPage": false, + "returnAuthenticatedIdpList": false, + "enableAuthorization": true + } + }' + /applications/import: + post: + tags: + - Applications + summary: | + Create application from an exported XML file + operationId: importApplication + description: | + This API provides the ability to store the application information as a file. + + Scope(Permission) required: + + - `internal_application_mgt_create` + + ➕ Additional Scopes + + To create an application with an authentication script via file import, you also need the following additional scope: + + | Action | Scope | + |---------|--------| + | Create an application with an authentication script via file import | `internal_application_script_update` | + + **Recommendation:** For authentication script updates, we recommend using the [/applications/{applicationId}/authenticationSequence/script](#tag/Applications/operation/updateAuthenticationScript) endpoint. + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/FileUpload' + description: This represents the application to be created. + responses: + '201': + description: Successfully created. + headers: + Location: + description: Location of the newly created application. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/import' \ + -H 'accept: */*' \ + -H 'Content-Type: multipart/form-data' \ + -H 'Authorization: Bearer {bearer_token}' \ + -F 'file=@file-name.xml;type=text/xml' + put: + tags: + - Applications + summary: | + Update application from an exported XML file + operationId: importApplicationForUpdate + description: | + This API provides the capability to update an application from information that has been exported as an XML file. + + Scope(Permission) required: + - `internal_application_mgt_update` + + ➕ Additional Scopes + + To update the authentication script of an application via file import, you also need the following additional scope: + + | Action | Scope | + |---------|--------| + | Update the authentication script via file import | `internal_application_script_update` | + + **Recommendation:** For authentication script updates, we recommend using the [/applications/{applicationId}/authenticationSequence/script](#tag/Applications/operation/updateAuthenticationScript) endpoint. + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/FileUpload' + description: This represents the application to be updated. + responses: + '200': + description: Successfully Updated. + headers: + Location: + description: Location of the updated application. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/import' \ + -H 'accept: */*' \ + -H 'Content-Type: multipart/form-data' \ + -H 'Authorization: Bearer {bearer_token>}' \ + -F 'file=@file-name.xml;type=text/xml' + /applications/{applicationId}: + get: + tags: + - Applications + summary: | + Retrieve application by ID + operationId: getApplication + description: "This API provides the capability to retrieve the application information by ID. \n\n Scope(Permission) required: `internal_application_mgt_view`" + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationResponseModel' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Applications + summary: | + Partially update application by ID + operationId: patchApplication + description: | + This API provides the capability to partially update an application by ID. + + Scope(Permission) required: + - `internal_application_mgt_update` + + ➕ Additional Scopes + + To update the authentication script of an application, you also need the following additional scope: + + | Action | Scope | + |---------|--------| + | Update the authentication script | `internal_application_script_update` | + + **Recommendation:** For authentication script updates, we recommend using the [/applications/{applicationId}/authenticationSequence/script](#tag/Applications/operation/updateAuthenticationScript) endpoint. + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationPatchModel' + description: This represents the application details to be updated. + required: true + responses: + '200': + description: Successfully Updated + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "pickup", + "description": "This is the configuration for Pickup-dispatch application.", + "imageUrl": "https://example.com/logo/my-logo.png", + "accessUrl": "https://example.com/login", + "templateId": "adwefi2429asdfdf94444rraf44", + "templateVersion": "v1.0.0", + "claimConfiguration": { + "dialect": "LOCAL", + "claimMappings": [ + { + "applicationClaim": "firstname", + "localClaim": { + "uri": "http://wso2.org/claims/username" + } + } + ], + "requestedClaims": [ + { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "mandatory": false + } + ], + "subject": { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "includeUserDomain": false, + "includeTenantDomain": false, + "useMappedLocalSubject": false + }, + "role": { + "mappings": [ + { + "localRole": "admin", + "applicationRole": "Administrator" + } + ], + "includeUserDomain": true, + "claim": { + "uri": "http://wso2.org/claims/username" + } + } + }, + "authenticationSequence": { + "type": "DEFAULT", + "steps": [ + { + "id": 1, + "options": [ + { + "idp": "LOCAL", + "authenticator": "basic" + } + ] + } + ], + "script": "string", + "subjectStepId": 1, + "attributeStepId": 1 + }, + "advancedConfigurations": { + "saas": false, + "discoverableByEndUsers": false, + "certificate": { + "type": "string", + "value": "string" + }, + "skipLoginConsent": false, + "skipLogoutConsent": false, + "useExternalConsentPage": false, + "returnAuthenticatedIdpList": false, + "enableAuthorization": true + } + }' + delete: + tags: + - Applications + summary: | + Delete application by ID + operationId: deleteApplication + description: "This API provides the capability to delete an application by ID. \n\n Scope(Permission) required: `internal_application_mgt_delete`" + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '204': + description: Successfully Deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/export: + get: + tags: + - Applications + operationId: exportApplication + summary: | + Export application as an XML file + description: | + This API provides the capability to retrieve the application as an XML file. + + Scope(Permission) required: + - `internal_application_mgt_view` + + ➕ Additional Scopes + + To export the application with the client secret, you also need the following additional scope: + + | Action | Scope | + |---------|--------| + | Export the client secret | `internal_application_mgt_client_secret_view` | + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + - $ref: '#/components/parameters/exportSecretsQueryParam' + responses: + '200': + description: OK + content: + application/octet-stream: + schema: + example: 'Sample application configuration xml as a string' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/export?exportSecrets=false' \ + -H 'accept: application/octet-stream' \ + -H 'Authorization: Bearer {bearer_token}' + # /applications/{applicationId}/owner: + # put: + # tags: + # - Applications + # operationId: changeApplicationOwner + # summary: | + # Change application owner + # description: "This API provides the capability to change the application owner. \n\n Scope required: ``SYSTEM``" + # parameters: + # - name: applicationId + # in: path + # description: ID of the application. + # required: true + # schema: + # type: string + # requestBody: + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/ApplicationOwner' + # responses: + # '200': + # description: Successfully Updated + # '400': + # description: Bad Request + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # '401': + # description: Unauthorized + # '403': + # description: Forbidden + # '404': + # description: Not Found + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # '500': + # description: Server Error + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + /applications/{applicationId}/authenticationSequence/script: + put: + tags: + - Applications + operationId: updateAuthenticationScript + summary: Update authentication script of the application + description: | + This API provides the capability to update the authentication script of the application.
+ Scope(Permission) required: `internal_application_script_update`
+ parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ScriptUpdateModel' + description: This represents the authentication script to be updated. + required: true + responses: + '200': + description: Successfully Updated + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/authenticationSequence/script' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "script": "var onLoginRequest = function(context) {\n executeStep(1);\n};\n" + }' + /applications/{applicationId}/authenticators: + get: + tags: + - Authenticators + summary: | + Get configured authenticators + operationId: getConfiguredAuthenticators + description: "This API provides the capability to retrieve the configured authenticators. \n\n Scope(Permission) required: ``internal_application_mgt_view``" + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ConfiguredAuthenticatorsModal' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/authenticators' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/authorized-apis: + get: + tags: + - Authorized APIs + summary: | + Get authorized APIs of the application. + operationId: getAuthorizedAPIs + description: | + This API provides the capability to retrieve all the authorized APIs of the application.
+ + Scope(Permission) required: `internal_application_mgt_view` + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AuthorizedAPIResponse' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/authorized-apis' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Authorized APIs + summary: | + Authorized an API to the application + operationId: addAuthorizedAPI + description: | + This API provides the capability to authorized an API to the application.
+ + Scope(Permission) required: + - `internal_application_mgt_update` + + ➕ Additional Scopes + + To authorize management/organization APIs and business APIs, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Authorize management/organization API | `internal_application_internal_api_update` | + | Authorize business APIs | `internal_application_business_api_update` | + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AuthorizedAPICreationModel' + responses: + '201': + description: Created + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/authorized-apis' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "id": "65b52595-9ca1-4539-aca2-56178643c58b", + "policyIdentifier": "RBAC", + "scopes": [ + "bookings:read" + ] + }' + x-codegen-request-body-name: body + + /applications/{applicationId}/authorized-apis/{apiId}: + patch: + tags: + - Authorized APIs + summary: | + Update authorized API scopes + operationId: patchAuthorizedAPI + description: | + This API provides the capability to update an authorized API of the application.
+ + Scope(Permission) required: + - `internal_application_mgt_update` + + ➕ Additional Scopes + + To update authorized management/organization APIs and business APIs, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Update authorized management/organization API | `internal_application_internal_api_update` | + | Update authorized business APIs | `internal_application_business_api_update` | + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + - name: apiId + in: path + description: ID of the API resource. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AuthorizedAPIPatchModel' + responses: + '200': + description: OK + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/authorized-apis/{api-id}' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "addedScopes": [ + "bookings:write" + ], + "removedScopes": [ + "bookings:read" + ] + }' + x-codegen-request-body-name: body + delete: + tags: + - Authorized APIs + summary: | + Remove API authorization from the application + operationId: deleteAuthorizedAPI + description: | + This API provides the capability to delete an authorized API of the application.
+ + Scope(Permission) required: + - `internal_application_mgt_update` + + ➕ Additional Scopes + + To remove authorized management/organization APIs and business APIs, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Remove authorized management/organization API | `internal_application_internal_api_update` | + | Remove authorized business APIs | `internal_application_business_api_update` | + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + - name: apiId + in: path + description: ID of the API resource. + required: true + schema: + type: string + responses: + '204': + description: No Content + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/authorized-apis/{api-id}' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/resident: + get: + tags: + - Resident application + summary: | + Get resident application + operationId: getResidentApplication + description: "This API provides the capability to retrieve the resident application information.\n\nScope(Permission) required:`internal_application_mgt_view`" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ResidentApplication' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/resident' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Resident application + summary: | + Update resident application + operationId: updateResidentApplication + description: "This API provides the capability to update the Resident Application Configuration.\n\n Scope(Permission) required:`internal_application_mgt_update`" + responses: + '200': + description: Successful + '201': + description: Successful response. + headers: + Location: + description: >- + Location of the provisioning configuration of the resident + application. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/resident' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "inboundProvisioning": { + "proxyMode": false, + "provisioningUserstoreDomain": "PRIMARY" + }, + "outboundProvisioningIdps": [ + { + "idp": "Google", + "connector": "googleapps", + "blocking": false, + "rules": false, + "jit": false + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProvisioningConfiguration' + description: >- + This represents the provisioning configuration of the resident + application. + required: true + '/applications/{applicationId}/inbound-protocols/': + get: + tags: + - Inbound Protocols + summary: | + Retrieve inbound protocol configurations of the application + operationId: getInboundAuthenticationConfigurations + description: "This API provides the capability to retrieve authentication protocol configurations of an application.\n\nScope(Permission) required:`internal_application_mgt_view`" + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/InboundProtocolsListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/inbound-protocols/saml: + get: + tags: + - Inbound Protocols - SAML + summary: | + Retrieve SAML2 authentication parameters of app + operationId: getInboundSAMLConfiguration + description: "This API provides the capability to retrieve SAML2 authentication protocol parameters of an application. \n\nScope(Permission) required:`internal_application_mgt_view`" + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SAML2ServiceProvider' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/saml' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Inbound Protocols - SAML + summary: | + Update SAML2 authentication parameters of app + operationId: updateInboundSAMLConfiguration + description: "This API provides the capability to store SAML2 authentication protocol parameters of an application.\n\nScope(Permission) required:`internal_application_mgt_update` + + - There are three methods to create/update SAML2 authentication protocol configuration. +
    +
  1. Metadata File (by sending the Base64 encoded metadata file content)
  2. +
  3. Metadata URL
  4. +
  5. Manual configuration
  6. +
" + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: Successful + '201': + description: Successful response. + headers: + Location: + description: Location of the newly created SAML Inbound configuration. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/saml' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "manualConfiguration": { + "issuer": "travelocity_460", + "serviceProviderQualifier": "serviceProviderQualifierValue", + "assertionConsumerUrls": [ + [ + "http://localhost:8080/travelocity_460.com/home.jsp", + "http://localhost:8080/travelocity_460.com/home1.jsp" + ] + ], + "defaultAssertionConsumerUrl": "http://localhost:8080/travelocity_460.com/home1.jsp", + "idpEntityIdAlias": "https://localhost.com", + "singleSignOnProfile": { + "bindings": [ + [ + "HTTP_POST", + "HTTP_REDIRECT" + ] + ], + "enableSignatureValidationForArtifactBinding": false, + "enableIdpInitiatedSingleSignOn": false, + "assertion": { + "nameIdFormat": "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", + "audiences": [ + "https://app.example.com/saml" + ], + "recipients": [ + "https://app.example.com/saml" + ], + "digestAlgorithm": "http://www.w3.org/2000/09/xmldsig#sha1", + "encryption": { + "enabled": false, + "assertionEncryptionAlgorithm": "http://www.w3.org/2001/04/xmlenc#aes256-cbc", + "keyEncryptionAlgorithm": "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" + } + } + }, + "attributeProfile": { + "enabled": false, + "alwaysIncludeAttributesInResponse": false + }, + "singleLogoutProfile": { + "enabled": true, + "logoutRequestUrl": "https://localhost.com", + "logoutResponseUrl": "https://localhost.com", + "logoutMethod": "BACKCHANNEL", + "idpInitiatedSingleLogout": { + "enabled": false, + "returnToUrls": [ + [ + "https://localhost.com" + ] + ] + } + }, + "requestValidation": { + "enableSignatureValidation": true, + "signatureValidationCertAlias": "string" + }, + "responseSigning": { + "enabled": true, + "signingAlgorithm": "http://www.w3.org/2001/04/xmldsig-more#rsa-ripemd160" + }, + "enableAssertionQueryProfile": false + } + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SAML2Configuration' + description: This represents the SAML2 protocol attributes of the application. + required: true + delete: + tags: + - Inbound Protocols - SAML + summary: | + Delete SAML2 authentication parameters of app + operationId: deleteInboundSAMLConfiguration + description: "This API provides the capability to delete SAML2 authentication protocol + parameters of an application. \n\n Scope(Permission) required: `internal_application_mgt_delete`" + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '204': + description: Delete successful + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/saml' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/inbound-protocols/oidc: + get: + tags: + - Inbound Protocols - OAuth / OIDC + summary: | + Retrieve OIDC authentication parameters of app + description: | + This API provides the capability to retrieve OIDC authentication protocol parameters of an application. + + Scope(Permission) required: + - `internal_application_mgt_view` + + ➕ Additional Scopes + + To view the client secret, you also need the following additional scope: + + | Action | Scope | + |---------|--------| + | View client secret | `internal_application_mgt_client_secret_view` | + operationId: getInboundOAuthConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/OpenIDConnectConfiguration' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/oidc' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Inbound Protocols - OAuth / OIDC + summary: | + Update OIDC authentication parameters of app + description: "This API provides the capability to store OIDC authentication protocol parameters of an application. \n\n Scope(Permission) required: `internal_application_mgt_update`" + operationId: updateInboundOAuthConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: Successful + '201': + description: Created + headers: + Location: + description: This is the location of the newly created OIDC Authentication Configuration. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{appplication-id}/inbound-protocols/oidc' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}'\ + -d '{ + "clientId": "rMfbPgCi5oWljNhv8c4Pugfuo8Aa", + "clientSecret": "MkHGGiTdAPfTyUKfXLdyOwelMywt", + "grantTypes": [ + "authorization_code", + "password" + ], + "callbackURLs": [ + "regexp=(https://app.example.com/callback1|https://app.example.com/callback2)" + ], + "allowedOrigins": [ + "https://app.example.com" + ], + "publicClient": false, + "pkce": { + "mandatory": false, + "supportPlainTransformAlgorithm": true + }, + "accessToken": { + "type": "JWT", + "userAccessTokenExpiryInSeconds": 3600, + "applicationAccessTokenExpiryInSeconds": 3600, + "bindingType": "cookie", + "revokeTokensWhenIDPSessionTerminated": true, + "validateTokenBinding": true + }, + "refreshToken": { + "expiryInSeconds": 86400, + "renewRefreshToken": true + }, + "idToken": { + "expiryInSeconds": 3600, + "audience": [ + "http://idp.xyz.com", + "http://idp.abc.com" + ], + "encryption": { + "enabled": false, + "algorithm": "RSA-OAEP", + "method": "A128CBC+HS256" + } + }, + "logout": { + "backChannelLogoutUrl": "https://app.example.com/backchannel/callback", + "frontChannelLogoutUrl": "https://app.example.com/frontchannel/callback" + }, + "validateRequestObjectSignature": false, + "scopeValidators": [ + "Role based scope validator" + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OpenIDConnectConfiguration' + description: >- + This represents the OIDC authentication protocol parameters of an + application. + required: true + delete: + tags: + - Inbound Protocols - OAuth / OIDC + summary: | + Delete OIDC authentication parameters of app + description: | + This API provides the capability to delete OIDC authentication protocol + parameters of an application. \n\nScope(Permission) required: `internal_application_mgt_delete` + operationId: deleteInboundOAuthConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '204': + description: Delete Success + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/oidc' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/inbound-protocols/oidc/regenerate-secret: + post: + tags: + - Inbound Protocols - OAuth / OIDC + summary: | + Regenerate the OAuth2/OIDC client secret of application + description: | + This API regenerates the OAuth2/OIDC client secret. + + Scope(Permission) required: `internal_application_mgt_client_secret_create` + operationId: regenerateOAuthClientSecret + parameters: + - name: applicationId + in: path + description: ID of the application + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/OpenIDConnectConfiguration' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/oidc/regenerate-secret' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '' + /applications/{applicationId}/inbound-protocols/oidc/revoke: + post: + tags: + - Inbound Protocols - OAuth / OIDC + summary: | + Revoke the OAuth2/OIDC client secret + description: "This API revokes the OAuth2/OIDC client secret. To re-activate the client, the client secret needs to be regenerated.\n\n Scope(Permission) required: `internal_application_mgt_create`" + operationId: revokeOAuthClient + parameters: + - name: applicationId + in: path + description: ID of the application + required: true + schema: + type: string + responses: + '200': + description: Application Revoked + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/application-id/inbound-protocols/oidc/revoke' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '' + /applications/{applicationId}/inbound-protocols/passive-sts: + get: + tags: + - Inbound Protocols - Passive STS + summary: > + Retrieve Passive STS authentication parameters of app + description: "This API provides the capability to retrieve Passive STS authentication + protocol parameters of an application. \n\n Scope(Permission) required: `internal_application_mgt_view`" + operationId: getPassiveStsConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/PassiveStsConfiguration' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/passive-sts' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Inbound Protocols - Passive STS + summary: | + Update Passive STS authentication parameters of app + description: "This API provides the capability to store passive STS authentication + protocol parameters of an application. \n\n Scope(Permission) required: `internal_application_mgt_update`" + operationId: updatePassiveStsConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '200': + description: Successful + '201': + description: Successful response. + headers: + Location: + description: >- + Location of the newly created Passive STS Authentication + Configuration. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/passive-sts' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "realm": "string", + "replyTo": "string" + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PassiveStsConfiguration' + description: >- + This represents the Passive STS authentication protocol parameters of + an application. + required: true + delete: + tags: + - Inbound Protocols - Passive STS + summary: | + Delete Passive STS authentication parameters of app + description: "This API provides the capability to delete Passive STS authentication + protocol parameters of an application. \n\n Scope(Permission) required: `internal_application_mgt_delete`" + operationId: deletePassiveStsConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '204': + description: Delete Success + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/passive-sts' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + # '/applications/{applicationId}/inbound-protocols/ws-trust': + # get: + # tags: + # - Inbound Protocols - WS Trust + # summary: | + # Retrieve WS Trust authentication parameters of app + # description: "This API provides the capability to retrieve Passive STS authentication + # protocol parameters of an application. \n\n Scope required: `internal_application_mgt_view`" + # operationId: getWSTrustConfiguration + # parameters: + # - name: applicationId + # in: path + # description: ID of the application + # required: true + # schema: + # type: string + # responses: + # '200': + # description: OK + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/WSTrustConfiguration' + # '400': + # description: Bad Request + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # '401': + # description: Unauthorized + # '403': + # description: Forbidden + # '404': + # description: Not Found + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # '500': + # description: Server Error + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # + # put: + # tags: + # - Inbound Protocols - WS Trust + # summary: | + # Update WS Trust authentication parameters of app + # description: "This API provides the capability to store WS Trust authentication + # protocol parameters of an application. \n\n Scope required: `internal_application_mgt_update`" + # operationId: updateWSTrustConfiguration + # parameters: + # - name: applicationId + # in: path + # description: ID of the application. + # required: true + # schema: + # type: string + # responses: + # '200': + # description: Successful + # '201': + # description: Successful response. + # headers: + # Location: + # description: >- + # Location of the newly created WS Trust Authentication + # Configuration. + # schema: + # type: string + # '400': + # description: Bad Request + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # '401': + # description: Unauthorized + # '403': + # description: Forbidden + # '404': + # description: Not Found + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # '409': + # description: Conflict + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # '500': + # description: Server Error + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # + # requestBody: + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/WSTrustConfiguration' + # description: >- + # This represents the Passive STS authentication protocol parameters of + # an application. + # required: true + # delete: + # tags: + # - Inbound Protocols - WS Trust + # summary: | + # Delete WS Trust authentication parameters of app + # description: "This API provides the capability to delete WS Trust authentication + # protocol parameters of an application. \n\n Scope required: `internal_application_mgt_delete`" + # operationId: deleteWSTrustConfiguration + # parameters: + # - name: applicationId + # in: path + # description: ID of the application. + # required: true + # schema: + # type: string + # responses: + # '204': + # description: Delete Success + # '400': + # description: Bad Request + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # '401': + # description: Unauthorized + # '403': + # description: Forbidden + # '404': + # description: Not Found + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # '500': + # description: Server Error + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # + '/applications/{applicationId}/inbound-protocols/{inboundProtocolId}': + get: + tags: + - Inbound Protocols - Custom + summary: > + Retrieve custom Inbound authentication parameters of app + description: "This API provides the capability to retrieve custom inbound + authentication protocol parameters of an application. \n\n Scope(Permission) required: `internal_application_mgt_view`" + operationId: getCustomInboundConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application + required: true + schema: + type: string + - name: inboundProtocolId + in: path + description: Inbound Authentication Protocol ID + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/CustomInboundProtocolConfiguration' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/{inbound-protocol-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Inbound Protocols - Custom + summary: | + Update custom inbound authentication parameters of app + description: "This API provides the capability to store custom inbound authentication protocol parameters of an application. \n\n Scope(Permission) required: `internal_application_mgt_update`" + operationId: updateCustomInboundConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + - name: inboundProtocolId + in: path + description: Inbound Authentication Protocol ID + required: true + schema: + type: string + responses: + '200': + description: Successful + '201': + description: Successful response. + headers: + Location: + description: >- + Location of the newly created Custom Inbound authentication + protocol Configuration. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/{inbound-protocol-id}' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "cas", + "configName": "cas", + "properties": [ + { + "key": "app-identifier", + "value": "http://app.wso2.com/employeeApp", + "friendlyName": "Application Identifier" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomInboundProtocolConfiguration' + description: >- + This represents the Custom Inbound authentication protocol parameters + of an application. + required: true + delete: + tags: + - Inbound Protocols - Custom + summary: > + Delete custom inbound authentication parameters of app + description: "This API provides the capability to delete custom inbound authentication protocol of an application. \n\n Scope(Permission) required: `internal_application_mgt_delete`" + operationId: deleteCustomInboundConfiguration + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + - name: inboundProtocolId + in: path + description: Inbound Authentication Protocol ID + required: true + schema: + type: string + responses: + '204': + description: Delete Success + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/inbound-protocols/{inbound-protocol-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/meta/inbound-protocols: + get: + tags: + - Application Metadata + summary: | + Retrieve the list of inbound authentication protocols available + description: "This API provides the capability to retrieve the list of inbound authentication protocols available. + If the query parameter 'customOnly' is set to true, only custom inbound protocols will be listed. + \n\n Scope(Permission) required: `internal_application_mgt_view`" + operationId: getInboundProtocols + parameters: + - $ref: '#/components/parameters/inboundProtocolsCustomOnly' + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AuthProtocolMetadata' + example: + - name: "saml" + displayName: "SAML2 Web SSO Configuration" + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/meta/inbound-protocols?customOnly=true' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/meta/inbound-protocols/saml: + get: + tags: + - Application Metadata + summary: | + Retrieve all the metadata related to the auth protocol SAML + description: "This API provides the capability to retrieve all the metadata related to the auth protocol SAML. \n\n Scope(Permission) required: `internal_application_mgt_view`" + operationId: getSAMLMetadata + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SAMLMetaData' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/meta/inbound-protocols/saml' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + '/applications/meta/inbound-protocols/oidc': + get: + tags: + - Application Metadata + summary: | + Retrieve all the metadata related to the authentication protocol OAuth / OIDC + description: "This API provides the capability to retrieve all the metadata related to the authentication protocol OAuth / OIDC. \n\n Scope(Permission) required: `internal_application_mgt_view`" + operationId: getOIDCMetadata + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/OIDCMetaData' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/meta/inbound-protocols/oidc' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + # '/applications/meta/inbound-protocols/ws-trust': + # get: + # tags: + # - Application Metadata + # summary: | + # Retrieve all the metadata related to the auth protocol WS Trust + # description: "This API provides the capability to retrieve all the metadata related to the auth protocol `WS_Trust`. \n\n Scope required: `internal_application_mgt_view`" + # operationId: getWSTrustMetadata + # responses: + # '200': + # description: OK + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/WSTrustMetaData' + # '401': + # description: Unauthorized + # '403': + # description: Forbidden + # '404': + # description: Not Found + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # '500': + # description: Server Error + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # + '/applications/meta/inbound-protocols/{inboundProtocolId}': + get: + tags: + - Application Metadata + summary: | + Retrieve all the metadata related to the custom auth protocol identified by the inboundProtocolId + description: "This API provides the capability to retrieve all the metadata related to the custom auth protocol + identified by the `inboundProtocolId`. The URL encoded inbound protocol name is used as `inboundProtocolId`. \n\n Scope(Permission) required: `internal_application_mgt_view`" + operationId: getCustomProtocolMetadata + parameters: + - name: inboundProtocolId + in: path + description: Inbound Authentication Protocol ID + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/CustomInboundProtocolMetaData' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/meta/inbound-protocols/{inbound-protocol-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/meta/adaptive-auth-templates: + get: + tags: + - Application Metadata + summary: | + Retrieve the sample adaptive authentication templates. + description: "This API provides the capability to retrieve the sample adaptive authentication templates. \n\nScope(Permission) required: `internal_application_mgt_view`" + operationId: getAdaptiveAuthTemplates + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/AdaptiveAuthTemplates' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/meta/adaptive-auth-templates' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/meta/groups: + get: + tags: + - Application Metadata + summary: | + Retrieve the list of groups available for the application. + description: > + This API provides the capability to retrieve the list of groups available for the application.

+ Scope(Permission) required: `internal_application_mgt_view` + parameters: + - $ref: '#/components/parameters/domainQueryParam' + - $ref: '#/components/parameters/groupsFilterQueryParam' + operationId: getGroups + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/GroupBasicInfo' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/meta/groups' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/share: + post: + deprecated: true + summary: | + Share the application from the root organization to the given organization(s). + description: | + **NOTE: This API is deprecated and may be removed in future versions. Use the `/applications/share` endpoint instead.
+ This API provides the capability to share an application with organizations. +
+ + Scope(Permission) required: `internal_shared_application_create` + operationId: shareOrgApplication + parameters: + - name: applicationId + in: path + description: ID of the application which will be shared to organizations. + required: true + schema: + type: string + example: c75e27f9-98c7-4518-a968-c6cd59f0ac6b + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationSharePOSTRequest' + required: true + responses: + '200': + description: Ok + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + tags: + - Application Sharing + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/share' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "shareWithAllChildren": false, + "sharedOrganizations": [ + "682edf68-4835-4bb8-961f-0a16bc6cc866", + "ghfbctgf-4318-46d4-8ee1-7t3s38e23098" + ] + }' + x-codegen-request-body-name: body + get: + summary: | + List of organizations that the application is shared to. + description: | + This API returns the list of organizations that the application is shared to. +

+ + Scope(Permission) required: `internal_shared_application_view` + operationId: shareOrgApplicationGet + parameters: + - name: applicationId + in: path + description: ID of the application which is shared to organizations. + required: true + schema: + type: string + - $ref: '#/components/parameters/before' + - $ref: '#/components/parameters/after' + - $ref: '#/components/parameters/filter' + - $ref: '#/components/parameters/sharedOrganizationsLimit' + - $ref: '#/components/parameters/recursiveQueryParam' + - $ref: '#/components/parameters/applicationShareExcludedQueryParam' + - $ref: '#/components/parameters/applicationShareAttributesQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SharedOrganizationsResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + tags: + - Application Sharing + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/share' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/shared-apps: + get: + summary: | + List of shared applications along with its organization. + description: | + This API returns the list of shared app ids along with the shared organization id. +

+ + Scope(Permission) required: `internal_shared_application_view` + operationId: sharedApplicationsGet + parameters: + - name: applicationId + in: path + description: ID of the application which is shared to organizations. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SharedApplicationsResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + tags: + - Application Sharing + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/shared-apps' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + delete: + deprecated: true + description: | + ** NOTE: This API is deprecated and may be removed in future versions. Use the `/applications/unshare-with-all` endpoint instead.
+ This API provides the capability to stop sharing an application to all organizations the application is shared to. +

+ + Scope(Permission) required: `internal_shared_application_delete` + summary: | + Stop sharing an application with all organizations. + operationId: sharedApplicationsAllDelete + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + responses: + '204': + description: Successfully deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + tags: + - Application Sharing + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/shared-apps' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/{applicationId}/share/{shared-organization-id}: + delete: + deprecated: true + description: | + **NOTE: This API is deprecated and may be removed in future versions. Use the `/applications/unshare` endpoint instead.
+ This API provides the capability to stop sharing an application to an organization by providing its ID. +

+ + Scope(Permission) required: `internal_shared_application_delete` + summary: | + Stop sharing an application to a organization. + operationId: shareOrgApplicationDelete + parameters: + - name: applicationId + in: path + description: ID of the application. + required: true + schema: + type: string + - name: shared-organization-id + in: path + description: ID of the organization to stop sharing. + required: true + schema: + type: string + responses: + '204': + description: Successfully deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + tags: + - Application Sharing + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/{application-id}/share/{shared-organization-id}' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /applications/share: + post: + tags: [ Application Sharing ] + summary: Share a single application with specific organizations. + description: | + This API provides the capability to share an application with specific organizations. + It allows for detailed role sharing configurations per organization.
+ Scope(Permission) required: `internal_shared_application_create` + operationId: shareApplicationWithSelected + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/ApplicationShareSelectedRequestBody" + example: + applicationId: "c75e27f9-98c7-4518-a968-c6cd59f0ac6b" + organizations: + - orgId: "13b92afa-e7ee-4b01-bee0-2afb503b4d15" + policy: "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN" + roleSharing: + mode: "SELECTED" + roles: + - displayName: "App Viewer" + audience: + display: "Pickup App" + type: "application" + - displayName: "App Admin" + audience: + display: "Pickup App" + type: "application" + - orgId: "682edf68-4835-4bb8-961f-0a16bc6cc866" + policy: "SELECTED_ORG_ONLY" + roleSharing: + mode: "ALL" + responses: + "202": + description: Sharing process triggered successfully + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "Application sharing process triggered successfully." + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/share' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "applicationId": "c75e27f9-98c7-4518-a968-c6cd59f0ac6b", + "organizations": [ + { + "orgId": "13b92afa-e7ee-4b01-bee0-2afb503b4d15", + "policy": "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN", + "roleSharing": { + "mode": "SELECTED", + "roles": [ + { + "displayName": "App Viewer", + "audience": { + "display": "Pickup App", + "type": "application" + } + }, + { + "displayName": "App Admin", + "audience": { + "display": "Pickup App", + "type": "application" + } + } + ] + } + }, + { + "orgId": "682edf68-4835-4bb8-961f-0a16bc6cc866", + "policy": "SELECTED_ORG_ONLY", + "roleSharing": { + "mode": "ALL" + } + } + ] + }' + patch: + tags: [ Application Sharing ] + summary: Perform incremental sharing operations on an already shared application. + description: | + This API allows for incremental updates to the sharing configuration of an application. + It supports adding or removing roles from organizations that the application is already shared with.
+ **NOTE:** Adding or removing roles is supported only if the role sharing mode is set to `SELECTED`.
+ Scope(Permission) required: `internal_shared_application_create` + operationId: patchApplicationSharing + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ApplicationSharingPatchRequest' + examples: + addRolesToOrg: + summary: Add roles to an organization + value: + applicationId: "app-123" + Operations: + - op: "add" + path: "organizations[orgId eq 13b92afa-e7ee-4b01-bee0-2afb503b4d15].roles" + value: + - displayName: "App Viewer" + audience: + display: "My Org 1" + type: "organization" + - displayName: "App Admin" + audience: + display: "My Org 1" + type: "organization" + removeRolesFromOrg: + summary: Remove roles from an organization + value: + applicationId: "app-123" + Operations: + - op: "remove" + path: "organizations[orgId eq 13b92afa-e7ee-4b01-bee0-2afb503b4d15].roles" + value: + - displayName: "App Viewer" + audience: + display: "My Org 2" + type: "organization" + responses: + '202': + description: Operation processed successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ProcessSuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/share' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "applicationId": "c75e27f9-98c7-4518-a968-c6cd59f0ac6b", + "Operations": [ + { + "op": "add", + "path": "organizations[orgId eq 13b92afa-e7ee-4b01-bee0-2afb503b4d15].roles", + "value": [ + { + "displayName": "App Viewer", + "audience": { + "display": "Pickup App", + "type": "application" + } + } + ] + } + ] + }' + /applications/share-with-all: + post: + tags: [ Application Sharing ] + summary: Share a single application with all organizations. + description: | + This API provides the capability to share an application with all existing and/or future organizations. + It allows for role sharing configurations that apply to all organizations.
+ Scope(Permission) required: `internal_shared_application_create` + operationId: shareApplicationWithAll + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/ApplicationShareAllRequestBody" + example: + applicationId: "c75e27f9-98c7-4518-a968-c6cd59f0ac6b" + policy: "ALL_EXISTING_AND_FUTURE_ORGS" + roleSharing: + mode: "ALL" + responses: + "202": + description: Sharing process triggered successfully + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "Application sharing process triggered successfully." + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/share-with-all' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "applicationId": "c75e27f9-98c7-4518-a968-c6cd59f0ac6b", + "policy": "ALL_EXISTING_AND_FUTURE_ORGS", + "roleSharing": { + "mode": "ALL" + } + }' + /applications/unshare: + post: + tags: [ Application Sharing ] + summary: Unshare an application from specific organizations. + description: | + This API provides the capability to unshare an application from specific organizations. + It allows for detailed role unsharing configurations per organization.
+ Scope(Permission) required: `internal_shared_application_delete` + operationId: unshareApplicationFromSelected + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/ApplicationUnshareSelectedRequestBody" + example: + applicationId: "c75e27f9-98c7-4518-a968-c6cd59f0ac6b" + orgIds: + - "13b92afa-e7ee-4b01-bee0-2afb503b4d15" + - "682edf68-4835-4bb8-961f-0a16bc6cc866" + responses: + "202": + description: Unsharing process triggered successfully + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "Application unsharing process triggered successfully." + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/unshare' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "applicationId": "c75e27f9-98c7-4518-a968-c6cd59f0ac6b", + "orgIds": [ + "13b92afa-e7ee-4b01-bee0-2afb503b4d15", + "682edf68-4835-4bb8-961f-0a16bc6cc866" + ] + }' + /applications/unshare-with-all: + post: + tags: [ Application Sharing ] + summary: Unshare an application from all organizations. + description: | + This API provides the capability to unshare an application from all organizations. + It allows for role unsharing configurations that apply to all organizations.
+ Scope(Permission) required: `internal_shared_application_delete` + operationId: unshareApplicationFromAll + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/ApplicationUnshareAllRequestBody" + example: + applicationId: "c75e27f9-98c7-4518-a968-c6cd59f0ac6b" + responses: + "202": + description: Unsharing process triggered successfully + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "Application unsharing process triggered successfully." + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/applications/unshare-with-all' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "applicationId": "c75e27f9-98c7-4518-a968-c6cd59f0ac6b" + }' +components: + parameters: + limitQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + minimum: 1 + default: 30 + limitWithoutDefaultQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + offsetQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + default: 0 + offsetWithoutDefaultQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + filterQueryParam: + in: query + name: filter + required: false + description: | + Condition to filter the retrieval of records. + Supports 'sw', 'co', 'ew', and 'eq' operations with 'and', 'or' logical operators. + Note that 'and' and 'or' operators in filters follow the general precedence of logical operators. + For example, A and B or C and D = (A and B) or (C and D)). + Currently supports only filtering based on the 'name', the 'clientId', and the 'issuer' attributes. + + `/applications?filter=name+eq+user_portal` +
+ `/applications?filter=name+co+prod+or+clientId+co+123` + schema: + type: string + domainQueryParam: + in: query + name: domain + required: false + description: | + The domain name of the user store used to filter the groups. + + /applications/meta/groups?domain=PRIMARY + schema: + type: string + before: + name: before + in: query + required: false + description: | + Base64 encoded cursor value for backward pagination. + schema: + type: string + example: Ng== + after: + name: after + in: query + required: false + description: | + Base64 encoded cursor value for forward pagination. + schema: + type: string + example: Ng== + filter: + name: filter + in: query + required: false + description: | + Condition to filter the retrieval of records. Supports 'sw', 'co', 'ew' and 'eq' operations. + schema: + type: string + example: id+eq+088fb49c-46fa-48c1-a0a8-5538ee4b7ec5 + sharedOrganizationsLimit: + name: limit + in: query + required: false + description: | + Maximum number of records to return. If you do not specify this parameter, this will return all shared organizations. + schema: + type: integer + example: 10 + recursiveQueryParam: + in: query + name: recursive + required: false + description: | + Determines whether a recursive search should happen.
+ If set to true, will include shared organizations in all levels of the hierarchy; If set to false, includes only shared organizations in the next level of the hierarchy. + schema: + type: boolean + applicationShareExcludedQueryParam: + in: query + name: excludedAttributes + description: | + excludedAttribute parameter.
+ Supported values: `roles` + required: false + schema: + type: string + applicationShareAttributesQueryParam: + in: query + name: attributes + required: false + description: | + Specifies the required parameters in the response. + supported values: `sharingMode`.
+ /applications/{applicationId}/share?attributes=sharingMode + schema: + type: string + groupsFilterQueryParam: + in: query + name: filter + required: false + description: | + Condition to filter the retrieval of records. + Supports only the 'co' operation. + Currently supports only filtering based on the 'name'. + + /applications/meta/groups?filter=name+co+Employee + schema: + type: string + sortOrderQueryParam: + in: query + name: sortOrder + required: false + description: | + Define the order in which the retrieved records should be sorted. + _This parameter is not supported yet._ + schema: + type: string + enum: + - ASC + - DESC + sortByQueryParam: + in: query + name: sortBy + required: false + description: | + Attribute by which the retrieved records should be sorted. + _This parameter is not supported yet._ + schema: + type: string + attributesQueryParam: + in: query + name: attributes + required: false + description: | + Specifies the required parameters in the response. + Only `advancedConfigurations`, `templateId`, `templateVersion`, `clientId`, and `issuer` attributes are supported currently. + + `/applications?attributes=advancedConfigurations,templateId,templateVersion,clientId,issuer` + schema: + type: string + exportSecretsQueryParam: + in: query + name: exportSecrets + required: false + description: | + Specifies whether to export secrets when exporting an application. + schema: + type: boolean + default: false + inboundProtocolsCustomOnly: + in: query + name: customOnly + required: false + description: | + Send only the custom inbound protocols. + schema: + type: boolean + example: true + default: false + templateIdPathParam: + in: path + name: template-id + required: true + description: "Pre-defined template to use when creating the application. +

The pre-defined template IDs are as follows: +
    +
  • SAML - `776a73da-fd8e-490b-84ff-93009f8ede85`
  • +
  • OIDC - `b9c5e11e-fc78-484b-9bec-015d247561b8`
  • +
  • Single Page App - `6a90e4b0-fbff-42d7-bfde-1efd98f07cd7`
  • +
  • Android Mobile - `44a2d9d9-bc0c-4b54-85df-1cf08f4002ec`
  • +
" + schema: + type: string + example: "b9c5e11e-fc78-484b-9bec-015d247561b8" + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} + schemas: + Link: + type: object + properties: + href: + type: string + example: "applications?offset=10&limit=10" + description: This is the address that points to the location of the an application. + rel: + type: string + example: "next" + description: Describes the relationship between the current application and the application that is identified by the `href` property. + + ApplicationListResponse: + type: object + properties: + totalResults: + type: integer + description: Number of results that match the listing operation. + example: 1 + startIndex: + type: integer + description: Index of the first element of the page, which will be equal to offset + 1. + example: 1 + count: + type: integer + description: Number of elements in the returned page. + example: 10 + applications: + type: array + items: + $ref: '#/components/schemas/ApplicationListItem' + links: + type: array + items: + $ref: '#/components/schemas/Link' + + ApplicationListItem: + type: object + properties: + id: + type: string + example: "85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + description: The ID of your application. + name: + type: string + example: "user-portal" + description: The name of the application. + description: + type: string + example: Application representing user portal + description: The detailed description about the application. + image: + type: string + example: 'https://example.com/logo/my-logo.png' + description: The URL to the logo of your application. + accessUrl: + type: string + example: 'https://example.com/app/login' + description: The URL through which the users can access the application. + clientId: + type: string + example: 'SmrrDNXRYf1lMmDlnleeHTuXx_Ea' + description: The public identifier of the application. + issuer: + type: string + example: 'http://idp.example.com/metadata.php' + description: The Issuer is a unique identifier for the entity that is generating a SAML assertion. + access: + type: string + enum: + - READ + - WRITE + default: READ + description: The level of authorization that is granted to the user for accessing a particular application. + self: + type: string + example: "/t//api/server/v1/applications/85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + description: The URL of the current application. + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + templateId: + description: "Pre-defined template to use when creating the application. +

The pre-defined template IDs are as follows: +
    +
  • SAML - `776a73da-fd8e-490b-84ff-93009f8ede85`
  • +
  • OIDC - `b9c5e11e-fc78-484b-9bec-015d247561b8`
  • +
  • Single Page App - `6a90e4b0-fbff-42d7-bfde-1efd98f07cd7`
  • +
  • Android Mobile - `44a2d9d9-bc0c-4b54-85df-1cf08f4002ec`
  • +
" + type: string + example: "b9c5e11e-fc78-484b-9bec-015d247561b8" + templateVersion: + description: "Version of the template which is used to configure the current application." + type: string + example: "v1.0.0" + + ApplicationModelOIDC: + type: object + title: Add OIDC application + required: + - name + properties: + id: + type: string + example: "394b8adcce24c64a8a09a0d80abf8c337bd253de" + readOnly: true + description: The ID of your application. + name: + type: string + example: pickup-dispatch + description: The name of the application. + description: + type: string + example: This is the configuration for Pickup-dispatch application. + description: The description for your application. + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + description: The URL to the logo of your application. + accessUrl: + type: string + example: 'https://example.com/login' + description: The URL through which the users can access the application. + templateId: + description: "Pre-defined template to use when creating the application. +

The pre-defined template IDs are as follows: +
    +
  • SAML - `776a73da-fd8e-490b-84ff-93009f8ede85`
  • +
  • OIDC - `b9c5e11e-fc78-484b-9bec-015d247561b8`
  • +
  • Single Page App - `6a90e4b0-fbff-42d7-bfde-1efd98f07cd7`
  • +
  • Android Mobile - `44a2d9d9-bc0c-4b54-85df-1cf08f4002ec`
  • +
" + type: string + example: "b9c5e11e-fc78-484b-9bec-015d247561b8" + templateVersion: + description: "Version of the template which is used to configure the current application." + type: string + example: "v1.0.0" + isManagementApp: + default: false + type: boolean + example: false + description: Decides whether the application is used to access System APIs. + claimConfiguration: + $ref: '#/components/schemas/ClaimConfiguration' + inboundProtocolConfiguration: + type: object + properties: + oidc: + type: object + required: + - grantTypes + properties: + clientId: + type: string + example: "rMfbPgCi5oWljNhv8c4Pugfuo8Aa" + description: The public identifier of the application that you create. + clientSecret: + type: string + example: "MkHGGiTdAPfTyUKfXLdyOwelMywt" + description: The secret corresponding to the `clientId` of the application. This is confidential and will be used to make requests and authenticate into your application. + state: + type: string + enum: + - ACTIVE + - REVOKED + readOnly: true + default: ACTIVE + description: This value describes the state of the access token obtained for the application. + grantTypes: + type: array + example: + - authorization_code + - password + items: + type: string + description: "The This will determine how the application communicates with the token service. Asgardeo supports following grant types: +
    +
  • authorization_code
  • +
  • client_credentials
  • +
  • refresh_token
  • +
  • implicit
  • +
  • password
  • +
" + minItems: 1 + callbackURLs: + type: array + description: This is the callback location where the tokens should be sent. + example: + - 'regexp=(https://app.example.com/callback1|https://app.example.com/callback2)' + items: + type: string + allowedOrigins: + type: array + description: Authorized JavaScript origins. CORS requests are allowed for these origins. + example: + - 'https://app.example.com' + items: + type: string + publicClient: + type: boolean + default: false + description: >- + Enabling this option will allow the client to authenticate without a + client secret. + example: false + pkce: + $ref: '#/components/schemas/OAuth2PKCEConfiguration' + accessToken: + $ref: '#/components/schemas/AccessTokenConfiguration' + refreshToken: + $ref: '#/components/schemas/RefreshTokenConfiguration' + idToken: + $ref: '#/components/schemas/IdTokenConfiguration' + logout: + $ref: '#/components/schemas/OIDCLogoutConfiguration' + validateRequestObjectSignature: + type: boolean + default: false + example: false + description: Specifies whether to validate the signature of the request object in an OpenID Connect authentication request. + scopeValidators: + type: array + example: + - Role based scope validator + items: + type: string + authenticationSequence: + $ref: '#/components/schemas/AuthenticationSequence' + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + # provisioningConfigurations: + # $ref: '#/components/schemas/ProvisioningConfiguration' + + ApplicationModelSAML: + type: object + title: Add SAML application + required: + - name + properties: + id: + type: string + example: "394b8adcce24c64a8a09a0d80abf8c337bd253de" + readOnly: true + description: The ID of the application. + name: + type: string + example: pickup-dispatch + description: The name of the application. + description: + type: string + example: This is the configuration for Pickup-dispatch application. + description: The detailed description for your application. + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + description: The URL to the logo of your application. + accessUrl: + type: string + example: 'https://example.com/login' + description: The URL through which the users can access the application. + templateId: + description: "Pre-defined template to use when creating the application. +

The pre-defined template IDs are as follows: +
    +
  • SAML - `776a73da-fd8e-490b-84ff-93009f8ede85`
  • +
  • OIDC - `b9c5e11e-fc78-484b-9bec-015d247561b8`
  • +
  • Single Page App - `6a90e4b0-fbff-42d7-bfde-1efd98f07cd7`
  • +
  • Android Mobile - `44a2d9d9-bc0c-4b54-85df-1cf08f4002ec`
  • +
" + type: string + example: "b9c5e11e-fc78-484b-9bec-015d247561b8" + templateVersion: + description: "Version of the template which is used to configure the current application." + type: string + example: "v1.0.0" + isManagementApp: + default: false + type: boolean + example: false + description: Decides whether the application is used to access System APIs. + claimConfiguration: + $ref: '#/components/schemas/ClaimConfiguration' + inboundProtocolConfiguration: + type: object + properties: + saml: + type: object + properties: + metadataFile: + type: string + example: 'Base64 encoded metadata file content' + description: Base64 encoded XML document that provides information about a SAML entity, + metadataURL: + type: string + example: 'https://example.com/samlsso/meta' + description: This URL provides access to a SAML metadata file. + manualConfiguration: + $ref: '#/components/schemas/SAML2ServiceProvider' + encryption: + $ref: '#/components/schemas/AssertionEncryptionConfiguration' + authenticationSequence: + $ref: '#/components/schemas/AuthenticationSequence' + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + # provisioningConfigurations: + # $ref: '#/components/schemas/ProvisioningConfiguration' + + ApplicationModelPassiveSTS: + type: object + title: Add PassiveSTS application + required: + - name + properties: + id: + type: string + example: "394b8adcce24c64a8a09a0d80abf8c337bd253de" + readOnly: true + description: The ID of your application. + name: + type: string + example: pickup-dispatch + description: The name of the application. + description: + type: string + example: This is the configuration for Pickup-dispatch application. + description: The detailed description for your application. + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + description: The URL to the logo of your application. + accessUrl: + type: string + example: 'https://example.com/login' + description: The URL through which the users can access the application. + templateId: + description: "Pre-defined template to use when creating the application. +

The pre-defined template IDs are as follows: +
    +
  • SAML - `776a73da-fd8e-490b-84ff-93009f8ede85`
  • +
  • OIDC - `b9c5e11e-fc78-484b-9bec-015d247561b8`
  • +
  • Single Page App - `6a90e4b0-fbff-42d7-bfde-1efd98f07cd7`
  • +
  • Android Mobile - `44a2d9d9-bc0c-4b54-85df-1cf08f4002ec`
  • +
" + type: string + example: "b9c5e11e-fc78-484b-9bec-015d247561b8" + templateVersion: + description: "Version of the template which is used to configure the current application." + type: string + example: "v1.0.0" + isManagementApp: + default: false + type: boolean + example: false + description: Decides whether the application is used to access System APIs. + claimConfiguration: + $ref: '#/components/schemas/ClaimConfiguration' + inboundProtocolConfiguration: + type: object + properties: + passivests: + type: object + required: + - realm + - replyTo + properties: + realm: + type: string + replyTo: + type: string + encryption: + $ref: '#/components/schemas/AssertionEncryptionConfiguration' + authenticationSequence: + $ref: '#/components/schemas/AuthenticationSequence' + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + # provisioningConfigurations: + # $ref: '#/components/schemas/ProvisioningConfiguration' + ApplicationModelCustom: + type: object + title: Add custom inbound protocol application + required: + - name + properties: + id: + type: string + example: "394b8adcce24c64a8a09a0d80abf8c337bd253de" + readOnly: true + description: The ID of your application. + name: + type: string + example: pickup-dispatch + description: The name of the application. + description: + type: string + example: This is the configuration for Pickup-dispatch application. + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + description: The URL to the logo of your application. + accessUrl: + type: string + example: 'https://example.com/login' + description: The URL through which the users can access the application. + templateId: + description: "Pre-defined template to use when creating the application. +

The pre-defined template IDs are as follows: +
    +
  • SAML - `776a73da-fd8e-490b-84ff-93009f8ede85`
  • +
  • OIDC - `b9c5e11e-fc78-484b-9bec-015d247561b8`
  • +
  • Single Page App - `6a90e4b0-fbff-42d7-bfde-1efd98f07cd7`
  • +
  • Android Mobile - `44a2d9d9-bc0c-4b54-85df-1cf08f4002ec`
  • +
" + type: string + example: "b9c5e11e-fc78-484b-9bec-015d247561b8" + templateVersion: + description: "Version of the template which is used to configure the current application." + type: string + example: "v1.0.0" + isManagementApp: + default: false + type: boolean + example: false + description: Decides whether the application is used to access System APIs. + claimConfiguration: + $ref: '#/components/schemas/ClaimConfiguration' + inboundProtocolConfiguration: + type: object + properties: + custom: + type: object + required: + - name + - configName + properties: + name: + type: string + example: cas + configName: + type: string + example: cas + properties: + type: array + items: + $ref: '#/components/schemas/PropertyModel' + encryption: + $ref: '#/components/schemas/AssertionEncryptionConfiguration' + authenticationSequence: + $ref: '#/components/schemas/AuthenticationSequence' + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + # provisioningConfigurations: + # $ref: '#/components/schemas/ProvisioningConfiguration' + + ApplicationResponseModel: + type: object + required: + - name + properties: + id: + type: string + example: "394b8adcce24c64a8a09a0d80abf8c337bd253de" + readOnly: true + description: The ID of the application. + name: + type: string + example: pickup-dispatch + description: The name of the application. + description: + type: string + example: This is the configuration for Pickup-dispatch application. + description: The detailed description for your application. + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + description: The URL to the logo of your application. + accessUrl: + type: string + example: 'https://example.com/login' + description: The URL through which the users can access the application. + clientId: + type: string + example: 'SmrrDNXRYf1lMmDlnleeHTuXx_Ea' + description: The public identifier of the application. + issuer: + type: string + example: 'http://idp.example.com/metadata.php' + description: The Issuer is a unique identifier for the entity that is generating a SAML assertion. + templateId: + description: "Pre-defined template to use when creating the application. +

The pre-defined template IDs are as follows: +
    +
  • SAML - `776a73da-fd8e-490b-84ff-93009f8ede85`
  • +
  • OIDC - `b9c5e11e-fc78-484b-9bec-015d247561b8`
  • +
  • Single Page App - `6a90e4b0-fbff-42d7-bfde-1efd98f07cd7`
  • +
  • Android Mobile - `44a2d9d9-bc0c-4b54-85df-1cf08f4002ec`
  • +
" + type: string + example: "adwefi2429asdfdf94444rraf44" + templateVersion: + description: "Version of the template which is used to configure the current application." + type: string + example: "v1.0.0" + isManagementApp: + type: boolean + example: false + description: Decides whether the application is used to access System APIs. + claimConfiguration: + $ref: '#/components/schemas/ClaimConfiguration' + inboundProtocols: + $ref: '#/components/schemas/InboundProtocolsListResponse' + authenticationSequence: + $ref: '#/components/schemas/AuthenticationSequence' + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + # provisioningConfigurations: + # $ref: '#/components/schemas/ProvisioningConfiguration' + access: + type: string + enum: + - READ + - WRITE + default: READ + description: The level of authorization that is granted to the user for accessing a particular application. + + ApplicationPatchModel: + type: object + properties: + name: + type: string + example: pickup + description: The name of the application. + description: + type: string + example: This is the configuration for Pickup-dispatch application. + description: The detailed description for your application. + imageUrl: + type: string + example: 'https://example.com/logo/my-logo.png' + description: The URL to the logo of your application. + accessUrl: + type: string + example: 'https://example.com/login' + description: The URL through which the users can access the application. + templateId: + description: "Pre-defined template to use when creating the application. +

The pre-defined template IDs are as follows: +
    +
  • SAML - `776a73da-fd8e-490b-84ff-93009f8ede85`
  • +
  • OIDC - `b9c5e11e-fc78-484b-9bec-015d247561b8`
  • +
  • Single Page App - `6a90e4b0-fbff-42d7-bfde-1efd98f07cd7`
  • +
  • Android Mobile - `44a2d9d9-bc0c-4b54-85df-1cf08f4002ec`
  • +
" + type: string + example: "adwefi2429asdfdf94444rraf44" + templateVersion: + description: "Version of the template which is used to configure the current application." + type: string + example: "v1.0.0" + claimConfiguration: + $ref: '#/components/schemas/ClaimConfiguration' + authenticationSequence: + $ref: '#/components/schemas/AuthenticationSequence' + advancedConfigurations: + $ref: '#/components/schemas/AdvancedApplicationConfiguration' + # provisioningConfigurations: + # $ref: '#/components/schemas/ProvisioningConfiguration' + + ResidentApplication: + type: object + properties: + provisioningConfigurations: + $ref: '#/components/schemas/ProvisioningConfiguration' + + ProvisioningConfiguration: + type: object + properties: + inboundProvisioning: + $ref: '#/components/schemas/InboundSCIMProvisioningConfiguration' + outboundProvisioningIdps: + type: array + items: + $ref: '#/components/schemas/OutboundProvisioningConfiguration' + InboundSCIMProvisioningConfiguration: + type: object + properties: + proxyMode: + type: boolean + example: false + provisioningUserstoreDomain: + type: string + example: PRIMARY + description: >- + This property becomes applicable only if the proxy-mode config is + set to false + OutboundProvisioningConfiguration: + type: object + properties: + idp: + type: string + example: Google + connector: + type: string + example: googleapps + blocking: + type: boolean + example: false + rules: + type: boolean + example: false + jit: + type: boolean + example: false + description: Specifies whether JIT provisioning is enabled for the IdP. + ScriptUpdateModel: + type: object + required: + - script + properties: + script: + type: string + example: "var onLoginRequest = function(context) {\n executeStep(1);\n};\n" + description: Authentication Script to be updated. + ConfiguredAuthenticatorsModal: + type: object + properties: + stepId: + type: integer + example: 1 + description: This is the authentication step number. For example `1` is the first authentication step. + localAuthenticators: + type: array + items: + $ref: '#/components/schemas/ConfiguredAuthenticator' + federatedAuthenticators: + type: array + items: + $ref: '#/components/schemas/ConfiguredAuthenticator' + ConfiguredAuthenticator: + type: object + properties: + name: + type: string + example: sampleIdP + description: The name of the authenticator. + type: + type: string + example: SampleAuthenticator + description: The type of authenticator. This can be obtained from the lsit of configured authenticators. + AdvancedApplicationConfiguration: + type: object + properties: + saas: + type: boolean + example: false + description: Decides whether the application is accessible across tenants. + discoverableByEndUsers: + type: boolean + example: false + description: Decides whether the application is visible for end users. + discoverableGroups: + type: array + items: + $ref: '#/components/schemas/DiscoverableGroup' + description: List of groups from user stores where users in those groups can discover the application. + certificate: + $ref: '#/components/schemas/Certificate' + skipLoginConsent: + type: boolean + example: false + description: Decides whether user consent needs to be skipped during login flows. + skipLogoutConsent: + type: boolean + example: false + description: Decides whether user consent needs to be skipped during logout flows. + useExternalConsentPage: + type: boolean + example: false + description: Decides whether user needs to use external consent page. + returnAuthenticatedIdpList: + type: boolean + example: false + description: Decides whether the list of authenticated identity providers needs to be returned in the authentication response. + enableAuthorization: + type: boolean + description: Decides whether authorization policies need to be engaged during authentication flows. + example: true + AdditionalProperties: + type: array + description: Denotes additional properties of the application. It is only supported by `getApplication` and `getAllApplications` requests. + items: + $ref: "#/components/schemas/AdditionalSpProperty" + AdditionalSpProperty: + type: object + required: + - name + - value + properties: + name: + type: string + example: "isInternalApp" + value: + type: string + example: "true" + displayName: + type: string + example: "Internal Application" + Certificate: + type: object + properties: + type: + type: string + description: >- + Certificate type. This should be either JWKS or PEM. + value: + type: string + description: >- + Certificate value. If the type is `JWKS`, the value should be `jwks` URL. If the + type is `PEM`, the value should be the certificate in `PEM` format. + InboundProtocols: + type: object + properties: + oidc: + $ref: '#/components/schemas/OpenIDConnectConfiguration' + # saml: + # $ref: '#/components/schemas/SAML2Configuration' + # passiveSts: + # $ref: '#/components/schemas/PassiveStsConfiguration' + # wsTrust: + # $ref: '#/components/schemas/WSTrustConfiguration' + # custom: + # type: array + # items: + # $ref: '#/components/schemas/CustomInboundProtocolConfiguration' + + InboundProtocolsListResponse: + type: array + items: + $ref: '#/components/schemas/InboundProtocolListItem' + InboundProtocolListItem: + type: object + required: + - type + - name + - self + properties: + type: + type: string + example: "samlsso" + description: The type of the inbound authentication protocol. + name: + type: string + example: "SAML2 Inbound" + description: The name of the inbound authentication protocol. + self: + type: string + example: "/t//api/server/v1/applications/29048810-1447-4ea0-a348-30d15ab65fa3/inbound-protocols/saml" + description: The URL of the current application. + ClaimConfiguration: + type: object + properties: + dialect: + type: string + enum: + - CUSTOM + - LOCAL + default: LOCAL + claimMappings: + type: array + items: + $ref: '#/components/schemas/ClaimMappings' + requestedClaims: + type: array + items: + $ref: '#/components/schemas/RequestedClaimConfiguration' + subject: + $ref: '#/components/schemas/SubjectConfig' + role: + $ref: '#/components/schemas/RoleConfig' + SubjectConfig: + type: object + properties: + claim: + $ref: '#/components/schemas/Claim' + includeUserDomain: + type: boolean + example: false + description: Specifies whether to append user's domain in subject attrbute. + includeTenantDomain: + type: boolean + example: false + description: Specifies whether to append organization name in subject attrbute. + useMappedLocalSubject: + type: boolean + example: false + description: Specifies whether to use the local subject identifier when asserting the identity. + mappedLocalSubjectMandatory: + type: boolean + example: false + description: Specifies whether to mandate using the local subject identifier when asserting the identity. + RoleConfig: + type: object + properties: + mappings: + type: array + items: + $ref: '#/components/schemas/RoleMapping' + includeUserDomain: + type: boolean + example: true + description: Specifies whether to append user's domain to user roles. + claim: + $ref: '#/components/schemas/Claim' + RoleMapping: + type: object + required: + - localRole + - applicationRole + properties: + localRole: + type: string + example: admin + description: The claim URI for local role. + applicationRole: + type: string + example: Administrator + description: The claim URI for application role. + RequestedClaimConfiguration: + type: object + required: + - claim + description: >- + User claims that need to be sent back to the application. If the + claim mappings are local, use local claim URIs. If the custom claim + mappings are configured, use the mapped application claim URI + properties: + claim: + $ref: '#/components/schemas/Claim' + mandatory: + type: boolean + example: false + description: When a user logs in to this service provider, if the identity provider does not provide a value for any of the mandatory claims, the user will be prompted to provide them at the time of login. + ClaimMappings: + type: object + required: + - applicationClaim + - localClaim + properties: + applicationClaim: + type: string + description: Claim URI received by the application + example: firstname + localClaim: + $ref: '#/components/schemas/Claim' + Claim: + type: object + required: + - uri + properties: + id: + type: string + example: aHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VybmFtZQ + readOnly: true + description: The claim ID. + uri: + type: string + example: 'http://wso2.org/claims/username' + description: The unique URI specific to the claim. + displayName: + type: string + example: Username + readOnly: true + description: the display name of the claim. + + SAML2Configuration: + type: object + properties: + # metadataFile: + # type: string + # example: 'Base64 encoded metadata file content' + # metadataURL: + # type: string + # example: 'https://example.com/samlsso/meta' + manualConfiguration: + $ref: '#/components/schemas/SAML2ServiceProvider' + + SingleSignOnProfile: + type: object + properties: + bindings: + type: array + items: + type: string + example: + - HTTP_POST + - HTTP_REDIRECT + description: Specifies the mechanisms to transport SAML messages in communication protocols. + enableSignatureValidationForArtifactBinding: + type: boolean + description: Enables Signature validation for SAML artifact binding. Applicable only if SAML artifact binding is enabled through the bindings option. + default: false + + attributeConsumingServiceIndex: + type: string + readOnly: true + + enableIdpInitiatedSingleSignOn: + type: boolean + default: false + description: Specifies whether to initiate Single Sign-On (SSO) from the IdP instead of the application. + + assertion: + $ref: '#/components/schemas/SAMLAssertionConfiguration' + + SAMLAttributeProfile: + type: object + properties: + enabled: + type: boolean + default: false + description: Specifies whether to include the user's attributes in the SAML assertions as part of the attribute statement. + alwaysIncludeAttributesInResponse: + type: boolean + default: false + description: Specifies whether or not to include user attributes in the SAML response. + nameFormat: + type: string + default: urn:oasis:names:tc:SAML:2.0:attrname-format:basic + enum: + - urn:oasis:names:tc:SAML:2.0:attrname-format:basic + - urn:oasis:names:tc:SAML:2.0:attrname-format:uri + description: Specifies the type of attribute names used in the attribute statement of SAML assertions. + + SingleLogoutProfile: + type: object + properties: + enabled: + type: boolean + default: true + description: Specifies whether you want to enable single-logout to your application. + logoutRequestUrl: + type: string + description: Single logout request accepting endpoint + example: https://localhost.com + logoutResponseUrl: + type: string + description: Single logout response accepting endpoint + example: https://localhost.com + logoutMethod: + type: string + enum: + - BACKCHANNEL + - FRONTCHANNEL_HTTP_REDIRECT + - FRONTCHANNEL_HTTP_POST + description: "Specifies the logout method that is supported by the application. \n Asgardeo supports below logout methods: +
    +
  • Back Channel logout
  • +
  • Front Channel HTTP Redirect
  • +
  • Front Channel HTTP Post
  • +
" + idpInitiatedSingleLogout: + $ref: '#/components/schemas/IdpInitiatedSingleLogout' + + IdpInitiatedSingleLogout: + type: object + properties: + enabled: + type: boolean + default: false + description: Specifies whether to support IdP initiated logout. + returnToUrls: + type: array + items: + type: string + example: + - 'https://localhost.com' + description: Specifies the URLs to which the user should be redirected after the logout. + + SAMLAssertionConfiguration: + type: object + properties: + nameIdFormat: + type: string + default: 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified' + example: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress' + description: Specifies the name identifier format that is used to exchange information regarding the user in the SAML assertion. + + audiences: + type: array + description: Additional audience values to be added to the SAML Assertions. + example: + - 'https://app.example.com/saml' + items: + type: string + + recipients: + type: array + description: Additional recipient values to be added to the SAML Assertions. + example: + - 'https://app.example.com/saml' + items: + type: string + + digestAlgorithm: + type: string + default: "http://www.w3.org/2000/09/xmldsig#sha1" + example: "http://www.w3.org/2000/09/xmldsig#sha1" + description: The digest algorithm used in authentication response and logout response. + encryption: + $ref: '#/components/schemas/AssertionEncryptionConfiguration' + + AssertionEncryptionConfiguration: + type: object + properties: + enabled: + type: boolean + default: false + description: Specifies whether to enable encryption for SAML assertion. + assertionEncryptionAlgorithm: + type: string + default: "http://www.w3.org/2001/04/xmlenc#aes256-cbc" + description: The Assertion encryption algorithm you select specifies the symmetric encryption algorithm that is used for encrypting the SAML Assertion. + keyEncryptionAlgorithm: + type: string + default: "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" + description: The key encryption algorithm you select specifies the asymmetric encryption algorithm that is used for encrypting the SAML2 key. + + SAMLRequestValidation: + type: object + properties: + enableSignatureValidation: + type: boolean + default: true + description: Specifies whether Asgardeo must validate the signature of the SAML authentication request and the SAML logout request that are sent by the application. + signatureValidationCertAlias: + type: string + description: Specifies the alias of the certificate that will be used to validate the signature of the SAML assertions. + + SAMLResponseSigning: + type: object + properties: + enabled: + type: boolean + default: true + description: Specifies if response signing is enabled for the application. + signingAlgorithm: + type: string + example: http://www.w3.org/2001/04/xmldsig-more#rsa-ripemd160 + description: The signing algorithm to sign the authentication response and logout response. + SAML2ServiceProvider: + type: object + required: + - issuer + - assertionConsumerUrls + + properties: + issuer: + type: string + example: travelocity_460 + description: The issuer is a unique identifier for the entity that is generating a SAML assertion. + serviceProviderQualifier: + type: string + example: "serviceProviderQualifierValue" + description: This is the unique identifier of an application entity. You can configure a number of SAML applications with the same issuer and different service provider qualifiers. + assertionConsumerUrls: + type: array + items: + type: string + example: + - 'http://localhost:8080/travelocity_460.com/home.jsp' + - 'http://localhost:8080/travelocity_460.com/home1.jsp' + minItems: 1 + description: The Assertion Consumer Service (ACS) URL determines where Asgardeo will send the SAML response. + defaultAssertionConsumerUrl: + type: string + description: If not provided, the first assertion consumer URL on the `assertionConsumerUrls` will be picked as the default assertion consumer URL. + example: http://localhost:8080/travelocity_460.com/home1.jsp + idpEntityIdAlias: + type: string + description: Default value is the IdP's entity ID value specified in the resident IdP. + example: https://localhost.com + singleSignOnProfile: + $ref: '#/components/schemas/SingleSignOnProfile' + + attributeProfile: + $ref: '#/components/schemas/SAMLAttributeProfile' + + singleLogoutProfile: + $ref: '#/components/schemas/SingleLogoutProfile' + + requestValidation: + $ref: '#/components/schemas/SAMLRequestValidation' + + responseSigning: + $ref: '#/components/schemas/SAMLResponseSigning' + + enableAssertionQueryProfile: + type: boolean + default: false + description: Specifies whether to enable assertion query profile or not. + + OpenIDConnectConfiguration: + type: object + required: + - grantTypes + properties: + clientId: + type: string + example: "rMfbPgCi5oWljNhv8c4Pugfuo8Aa" + description: The public identifier of the application. + clientSecret: + type: string + example: "MkHGGiTdAPfTyUKfXLdyOwelMywt" + description: The secret corresponding to the `clientId` of the application. This is confidential and will be used to make requests and authenticate into your application. + state: + type: string + enum: + - ACTIVE + - REVOKED + readOnly: true + default: ACTIVE + description: This value describes the state of the access token obtained for the application. + grantTypes: + type: array + example: + - authorization_code + - password + items: + type: string + minItems: 1 + description: "The This will determine how the application communicates with the token service. Asgardeo supports following grant types: +
    +
  • authorization_code
  • +
  • client_credentials
  • +
  • refresh_token
  • +
  • implicit
  • +
  • password
  • +
" + callbackURLs: + type: array + example: + - 'regexp=(https://app.example.com/callback1|https://app.example.com/callback2)' + items: + type: string + description: This is the callback location where the tokens should be sent. + allowedOrigins: + type: array + description: Authorized JavaScript origins. CORS requests are allowed for these origins. + example: + - 'https://app.example.com' + items: + type: string + publicClient: + type: boolean + default: false + description: >- + Enabling this option will allow the client to authenticate without a + client secret. + example: false + pkce: + $ref: '#/components/schemas/OAuth2PKCEConfiguration' + accessToken: + $ref: '#/components/schemas/AccessTokenConfiguration' + refreshToken: + $ref: '#/components/schemas/RefreshTokenConfiguration' + idToken: + $ref: '#/components/schemas/IdTokenConfiguration' + logout: + $ref: '#/components/schemas/OIDCLogoutConfiguration' + validateRequestObjectSignature: + type: boolean + default: false + example: false + scopeValidators: + type: array + example: + - Role based scope validator + items: + type: string + OAuth2PKCEConfiguration: + type: object + properties: + mandatory: + type: boolean + example: false + description: Specifies whether `pkce` is mandatory for the application. It is recommended to use pkce for public applications. + supportPlainTransformAlgorithm: + type: boolean + example: true + description: Specifies whether to support the use of plain (unencrypted) algorithms for transforming subject identities between different identity domains. + AccessTokenConfiguration: + type: object + properties: + type: + type: string + example: JWT + description: The access token type used by the application. + userAccessTokenExpiryInSeconds: + type: integer + format: int64 + example: 3600 + description: The expiry time of the access token obtained by the user in seconds. + applicationAccessTokenExpiryInSeconds: + type: integer + format: int64 + example: 3600 + description: The expiry time of the access token obtained by the application in seconds. + bindingType: + type: string + description: OAuth2 access token and refresh token can be bound to an external attribute during the token generation so that it can be optionally validated during API invocation. + default: "None" + example: cookie + revokeTokensWhenIDPSessionTerminated: + type: boolean + description: If enabled, when the IDP session is terminated, all the access tokens bound to the session will get revoked. + validateTokenBinding: + type: boolean + description: If enabled, both the access token and the token binding need to be present for a successful API invocation. + enableJwtScopeAsArray: + type: boolean + description: If enabled, the scope claim in JWT access tokens will be formatted as a JSON array instead of a space-separated string. + example: false + RefreshTokenConfiguration: + type: object + properties: + expiryInSeconds: + type: integer + format: int64 + example: 86400 + description: The expiry time of the refresh token in seconds. + renewRefreshToken: + description: Decides whether the refresh token needs to be renewed during refresh grant flow. + type: boolean + example: true + IdTokenConfiguration: + type: object + properties: + expiryInSeconds: + type: integer + format: int64 + example: 3600 + description: Time in seconds until the ID Token expires + audience: + type: array + example: + - 'http://idp.xyz.com' + - 'http://idp.abc.com' + items: + type: string + encryption: + $ref: '#/components/schemas/IdTokenEncryptionConfiguration' + IdTokenEncryptionConfiguration: + type: object + properties: + enabled: + type: boolean + default: false + example: false + description: Specifies if `id_token` encryption is enabled. + algorithm: + type: string + example: RSA-OAEP + description: Specifies the `id_token` encryption algorithm. + method: + type: string + example: A128CBC+HS256 + description: Specifies the `id_token` encryption method. + OIDCLogoutConfiguration: + type: object + properties: + backChannelLogoutUrl: + type: string + example: 'https://app.example.com/backchannel/callback' + description: The URL used for sending logout requests from the IdP to the application in a back-channel manner, without involving the user's browser. + frontChannelLogoutUrl: + type: string + example: 'https://app.example.com/frontchannel/callback' + description: The URL endpoint that the identity provider sends the logout request to when the user logs out of the application. + PassiveStsConfiguration: + type: object + required: + - realm + - replyTo + properties: + realm: + type: string + description: The unique identifier that specifies the security realm where the user wants to authenticate. + replyTo: + type: string + description: The address that the response should be sent to after a successful authentication. + WSTrustConfiguration: + type: object + required: + - audience + - certificateAlias + properties: + audience: + type: string + description: Audience value of the trusted service + example: https://wstrust.endpoint.com + certificateAlias: + type: string + example: "Asgardeo" + CustomInboundProtocolConfiguration: + type: object + required: + - name + - configName + properties: + name: + type: string + example: cas + configName: + type: string + example: cas + properties: + type: array + items: + $ref: '#/components/schemas/PropertyModel' + PropertyModel: + type: object + properties: + key: + type: string + example: app-identifier + value: + type: string + example: 'http://app.wso2.com/employeeApp' + friendlyName: + type: string + example: Application Identifier + AuthenticationSequence: + type: object + properties: + type: + type: string + description: " +
    +
  • DEFAULT type indicates that the application will use the default authentication sequence specified at the organization level. When the DEFAULT type is used, the information given in the other fields of the `AuthenticationSequence` will be ignored and overriden with values defined at the organization level.
  • +
  • USER_DEFINED type indicates that the application will use a user-defined authentication sequence.
  • +
" + enum: + - DEFAULT + - USER_DEFINED + default: DEFAULT + steps: + type: array + items: + $ref: '#/components/schemas/AuthenticationStepModel' + script: + type: string + description: Specifies the conditional authentication script. + subjectStepId: + type: integer + default: 1 + example: 1 + description: Specifies the authentication step used as the user identifier. + attributeStepId: + type: integer + default: 1 + example: 1 + description: Specifies the authentication step used to pick attributes for the application. + + AuthenticationStepModel: + type: object + required: + - id + - options + properties: + id: + type: integer + minimum: 1 + example: 1 + options: + type: array + items: + $ref: '#/components/schemas/Authenticator' + minItems: 1 + Authenticator: + type: object + required: + - idp + - authenticator + properties: + idp: + type: string + example: LOCAL + description: Specifies the identity provider for the step. + authenticator: + type: string + example: basic + description: Specifies the local authenticator for the step. + + AuthProtocolMetadata: + type: object + properties: + name: + type: string + displayName: + type: string + MetadataProperty: + type: object + properties: + options: + type: array + items: + type: string + example: + - 'Option 1' + - 'Option 2' + defaultValue: + type: string + example: 'Option 1' + GrantTypeMetaData: + type: object + properties: + options: + type: array + items: + $ref: '#/components/schemas/GrantType' + GrantType: + type: object + properties: + name: + type: string + example: authorization_code + description: The name of the grant type. + displayName: + type: string + example: Code + description: The display name of the grant type. + SAMLMetaData: + type: object + properties: + defaultNameIdFormat: + type: string + example: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress' + description: If the `nameIdFormat` is not specified, this will be used as the name identifier format to exchange information regarding the user in the SAML assertion. + certificateAlias: + $ref: '#/components/schemas/MetadataProperty' + responseSigningAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + responseDigestAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + assertionEncryptionAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + keyEncryptionAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + OIDCMetaData: + type: object + properties: + allowedGrantTypes: + $ref: '#/components/schemas/GrantTypeMetaData' + defaultUserAccessTokenExpiryTime: + type: string + example: '3600' + defaultApplicationAccessTokenExpiryTime: + type: string + example: '3600' + defaultRefreshTokenExpiryTime: + type: string + example: '86400' + defaultIdTokenExpiryTime: + type: string + example: '3600' + idTokenEncryptionAlgorithm: + $ref: '#/components/schemas/MetadataProperty' + idTokenEncryptionMethod: + $ref: '#/components/schemas/MetadataProperty' + scopeValidators: + $ref: '#/components/schemas/MetadataProperty' + accessTokenType: + $ref: '#/components/schemas/MetadataProperty' + accessTokenBindingType: + $ref: '#/components/schemas/MetadataProperty' + WSTrustMetaData: + type: object + properties: + certificateAlias: + $ref: '#/components/schemas/MetadataProperty' + CustomInboundProtocolMetaData: + type: object + properties: + displayName: + type: string + example: 'My Custom Protocol' + configName: + type: string + example: 'Custom Protocol' + properties: + type: array + items: + $ref: '#/components/schemas/CustomInboundProtocolProperty' + CustomInboundProtocolProperty: + type: object + properties: + name: + type: string + example: 'encryptionAlgorithm' + displayName: + type: string + example: 'Encryption Algorithm' + type: + type: string + enum: + - STRING + - BOOLEAN + - INTEGER + example: STRING + required: + type: boolean + example: true + availableValues: + type: array + items: + type: string + example: + - 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p' + - 'http://www.w3.org/2001/04/xmlenc#rsa-1_5' + defaultValue: + type: string + example: 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p' + validationRegex: + type: string + example: '^[a-b][A-B]*' + displayOrder: + type: integer + example: 1 + isConfidential: + type: boolean + default: false + + AdaptiveAuthTemplates: + type: object + properties: + templatesJSON: + type: string + example: 'Adaptive Auth Templates JSON' + + FileUpload: + type: object + properties: + file: + type: string + format: binary + description: The `.xml` file to upload. + ApplicationTemplatesList: + type: object + properties: + templates: + type: array + items: + $ref: '#/components/schemas/ApplicationTemplatesListItem' + + ApplicationTemplatesListItem: + type: object + properties: + id: + type: string + example: "85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + description: The ID of the application template. + name: + type: string + example: "OIDC Protocol Template" + description: + type: string + example: "Template to be used for Single Page Applications" + image: + type: string + example: "https://example.com/logo/my-logo.png" + authenticationProtocol: + type: string + example: "oidc" + types: + type: array + items: + type: string + example: + - react + - angular + category: + type: string + enum: [DEFAULT, VENDOR] + example: 'DEFAULT' + displayOrder: + type: integer + example: 2 + templateGroup: + type: string + example: "web-application" + self: + type: string + example: "/t//api/server/v1/applications/templates/85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + description: The URL of the current application. + + ApplicationTemplateModel: + type: object + properties: + id: + type: string + readOnly: true + example: "85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + description: The ID of the application template. + name: + type: string + example: "OIDC Protocol Template" + description: + type: string + example: "Template to be used for Single Page Applications" + image: + type: string + example: "https://example.com/logo/my-logo.png" + authenticationProtocol: + type: string + example: "oidc" + types: + type: array + items: + type: string + example: + - react + - angular + category: + type: string + enum: [DEFAULT, VENDOR] + example: 'DEFAULT' + templateGroup: + type: string + example: "web-application" + displayOrder: + type: integer + example: 2 + application: + $ref: '#/components/schemas/ApplicationModelOIDC' + required: + - name + - application + ApplicationOwner: + type: object + properties: + id: + type: string + example: "85e3f4b8-0d22-4181-b1e3-1651f71b88bd" + required: + - id + AuthorizedAPIResponse: + type: object + properties: + id: + type: string + example: 65b52595-9ca1-4539-aca2-56178643c58b + identifier: + type: string + example: https://greetings.io/v1/greet + displayName: + type: string + example: Greetings API + policyId: + type: string + example: RBAC + type: + type: string + example: BUSINESS + authorizedScopes: + type: array + items: + $ref: '#/components/schemas/AuthorizedScope' + + AuthorizedScope: + type: object + properties: + id: + type: string + example: 65b52595-9ca1-4539-aca2-56178643c58b + name: + type: string + example: bookings:read + displayName: + type: string + example: Read Bookings + + AuthorizedAPICreationModel: + type: object + properties: + id : + type: string + example: 65b52595-9ca1-4539-aca2-56178643c58b + policyIdentifier: + type: string + example: RBAC + scopes: + type: array + items: + type: string + example: bookings:read + + AuthorizedAPIPatchModel: + type: object + properties: + addedScopes: + type: array + items: + type: string + example: bookings:write + removedScopes: + type: array + items: + type: string + example: bookings:read + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some error message. + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + ApplicationSharePOSTRequest: + type: object + properties: + shareWithAllChildren: + type: boolean + default: false + sharedOrganizations: + type: array + items: + type: string + example: + - 682edf68-4835-4bb8-961f-0a16bc6cc866 + - ghfbctgf-4318-46d4-8ee1-7t3s38e23098 + SharedOrganizationsResponse: + type: object + properties: + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "/api/server/v1/applications/67f5a202-48c4-4313-9327-016da5f08f17/share?limit=10&recursive=false&next=MTA=", + "rel": "next", + }, + { + "href": "/api/server/v1/applications/67f5a202-48c4-4313-9327-016da5f08f17/share?limit=10&recursive=false&before=MTA=", + "rel": "previous", + } + ] + sharingMode: + $ref: '#/components/schemas/SharingMode' + example: + - "policy": "ALL_EXISTING_AND_FUTURE_ORGS" + "roleSharing": + mode: "SELECTED" + roles: + - "displayName": "App Viewer" + "audience": + "display": "My Org 1" + "type": "organization" + organizations: + type: array + items: + $ref: '#/components/schemas/BasicOrganizationResponse' + SharingMode: + type: object + required: [ roleSharing ] + properties: + policy: + type: string + enum: [ "ALL_EXISTING_AND_FUTURE_ORGS", "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN" ] + description: | + This will only shows the future sharing modes. + - ALL_EXISTING_AND_FUTURE_ORGS: Share with all current and any newly created organizations in future. + - SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN: Share with this organization and its current & future children. + roleSharing: + $ref: "#/components/schemas/RoleSharing" + SharedApplicationsResponse: + type: object + properties: + sharedApplications: + type: array + items: + $ref: '#/components/schemas/SharedApplicationResponse' + SharedApplicationResponse: + type: object + properties: + applicationId: + type: string + description: Shared application's id. + example: 'ca322554-fe79-4c04-9c94-492855ef92a3' + organizationId: + type: string + description: Shared application residing organization id. + example: '682edf68-4835-4bb8-961f-0a16bc6cc866' + BasicOrganizationResponse: + type: object + required: + - id + - name + - orgHandle + - parentId + - status + - ref + - hasChildren + - depthFromRoot + - roles + properties: + id: + type: string + example: 'b4526d91-a8bf-43d2-8b14-c548cf73065b' + name: + type: string + example: 'ABC Builders' + orgHandle: + type: string + example: 'abcbuilders' + parentId: + type: string + example: '08f8c1d2-4b3e-4c5a-9f6b-7d8e9f0a1b2c' + description: | + The parent organization ID. + status: + type: string + enum: [ ACTIVE, DISABLED ] + example: ACTIVE + ref: + type: string + example: '/t//api/server/v1/organizations/b4526d91-a8bf-43d2-8b14-c548cf73065b' + hasChildren: + type: boolean + example: true + depthFromRoot: + type: integer + example: 1 + sharingMode: + $ref: '#/components/schemas/SharingMode' + roles: + type: array + items: + $ref: '#/components/schemas/RoleShareConfig' + description: "List of roles that are shared with the application in this organization." + ApplicationShareSelectedRequestBody: + type: object + required: [ applicationId, organizations ] + properties: + applicationId: + type: string + organizations: + type: array + items: + $ref: "#/components/schemas/OrgShareConfig" + + OrgShareConfig: + type: object + required: [ orgId, policy, roleSharing ] + properties: + orgId: + type: string + policy: + type: string + enum: [ "SELECTED_ORG_ONLY", + "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN"] + description: | + - SELECTED_ORG_ONLY: Share app with only this specific organizations. + - SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN: Share with this organization and its current & future children. + roleSharing: + $ref: "#/components/schemas/RoleSharing" + + ApplicationShareAllRequestBody: + type: object + required: [ applicationId, policy, roleSharing ] + properties: + applicationId: + type: string + policy: + type: string + enum: [ "ALL_EXISTING_ORGS_ONLY", + "ALL_EXISTING_AND_FUTURE_ORGS"] + description: | + - ALL_EXISTING_ORGS_ONLY: Share with all organizations currently present. + - ALL_EXISTING_AND_FUTURE_ORGS: Share with all current and any newly created organizations in future. + roleSharing: + $ref: "#/components/schemas/RoleSharing" + + ApplicationUnshareSelectedRequestBody: + type: object + required: [ applicationId, orgIds ] + properties: + applicationId: + type: string + orgIds: + type: array + items: + type: string + + ApplicationUnshareAllRequestBody: + type: object + required: [ applicationId ] + properties: + applicationId: + type: string + ApplicationSharingPatchRequest: + type: object + required: [ applicationId, Operations ] + properties: + applicationId: + type: string + Operations: + type: array + items: + $ref: "#/components/schemas/ApplicationSharingPatchOperation" + ApplicationSharingPatchOperation: + type: object + required: [ op, path ] + properties: + op: + type: string + description: "Patch operation type (like SCIM): Currently only 'add' and 'remove' are supported." + path: + type: string + description: "Path in the format 'organizations[orgId eq \"abc123\"].roles'" + value: + type: array + description: "List of roles to add/remove" + items: + type: object + example: + - "displayName": "App Viewer" + "audience": + - "display": "My Org 1" + "type": "organization" + RoleSharing: + type: object + required: [ mode ] + properties: + mode: + type: string + enum: [ ALL, NONE, SELECTED ] + roles: + type: array + description: "List of roles (required when mode=SELECTED)" + items: + $ref: "#/components/schemas/RoleShareConfig" + description: |- + - ALL => share all roles + - NONE => share no roles + - SELECTED => provide a list of specific roles + example: + - "mode": "SELECTED" + "roles": + - "displayName": "App Viewer" + "audience": + "display": "My Org 1" + "type": "organization" + RoleShareConfig: + type: object + required: [ displayName, audience ] + properties: + displayName: + type: string + description: "The human-readable name of the role" + audience: + type: object + required: [ display, type ] + properties: + display: + type: string + description: "Display name of the audience (e.g., organization or application name)" + type: + type: string + description: | + The type of the role audience: + - `organization`: Role is scoped at organization level. + - `application`: Role is scoped at application level. + ProcessSuccessResponse: + type: object + properties: + status: + type: string + example: "Processing" + details: + type: string + example: "Application sharing process triggered successfully." + DiscoverableGroup: + type: object + required: + - userStore + - groups + properties: + userStore: + type: string + description: The user store domain to which the groups belong. + example: "PRIMARY" + groups: + type: array + items: + $ref: '#/components/schemas/GroupBasicInfo' + minItems: 1 + description: List of groups configured for discoverability. + GroupBasicInfo: + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier of the group. + example: "bf5abd05-3667-4a2a-a6c2-2fb9f4d26e47" + name: + type: string + description: The name of the group. + example: "GroupA" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' diff --git a/docusaurus-asgardeo/static/apis/restapis/approvals.yaml b/docusaurus-asgardeo/static/apis/restapis/approvals.yaml new file mode 100644 index 0000000000..7bcc34865d --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/approvals.yaml @@ -0,0 +1,377 @@ +openapi: 3.0.0 +info: + title: Asgardeo - Workflow Approval API + description: | + This is the RESTful API for a user to manage pending approvals in Asgardeo. This API can be used to retrieve pending approvals and update the status of the approval tasks for the authenticated user. + version: v2 +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/users/v2' +security: + - OAuth2: [] +tags: + - name: me + description: Operations for the authenticated user. +paths: + /me/approval-tasks: + get: + tags: + - me + summary: Retrieves available approvals for the authenticated user + description: | + Retrieve the available approval tasks in the system for the authenticated user. This API returns the following types of approvals: + * READY - Tasks that are _claimable_ by the user. If a particular task is in the READY state, the user is eligible to self-assign the task and complete it. + * RESERVED - Tasks that are _assigned_ to the user and to be approved by this user. + * COMPLETED - Tasks that are already _completed_ (approved or denied) by this user. + + A user can also invoke the endpoint with the following query parameters. + security: + - OAuth2: + - internal_approval_task_view + operationId: listApprovalTasksForLoggedInUser + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/statusQueryParam' + responses: + "200": + description: Array of approval tasks matching the search criteria + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/TaskSummary' + example: + - id: "453" + name: "Sample Task 1" + presentationSubject: Update Claims + presentationName: SampleWorkflowTask + taskType: TASK + status: RESERVED + priority: 0 + createdTimeInMillis: "1565597712157" + - id: "452" + name: "Sample Task 2" + presentationSubject: Update Claims + presentationName: SampleWorkflowTask + taskType: TASK + status: COMPLETED + priority: 0 + createdTimeInMillis: "1565597675414" + - id: "451" + name: "Sample task 3" + presentationSubject: Update Claims + presentationName: SampleWorkflowTask + taskType: TASK + status: READY + priority: 0 + createdTimeInMillis: "1565597569021" + 400: + $ref: '#/components/responses/InvalidInput' + 401: + $ref: '#/components/responses/Unauthorized' + 403: + $ref: '#/components/responses/Forbidden' + 500: + $ref: '#/components/responses/ServerError' + /me/approval-tasks/{task-id}: + get: + tags: + - me + summary: Retrieves an approval task by the task-id + description: | + Retrieves information of a specific approval task identified by the task-id + + security: + - OAuth2: + - internal_approval_task_view + operationId: getApprovalTaskInfo + parameters: + - $ref: '#/components/parameters/taskIdPathParam' + responses: + "200": + description: Detailed information of the approval task identified by the + task-id + content: + 'application/json': + schema: + $ref: '#/components/schemas/TaskData' + example: + id: "452" + subject: Update Claims + description: You have a request to approve claim update action of + a user. + priority: 0 + initiator: admin + approvalStatus: APPROVE + assignees: + - key: group + value: admin + properties: + - key: REQUEST ID + value: "34172334-fccb-4ef4-9830-08c3caeaab9e," + - key: Username + value: "aysh234," + - key: User Store Domain + value: "PRIMARY," + - key: Profile + value: "default," + - key: Claims + value: "http://wso2.org/claims/organization:,http://wso2.org/claims/telephone:,http://wso2.org/claims/im:,http://wso2.org/claims/country:Sri\ + \ Lanka,http://wso2.org/claims/mobile:,http://wso2.org/claims/emailaddress:ayesha@wso2.com,profileConfiguration:default,http://wso2.org/claims/lastname:Dissanayaka,http://wso2.org/claims/url:,http://wso2.org/claims/givenname:Ayesha," + 400: + $ref: '#/components/responses/InvalidInput' + 401: + $ref: '#/components/responses/Unauthorized' + 403: + $ref: '#/components/responses/Forbidden' + 404: + $ref: '#/components/responses/NotFound' + 409: + $ref: '#/components/responses/Conflict' + 500: + $ref: '#/components/responses/ServerError' + /me/approval-tasks/{task-id}/state: + put: + tags: + - me + summary: Changes the state of an approval task + description: | + Update the approval task status by defining one of the following actions: + * CLAIM - Reserve the task for the user. Status of the task will be changed from READY to RESERVED. + * RELEASE - Release the task for other users to claim. Status of the task will be changed from RESERVED to READY. + * APPROVE - Approve the task. Status of the task will be changed to COMPLETED. + * REJECT - Deny the task. Status of the task will be changed to COMPLETED. + + security: + - OAuth2: + - internal_approval_task_update + operationId: updateStateOfTask + parameters: + - $ref: '#/components/parameters/taskIdPathParam' + requestBody: + description: To which state the task should be changed. + content: + 'application/json': + schema: + $ref: '#/components/schemas/StateDTO' + required: false + responses: + 200: + $ref: '#/components/responses/OK' + 400: + $ref: '#/components/responses/InvalidInput' + 401: + $ref: '#/components/responses/Unauthorized' + 403: + $ref: '#/components/responses/Forbidden' + 404: + $ref: '#/components/responses/NotFound' + 500: + $ref: '#/components/responses/ServerError' +components: + schemas: + TaskSummary: + type: object + properties: + id: + type: string + description: Unique ID to represent an Approval Task + example: "451" + name: + type: string + description: Unique name for the Approval Task + example: s367:testTask + presentationSubject: + type: string + description: Display value for Approval Operation + example: Add new Role + presentationName: + type: string + description: Display value for Approval Task + example: sampleTask + taskType: + type: string + description: Type of the Approval + example: TASK + status: + type: string + description: State of the Approval task + example: READY + enum: + - READY + - RESERVED + - COMPLETED + priority: + type: integer + description: Priority of the Approval task + example: 0 + createdTimeInMillis: + type: string + description: The time that the operation for approval initiated + example: "1565597569021" + TaskData: + type: object + properties: + id: + type: string + description: Unique ID to represent a approval task + example: "451" + subject: + type: string + description: Subject of the Approval + example: Add new Role + description: + type: string + description: Description on the Approval task + example: Adds a new role to the system + priority: + type: integer + description: Priority of the Approval task + example: 0 + initiator: + type: string + description: The user who initiated the task + example: some-user-name + approvalStatus: + type: string + description: | + Available only for the completed Tasks, APPROVED or REJECTED if the task has been completed, PENDING otherwise + example: APPROVE + enum: + - PENDING + - APPROVED + - REJECTED + assignees: + type: array + description: | + To whom the task is assigned: + * user - username(s) if the task is reserved for specific user(s). + * group - role name(s) if the task is assignable for group(s). + items: + $ref: '#/components/schemas/Property' + properties: + type: array + items: + $ref: '#/components/schemas/Property' + Property: + type: object + properties: + key: + type: string + value: + type: string + StateDTO: + type: object + properties: + action: + type: string + description: Action to perform on the task. + example: APPROVE + enum: + - CLAIM + - RELEASE + - APPROVE + - REJECT + Error: + required: + - code + - message + type: object + properties: + code: + type: string + example: some_error_code + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: Some Correlation for Error Instance + responses: + NotFound: + description: The specified resource is not found + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Unauthorized + ServerError: + description: Internal Server Error + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + InvalidInput: + description: Invalid input request + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Conflict: + description: Element Already Exists + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Created: + description: Item Created + OK: + description: OK + Deleted: + description: Item Deleted + Forbidden: + description: Resource Forbidden + parameters: + taskIdPathParam: + name: task-id + in: path + description: Task ID + required: true + schema: + type: string + offsetQueryParam: + name: offset + in: query + description: Number of records to skip for pagination + schema: + minimum: 0 + type: integer + format: int32 + limitQueryParam: + name: limit + in: query + description: Maximum number of records to return + schema: + minimum: 0 + type: integer + format: int32 + statusQueryParam: + name: status + in: query + description: | + Approval task's status to filter tasks by their status: + * **RESERVED** - Tasks that are **assigned to** the authenticated user. + * **READY** - Tasks that **can be assigned to** and **can be approved by** the authenticated user. + * **COMPLETED** - Tasks that are **completed by** the user + * \ - **All** the viewable tasks will be retrieved if this parameter is not specified. + style: form + explode: false + schema: + type: array + items: + enum: [READY, RESERVED, COMPLETED] + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: + internal_approval_task_view: View approval tasks + internal_approval_task_update: Update approval tasks diff --git a/docusaurus-asgardeo/static/apis/restapis/association-management-by-admin.yaml b/docusaurus-asgardeo/static/apis/restapis/association-management-by-admin.yaml new file mode 100644 index 0000000000..c5ad60ccc2 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/association-management-by-admin.yaml @@ -0,0 +1,589 @@ +openapi: 3.0.1 +info: + title: User Account Association API + description: | + This document specifies a **User Account Association Management RESTful API** for Asgardeo. + The APIs provide the capability for privileged users to retrieve/delete associated local/federated accounts of other users. + version: v1 +servers: + - url: https://api.asgardeo.io/t/{organization-name}/api/users/v1 + variables: + serverUrl: + default: https://api.asgardeo.io/t/{organization-name} + tenantDomain: + default: carbon.super +security: + - OAuth2: [] +tags: + - name: admin + description: | + Operations available for privileged users, to be invoked on behalf of another user. +paths: + /{user-id}/associations: + get: + tags: + - admin + summary: Get user's associations + description: | + This API is used to retrieve the associations of the user.
+ + Scope(Permission) required: `internal_user_association_view` + parameters: + - name: user-id + in: path + description: user id + required: true + schema: + type: string + responses: + 200: + description: Successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/{user-id}/associations' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer-token}' + delete: + tags: + - admin + summary: Delete user's all user associations + description: | + This API is used to delete all associations of the user.
+ + Scope(Permission) required: `internal_user_association_delete` + parameters: + - name: user-id + in: path + required: true + schema: + type: string + responses: + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/{user-id}/associations' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer-token}' + /{user-id}/federated-associations: + get: + tags: + - admin + summary: Get user's federated associations + description: | + This API is used to retrieve the federated associations of the user.
+ + Scope(Permission) required: `internal_user_association_view` + parameters: + - name: user-id + in: path + description: user id + required: true + schema: + type: string + responses: + 200: + description: Successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/FederatedAssociation' + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/{user-id}/federated-associations' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer-token}' + post: + tags: + - admin + summary: Create federated user association + description: | + This API allows administrators to explicitly associate a local user with a federated identity.
+ Scope(Permission) required: `internal_user_association_create` + parameters: + - name: user-id + in: path + required: true + description: user id + type: string + - name: association + in: body + description: User details to be associated. + required: true + schema: + $ref: '#/definitions/FederatedAssociationRequest' + responses: + 201: + description: Successfully created + schema: + $ref: '#/definitions/FederatedAssociation' + 400: + description: Bad Request + schema: + $ref: '#/definitions/Error' + 401: + description: Unauthorized + schema: + $ref: '#/definitions/Error' + 403: + description: Resource Forbidden + schema: + $ref: '#/definitions/Error' + 500: + description: Server Error + schema: + $ref: '#/definitions/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/{user-id}/federated-associations' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer-token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "idp": "exampleIdP", + "federatedUserId": "john@example.com" + }' + delete: + tags: + - admin + summary: Delete user's all user-federated associations + description: | + This API is used to delete all federated associations of the user.
+ + Scope(Permission) required: `internal_user_association_delete` + parameters: + - name: user-id + in: path + required: true + schema: + type: string + responses: + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/{user-id}/federated-associations' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer-token}' + /{user-id}/federated-associations/{id}: + delete: + tags: + - admin + summary: Delete the user's federated association + description: | + This API is used to delete a federated association of the user.
+ + Scope(Permission) required: `internal_user_association_delete` + parameters: + - name: user-id + in: path + required: true + schema: + type: string + - name: id + in: path + required: true + schema: + type: string + responses: + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/user-id/federated-associations/federated-association-id' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer-token}' + /federated-associations/bulk: + post: + tags: + - admin + summary: Create and Delete users associations in bulk + description: | + This API is used to create and delete users association in bulk.
+ Maximum number of supported operations in a single request is 1000 by default. + It can be configured using a server level configuration. + Scope required: + * internal_user_fed_association_bulk + parameters: + - name: body + in: body + required: false + schema: + $ref: '#/definitions/BulkFederatedAssociationRequest' + responses: + 200: + description: Success + schema: + $ref: '#/definitions/BulkFederatedAssociationResponse' + 400: + description: Bad Request + schema: + $ref: '#/definitions/Error' + 401: + description: Unauthorized + schema: + $ref: '#/definitions/Error' + 403: + description: Forbidden + schema: + $ref: '#/definitions/Error' + 500: + description: Internal Server Error + schema: + $ref: '#/definitions/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/federated-associations/bulk' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer-token}' \ + -d '{ + "failOnErrors": 0, + "operations": [ + { + "method": "POST", + "bulkId": "qewvaewv", + "path": "/1ca49238-3ab0-474b-9d42-8067780a503c/federated-associations", + "data": { + "idp": "Google", + "federatedUserId": "sam@gmail,com" + } + }, + { + "method": "POST", + "bulkId": "fgnruyt", + "path": "/7589bffc-b315-4dbd-83a5-86f5b8aa4776/federated-associations", + "data": { + "idp": "Google", + "federatedUserId": "mike@gmail,com" + } + }, + { + "method": "DELETE", + "bulkId": "useffger", + "path": "/0a2d94e2-3b98-49ea-89d6-e8dd9e0ff89b/federated-associations" + }, + { + "method": "DELETE", + "bulkId": "eefvrtgnrtn", + "path": "/197fc0fa-c2b0-48e6-92a6-a551afc3d125/federated-associations/0dcc3f5a-3bee-4f36-a91f-8ee60dbae875" + } + ] + }' + +components: + schemas: + Error: + required: + - code + - message + type: object + properties: + code: + type: string + example: some_error_code + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: Some Correlation for Error Instance + User: + type: object + properties: + userId: + type: string + example: 23e22434234234329jj9iin + username: + type: string + example: john + userStoreDomain: + type: string + example: PRIMARY + tenantDomain: + type: string + example: carbon.super + firstName: + type: string + example: john + lastName: + type: string + example: doe + email: + type: string + example: john.doe@wso2.com + FederatedAssociation: + type: object + properties: + id: + type: string + example: eeqweisfhkdfik + idp: + $ref: '#/components/schemas/Idp' + federatedUserId: + type: string + example: john@google.com + Idp: + type: object + properties: + id: + type: string + example: eeqweisfhkdfikaefcqwesfceqwqas + name: + type: string + example: google.com + displayName: + type: string + example: Google + imageUrl: + type: string + example: https://is.example.com/sample.jpg + Property: + type: object + properties: + key: + type: string + example: test-key + value: + type: string + example: test-value + AssociationUserRequest: + type: object + properties: + userId: + type: string + example: john + password: + type: string + example: userpassword + properties: + type: array + items: + $ref: '#/components/schemas/Property' + FederatedAssociationRequest: + type: object + properties: + idp: + type: string + example: exampleIdP + description: Name of the IdP + federatedUserId: + type: string + example: john@example.com + description: User identifier in the federated IdP + BulkFederatedAssociationRequest: + type: object + properties: + failOnErrors: + type: integer + example: 1 + description: | + This represents whether the API should stop processing the operations if any of them fail. The subsequent + operations after the the fail count is reached will not be processed. + If set to 0 or not set, the API will continue processing the operations even if some of them fail. + operations: + type: array + items: + $ref: '#/definitions/BulkFederatedAssociationOperation' + + BulkFederatedAssociationOperation: + type: object + required: + - method + - bulkId + - path + properties: + method: + type: string + enum: + - POST + - DELETE + example: POST + description: | + HTTP method to be used for the operation. Supported methods are POST and, DELETE. These values + If the method is not specified, the operation will be treated as a bad request. + bulkId: + type: string + example: "ytrewq" + path: + type: string + example: "/b1781d25-bde5-460a-a58a-8fe8dbfd8487/federated-associations" + description: | + The path to the resource to be operated on. The path should be relative to the base path of the API. + Full path for a federated association operation would be + `/t/{tenant-domain}/api/users/v1/{user-id}/federated-associations/{association-id}`. + data: + $ref: '#/definitions/UserFederatedAssociationData' + + UserFederatedAssociationData: + type: object + properties: + idp: + type: string + example: "exampleIdP" + description: Name of the IdP + federatedUserId: + type: string + example: "john@example.com" + description: User identifier in the federated IdP + + BulkFederatedAssociationResponse: + type: object + properties: + Operations: + type: array + items: + $ref: '#/definitions/BulkAssociationOperationResponse' + + BulkAssociationOperationResponse: + type: object + properties: + bulkId: + type: string + example: "qwerty" + status: + type: object + properties: + statusCode: + type: integer + example: "400" + errorCode: + type: string + example: "UAA-10012" + errorMessage: + type: string + example: "Error while adding federated user association: 1890c6c0-d1a0-4eb4-8075-320756d75946" + errorDescription: + type: string + example: "The federated association is already associated to a local user" + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/token + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/association-management-by-user.yaml b/docusaurus-asgardeo/static/apis/restapis/association-management-by-user.yaml new file mode 100644 index 0000000000..5bdb122a89 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/association-management-by-user.yaml @@ -0,0 +1,404 @@ +openapi: 3.0.1 +info: + title: User Account Associations API + description: | + This document specifies a **User Account Association Management RESTful API** for Asgardeo. + The APIs provide the capability to `add`/`retrieve`/`delete` associated local/federated accounts of an authenticated user. + version: v1 +servers: + - url: https://api.asgardeo.io/t/{organization-name}/api/users/v1 +security: + - OAuth2: [] +tags: + - name: me + description: Operations for the authenticated user. + +paths: + /me/associations: + get: + tags: + - me + summary: Retrieve the associations of the authenticated user + description: | + This API is used to retrieve the associations of the authenticated user.
+ + Scope(Permission) required: `internal_login` + responses: + 200: + description: Successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + 204: + description: No content + content: {} + 401: + description: Unauthorized + content: {} + 403: + description: Resource Forbidden + content: {} + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/associations' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer-token}' + post: + tags: + - me + summary: | + Associate a user to the authenticated user + description: | + This API is used to associate a user to the authenticated user. For example, if it is required to associate your user account to the user account of 'john', this endpoint can be used. The userId and the password are required to associate the accounts.
+ + Scope(Permission) required: `internal_login` + requestBody: + description: User details to be associated. userId should be the fully qualified + username of the user. + content: + application/json: + schema: + $ref: '#/components/schemas/AssociationUserRequest' + required: true + responses: + 201: + description: Successfully created + content: {} + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: {} + 403: + description: Resource Forbidden + content: {} + 409: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/associations' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer-token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "userId": "john", + "password": "userpassword", + "properties": [ + { + "key": "test-key", + "value": "test-value" + } + ] + }' + x-codegen-request-body-name: association + delete: + tags: + - me + summary: Delete all my user associations + description: | + This API is used to delete all associations of the authenticated user.
+ + Scope(Permission) required: `internal_login` + responses: + 204: + description: No content + content: {} + 401: + description: Unauthorized + content: {} + 403: + description: Resource Forbidden + content: {} + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/associations' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer-token}' + /me/associations/{associated-user-id}: + delete: + tags: + - me + summary: Delete the given user account from associations + description: | + This API is used to delete the given user account from the associations of the authenticated user.
+ + Scope(Permission) required: `internal_login` + parameters: + - name: associated-user-id + in: path + required: true + schema: + type: string + responses: + 204: + description: No content + content: {} + 401: + description: Unauthorized + content: {} + 403: + description: Resource Forbidden + content: {} + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/associations/{associated-user-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer-token}' + /me/federated-associations: + get: + tags: + - me + summary: Retrieve the federated associations of the authenticated user. + description: | + This API is used to retrieve the federated associations of the authenticated user.
+ + Scope(Permission) required: `internal_login` + responses: + 200: + description: Successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/FederatedAssociation' + 204: + description: No content + content: {} + 401: + description: Unauthorized + content: {} + 403: + description: Resource Forbidden + content: {} + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/federated-associations' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer-token}' + delete: + tags: + - me + summary: Delete all my federated user associations + description: | + This API is used to delete all the federated associations of the authenticated user.
+ + Scope(Permission) required: `internal_login` + responses: + 204: + description: No content + content: {} + 401: + description: Unauthorized + content: {} + 403: + description: Resource Forbidden + content: {} + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/federated-associations' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer-token}' + /me/federated-associations/{id}: + delete: + tags: + - me + summary: Delete my federated association + description: | + This API is used to delete a federated association of the authenticated user.
+ + Scope required: `internal_login` + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + 204: + description: No content + content: {} + 401: + description: Unauthorized request + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/federated-associations/{federated-association-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer-token}' +components: + schemas: + Error: + required: + - code + - message + type: object + properties: + code: + type: string + example: some_error_code + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: Some Correlation for Error Instance + User: + type: object + properties: + userId: + type: string + example: 23e22434234234329jj9iin + username: + type: string + example: john + userStoreDomain: + type: string + example: PRIMARY + tenantDomain: + type: string + example: carbon.super + firstName: + type: string + example: john + lastName: + type: string + example: doe + email: + type: string + example: john.doe@wso2.com + FederatedAssociation: + type: object + properties: + id: + type: string + example: eeqweisfhkdfik + idp: + $ref: '#/components/schemas/Idp' + federatedUserId: + type: string + example: john@google.com + Idp: + type: object + properties: + id: + type: string + example: eeqweisfhkdfikaefcqwesfceqwqas + name: + type: string + example: google.com + displayName: + type: string + example: Google + imageUrl: + type: string + example: https://is.example.com/sample.jpg + Property: + type: object + properties: + key: + type: string + example: test-key + value: + type: string + example: test-value + AssociationUserRequest: + type: object + properties: + userId: + type: string + example: john + password: + type: string + example: userpassword + properties: + type: array + items: + $ref: '#/components/schemas/Property' + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/token + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/attribute-management.yaml b/docusaurus-asgardeo/static/apis/restapis/attribute-management.yaml new file mode 100644 index 0000000000..d0592682e1 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/attribute-management.yaml @@ -0,0 +1,1537 @@ +openapi: 3.0.1 +info: + title: Asgardeo Attribute Management API + description: This is the RESTful API for attribute (claim) management related operations in + Asgardeo. This API allows adding, retrieving, updating, and deleting + local/external claims and claim dialects. + version: v1 +servers: +- url: https://api.asgardeo.io/t/{organization-name}/api/server/v1 +security: +- OAuth2: [] +paths: + /claim-dialects/local/claims: + get: + tags: + - Claims (local) + summary: Retrieve local claims. + description: Retrieve local claims.

Scope(Permission) required: + ``internal_claim_meta_view`` + operationId: getLocalClaims + parameters: + - name: attributes + in: query + description: Define only the required attributes to be sent in the response + object.
This option is not yet supported. + schema: + type: string + - name: limit + in: query + description: Maximum number of records to return.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: offset + in: query + description: Number of records to skip for pagination.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: filter + in: query + description: Condition to filter the retrieval of records.
This option is not yet supported. + schema: + type: string + - name: sort + in: query + description: Define the order by which the retrieved records should be sorted.
This option is not yet supported. + schema: + type: string + - name: profile + in: query + description: | + The claims belong to the given profile. This is used to filter claims based on the profile. +
Available profiles: +
    +
  • console
  • +
  • endUser
  • +
  • selfRegistration
  • +
+ schema: + type: string + - name: exclude-identity-claims + in: query + description: Exclude identity claims when listing local claims. + schema: + type: boolean + - name: exclude-hidden-claims + in: query + description: Exclude hidden claims when listing local claims. + schema: + type: boolean + responses: + 200: + description: Local claims. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/LocalClaimRes' + 401: + description: Unauthorized. + content: {} + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 501: + description: Not Implemented. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/local/claims' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Claims (local) + summary: Add a local claim. + description: Add a new claim.
+
Scope(Permission) required: ``internal_claim_meta_create`` + operationId: addLocalClaim + requestBody: + description: Local claim to be added. + content: + application/json: + schema: + $ref: '#/components/schemas/LocalClaimReq' + required: false + responses: + 201: + description: Item Created. + headers: + Location: + description: URI of the created resource. + schema: + type: string + content: {} + 400: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 409: + description: Element Already Exists. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/local/claims' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "claimURI": "http://wso2.org/claims/username", + "description": "Some description about the claim.", + "displayOrder": 10, + "displayName": "Username", + "readOnly": true, + "regEx": "^([a-zA-Z)$", + "required": true, + "supportedByDefault": true, + "attributeMapping": [ + { + "mappedAttribute": "username", + "userstore": "SECONDARY" + } + ], + "properties": [ + { + "key": "string", + "value": "string" + } + ] + }' + x-codegen-request-body-name: localClaim + /claim-dialects/local/claims/{claim-id}: + get: + tags: + - Claims (local) + summary: Retrieve a local claim. + description: Retrieve a local claim matching the given claim ID.

Scope(Permission) required: ``internal_claim_meta_view`` + operationId: getLocalClaim + parameters: + - name: claim-id + in: path + description: Id of the claim. + required: true + schema: + type: string + responses: + 200: + description: Requested claim. + content: + application/json: + schema: + $ref: '#/components/schemas/LocalClaimRes' + 400: + description: Invalid input request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 404: + description: The specified resource is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/local/claims/{claim-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Claims (local) + summary: Update a local claim. + description: Update a local claim.

Scope(Permission) required: ``internal_claim_meta_update`` + operationId: updateLocalClaim + parameters: + - name: claim-id + in: path + description: Id of the claim. + required: true + schema: + type: string + requestBody: + description: Updated local claim. + content: + application/json: + schema: + $ref: '#/components/schemas/LocalClaimReq' + required: false + responses: + 200: + description: OK. + content: {} + 400: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 409: + description: Element Already Exists. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/local/claims/{claim-id}' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "claimURI": "http://wso2.org/claims/username", + "description": "Some description about the claim.", + "displayOrder": 10, + "displayName": "Username", + "readOnly": true, + "regEx": "^([a-zA-Z)$", + "required": true, + "supportedByDefault": true, + "attributeMapping": [ + { + "mappedAttribute": "username", + "userstore": "SECONDARY" + } + ], + "properties": [ + { + "key": "string", + "value": "string" + } + ] + }' + x-codegen-request-body-name: localClaim + delete: + tags: + - Claims (local) + summary: Delete a local claim. + description: Delete a claim by claim ID.

Scope(Permission) required: ``internal_claim_meta_delete`` + operationId: deleteLocalClaim + parameters: + - name: claim-id + in: path + description: Id of the claim. + required: true + schema: + type: string + responses: + 204: + description: No Content. + content: {} + 400: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 500: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/local/claims/{claim-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + + /claim-dialects: + get: + tags: + - Claim dialects + summary: Retrieve claim dialects. + description: Retrieve claim dialects.

Scope(Permission) required: ``internal_claim_meta_view`` + operationId: getClaimDialects + parameters: + - name: limit + in: query + description: Maximum number of records to return.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: offset + in: query + description: Number of records to skip for pagination.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: filter + in: query + description: Condition to filter the retrieval of records.
This option is not yet supported. + schema: + type: string + - name: sort + in: query + description: Define the order by which the retrieved records should be sorted.
This option is not yet supported. + schema: + type: string + responses: + 200: + description: Claim dialects. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ClaimDialectRes' + 401: + description: Unauthorized. + content: {} + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 501: + description: Not Implemented. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Claim dialects + summary: Add a claim dialect. + description: Add a new claim dialect.

Scope(Permission) required:``internal_claim_meta_create`` + operationId: addClaimDialect + requestBody: + description: claim dialect to add. + content: + application/json: + schema: + $ref: '#/components/schemas/ClaimDialectReq' + required: false + responses: + 201: + description: Item Created. + headers: + Location: + description: URI of the created resource. + schema: + type: string + content: {} + 400: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 409: + description: Element Already Exists. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "dialectURI": "urn:ietf:params:scim:schemas:core:2.0:User" + }' + x-codegen-request-body-name: claimDialect + /claim-dialects/{dialect-id}: + get: + tags: + - Claim dialects + summary: Retrieve a claim dialect. + description: Retrieve a claim dialect matching the given dialect id.

Scope(Permission) required: ``internal_claim_meta_view`` + operationId: getClaimDialect + parameters: + - name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + responses: + 200: + description: Requested claim dialect. + content: + application/json: + schema: + $ref: '#/components/schemas/ClaimDialectRes' + 400: + description: Invalid input request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 404: + description: The specified resource is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/{dialect-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Claim dialects + summary: Update a claim dialect. + description: Update a claim dialect.

Scope(Permission) required:``internal_claim_meta_update`` + operationId: updateClaimDialect + parameters: + - name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + requestBody: + description: Updated claim dialect. + content: + application/json: + schema: + $ref: '#/components/schemas/ClaimDialectReq' + required: false + responses: + 200: + description: OK. + content: {} + 400: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 500: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/{dialect-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "dialectURI": "urn:ietf:params:scim:schemas:core:2.0:User" + }' + x-codegen-request-body-name: claimDialect + delete: + tags: + - Claim dialects + summary: Delete a claim dialect. + description: Delete a claim dialect by claim ID.

Scope(Permission) required: ``internal_claim_meta_delete`` + operationId: deleteClaimDialect + parameters: + - name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + responses: + 204: + description: No Content. + content: {} + 400: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 500: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/{dialect-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + + /claim-dialects/{dialect-id}/claims: + get: + tags: + - Claims (external) + summary: Retrieve external claims. + description: Retrieve External claims.

Scope(Permission) required: ``internal_claim_meta_view`` + operationId: getExternalClaims + parameters: + - name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + - name: limit + in: query + description: Maximum number of records to return.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: offset + in: query + description: Number of records to skip for pagination.
This option is not yet supported. + schema: + type: integer + format: int32 + - name: filter + in: query + description: Condition to filter the retrieval of records.
This option is not yet supported. + schema: + type: string + - name: sort + in: query + description: Define the order by which the retrieved records should be sorted.
This option is not yet supported. + schema: + type: string + responses: + 200: + description: External claims. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ExternalClaimRes' + 401: + description: Unauthorized. + content: {} + 404: + description: The specified resource is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 501: + description: Not Implemented. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/{dialect-id}/export' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + + post: + tags: + - Claims (External) + summary: Add an external claim. + description: Add a new external claim.

Scope(Permission) required: ``internal_claim_meta_create`` + operationId: addExternalClaim + parameters: + - name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + requestBody: + description: External claim to add. + content: + application/json: + schema: + $ref: '#/components/schemas/ExternalClaimReq' + required: false + responses: + 201: + description: Item Created. + headers: + Location: + description: URI of the created resource. + schema: + type: string + content: {} + 400: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 404: + description: The specified resource is not found. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 409: + description: Element Already Exists. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/{dialect-id}/claims' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "claimURI": "urn:ietf:params:scim:schemas:core:2.0:User:userName", + "mappedLocalClaimURI": "http://wso2.org/claims/username" + }' + x-codegen-request-body-name: externalClaim + /claim-dialects/{dialect-id}/claims/{claim-id}: + get: + tags: + - Claims (External) + summary: Retrieve an external claim. + description: Retrieve an external claim matching the given dialect ID and claim + ID.

Scope(Permission) required: ``internal_claim_meta_view`` + operationId: getExternalClaim + parameters: + - name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + - name: claim-id + in: path + description: Id of the claim. + required: true + schema: + type: string + responses: + 200: + description: Requested claim. + content: + application/json: + schema: + $ref: '#/components/schemas/ExternalClaimRes' + 400: + description: Invalid input request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 404: + description: The specified resource is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/{dialect-id}/claims/{claim-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + + put: + tags: + - Claims (External) + summary: Update an external claim. + description: Update an external claim.

Scope(Permission) required: ``internal_claim_meta_update`` + operationId: updateExternalClaim + parameters: + - name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + - name: claim-id + in: path + description: Id of the claim. + required: true + schema: + type: string + requestBody: + description: Updated external claim. + content: + application/json: + schema: + $ref: '#/components/schemas/ExternalClaimReq' + required: false + responses: + 200: + description: OK. + content: {} + 400: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 409: + description: Element Already Exists. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/{dialect-id}/claims/{claim-id}' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "claimURI": "urn:ietf:params:scim:schemas:core:2.0:User:userName", + "mappedLocalClaimURI": "http://wso2.org/claims/username" + }' + + x-codegen-request-body-name: externalClaim + delete: + tags: + - Claims (External) + summary: Delete an external claim. + description: Delete a claim by dialect ID and claim ID.

Scope(Permission) required: ``internal_claim_meta_delete`` + operationId: deleteExternalClaim + parameters: + - name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + - name: claim-id + in: path + description: Id of the claim. + required: true + schema: + type: string + responses: + 204: + description: No Content. + content: {} + 400: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized. + content: {} + 403: + description: Resource Forbidden. + content: {} + 500: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/{dialect-id}/claims/{claim-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + + /claim-dialects/{dialect-id}/export: + get: + tags: + - Claim dialects + summary: Export a claim dialect with claims. + description: Retrieve a claim dialect for a given dialect ID along with all + related claims as a XML, YAML, or JSON file. +

Scope(Permission) required: ``internal_claim_meta_view`` + operationId: exportClaimDialectToFile + parameters: + - $ref: '#/components/parameters/dialectIdPathParam' + - $ref: '#/components/parameters/fileTypeHeaderParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: string + example: 'Sample claim dialect configurations in the requested format' + application/xml: + schema: + type: string + example: 'Sample claim dialect configurations in the requested format' + application/yaml: + schema: + type: string + example: 'Sample claim dialect configurations in the requested format' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/{dialect-id}/export' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + + /claim-dialects/import: + put: + tags: + - Claim dialects + summary: Update a claim dialect with claims. + description: Update a claim dialect and all related claims from a file + in XML, YAML, or JSON format. +

Scope(Permission) required: ``internal_claim_meta_create`` + operationId: updateClaimDialectFromFile + parameters: + - $ref: '#/components/parameters/preserveClaimsParam' + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/FileUpload' + responses: + '201': + $ref: '#/components/responses/Created' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/import?preserveClaims=false' \ + -H 'accept: */*' \ + -H 'Content-Type: multipart/form-data' \ + -H 'Authorization: Bearer {bearer_token}' + + post: + tags: + - Claim dialects + summary: Import an external claim dialect with claims. + description: Import a external claim dialect with related claims from a file + in XML, YAML, or JSON format.
+ Scope(Permission) required: ``internal_claim_meta_create`` + operationId: importClaimDialectFromFile + requestBody: + required: true + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/FileUpload' + responses: + '201': + $ref: '#/components/responses/Created' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/claim-dialects/import' \ + -H 'accept: */*' \ + -H 'Content-Type: multipart/form-data' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + LocalClaimReq: + required: + - attributeMapping + - claimURI + - description + - displayName + type: object + properties: + claimURI: + type: string + description: A unique URI specific to the claim. + example: http://wso2.org/claims/username + description: + type: string + description: Description of the claim. + example: Some description about the claim. + displayOrder: + type: integer + description: The order in which the claim is displayed among other claims + under the same dialect. + example: 10 + displayName: + type: string + description: Name of the claim to be displayed in the UI. + example: Username + readOnly: + type: boolean + description: Specifies if the claim is read-only. + example: true + regEx: + type: string + description: Regular expression used to validate inputs. + example: ^([a-zA-Z)$ + required: + type: boolean + description: Specifies if the claim is required for user registration. + example: true + supportedByDefault: + type: boolean + description: Specifies if the claim will be prompted during user registration + and displayed on the user profile. + example: true + dataType: + type: string + description: The data type of the attribute. + enum: + - string + - boolean + - date_time + - integer + - complex + - decimal + example: string + subAttributes: + type: array + description: The sub attributes of the complex attribute. + items: + type: string + example: ["http://wso2.org/claims/manager.role", "http://wso2.org/claims/manager.department"] + canonicalValues: + type: array + description: The possible values for the attribute. + items: + $ref: '#/components/schemas/LabelValue' + multiValued: + type: boolean + description: Specifies if the claim can hold multiple values or not. + example: true + uniquenessScope: + type: string + description: Specifies the scope of uniqueness validation for the claim value. + enum: + - NONE + - WITHIN_USERSTORE + - ACROSS_USERSTORES + example: "NONE" + sharedProfileValueResolvingMethod: + type: string + description: Specifies claim value resolving method for shared user profile. + enum: + - FromOrigin + - FromSharedProfile + - FromFirstFoundInHierarchy + example: "FromOrigin" + attributeMapping: + type: array + description: Userstore attribute mappings. + items: + $ref: '#/components/schemas/AttributeMapping' + properties: + type: array + description: Define any additional properties if required. + items: + $ref: '#/components/schemas/Property' + description: Local claim request. + LocalClaimRes: + type: object + properties: + id: + type: string + description: claim ID. + example: 394b8adcce24c64a8a09a8d80abf8c337bd253de + claimURI: + type: string + description: A unique URI specific to the claim. + example: http://wso2.org/claims/username + dialectURI: + type: string + description: URI of the claim dialect. + example: http://wso2.org/claims + description: + type: string + description: Description of the claim. + example: Some description about the claim. + displayOrder: + type: integer + description: The order in which the claim is displayed among other claims + under the same dialect. + example: 10 + displayName: + type: string + description: Name of the claim to be displayed in the UI. + example: Username + readOnly: + type: boolean + description: Specifies if the claim is read-only. + example: true + regEx: + type: string + description: Regular expression used to validate inputs. + example: ^([a-zA-Z)$ + required: + type: boolean + description: Specifies if the claim is required for user registration. + example: true + supportedByDefault: + type: boolean + description: Specifies if the claim will be prompted during user registration + and displayed on the user profile. + example: true + dataType: + type: string + description: The data type of the attribute. + enum: + - string + - boolean + - date_time + - integer + - complex + - decimal + example: string + subAttributes: + type: array + description: The sub attributes of the complex attribute. + items: + type: string + example: ["http://wso2.org/claims/manager.role", "http://wso2.org/claims/manager.department"] + canonicalValues: + type: array + description: The possible values for the attribute. + items: + $ref: '#/components/schemas/LabelValue' + example: [{"label": "Admin", "value": "admin"}, {"label": "User", "value": "user"}] + multiValued: + type: boolean + description: Specifies if the claim can hold multiple values or not. + example: true + inputFormat: + $ref: '#/components/schemas/InputFormat' + uniquenessScope: + type: string + description: Specifies the scope of uniqueness validation for the claim value. + enum: + - NONE + - WITHIN_USERSTORE + - ACROSS_USERSTORES + example: "NONE" + sharedProfileValueResolvingMethod: + type: string + description: Specifies claim value resolving method for shared user profile. + enum: + - FromOrigin + - FromSharedProfile + - FromFirstFoundInHierarchy + example: "FromOrigin" + attributeMapping: + type: array + description: Userstore attribute mappings. + items: + $ref: '#/components/schemas/AttributeMapping' + properties: + type: array + description: Define any additional properties if required. + items: + $ref: '#/components/schemas/Property' + description: Local claim response. + AttributeMapping: + required: + - mappedAttribute + - userstore + type: object + properties: + mappedAttribute: + type: string + description: Userstore attribute to be mapped to. + example: username + userstore: + type: string + description: Userstore domain name. + example: SECONDARY + description: Claim userstore attribute mapping. + ClaimDialectReq: + required: + - dialectURI + type: object + properties: + dialectURI: + type: string + description: URI of the claim dialect. + example: urn:ietf:params:scim:schemas:core:2.0:User + description: Claim dialect request. + ClaimDialectRes: + type: object + properties: + id: + type: string + description: Dialect id. + example: 394b8adcce24c64a8a09a0d80abf8c337bd253de + dialectURI: + type: string + description: URI of the claim dialect. + example: urn:ietf:params:scim:schemas:core:2.0:User + link: + $ref: '#/components/schemas/Link' + description: Claim dialect response. + ExternalClaimReq: + required: + - claimURI + - mappedLocalClaimURI + type: object + properties: + claimURI: + type: string + description: Claim URI of the external claim. + example: urn:ietf:params:scim:schemas:core:2.0:User:userName + mappedLocalClaimURI: + type: string + description: The local claim URI to map with the external claim. + example: http://wso2.org/claims/username + description: External claim request. + ExternalClaimRes: + type: object + properties: + id: + type: string + description: External claim ID. + example: 394b8adcce24c64a8a09a0d80abf8c337dd255de + claimURI: + type: string + description: Claim URI of the external claim. + example: ' urn:ietf:params:scim:schemas:core:2.0:User:userName' + claimDialectURI: + type: string + description: Dialect URI of the external claim. + example: urn:ietf:params:scim:schemas:core:2.0:User + mappedLocalClaimURI: + type: string + description: The local claim URI to map with the external claim. + example: http://wso2.org/claims/username + description: External claim response. + Property: + required: + - key + - value + type: object + properties: + key: + type: string + value: + type: string + Link: + type: object + properties: + href: + type: string + description: Relative path to the target resource. + example: 394b8adcce24c64a8a09a8d80abf8c337bd253de/claims + rel: + type: string + description: Describes how the current context is related to the target + resource. + example: claims + LabelValue: + type: object + required: + - label + - value + properties: + label: + type: string + description: The display name shown to the user. + example: Work Account + value: + type: string + description: The internal value used in processing. + example: WorkAccount + example: + label: Work Account + value: WorkAccount + InputFormat: + type: object + description: The input formatting of the attribute. + properties: + inputType: + type: string + description: Type of the input format (e.g., dropdown, checkbox, etc.) + example: dropdown + example: + inputType: dropdown + Error: + required: + - code + - message + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + FileUpload: + type: object + properties: + file: + type: string + format: binary + description: This file represents the claim dialect. + responses: + Conflict: + description: Element Already Exists. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + Created: + description: Item Created. + headers: + Location: + description: URI of the created resource. + schema: + type: string + content: {} + Forbidden: + description: Resource Forbidden. + content: {} + InvalidInput: + description: Invalid input request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + NoContent: + description: No Content. + content: {} + NotFound: + description: The specified resource is not found. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + OK: + description: OK. + content: {} + ServerError: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Unauthorized. + content: {} + parameters: + limitQueryParam: + name: limit + in: query + description: Maximum number of records to return. + schema: + type: integer + format: int32 + offsetQueryParam: + name: offset + in: query + description: Number of records to skip for pagination. + schema: + type: integer + format: int32 + filterQueryParam: + name: filter + in: query + description: Condition to filter the retrieval of records. + schema: + type: string + sortQueryParam: + name: sort + in: query + description: Define the order by which the retrieved records should be sorted. + schema: + type: string + attributesQueryParam: + name: attributes + in: query + description: Define only the required attributes to be sent in the response + object. + schema: + type: string + dialectIdPathParam: + name: dialect-id + in: path + description: Id of the claim dialect. + required: true + schema: + type: string + claimIdPathParam: + name: claim-id + in: path + description: Id of the claim. + required: true + schema: + type: string + fileTypeHeaderParam: + name: Accept + in: header + description: Content type of the file. + required: false + schema: + type: string + default: application/yaml + enum: + - application/json + - application/xml + - application/yaml + - application/x-yaml + - text/yaml + - text/xml + - text/json + preserveClaimsParam: + name: preserveClaims + in: query + description: Specify whether to merge and preserve the claims or completely replace the existing claims set. + required: false + schema: + type: boolean + default: false + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/authenticators.yaml b/docusaurus-asgardeo/static/apis/restapis/authenticators.yaml new file mode 100644 index 0000000000..601dc6eabe --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/authenticators.yaml @@ -0,0 +1,616 @@ +openapi: 3.0.0 +info: + version: "v1" + title: 'Authenticators API' + description: 'This document specifies a **Authenticators RESTful API** for Asgardeo' + +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' +security: + - OAuth2: [] + +paths: + /authenticators: + get: + tags: + - Authenticators + summary: List all authenticators in the server + description: | + List all authenticators in the server. + + Scope(Permission) required: `internal_authenticator_view` + parameters: + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Authenticators' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/authenticators' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer-token}' + /authenticators/{authenticator-id}/connected-apps: + get: + tags: + - Connected apps of local authenticators + summary: Get connected apps by authenticator ID + operationId: getConnectedAppsOfLocalAuthenticator + description: | + By passing in the appropriate authenticator ID, you can retrieve connected app details. + + Scope(Permission) required: `internal_authenticator_view` + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - name: authenticator-id + in: path + description: ID of an authenticator + required: true + schema: + type: string + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectedApps' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/authenticators/meta/tags' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer-token}' + /authenticators/meta/tags: + get: + tags: + - Authenticators + summary: List all authenticator tags + description: | + List all authenticator tags. + + Scope(Permission) required: `internal_authenticator_view` + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/Tags' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/authenticators/{authenticator-id}/connected-apps' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer-token}' + /authenticators/custom: + post: + tags: + - User defined local authenticators + summary: | + Create a new user defined local authenticator. + description: | + This API provides the capability to create a new user defined local authenticator. + + Scope(Permission) required: `internal_custom_authenticator_create` + responses: + '201': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Authenticator' + examples: + example: + $ref: '#/components/examples/UserDefinedAuthenticatorExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserDefinedLocalAuthenticatorCreation' + description: This represents the user defined local authenticator to be created. + required: true + /authenticators/custom/{authenticator-id}: + put: + tags: + - User defined local authenticators + summary: | + Update a user defined local authenticator. + description: | + This API provides the capability to update the user defined local authenticator configurations.
+ + Scope(Permission) required: `internal_custom_authenticator_update` + parameters: + - name: authenticator-id + in: path + description: ID of an authenticator + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Authenticator' + examples: + example: + $ref: '#/components/examples/UserDefinedAuthenticatorExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserDefinedLocalAuthenticatorUpdate' + description: This represents the user defined local authenticator to be created. + required: true + delete: + tags: + - User defined local authenticators + summary: | + Delete a user defined local authenticator. + description: | + This API provides the capability to delete a user defined local authenticator. + + Scope(Permission) required: `internal_custom_authenticator_delete` + operationId: deleteUserDefinedLocalAuthenticator + parameters: + - name: authenticator-id + in: path + description: ID of an authenticator + required: true + schema: + type: string + responses: + '204': + description: Successful response + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + +components: + parameters: + filterQueryParam: + in: query + name: filter + required: false + description: | + Condition to filter the retrieval of records. + Only supports filtering based on the 'tag' and 'name' attribute. + For local authenticators and request path authenticators, the 'displayName' is considered as the 'name' attribute during filtering. + The 'name' attribute only supports 'eq' and 'sw operations. Filtering with multiple 'name' attributes is not supported. + The 'tag' attribute only supports 'eq' operation. Filtering with multiple 'tag' attributes is supported with only 'or' as the complex query operation. + E.g. /configs/authenticators?filter=name+sw+fi+and+(tag+eq+2FA+or+tag+eq+MFA) + + schema: + type: string + limitQueryParam: + in: query + name: limit + description: > + Maximum number of records to return. _This option is not yet + supported._ + schema: + type: integer + format: int32 + minimum: 0 + offsetQueryParam: + in: query + name: offset + description: > + Number of records to skip for pagination. _This option is not yet + supported._ + schema: + type: integer + format: int32 + minimum: 0 + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: AUT-00000 + description: An error code. + message: + type: string + example: Some Error Message + description: An error message. + description: + type: string + example: Some Error Description + description: An error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + description: An error trace identifier. + Tags: + type: array + description: The list of tags available for authenticators. + items: + type: string + example: [2FA, MFA] + Authenticators: + type: array + items: + $ref: '#/components/schemas/Authenticator' + Authenticator: + type: object + properties: + id: + type: string + example: QmFzaWNBdXRoZW50aWNhdG9y + readOnly: true + name: + type: string + example: BasicAuthenticator + displayName: + type: string + example: basic + isEnabled: + type: boolean + example: true + definedBy: + type: string + enum: + - SYSTEM + - USER + readOnly: true + type: + type: string + enum: + - LOCAL + - FEDERATED + readOnly: true + image: + type: string + example: basic-authenticator-logo-url + description: + type: string + example: The basic authenticator. + tags: + type: array + items: + type: string + example: [2FA, MFA] + readOnly: true + self: + type: string + example: /t/{organization-name}/api/server/v1/configs/authenticators/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + UserDefinedLocalAuthenticatorCreation: + description: This represents the configuration for creating a user defined local authenticator. + type: object + properties: + name: + type: string + description: The name of the user defined local authenticator. It must be started with 'custom-'. + example: custom-authenticator + id: + type: string + example: Y3VzdG9tLWF1dGhlbnRpY2F0b3I + displayName: + type: string + example: Custom Local Authenticator + isEnabled: + type: boolean + example: true + authenticationType: + type: string + enum: + - IDENTIFICATION + - VERIFICATION + image: + type: string + example: https://custom-authenticator-logo-url + description: + type: string + example: The user defined custom local authenticator. + endpoint: + $ref: '#/components/schemas/Endpoint' + required: + - name + - displayName + - isEnabled + - endpoint + UserDefinedLocalAuthenticatorUpdate: + description: This represents the configuration for updating a user defined local authenticator. + type: object + properties: + displayName: + type: string + example: Custom Local Authenticator + isEnabled: + type: boolean + example: true + image: + type: string + example: https://custom-authenticator-logo-url-new + description: + type: string + example: The user defined custom local authenticator. + endpoint: + $ref: '#/components/schemas/Endpoint' + required: + - displayName + - isEnabled + - endpoint + Endpoint: + type: object + properties: + uri: + type: string + example: https://abc.com/token + pattern: '^https?://.+' + authentication: + $ref: '#/components/schemas/AuthenticationType' + allowedHeaders: + type: array + description: List of HTTP headers to forward to the extension. + items: + type: string + example: [ "x-geo-location", "host"] + allowedParameters: + type: array + description: List of parameters to forward to the extension. + items: + type: string + example: [ "device-id"] + AuthenticationType: + type: object + description: > + The type of authentication required by the action's endpoint. The following options are supported: + + - NONE: No authentication is required.
+ ``{ + "type": "NONE" + }`` + + - BASIC: Basic authentication with a username and password.
+ ``{ + "type": "BASIC", + "properties": { + "username": "auth_username", + "password": "auth_password" + } + }`` + + - API_KEY: API key-based authentication, where the key is provided in an HTTP header.
+ ``{ + "type": "API_KEY", + "properties": { + "header": "X-API-Key", + "value": "12345-abcde-67890" + } + }`` + + - BEARER: Bearer token-based authentication.
+ ``{ + "type": "BEARER", + "properties": { + "accessToken": "0d6fed02-eac0-332b-8998-213a543139a0" + } + }`` + required: + - type + - properties + properties: + type: + type: string + enum: + - NONE + - BEARER + - API_KEY + - BASIC + example: BASIC + properties: + type: object + additionalProperties: true + example: + username: "auth_username" + password: "auth_password" + ConnectedApps: + type: object + properties: + totalResults: + type: integer + example: 10 + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "authenticator/123e4567-e89b-12d3-a456-556642440000/connected-apps?offset=50&limit=10", + "rel": "next" + }, { + "href": "authenticator/provider/123e4567-e89b-12d3-a456-556642440000/connected-apps?offset=30&limit=10", + "rel": "previous" + } + ] + connectedApps: + type: array + items: + $ref: '#/components/schemas/ConnectedApp' + ConnectedApp: + type: object + properties: + appId: + type: string + example: app-id + self: + type: string + example: /t/org/api/server/v1/applications/c74d74b2-cb62-4abd-ad66-6c45daeb561c + Link: + type: object + properties: + href: + type: string + description: Path to the target resource. + example: >- + '/t/{organization-name}/api/server/v1/authenticators/394b8adcce24c64a8a09a8d80abf8c337bd253de' + rel: + type: string + description: Describes how the current context is related to the target resource. + example: authenticators + readOnly: true + #----------------------------------------------------- + # Descriptions of Authenticators API responses. + #----------------------------------------------------- + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Requested resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + #----------------------------------------------------- + # Applicable authentication mechanisms. + #----------------------------------------------------- + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} + examples: + UserDefinedAuthenticatorExample: + summary: "Response for user defined authenticator" + value: + id: "Y3VzdG9tLWF1dGhlbnRpY2F0b3I" + name: "custom-authenticator" + displayName: "Custom Local Authenticator" + definedBy: "USER" + type: "LOCAL" + isEnabled: true + tags: [ Custom ] + self: "/t/{organization-name}/api/server/v1/configs/authenticators/Y3VzdG9tLWF1dGhlbnRpY2F0b3I=" diff --git a/docusaurus-asgardeo/static/apis/restapis/backup-code.yaml b/docusaurus-asgardeo/static/apis/restapis/backup-code.yaml new file mode 100644 index 0000000000..3367993c32 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/backup-code.yaml @@ -0,0 +1,158 @@ +openapi: 3.0.0 + +info: + description: | + This is the RESTful API for a user to manage backup codes in Asgardeo. + version: "v1" + title: "Asgardeo - Backup Code API Definition" +servers: +- url: https://api.asgardeo.io/t/{organization-name}/api/users/v1 + +security: + - OAuth2: [] + +tags: + - name: me + description: Operations for the authenticated user. + +paths: + /me/backup-codes: + post: + description: + "This API is used to generate backup codes.\n\nScope required:``internal_login``" + summary: | + Generate backup codes + responses: + 201: + description: Created + content: + application/json: + schema: + $ref: '#/components/schemas/BackupCodeResponse' + 401: + description: Unauthorized + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/backup-codes' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '' + tags: + - me + get: + tags: + - me + summary: Retrieve remaining backup codes count + description: + "This API is used to retrieve the count of remaining backup codes of the authenticated user.\n\nScope required:``internal_login``" + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/RemainingBackupCodeResponse' + 401: + description: Unauthorized + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/backup-codes' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + delete: + tags: + - me + summary: Delete backup codes + description: + "This API is used to delete backup codes of the authenticated user.\n\nScope required:``internal_login``" + responses: + 204: + description: Backup codes deleted successfully. + 401: + description: Unauthorized + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/backup-codes' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Error: + type: object + description: Backup code error. + required: + - code + - message + - traceId + properties: + code: + type: string + example: "some_error_code" + description: Error code. + message: + type: string + example: "Some Error Message" + description: Error message. + description: + type: string + example: "Some Error Description" + description: Error description. + traceId: + type: string + example: "Some Correlation for Error Instance" + description: Error trace id. + #----------------------------------------------------- + # Backup code Response object + #----------------------------------------------------- + BackupCodeResponse: + type: object + description: Backup code response. + properties: + backupCodes: + type: array + description: Backup codes of the authenticated user. + items: + type: string + example: 123456 + + RemainingBackupCodeResponse: + type: object + description: Remaining backup code response. + properties: + remainingBackupCodesCount: + description: Remaining backup codes of the authenticated user. + type: integer + example: 4 + + securitySchemes: + OAuth2: + type: oauth2 + description: "You can use the following OAuth grant type to securely access the respective API endpoints. + \n\n **Authorization Code OAuth Flow** + \n\n Authorization URL: 'https://api.asgardeo.io/t/{org-name}/oauth2/authorize' + \n\n This flow type is used for the ```me``` endpoint of backup-codes APIs. You can use the following scope for this endpoints. + \n\n - ```internal_login```: Grant permission for an authenticated user for self management." \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/branding-preference.yaml b/docusaurus-asgardeo/static/apis/restapis/branding-preference.yaml new file mode 100644 index 0000000000..eb53930b86 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/branding-preference.yaml @@ -0,0 +1,716 @@ +openapi: 3.0.0 +info: + title: Asgardeo - Branding Preferences API + description: >- + This is the RESTful API to manage Branding Preferences of root organizations in Asgardeo. + version: v1 +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' + +security: + - OAuth2: [] + +paths: + '/branding-preference': + get: + tags: + - Branding Preference + operationId: getBrandingPreference + summary: Get branding preference of a tenant. + description: | + This API provides the capability to retrieve the branding preference of a tenant/specific application.
+ If there is no branding preference available for the requested locale, API will check for the default locale('en-US') and return it.
+ If there is no branding preference available for the requested application, API will check for the tenant's branding preference and return it.
+ + Scope(Permission) required: None + parameters: + - $ref: '#/components/parameters/typeQueryParam' + - $ref: '#/components/parameters/nameQueryParam' + - $ref: '#/components/parameters/localeQueryParam' + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/branding-preference?type=ORG&name=WSO2&locale=en-US' \ + -H 'accept: application/json' + post: + tags: + - Branding Preference + operationId: addBrandingPreference + summary: Add branding preferences for a tenant. + description: | + This API provides the capability to add a custom branding preference for a tenant/application.
+ Currently this API provides the capability to only configure tenant wise branding preference for 'en-US' locale.
+ + Scope(Permission) required: `internal_branding_preference_update` + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + description: This represents the branding preferences to be added. + required: true + responses: + '201': + description: Successfully created. + content: + application/json: + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + "409": + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/branding-preference' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "type": "ORG", + "name": "WSO2", + "locale": "en-US", + "preference": { + "organizationDetails": { + "displayName": "Ballerina.io", + "siteTitle": "Login - Ballerina", + "copyrightText": "© 2021 WSO2", + "supportEmail": "support@ballerina.io" + }, + "images": { + "logo": { + "imgURL": "https://ballerina.io/img/ballerina-logo.svg", + "altText": "Ballerina.io Logo" + }, + "favicon": { + "imgURL": "https://central.ballerina.io/favicon.ico" + } + }, + "urls": { + "privacyPolicyURL": "https://ballerina.io/privacy-policy", + "termsOfUseURL": "https://ballerina.io/terms-of-service/", + "cookiePolicyURL": "https://ballerina.io/privacy-policy/#cookie-policy" + }, + "stylesheets": { + "accountApp": "https://firebasestorage.googleapis.com/v0/b/asgardeo-branding.appspot.com/o/ballerina%2Flogin-portal.overrides.css?alt=media&token=0315462e-534e-4f33-83f9-e4c092d0273d", + "myAccountApp": "https://asgardeo-branding/user-portal.css" + }, + "configs": { + "isBrandingEnabled": true, + "removeDefaultBranding": false, + "selfSignUpEnabled": true + } + } + }' + put: + tags: + - Branding Preference + operationId: updateBrandingPreference + summary: Update branding preferences of a tenant. + description: | + This API provides the capability to update the branding preference of a tenant/application.
+ + Scope(Permission) required: `internal_branding_preference_update` + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + description: This represents the branding preferences to be updated. + required: true + responses: + '200' : + description: Successfully updated + content: + application/json: + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/branding-preference' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "type": "ORG", + "name": "WSO2", + "locale": "en-US", + "preference": { + "organizationDetails": { + "displayName": "Ballerina.io", + "siteTitle": "Login - Ballerina", + "copyrightText": "© 2021 WSO2", + "supportEmail": "support@ballerina.io" + }, + "images": { + "logo": { + "imgURL": "https://ballerina.io/img/ballerina-logo.svg", + "altText": "Ballerina.io Logo" + }, + "favicon": { + "imgURL": "https://central.ballerina.io/favicon.ico" + } + }, + "urls": { + "privacyPolicyURL": "https://ballerina.io/privacy-policy", + "termsOfUseURL": "https://ballerina.io/terms-of-service/", + "cookiePolicyURL": "https://ballerina.io/privacy-policy/#cookie-policy" + }, + "stylesheets": { + "accountApp": "https://firebasestorage.googleapis.com/v0/b/asgardeo-branding.appspot.com/o/ballerina%2Flogin-portal.overrides.css?alt=media&token=0315462e-534e-4f33-83f9-e4c092d0273d", + "myAccountApp": "https://asgardeo-branding/user-portal.css" + }, + "configs": { + "isBrandingEnabled": true, + "removeDefaultBranding": false, + "selfSignUpEnabled": true + } + } + }' + delete: + tags: + - Branding Preference + operationId: deleteBrandingPreference + summary: Deletes branding preferences of a tenant. + description: | + This API provides the capability to delete the branding preferences of a tenant/application.
+ + Scope(Permission) required: `internal_branding_preference_update` + parameters: + - $ref: '#/components/parameters/typeQueryParam' + - $ref: '#/components/parameters/nameQueryParam' + - $ref: '#/components/parameters/localeQueryParam' + responses: + '204' : + description: Successfully deleted. + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/branding-preference?type=ORG&name=WSO2&locale=en-US' \ + -H 'accept: */*' + '/branding-preference/resolve': + get: + tags: + - Branding Preference + operationId: resolveBrandingPreference + summary: Resolve branding preference of an organization. + description: | + This API provides the capability to retrieve the branding preference of an organization/specific application.
+ If there is no branding preference available for the requested locale, API will check for the default locale('en-US') and return it.
+ If there is no branding preference available for the requested application, API will check for the organization's branding preference and return it.
+ + Scope(Permission) required: None + parameters: + - $ref: '#/components/parameters/typeQueryParam' + - $ref: '#/components/parameters/nameQueryParam' + - $ref: '#/components/parameters/localeQueryParam' + - $ref: '#/components/parameters/restrictToPublishedQueryParam' + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: '#/components/schemas/BrandingPreferenceModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/branding-preference/resolve?type=ORG&name=WSO2&locale=en-US' \ + -H 'accept: application/json' + '/branding-preference/text': + get: + tags: + - Custom Text + operationId: getCustomText + summary: Get Custom text of a tenant. + description: | + This API provides the capability to retrieve the existing custom text configurations of a tenant for the specified screen and locale.
+ If there is no custom texts available for the requested locale, API will check for the default locale('en-US') and return it.
+ + Scope(Permission) required: None + parameters: + - $ref: '#/components/parameters/typeQueryParam' + - $ref: '#/components/parameters/nameQueryParam' + - $ref: '#/components/parameters/localeQueryParam' + - $ref: '#/components/parameters/screenQueryParam' + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: '#/components/schemas/CustomTextModel' + '400': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/branding-preference/text?type=ORG&name=WSO2&locale=en-US&screen=login' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Custom Text + operationId: addCustomText + summary: Add custom text for a tenant. + description: | + This API provides the capability to add custom texts for the specified screen & locale.
+ + Scope(Permission) required: `internal_branding_preference_update` + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomTextModel' + description: This represents the custom text to be added. + required: true + responses: + '201': + description: Successfully created. + content: + application/json: + schema: + $ref: '#/components/schemas/CustomTextModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + "409": + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/branding-preference/text' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "type": "ORG", + "name": "WSO2", + "locale": "en-US", + "screen": "login", + "preference": { + "login": "Sign In", + "welcome": "Welcome", + "account.linking": "Account Linking", + "username": "Username", + "email.username": "Email address", + "back.to.sign.in": "Back to Sign In", + "or": "Or", + "dont.have.an.account": "Don'\''t have an account?" + } + }' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Custom Text + operationId: updateCustomText + summary: Update custom text of a tenant. + description: | + This API provides the capability to update the custom texts for the specified screen & locale.
+ + Scope(Permission) required: `internal_branding_preference_update` + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomTextModel' + description: This represents the custom text content to be updated for the specified screen & locale. + required: true + responses: + '200' : + description: Successfully updated + content: + application/json: + schema: + $ref: '#/components/schemas/CustomTextModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/branding-preference/text' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "type": "ORG", + "name": "WSO2", + "locale": "en-US", + "screen": "login", + "preference": { + "login": "Sign In", + "welcome": "Welcome", + "account.linking": "Account Linking", + "username": "Username", + "email.username": "Email address", + "back.to.sign.in": "Back to Sign In", + "or": "Or", + "dont.have.an.account": "Don'\''t have an account?" + } + }' \ + -H 'Authorization: Bearer {bearer_token}' + delete: + tags: + - Custom Text + operationId: deleteCustomText + summary: Deletes custom text. + description: | + This API provides the capability to delete the custom texts for the specified screen & locale of a tenant.
+ If no query parameter was specified in the delete request, all the custom texts configured in the tenant will be deleted.
+ + Scope(Permission) required: `internal_branding_preference_update` + parameters: + - $ref: '#/components/parameters/typeQueryParam' + - $ref: '#/components/parameters/nameQueryParam' + - $ref: '#/components/parameters/localeQueryParam' + - $ref: '#/components/parameters/screenQueryParam' + responses: + '204' : + description: Successfully deleted. + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/branding-preference/text?type=ORG&name=WSO2&locale=en-US&screen=login' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + '/branding-preference/text/resolve': + get: + tags: + - Custom Text + operationId: resolveCustomText + summary: Resolve custom text of an organization. + description: | + This API provides the capability to retrieve the custom text configurations of an organization/specific application.
+ If there is no custom text available for the requested locale, API will check for the default locale('en-US') and return it.
+ If there is no custom text available for the requested organization, API will check for the parent organization's custom text configurations and return it.
+ + Scope(Permission) required: None + parameters: + - $ref: '#/components/parameters/typeQueryParam' + - $ref: '#/components/parameters/nameQueryParam' + - $ref: '#/components/parameters/localeQueryParam' + - $ref: '#/components/parameters/screenQueryParam' + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: '#/components/schemas/CustomTextModel' + '400': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/branding-preference/text/resolve?type=ORG&name=WSO2&locale=en-US&screen=login' \ + -H 'accept: application/json' +components: + parameters: + typeQueryParam: + in: query + name: type + required: false + description: Type to filter the retrieval of customizations. + schema: + type: string + enum: + - ORG + - APP + - CUSTOM + example: "ORG" + nameQueryParam: + in: query + name: name + required: false + description: Tenant/Application name to filter the retrieval of customizations. + schema: + type: string + example: "WSO2" + localeQueryParam: + in: query + name: locale + required: false + description: Locale to filter the retrieval of customizations. + schema: + type: string + example: "en-US" + screenQueryParam: + in: query + name: screen + required: false + description: Screen to filter the retrieval of customizations. + schema: + type: string + example: "login" + restrictToPublishedQueryParam: + in: query + name: restrictToPublished + required: false + description: | + Specifies whether to limit resolving to published branding preferences. + If set to true, branding preference will be resolved only using published branding preferences. + If set to false, branding preference will be resolved using both published and unpublished branding preferences. + schema: + type: boolean + default: false + example: true + + schemas: + BrandingPreferenceModel: + required: + - type + - preference + type: object + properties: + type: + type: string + enum: + - ORG + - APP + - CUSTOM + example: "ORG" + name: + type: string + example: "WSO2" + locale: + type: string + example: "en-US" + default: "en-US" + preference: + type: object + description: "This is the JSON structured branding preference" + example: { + "organizationDetails": { + "displayName": "Ballerina.io", + "siteTitle": "Login - Ballerina", + "copyrightText": "© 2021 WSO2", + "supportEmail": "support@ballerina.io" + }, + "images": { + "logo": { + "imgURL": "https://ballerina.io/img/ballerina-logo.svg", + "altText": "Ballerina.io Logo" + }, + "favicon": { + "imgURL": "https://central.ballerina.io/favicon.ico" + } + }, + "urls": { + "privacyPolicyURL": "https://ballerina.io/privacy-policy", + "termsOfUseURL": "https://ballerina.io/terms-of-service/", + "cookiePolicyURL": "https://ballerina.io/privacy-policy/#cookie-policy" + }, + "stylesheets": { + "accountApp": "https://firebasestorage.googleapis.com/v0/b/asgardeo-branding.appspot.com/o/ballerina%2Flogin-portal.overrides.css?alt=media&token=0315462e-534e-4f33-83f9-e4c092d0273d", + "myAccountApp": "https://asgardeo-branding/user-portal.css" + }, + "configs": { + "isBrandingEnabled": true, + "removeDefaultBranding": false, + "selfSignUpEnabled": true + } + } + + CustomTextModel: + required: + - type + - screen + - preference + type: object + properties: + type: + type: string + enum: + - ORG + - APP + - CUSTOM + example: "ORG" + name: + type: string + example: "WSO2" + locale: + type: string + example: "en-US" + default: "en-US" + screen: + type: string + example: "login" + preference: + type: object + description: "This is the JSON structured branding preference" + example: { + "login": "Sign In", + "welcome": "Welcome", + "account.linking": "Account Linking", + "username": "Username", + "email.username": "Email address", + "back.to.sign.in": "Back to Sign In", + "or": "Or", + "dont.have.an.account": "Don't have an account?" + } + + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: BPM-60001 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: 3erfee-232-efewv-2321-43ferfe24r + + #----------------------------------------------------- + # Descriptions of Branding Preference API responses. + #----------------------------------------------------- + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + NotFound: + description: Requested resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Conflict: + description: Conflict. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + + #----------------------------------------------------- + # Applicable authentication mechanisms. + #----------------------------------------------------- + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/consent-management.yaml b/docusaurus-asgardeo/static/apis/restapis/consent-management.yaml new file mode 100644 index 0000000000..2e2e5da4bb --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/consent-management.yaml @@ -0,0 +1,1561 @@ +openapi: 3.0.1 +info: + title: 'Asgardeo Consent Management Rest API ' + description: | + This document specifies a **Consent Management RESTfulAPI** for Asgardeo. + version: 1.0.0 +servers: +- url: https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0 +paths: + /consents: + get: + tags: + - Consent + summary: | + List Consents + description: | + This API is used to list consent elements based on the filtered attributes. + parameters: + - name: limit + in: query + description: Number of search results + schema: + type: integer + - name: offset + in: query + description: Start index of the search + schema: + type: integer + - name: piiPrincipalId + in: query + description: Subject identifier + schema: + type: string + - name: spTenantDomain + in: query + description: Service provider tenant domain + schema: + type: string + - name: service + in: query + description: Service name + schema: + type: string + - name: state + in: query + description: State (ACTIVE/REVOKED) + schema: + type: string + responses: + 200: + description: OK + headers: + Location: + description: Location to retireve the consent element to. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ConsentResponse' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + x-wso2-request: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents?limit=&offset=&piiPrincipalId=&spTenantDomain=&service=*&state=" -H "Authorization: Basic " -H "accept: application/json" + x-wso2-curl: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents?limit=10&offset=0&piiPrincipalId=testuser&spTenantDomain=carbon.super&service=foo*&state=ACTIVE" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" + x-wso2-response: | + [{"consentReceiptID":"7a6886ab-b02f-424f-9cd4-adf5e92f0798","language":"EN","piiPrincipalId":"testuser","tenantDomain":"carbon.super","state":"ACTIVE"}] + post: + tags: + - Consent + summary: | + Add consent + description: | + This API is used to store consent information given by the user. + requestBody: + description: This represents the consent element that needs to be stored. + content: + application/json: + schema: + $ref: '#/components/schemas/ConsentRequest' + required: true + responses: + 201: + description: Successful response + headers: + Location: + description: Location of the newly created consent. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ConsentAddResponse' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 409: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "services": [ + { + "service": "string", + "serviceDisplayName": "string", + "serviceDescription": "string", + "tenantDomain": "string", + "purposes": [ + { + "purposeId": 0, + "purposeCategoryId": [ + 0 + ], + "consentType": "string", + "piiCategory": [ + { + "piiCategoryId": 0, + "validity": "string" + } + ], + "primaryPurpose": true, + "termination": "string", + "thirdPartyDisclosure": true, + "thirdPartyName": "string" + } + ] + } + ], + "collectionMethod": "string", + "jurisdiction": "string", + "language": "string", + "policyURL": "string", + "properties": [ + { + "key": "string", + "value": "string" + } + ] + }' + x-wso2-request: | + curl -k -X POST "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents" -H "Authorization: Basic " -H "accept: application/json" -H "Content-Type: application/json" -d "{\"services\": [ { \"service\": \"\", \"tenantDomain\": \"\", \"purposes\": [ { \"purposeId\": , \"purposeCategoryId\": [ ], \"consentType\": \"\", \"piiCategory\": [ { \"piiCategoryId\": , \"validity\": \"days:\" }, { \"piiCategoryId\": , \"validity\": \"days:\" } ], \"primaryPurpose\": true, \"termination\": \"days:\", \"thirdPartyDisclosure\": false, \"thirdPartyName\": \"\" } ] } ], \"collectionMethod\": \"\", \"jurisdiction\": \"\", \"language\": \"\", \"policyURL\": \"", \"properties\": [ { \"key\": \"\", \"value\": \"v1\" } ]}" + x-wso2-curl: | + curl -k -X POST "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"services\": [ { \"service\": \"foo-service\", \"tenantDomain\": \"carbon.super\", \"purposes\": [ { \"purposeId\": 1, \"purposeCategoryId\": [ 1 ], \"consentType\": \"EXPLICIT\", \"piiCategory\": [ { \"piiCategoryId\": 1, \"validity\": \"days:30\" }, { \"piiCategoryId\": 2, \"validity\": \"days:30\" } ], \"primaryPurpose\": true, \"termination\": \"days:30\", \"thirdPartyDisclosure\": false, \"thirdPartyName\": \"\" } ] } ], \"collectionMethod\": \"Sign-Up\", \"jurisdiction\": \"CA\", \"language\": \"EN\", \"policyURL\": \"https://foo.com/privacy\", \"properties\": [ { \"key\": \"k1\", \"value\": \"v1\" } ]}" + x-wso2-response: | + {"consentReceiptId":"38279263-f385-4252-8966-40998faa95ae","collectionMethod":"Sign-Up","language":"EN","piiPrincipalId":"admin","tenantDomain":"carbon.super"} + x-codegen-request-body-name: consent + /consents/receipts/{receiptId}: + get: + tags: + - Consent + summary: | + Retrieve a consent receipt + description: | + This API is used to retrieve consent using the conset receipt ID. + parameters: + - name: receiptId + in: path + description: The unique identifier of a receipt + required: true + schema: + type: string + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ConsentReceipt' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/receipts/{receipt-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + x-wso2-request: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/receipts/" -H "Authorization: Basic " -H "accept: application/json" + x-wso2-curl: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/receipts/7a6886ab-b02f-424f-9cd4-adf5e92f0798" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" + x-wso2-response: | + {"version":"KI-CR-v1.1.0","jurisdiction":"CA","consentTimestamp":1517742624682,"collectionMethod":"Sign-Up","consentReceiptID":"7a6886ab-b02f-424f-9cd4-adf5e92f0798","publicKey":null,"language":"EN","piiPrincipalId":"testuser","tenantDomain":"carbon.super","state":"ACTIVE","piiControllers":[{"piiController":"sample","contact":"sample","address":{"addressCountry":"USA","addressLocality":"Mountain View","addressRegion":"CA","postOfficeBoxNumber":"233","postalCode":"94043","streetAddress":"1600 Amphitheatre Pkwy"},"email":"sample@abc.com","phone":"+01433444333","onBehalf":false,"piiControllerUrl":"https://sample.piicontroller.url"}],"policyUrl":"https://foo.com/privacy","services":[{"service":"foo-service","tenantDomain":"carbon.super","purposes":[{"purpose":"Contact","purposeCategory":["Legal"],"consentType":"EXPLICIT","piiCategory":[{"piiCategory":"email","validity":"days:30"},{"piiCategory":"username","validity":"days:30"}],"primaryPurpose":true,"termination":"days:30","thirdPartyDisclosure":false,"thirdPartyName":""}]}],"sensitive":false,"spiCat":null} + delete: + tags: + - Consent + summary: | + Revoke consent + description: | + This API is used to revoke consent. + parameters: + - name: receiptId + in: path + description: This represents the Revoke Receipt ID. + required: true + schema: + type: string + responses: + 200: + description: OK + content: {} + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/receipts/{receipt-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + x-wso2-request: | + curl -k -X DELETE "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/receipts/" -H "Authorization: Basic " -H "accept: application/json" + x-wso2-curl: | + curl -k -X DELETE "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/receipts/7a6886ab-b02f-424f-9cd4-adf5e92f0798" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" + x-wso2-response: | + "HTTP/1.1 200 Ok" + /consents/purposes: + get: + tags: + - Purpose + summary: | + Retrieve all purposes + description: | + This API is used to retrieve all purposes. + parameters: + - name: group + in: query + description: Purpose group + schema: + type: string + - name: groupType + in: query + description: Type of the purpose group + schema: + type: string + - name: limit + in: query + description: Number of search results + schema: + type: integer + - name: offset + in: query + description: Start index of the search + schema: + type: integer + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/purposes' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purposes' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + x-wso2-request: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purposes?group=&groupType=limit=&offset=" -H "Authorization: Basic " -H "accept: application/json" -H "Content-Type: application/json" + x-wso2-curl: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purposes?group=SIGNUP&groupType=SYSTEM&limit=10&offset=0" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" -H "Content-Type: application/json" + x-wso2-response: | + [{"purposeId":1,"purpose":"Contact","description":"Contact the user","piiCategories":[]},{"purposeId":2,"purpose":"Marketing","description":"Sending marketing materials"}] +# post: +# tags: +# - Purpose +# summary: | +# Add purpose +# description: | +# This API is used to add a new purpose for consent management. +# requestBody: +# description: This represents the purpose element that needs to be stored. +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/PurposeRequest' +# required: true +# responses: +# 201: +# description: Successful response +# headers: +# Location: +# description: Location of the newly created purpose. +# schema: +# type: string +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/purposeGetResponse' +# 400: +# description: Bad Request +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 401: +# description: Unauthorized +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 409: +# description: Conflict +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 500: +# description: Server Error +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# x-wso2-request: | +# curl -k -X POST "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purposes" -H "Authorization: Basic " -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"purpose\": \"\", \"description\": \"\", \"group\": \"\", \"groupType\": \", \"mandatory\": }]}" +# x-wso2-curl: | +# curl -k -X POST "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purposes" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"purpose\": \"Contact\", \"description\": \"Contact the user\", \"group\": \"SIGNIN\", \"groupType\": \"SYSTEM\", "piiCategories\": {\"piiCategoryId\": 1, \"mandatory\": true}}" +# x-wso2-response: | +# {"purposeId":1,"purpose":"Contact","description":"Contact the user","piiCategories":[{"piiCategoryId":1,"piiCategory":"email","description":"user email","sensitive":false, "mandatory":true},{"piiCategoryId":2,"piiCategory":"username","description":"user name","sensitive":false, "mandatory":false}]} +# x-codegen-request-body-name: purpose + /consents/purposes/{purposeId}: + get: + tags: + - Purpose + summary: | + Retrieve a purpose + description: | + This API is used to retrieve a specific purpose using the purpose ID. + parameters: + - name: purposeId + in: path + description: Id of the purpose + required: true + schema: + type: string + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/purposeGetResponse' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purposes/{purpose-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + x-wso2-request: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purposes/" -H "Authorization: Basic " -H "accept: application/json" -H "Content-Type: application/json" + x-wso2-curl: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purposes/1" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" -H "Content-Type: application/json" + x-wso2-response: | + {"purposeId":1,"purpose":"Contact","description":"Contact the user","piiCategories":[{"piiCategoryId":1,"piiCategory":"email","description":"user email","sensitive":false},{"piiCategoryId":2,"piiCategory":"username","description":"user name","sensitive":false, "mandatory":false}]} +# delete: +# tags: +# - Purpose +# summary: | +# Delete a purpose +# description: | +# This API is used to delete a purpose. +# parameters: +# - name: purposeId +# in: path +# description: Unique ID of the purpose +# required: true +# schema: +# type: string +# responses: +# 200: +# description: OK +# content: {} +# 400: +# description: Bad Request +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 401: +# description: Unauthorized +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 404: +# description: Not Found +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 500: +# description: Server Error +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# x-wso2-request: | +# curl -k -X DELETE "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purposes/" -H "Authorization: Basic " -H "accept: application/json" +# x-wso2-curl: | +# curl -k -X DELETE "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purposes/1" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" +# x-wso2-response: | +# "HTTP/1.1 200 Ok" + /consents/purpose-categories: + get: + tags: + - Purpose Category + summary: | + Retrieve all purpose categories + description: | + This API is used to retrieve all purpose categories. + parameters: + - name: limit + in: query + description: Number of search results + schema: + type: integer + - name: offset + in: query + description: Start index of the search + schema: + type: integer + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/purpseCategories' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purpose-categories' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + x-wso2-request: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purpose-categories?limit=&offset=" -H "Authorization: Basic " -H "accept: application/json" + x-wso2-curl: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purpose-categories?limit=10&offset=0" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" + x-wso2-response: | + [{"purposeCategoryId":1,"purposeCategory":"Marketing","description":"For marketing related activities"},{"purposeCategoryId":2,"purposeCategory":"Legal","description":"For legal requirements"}] +# post: +# tags: +# - Purpose Category +# summary: | +# Add purpose category +# description: | +# This API is used to add a new purpose category for consent management. +# requestBody: +# description: This represents the purpose category name. +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/PurposeCategoryRequest' +# required: true +# responses: +# 201: +# description: Successful response +# headers: +# Location: +# description: Location of the newly created purpose category. +# schema: +# type: string +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/purposeCategoryListResponse' +# 400: +# description: Bad Request +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 401: +# description: Unauthorized +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 409: +# description: Conflict +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 500: +# description: Server Error +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# x-wso2-request: | +# curl -k -X POST "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purpose-categories" -H "Authorization: Basic " -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"purposeCategory\": \"\", \"description\": \"\"}" +# x-wso2-curl: | +# curl -k -X POST "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purpose-categories" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"purposeCategory\": \"Marketing\", \"description\": \"For marketing related activities\"}" +# x-wso2-response: | +# {"purposeCategoryId":1,"purposeCategory":"Marketing","description":"For marketing related activities"} +# x-codegen-request-body-name: purposeCategory + /consents/purpose-categories/{purposeCategoryId}: + get: + tags: + - Purpose Category + summary: | + Retrieve a purpose category + description: | + This API is used to retrieve a purpose category using the purpose category ID. + parameters: + - name: purposeCategoryId + in: path + description: Unique ID of the purpose category + required: true + schema: + type: string + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/purposeCategoryListResponse' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purpose-categories/{purpose-category-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + x-wso2-request: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purpose-categories/" -H "Authorization: Basic " -H "accept: application/json" + x-wso2-curl: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purpose-categories/1" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" + x-wso2-response: | + {"purposeCategoryId":1,"purposeCategory":"Marketing","description":"For marketing related activities"} +# delete: +# tags: +# - Purpose Category +# summary: | +# Delete purpose category +# description: | +# This API is used to delete a purpose category. +# parameters: +# - name: purposeCategoryId +# in: path +# description: Unique ID of the purpose category +# required: true +# schema: +# type: string +# responses: +# 200: +# description: OK +# content: {} +# 400: +# description: Bad Request +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 401: +# description: Unauthorized +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 404: +# description: Not Found +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 500: +# description: Server Error +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# x-wso2-request: | +# curl -k -X DELETE "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purpose-categories/" -H "Authorization: Basic " -H "accept: application/json" +# x-wso2-curl: | +# curl -k -X DELETE "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/purpose-categories/1" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" +# x-wso2-response: | +# "HTTP/1.1 200 Ok" + /consents/pii-categories: + get: + tags: + - PII Category + summary: | + Retrieve all PII categories + description: | + This API is used to retrieve all PII categories. + parameters: + - name: limit + in: query + description: Number of search results + schema: + type: integer + - name: offset + in: query + description: Start index of the search + schema: + type: integer + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/piiCategories' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/pii-categories' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + x-wso2-request: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/pii-categories?limit=&offset=" -H "Authorization: Basic " -H "accept: application/json" + x-wso2-curl: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/pii-categories?limit=10&offset=0" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" + x-wso2-response: | + [{"piiCategoryId":1,"piiCategory":"email","description":"user email","sensitive":false},{"piiCategoryId":2, "piiCategory":"username","description":"user name","sensitive":false}] +# post: +# tags: +# - PII Category +# summary: | +# Add PII category +# description: | +# This API is used to add a new PII category for consent management. +# requestBody: +# description: This represents the PII catogory name. +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/PIIcategoryRequest' +# required: true +# responses: +# 201: +# description: Successful response +# headers: +# Location: +# description: Location of the newly created PII category +# schema: +# type: string +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/piiCategoryListResponse' +# 400: +# description: Bad Request +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 401: +# description: Unauthorized +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 409: +# description: Conflict +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 500: +# description: Server Error +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# x-wso2-request: | +# curl -k -X POST "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/pii-categories" -H "Authorization: Basic " -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"\": }" +# x-wso2-curl: | +# curl -k -X POST "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/pii-categories" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"piiCategory\": \"email\", \"description\": \"user email\", \"sensitive\": false}" +# x-wso2-response: | +# {"piiCategoryId":1,"piiCategory":"email","description":"user email","sensitive":false} +# x-codegen-request-body-name: piiCategory + /consents/pii-categories/{piiCategoryId}: + get: + tags: + - PII Category + summary: | + Retrieve a PII category + description: | + This API is used to retrieve a specific PII category using the PII category ID. + parameters: + - name: piiCategoryId + in: path + description: Unique ID of the PII category + required: true + schema: + type: string + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/piiCategoryListResponse' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/pii-categories/{pii-category-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + x-wso2-request: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/pii-categories/" -H "Authorization: Basic " -H "accept: application/json" + x-wso2-curl: | + curl -k -X GET "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/pii-categories/1" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" + x-wso2-response: | + {"piiCategoryId":1,"piiCategory":"email","description":"user email","sensitive":false} +# delete: +# tags: +# - PII Category +# summary: | +# Delete PII category +# description: | +# This API is used to delete a PII category. +# parameters: +# - name: piiCategoryId +# in: path +# description: Unique ID of the PII category +# required: true +# schema: +# type: string +# responses: +# 200: +# description: OK +# content: {} +# 400: +# description: Bad Request +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 401: +# description: Unauthorized +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 404: +# description: Not Found +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# 500: +# description: Server Error +# content: +# application/json: +# schema: +# $ref: '#/components/schemas/Error' +# x-wso2-request: | +# curl -k -X DELETE "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/pii-categories/" -H "Authorization: Basic " -H "accept: application/json" +# x-wso2-curl: | +# curl -k -X DELETE "https://api.asgardeo.io/t/{organization-name}/api/identity/consent-mgt/v1.0/consents/pii-categories/1" -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "accept: application/json" +# x-wso2-response: | +# "HTTP/1.1 200 Ok" +components: + schemas: + Error: + type: object + properties: + code: + type: string + message: + type: string + description: + type: string + ConsentRequest: + type: object + properties: + services: + type: array + items: + $ref: '#/components/schemas/service' + collectionMethod: + type: string + jurisdiction: + type: string + language: + type: string + policyURL: + type: string + properties: + type: array + items: + $ref: '#/components/schemas/Property' + PurposeRequest: + required: + - purpose + type: object + properties: + purpose: + type: string + description: + type: string + group: + type: string + groupType: + type: string + piiCategories: + type: array + items: + $ref: '#/components/schemas/purposePiiCategoryRequest' + purposePiiCategoryRequest: + type: object + properties: + piiCategoryId: + type: integer + mandatory: + type: boolean + PIIcategoryRequest: + required: + - piiCategory + type: object + properties: + piiCategory: + type: string + description: + type: string + displayName: + type: string + sensitive: + type: boolean +# PurposeCategoryRequest: +# required: +# - purposeCategory +# type: object +# properties: +# purposeCategory: +# type: string +# description: +# type: string + purposes: + type: array + items: + $ref: '#/components/schemas/purposeListResponse' + purpseCategories: + type: array + items: + $ref: '#/components/schemas/purposeCategoryListResponse' + piiCategories: + type: array + items: + $ref: '#/components/schemas/piiCategoryListResponse' + Property: + type: object + properties: + key: + type: string + value: + type: string + ConsentAddResponse: + required: + - consentReceiptID + - piiPrincipalId + - tenantDomain + type: object + properties: + consentReceiptID: + type: string + language: + type: string + piiPrincipalId: + type: string + tenantDomain: + type: string + ConsentResponse: + required: + - consentReceiptID + - piiPrincipalId + - tenantDomain + type: object + properties: + consentReceiptID: + type: string + language: + type: string + piiPrincipalId: + type: string + tenantDomain: + type: string + state: + type: string + spDisplayName: + type: string + spDescription: + type: string + ConsentReceipt: + required: + - collectionMethod + - consentReceiptID + - consentTimestamp + - jurisdiction + - piiControllers + - piiPrincipalId + - policyUrl + - sensitive + - services + - spiCat + - version + type: object + properties: + version: + type: string + description: The version of this specification to which a receipt conforms. + The value MUST be “KI-CR-v1.1.0” for this version of the specification. + jurisdiction: + type: string + description: The jurisdiction(s) applicable to this transaction. + consentTimestamp: + type: integer + description: Date and time of the consent transaction. The JSON value is + expressed as the number of seconds since 1970-01-01 00:00:00 GMT + format: int64 + collectionMethod: + type: string + description: A description of the method by which consent was obtained. + consentReceiptID: + type: string + description: A unique number for each Consent Receipt. + publicKey: + type: string + description: The PII Controller’s public key. + language: + type: string + description: Language in which the consent was obtained as for ISO 639-1:2002 + [ISO 639]. + piiPrincipalId: + type: string + description: PII Principal-provided identifier. E.g., email address. + tenantDomain: + type: string + description: Tenant domain of the service (SP). + state: + type: string + description: Current state of the receipt. + piiControllers: + type: array + description: An array that contains one or more items where each item represents + one PII Controller. + items: + $ref: '#/components/schemas/piiController' + policyUrl: + type: string + description: A link to the PII Controller’s privacy statement/policy and + applicable terms of use in effect when the consent was obtained, and the + receipt was issued. + services: + type: array + description: An array that contains one or more items where each item represents + one Service. + items: + $ref: '#/components/schemas/serviceResponse' + sensitive: + type: boolean + description: Indicates whether the consent interaction contains PII that + is designated sensitive or not sensitive. + spiCat: + type: array + description: A listing of categories where PII data collected is sensitive. + items: + type: string + service: + type: object + properties: + service: + type: string + description: The service or group of services being provided for which PII + is collected. The name of the service for which consent for the collection, + use, and disclosure of PII is being provided. + serviceDisplayName: + type: string + description: display name of the service + serviceDescription: + type: string + description: Description about the service + tenantDomain: + type: string + description: Tenant domain of the SP + purposes: + type: array + items: + $ref: '#/components/schemas/purpose' + serviceResponse: + type: object + properties: + service: + type: string + description: The service or group of services being provided for which PII + is collected. The name of the service for which consent for the collection, + use, and disclosure of PII is being provided. + serviceDisplayName: + type: string + description: display name of the service + serviceDescription: + type: string + description: Description about the service + tenantDomain: + type: string + description: Tenant domain of the SP + purposes: + type: array + items: + $ref: '#/components/schemas/purposeResponse' + purpose: + required: + - purposeCategoryId + - termination + - thirdPartyDisclosure + - thirdPartyName + type: object + properties: + purposeId: + type: integer + description: A unique Id of purpose + purposeCategoryId: + type: array + description: The reason the PII Controller is collecting the PII. + items: + type: integer + consentType: + type: string + description: The type of the consent used by the PII Controller as their + authority to collect, use or disclose PII. + piiCategory: + type: array + description: A list of defined PII categories Ids. + items: + $ref: '#/components/schemas/piiCategoryList' + primaryPurpose: + type: boolean + description: Indicates if a purpose is part of the core service of the PII + Controller. Possible values are TRUE or FALSE. + termination: + type: string + description: Conditions for the termination of consent. Link to policy defining + how consent or purpose is terminated. + thirdPartyDisclosure: + type: boolean + description: Indicates if the PII Controller is disclosing PII to a third + party. Possible values are TRUE or FALSE. + thirdPartyName: + type: string + description: The name or names of the third party to which the PII Processor + may disclose the PII. + purposeResponse: + required: + - piiCategory + - purposeCategory + - termination + - thirdPartyDisclosure + - thirdPartyName + type: object + properties: + purpose: + type: string + description: A short, clear explanation of why the PII item is required. + purposeId: + type: integer + description: Id of the purpose. + purposeCategory: + type: array + description: The reason the PII Controller is collecting the PII. + items: + type: string + consentType: + type: string + description: The type of the consent used by the PII Controller as their + authority to collect, use or disclose PII. + piiCategory: + type: array + description: A list of defined PII categories Ids. PII Category should + reflect the category that will be shared as understood by the PII Principal. + items: + $ref: '#/components/schemas/piiCategoryNameList' + primaryPurpose: + type: boolean + description: Indicates if a purpose is part of the core service of the PII + Controller. Possible values are TRUE or FALSE. + termination: + type: string + description: Conditions for the termination of consent. Link to policy defining + how consent or purpose is terminated. + thirdPartyDisclosure: + type: boolean + description: Indicates if the PII Controller is disclosing PII to a third + party. Possible values are TRUE or FALSE. + thirdPartyName: + type: string + description: The name or names of the third party to which the PII Processor + may disclose the PII. + purposeListResponse: + type: object + properties: + purposeId: + type: integer + purpose: + type: string + description: + type: string + group: + type: string + groupType: + type: string + purposeGetResponse: + type: object + properties: + purposeId: + type: integer + purpose: + type: string + description: + type: string + group: + type: string + groupType: + type: string + piiCategories: + type: array + items: + $ref: '#/components/schemas/purposePiiCategoryListResponse' + purposeCategoryListResponse: + type: object + properties: + purposeCategoryId: + type: integer + purposeCategory: + type: string + description: + type: string + piiCategoryList: + type: object + properties: + piiCategoryId: + type: integer + validity: + type: string + piiCategoryNameList: + type: object + properties: + piiCategoryName: + type: string + piiCategoryId: + type: integer + validity: + type: string + piiCategoryDisplayName: + type: string + piiCategoryListResponse: + type: object + properties: + piiCategoryId: + type: integer + piiCategory: + type: string + description: + type: string + displayName: + type: string + sensitive: + type: boolean + purposePiiCategoryListResponse: + type: object + properties: + piiCategoryId: + type: integer + piiCategory: + type: string + description: + type: string + displayName: + type: string + sensitive: + type: boolean + mandatory: + type: boolean + address: + type: object + properties: + addressCountry: + type: string + addressLocality: + type: string + addressRegion: + type: string + postOfficeBoxNumber: + type: string + postalCode: + type: string + streetAddress: + type: string + description: The physical address of PII controller. Postal address for contacting + the PII Controller. This is compliant with the schema https://schema.org/PostalAddress. + piiController: + required: + - address + - contact + - email + - phone + - piiController + type: object + properties: + piiController: + type: string + description: Name of the first PII Controller who collects the data. This + entity is accountable for compliance with the management of PII. The PII + Controller determines the purpose(s) and type(s) of PII processing. + contact: + type: string + description: Contact name of the PII Controller. This field MUST contain + a non-empty string. + address: + $ref: '#/components/schemas/address' + email: + type: string + description: Contact email address of the PII Controller. The direct email + to contact the PII Controller regarding the consent or privacy contract. + phone: + type: string + description: Contact phone number of the PII Controller. The business phone + number to contact the PII Controller regarding the consent. + onBehalf: + type: boolean + description: A PII Processor acting on behalf of a PII Controller or PII + Processor. For example, a third-party analytics service would be a PII + Processor on behalf of the PII Controller, or a site operator acting on + behalf of the PII Controller. + piiControllerUrl: + type: string + description: A URL for contacting the PII Controller. + parameters: + receiptId: + name: receiptId + in: path + description: The unique identifier of a receipt + required: true + schema: + type: string + limit: + name: limit + in: query + description: Number of search results + schema: + type: integer + offset: + name: offset + in: query + description: Start index of the search + schema: + type: integer + service: + name: service + in: query + description: Service name + schema: + type: string + state: + name: state + in: query + description: State (ACTIVE/REVOKED) + schema: + type: string + spTenantDomain: + name: spTenantDomain + in: query + description: Service provider tenant domain + schema: + type: string + piiPrincipalId: + name: piiPrincipalId + in: query + description: Subject identifier + schema: + type: string + consentIdQuery: + name: consent-id + in: query + description: The unique identifier of a consent + schema: + type: string + collectionMethod: + name: collectionMethod + in: query + description: Collection method of the consent + schema: + type: string + piiCategoryId: + name: piiCategoryId + in: query + description: ID of PII Category that will be shared as understood by the PII + Principal + schema: + type: string + next: + name: next + in: query + description: Next result set + schema: + type: string + previous: + name: previous + in: query + description: Previous result set + schema: + type: string + group: + name: group + in: query + description: Purpose group + schema: + type: string + groupType: + name: groupType + in: query + description: Type of the purpose group + schema: + type: string \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/email-template.yaml b/docusaurus-asgardeo/static/apis/restapis/email-template.yaml new file mode 100644 index 0000000000..344fe21b78 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/email-template.yaml @@ -0,0 +1,692 @@ +openapi: 3.0.0 +info: + version: "v1" + title: Asgardeo - Email Templates API + description: + "This is the RESTful API for managing email templates in WSO2 Asgardeo. This API allows adding, retrieving, replacing, and removing email + templates and template types. + \n To access the email template APIs in Asgardeo, you need to first [get an access token](https://wso2.com/asgardeo/docs/apis/authentication/#get-an-access-token) from your organization." +tags: + - name: Email template types + description: An email template type can have multiple email templates for different languages. + - name: Email templates + description: An email template of a specific type and language. +security: + - OAuth2: [] +paths: + /email/template-types: + get: + tags: + - Email template types + summary: Get email template types + operationId: getAllEmailTemplateTypes + description: | + Retrieves all the email template types in your organization, with limited details of the email templates. + + Scopes required: `internal_email_mgt_view` + parameters: + # - $ref: '#/components/parameters/limitQueryParam' + # - $ref: '#/components/parameters/offsetQueryParam' + # - $ref: '#/components/parameters/sortOrderQueryParam' + # - $ref: '#/components/parameters/sortByQueryParam' + - $ref: '#/components/parameters/requiredAttributesQueryParam' + responses: + '200': + description: Results matching the request criteria + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/EmailTemplateTypeWithoutTemplates' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/email/template-types' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Email template types + summary: Add email template type + operationId: addEmailTemplateType + description: | + Adds a new email template type to your organization. An email template type can have any number of email templates.
+ + * Note that the _**displayName**_ attribute of the template type should be unique.
+ + Scopes required: `internal_email_mgt_create` + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailTemplateType' + description: Use the following parameters in your request body to define your new email template type. + responses: + '201': + description: Item Created + headers: + self: + description: Location of the newly created identity provider. + schema: + type: string + content: + 'application/json': + schema: + $ref: '#/components/schemas/EmailTemplateTypeWithoutTemplates' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/email/template-types' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "displayName": "Account Confirmation", + "templates": [ + { + "contentType": "text/html", + "subject": "WSO2 - Account Confirmation", + "body": "HTML Body", + "footer": "WSO2 Asgardeo Team", + "id": "en_US" + } + ] + }' + /email/template-types/{template-type-id}: + delete: + tags: + - Email template types + summary: Remove email template type + operationId: deleteEmailTemplateType + description: | + Removes an existing email template type with all its email templates + from your organization.
+ + Scopes required: `internal_email_mgt_delete` + + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + responses: + '204': + $ref: '#/components/responses/Deleted' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/email/template-types/{email-template-type-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + get: + tags: + - Email templates + summary: Get email templates per type + operationId: getEmailTemplateType + description: | + Retrieves an email template type (matching the template type ID) including all of its email templates.
+ +
Scopes required: `internal_email_mgt_view` + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + #- $ref: '#/components/parameters/templateTypeIdPathParam' + #- $ref: '#/components/parameters/limitQueryParam' + #- $ref: '#/components/parameters/offsetQueryParam' + #- $ref: '#/components/parameters/sortOrderQueryParam' + #- $ref: '#/components/parameters/sortByQueryParam' + responses: + '200': + description: Results matching the request criteria + content: + 'application/json': + schema: + $ref: '#/components/schemas/EmailTemplateTypeWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/email/template-types/{email-template-type-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Email templates + summary: Add email template + operationId: addEmailTemplate + description: | + Adds a new email template to a template type. Note that the template ID is the locale and it be unique for the template type. You cannot have two templates with the same locale for a template type. + + Scopes required:
`internal_email_mgt_create` + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailTemplateWithID' + description: Use the following parameters in your request body to define your new email template type. + responses: + '201': + description: Item Created + headers: + Location: + description: Location of the newly created identity provider + schema: + type: string + content: + 'application/json': + schema: + $ref: '#/components/schemas/SimpleEmailTemplate' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/email/template-types/{email-template-type-id}' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "contentType": "text/html", + "subject": "WSO2 - Account Confirmation", + "body": "HTML Body", + "footer": "WSO2 Asgardeo Team", + "id": "en_US" + }' + put: + tags: + - Email templates + summary: Replace all email templates + operationId: updateEmailTemplateType + description: | + Replaces all the email templates of the respective email template type with + the newly provided email templates.
+ + Scopes required: `internal_email_mgt_update` + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/EmailTemplateWithID' + description: Use the following parameters in your request body. These parameter values will replace all the content in all the existing templates for the template type. + responses: + '200': + $ref: '#/components/responses/Updated' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/email/template-types/{email-template-type-id}' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '[ + { + "contentType": "text/html", + "subject": "WSO2 - Account Confirmation", + "body": "HTML Body", + "footer": "WSO2 Asgardeo Team", + "id": "en_US" + } + ]' + '/email/template-types/{template-type-id}/templates': + get: + tags: + - Email templates + summary: List email templates per type + operationId: getTemplatesListOfEmailTemplateType + description: | + Retrieves the list of email templates for the template type ID.
+ + Scopes required: `internal_email_mgt_view` + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + #- $ref: '#/components/parameters/limitQueryParam' + #- $ref: '#/components/parameters/offsetQueryParam' + #- $ref: '#/components/parameters/sortOrderQueryParam' + #- $ref: '#/components/parameters/sortByQueryParam' + responses: + '200': + description: Results matching the request criteria + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/SimpleEmailTemplate' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/email/template-types/{email-template-type-id}/templates' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + '/email/template-types/{template-type-id}/templates/{template-id}': + get: + tags: + - Email templates + summary: Get an email template + operationId: getEmailTemplate + description: | + Retrieves the email template that matches the specified template ID and template type.
+ + Scopes required: `internal_email_mgt_view` + + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/templateIdPathParam' + #- $ref: '#/components/parameters/limitQueryParam' + #- $ref: '#/components/parameters/offsetQueryParam' + #- $ref: '#/components/parameters/sortOrderQueryParam' + #- $ref: '#/components/parameters/sortByQueryParam' + responses: + '200': + description: Results matching the request criteria + content: + 'application/json': + schema: + $ref: '#/components/schemas/EmailTemplateWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/email/template-types/{email-template-type-id}/templates/{template-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Email templates + summary: Replace an email template + operationId: updateEmailTemplate + description: | + Replaces the email template identified by the template ID and template type.
+ + Scopes required: `internal_email_mgt_update` + + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/templateIdPathParam' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailTemplateWithID' + description: Email templates for the template type + responses: + '200': + $ref: '#/components/responses/Updated' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/email/template-types/{email-template-type-id}/templates/{template-id}' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "contentType": "text/html", + "subject": "WSO2 - Account Confirmation", + "body": "HTML Body", + "footer": "WSO2 Asgardeo Team", + "id": "en_US" + }' + delete: + tags: + - Email templates + summary: Remove email template + operationId: deleteEmailTemplate + description: | + Removes an email template identified by the template ID and template type.
+ + Scopes required: `internal_email_mgt_delete` + + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/templateIdPathParam' + responses: + '204': + $ref: '#/components/responses/Deleted' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/email/template-types/{email-template-type-id}/templates/{template-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' +servers: + - url: 'https://api.asgardeo.io/t/{org-name}/api/server/v1' + variables: + tenant-domain: + default: unknown + +components: + parameters: + templateTypeIdPathParam: + in: path + name: template-type-id + required: true + description: The ID of the email template type. + schema: + type: string + templateIdPathParam: + in: path + name: template-id + required: true + description: Email template ID. This should be a valid locale. + schema: + type: string + offsetQueryParam: + in: query + name: offset + description: >- + Number of records to skip for pagination. This option is not yet + supported. + schema: + type: integer + format: int32 + minimum: 0 + limitQueryParam: + in: query + name: limit + description: >- + Maximum number of records to return. This option is not yet + supported. + schema: + type: integer + format: int32 + minimum: 0 + sortOrderQueryParam: + in: query + name: sortOrder + required: false + description: >- + Define the order in which the retrieved records should be sorted. This + option is not yet supported. + schema: + type: string + enum: + - asc + - desc + sortByQueryParam: + in: query + name: sortBy + required: false + description: >- + Attribute by which the retrieved records should be sorted. This + option is not yet supported. + schema: + type: string + requiredAttributesQueryParam: + in: query + name: requiredAttributes + required: false + description: >- + Specifies the required parameters in the response. See the response schema for the complete list of parameters your can get in the response.

By default, all the required parameters (in the response schema) will be returned. Use this parameter to specify additional attributes that you need in the response. + schema: + type: string + responses: + NotFound: + description: The specified resource is not found + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Unauthorized + Forbidden: + description: Forbidden + ServerError: + description: Internal Server Error + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + InvalidInput: + description: Invalid input request + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Conflict: + description: Item Already Exists + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Deleted: + description: Item Deleted + Updated: + description: Item Updated + securitySchemes: + OAuth2: + type: oauth2 + flows: + clientCredentials: + tokenUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + scopes: + internal_email_mgt_view: Grants read access + internal_email_mgt_create: Grants write access + internal_email_mgt_delete: Grants permission to delete records + internal_email_mgt_update: Grants permission to update existing records + + schemas: + EmailTemplateTypeWithoutTemplates: + type: object + required: + - id + - displayName + - self + properties: + id: + type: string + example: YWNjb3VudGNvbmZpcm1hdGlvbg + description: Unique ID of the email template type. + displayName: + type: string + example: Account Confirmation + description: Display name of the email template type. + templates: + type: array + description: Email templates for the template type. This is the HTML template of the email body. + items: + $ref: '#/components/schemas/EmailTemplateWithID' + self: + type: string + example: /t/{tenant-domain}/api/server/v1/email/template-types/YWNjb3VudGNvbmZpcm1hdGlvbg + description: Location of the created/updated resource. + EmailTemplateType: + type: object + required: + - displayName + - templates + properties: + displayName: + type: string + example: Account Confirmation + description: The unique display name of the email template type. + templates: + type: array + description: Email templates for the template type. + items: + $ref: '#/components/schemas/EmailTemplateWithID' + EmailTemplateTypeWithID: + allOf: + - $ref: '#/components/schemas/EmailTemplateType' + - required: + - id + properties: + id: + type: string + example: YWNjb3VudGNvbmZpcm1hdGlvbg + description: Unique ID of the email template type. + EmailTemplate: + type: object + required: + - contentType + - subject + - body + - footer + properties: + contentType: + type: string + example: text/html + description: Content type of the email template. + subject: + type: string + example: WSO2 - Account Confirmation + description: The subject of the email. + body: + type: string + example: HTML Body + description: The body (HTML) of the email. + footer: + type: string + example: WSO2 Asgardeo Team + description: The footer of the email. + EmailTemplateWithID: + allOf: + - $ref: '#/components/schemas/EmailTemplate' + - required: + - id + properties: + id: + type: string + example: en_US + description: >- + Unique ID of the email template. This ID represents the locale of the email template. + SimpleEmailTemplate: + type: object + required: + - id + - self + properties: + id: + type: string + example: en_US + description: >- + Unique ID of the email template. This ID represents the locale of the email template. + self: + type: string + example: /t/{tenant-domain}/api/server/v1/email/template-types/YWNjb3VudGNvbmZpcm1hdGlvbg/templates/en_US + description: Location of the created/updated resource. + + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: ET0001 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: TR0001 \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/end-user-credential-management.yaml b/docusaurus-asgardeo/static/apis/restapis/end-user-credential-management.yaml new file mode 100644 index 0000000000..51626a6f6e --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/end-user-credential-management.yaml @@ -0,0 +1,198 @@ +openapi: 3.0.0 +info: + description: | + The Credential Management REST API provides a comprehensive interface to list and delete + credentials enrolled by end-users within the WSO2 Identity Server. The administrators who are assigned with privileges to list and delete + users (with scopes internal_user_mgt_view and internal_user_mgt_delete) are able to perform these operations. This API currently supports passkey and push + authentication credentials. + + version: '1.0' + title: WSO2 Identity Server - User Credential Management Rest API + +security: + - OAuth2: [] + - BasicAuth: [] + +servers: + - url: https://{server-url}/t/{tenant-domain}/api/server/v1 + variables: + tenant-domain: + default: carbon.super + server-url: + default: localhost:9443 + +paths: + /users/{user-id}/credentials: + get: + summary: List end-user enrolled credentials + description: "Retrieves a list of all user-enrolled credentials. + \n\n Scope (Permission) required: ``internal_user_mgt_view``\n\n" + operationId: getUserCredentialsById + tags: + - List User Credentials + parameters: + - name: user-id + in: path + description: The unique identifier of the user. + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Credential' + examples: + response: + value: + [ + { + "credentialId": "TJwhlvGKrEk7xSSKLrhoCsaA", + "displayName": "My Security Key", + "type": "PASSKEY" + }, + { + "credentialId": "996a12a0-b9aab-48ab-8016-d0ffd99ebe1b", + "displayName": "My phone", + "type": "PUSH_AUTH" + } + ] + '400': + description: Bad Request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: User Not Found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + + /users/{user-id}/credentials/{type}/{credential-id}: + delete: + summary: Delete a user-enrolled credential. + description: "Deletes a specific enrolled credential for a user. + \n\n Scope (Permission) required: ``internal_user_mgt_delete``\n\n" + operationId: deleteUserCredentialById + tags: + - Delete User Credential + parameters: + - name: user-id + in: path + description: The unique identifier of the user. + required: true + schema: + type: string + - name: type + in: path + description: The type of the credential. + required: true + schema: + type: string + enum: [passkey, push-auth] + - name: credential-id + in: path + description: The unique identifier of the device to be deleted. + required: true + schema: + type: string + responses: + '204': + description: User Credential Deleted. + '400': + description: Bad Request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' +components: + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://localhost:9443/oauth2/authorize' + tokenUrl: 'https://localhost:9443/oauth2/token' + scopes: + read: internal_user_mgt_view + delete: internal_user_mgt_delete + schemas: + Credential: + type: object + properties: + credentialId: + type: string + description: The unique identifier for the credential. + example: 'a5a81c76-27a3-42d4-82a8-55285d82a4a1' + displayName: + type: string + description: A user-friendly name for the credential. + example: "YubiKey 5C" + type: + type: string + description: The type of the credential. + enum: [passkey, push-auth] + Error: + type: object + properties: + code: + type: string + description: Some error description. + example: 'CM-00001' + message: + type: string + description: Some error message. + example: 'Some error message.' + description: + type: string + description: A more detailed explanation of the error. + example: 'Some error description.' + traceId: + type: string + description: The unique identifier for the request. + example: '8a5f5d4e-1d2c-4f3b-9c6e-7d8f9a0b1c2d' diff --git a/docusaurus-asgardeo/static/apis/restapis/event-configuration.yaml b/docusaurus-asgardeo/static/apis/restapis/event-configuration.yaml new file mode 100644 index 0000000000..e0d10781ef --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/event-configuration.yaml @@ -0,0 +1,349 @@ +openapi: 3.0.0 +info: + version: "v1" + title: Asgardeo - Event Configuration Management API + description: "This document specifies a RESTful API for managing event publisher configurations in Asgardeo." +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/event-configurations/v1' +security: + - OAuth2: [] +paths: + '/events': + get: + tags: + - Events Configurations + summary: Retrieve all events. + description: | + This API provides capability to retrieve all events of the Asgardeo event publisher.
+ + Permissions required:
+ * /permission/admin/manage/identity/eventconfig/view + + Scopes required:
+ * internal_event_config_view + operationId: getEvents + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: '#/components/schemas/EventsList' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/%7Borganization-name%7D/api/event-configurations/v1/events' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Events Configurations + summary: Update multiple events. + description: | + This API provides the capability to enable/ disable multiple events for the Asgardeo event publisher.
+ You need to send the complete list of events in order for it to be accepted as a valid request.
+ + Permissions required:
+ * /permission/admin/manage/identity/eventconfig/update + + Scopes required:
+ * internal_event_config_update + operationId: replaceEvents + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EventsList' + description: | + Represents the request to configure event publishing for multiple events. You can pass an array of Event objects. + required: true + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: '#/components/schemas/EventsList' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/%7Borganization-name%7D/api/event-configurations/v1/events' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '[ + { + "eventName": "registrations.addUser", + "eventSchema": "urn:ietf:params:registrations:addUser", + "displayName": "Add user event", + "category": "Registration events", + "publish": true + } + ]' + /events/{eventName}: + get: + tags: + - Event Configurations + summary: Retrieve event publishing configuration by event name. + description: | + This API provides the capability to retrieve Asgardeo event publisher configuration by event name.
+ + Permissions required:
+ * /permission/admin/manage/identity/eventconfig/view + + Scopes required:
+ * internal_event_config_view + operationId: getEventConfig + parameters: + - name: eventName + in: path + description: Name of the event + example: "registrations.addUser" + required: true + schema: + type: string + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: '#/components/schemas/EventConfigurationResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/%7Borganization-name%7D/api/event-configurations/v1/events/{event-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Event Configurations + summary: Configure event publishing configuration by event name. + description: | + This API provides the capability to configure Asgardeo event publisher configuration by event name.
+ + Permissions required:
+ * /permission/admin/manage/identity/eventconfig/update + + Scopes required:
+ * internal_event_config_update + operationId: replaceEventConfig + parameters: + - name: eventName + in: path + description: Name of the event + example: "registrations.addUser" + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EventConfigurationObject' + description: | + Represents the request to configure event publishing of the event. You can configure event properties by passing an array of key/ value pair objects. + required: true + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: '#/components/schemas/EventConfigurationResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/%7Borganization-name%7D/api/event-configurations/v1/events/{event-name}' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "publish": true, + "properties": [ + { + "key": "attribute1", + "value": "value1" + } + ] + }' +components: + schemas: + Event: + type: object + required: + - eventName + - publish + - eventSchema + properties: + eventName: + type: string + example: "registrations.addUser" + eventSchema: + type: string + example: "urn:ietf:params:registrations:addUser" + displayName: + type: string + example: "Add user event" + category: + type: string + example: "Registration events" + publish: + type: boolean + example: true + EventsList: + type: array + items: + $ref: '#/components/schemas/Event' + EventProperty: + type: object + required: + - key + - value + properties: + key: + type: string + example: "attribute1" + value: + type: object + example: "value1" + EventConfigurationObject: + type: object + required: + - publish + - properties + properties: + publish: + type: boolean + example: true + properties: + type: array + items: + $ref: '#/components/schemas/EventProperty' + EventConfigurationResponse: + type: object + required: + - eventSchema + - category + - displayName + - publish + - properties + properties: + eventSchema: + type: string + example: "urn:ietf:params:registrations:addUser" + category: + type: string + example: "Registration events" + displayName: + type: string + example: "Add user event" + publish: + type: boolean + example: true + properties: + type: array + items: + $ref: '#/components/schemas/EventProperty' + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: ASG-ECM-10001 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: "e0fbcfeb-3617-43c4-8dd0-7b7d38e13047" + responses: + BadRequest: + description: Invalid input request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Unauthorized. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Forbidden: + description: Resource forbidden. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Resource not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + securitySchemes: + OAuth2: + type: oauth2 + flows: + clientCredentials: + tokenUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/token + scopes: + internal_event_config_view: Grant permissions to view event configurations. + internal_event_config_update: Grant permissions to update event configurations. diff --git a/docusaurus-asgardeo/static/apis/restapis/export-user-info.yaml b/docusaurus-asgardeo/static/apis/restapis/export-user-info.yaml new file mode 100644 index 0000000000..1ae0ce97f7 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/export-user-info.yaml @@ -0,0 +1,125 @@ +openapi: 3.0.0 + +info: + description: | + This is the RESTful API for users to export their profile information stored in Asgardeo. + version: "v1" + title: "Asgardeo - Export user profile information API" +servers: +- url: https://api.asgardeo.io/t/{organization-name}/api/identity/user/v1.0 + +security: + - OAuth2: [] + +tags: +- name: me + description: Operations for the authenticated user. + +paths: + /me: + get: + tags: + - me + summary: Export user profile + description: + "This API is used to export the user's information as a `.json` file.\n\n Scope required:``internal_login``" + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/UserProfile' + 401: + description: Unauthorized + 403: + description: Resource Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/api/identity/user/v1.0/me' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: "some_error_code" + message: + type: string + example: "Some Error Message" + description: + type: string + example: "Some Error Description" + traceId: + type: string + example: "Some Correlation for Error Instance" + + UserProfile: + type: object + properties: + user_profile: + type: object + properties: + emailVerified: + type: boolean + description: Specify if the user's email address is verified. + example: "true" + backupCodeEnabled: + type: boolean + description: Specifies if the user has enabled backup codes for login. + example: "false" + givenname: + type: string + description: User's first name. + example: "John" + created: + type: string + description: The date and time the user profile was created. + example: "2022-08-24T13:14:53.699037Z" + modified: + type: string + description: Last modified date and time of the user profile. + example: "2023-05-03T09:45:46.064920Z" + emailaddress: + type: string + description: User's email address. + example: "johnd@bifrost.com" + userid: + type: string + description: Unique identifier of the user. + example: "ba21bad4-****-****-****-0a993c753721" + totpEnabled: + type: boolean + description: Specifies if the user has enabled TOTP for login. + example: "true" + username: + type: string + description: Username of the user. If a username is not configured, it will be the user's email address. + example: "johnd@bifrost.com" + lastname: + type: string + description: The last name of the user. + example: "Doe" + + securitySchemes: + OAuth2: + type: oauth2 + description: "You can use the following OAuth grant type to securely access the respective API endpoints. + \n\n **Authorization Code OAuth Flow** + \n\n Authorization URL: 'https://api.asgardeo.io/t/{org-name}/oauth2/authorize' + \n\n This flow type is used for the ```me``` endpoint of TOTP APIs. You can use the following scope for this endpoint. + \n\n - ```internal_login```: Grant permission for an authenticated user for self-management." \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/extend-sessions.yaml b/docusaurus-asgardeo/static/apis/restapis/extend-sessions.yaml new file mode 100644 index 0000000000..b7d7ee18f9 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/extend-sessions.yaml @@ -0,0 +1,110 @@ +openapi: 3.0.0 +info: + version: 1.0.0 + title: Asgardeo - User session extension API + description: + "You can use this API to extend the user's session at Asgardeo. \n + To identify the session that needs to be extended, this API requires one of the following: \n +
    +
  • Session identifier as a request parameter: This method is ideal in cases where third-party cookies have been blocked. This can be obtained from the ID token.
  • +
  • Session identifier as a cookie: The session identifier used in this method is the commonAuthId value of the session cookie.
  • +
" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}' +paths: + /identity/extend-session: + get: + summary: Extend user sessions + description: "This API is used to extend the Asgardeo session of a user. To identify the session that needs to be extended, this API requires one of the following: \n +
    +
  • Session identifier as a request parameter: If you are using this method, you need to include the session identifier as a query parameter in the request. You can obtain the session identifier from the ID token.
  • +
  • Session identifier as a cookie: If you are using this method, you need to include the session identifier as a cookie. This is the commonAuthId cookie.
  • +
" + parameters: + - name: idpSessionKey + in: query + description: Decode the ID token and obtain the `isk` claim value to do this. The `isk` value is the session's identifier. + required: true + schema: + type: string + - name: commonAuthId + in: cookie + description: Use the commonAuthId value as the session identifier in the cookie section of the request. This value can be obtained from the session cookie generated for the session. + schema: + type: string + responses: + '200': + description: Successful response. + headers: + Location: + description: This denotes the session is successfully extended. + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorRequest' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorServer' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/%7Borganization-name%7D/identity/extend-session?idpSessionKey={isk}' \ + -H 'accept: */*' \ + -H 'Cookie: commonAuthId={common-auth-id}' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + ErrorServer: + type: object + properties: + code: + type: string + example: ISE-65001 + message: + type: string + example: Unexpected server error + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + ErrorRequest: + type: object + properties: + code: + type: string + description: + "The possible error codes are as follows: +
    +
  • ISE-60001
  • +
  • ISE-60002
  • +
  • ISE-60003
  • +
  • ISE-60004
  • +
" + example: ISE-60002 + message: + type: string + description: + "The error messages respective to each code are as follows: +
    +
  • ISE-60001: Invalid request
  • +
  • ISE-60002: Session Key param value invalid
  • +
  • ISE-60003: Session cookie invalid
  • +
  • ISE-60004: Session not available / already expired
  • +
" + example: Session Key param value invalid + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/identity-governance.yaml b/docusaurus-asgardeo/static/apis/restapis/identity-governance.yaml new file mode 100644 index 0000000000..3383d5edb4 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/identity-governance.yaml @@ -0,0 +1,501 @@ +openapi: 3.0.0 +info: + description: >- + This is the RESTful API for identity governance configurations in Asgardeo. + version: "v1" + title: Asgardeo - Governance Connectors Admin API +tags: + - name: Management + description: Secured Admin-only calls +security: + - OAuth2: [] +paths: + /identity-governance/: + get: + tags: + - Management + summary: Get connector categories + operationId: getCategories + description: "Retrieve governance connector categories.\n\n Scope required: ``internal_governance_view``" + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/sortQueryParam' + responses: + '200': + description: Governance connector categories. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/CategoriesRes' + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-governance/' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-governance/{category-id}: + get: + tags: + - Management + summary: Get connectors of a category + operationId: getConnectorCategory + description: "Retrieve governance connectors of a category. \n\n Scope required: ``internal_governance_view``" + parameters: + - $ref: '#/components/parameters/categoryIdPathParam' + responses: + '200': + description: Requested governance connector category. + content: + application/json: + schema: + $ref: '#/components/schemas/CategoryRes' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-governance/{category-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-governance/{category-id}/connectors: + get: + tags: + - Management + summary: Get connectors of a category + operationId: getConnectorsOfCategory + description: "Retrieve governance connectors of a category.\n\n Scope required: ``internal_governance_view``" + parameters: + - $ref: '#/components/parameters/categoryIdPathParam' + responses: + '200': + description: Requested governance connector category. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ConnectorRes' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-governance/{category-id}/connectors' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Management + summary: Patch connectors of a category + operationId: patchConnectorsOfCategory + description: "Patch the governance connectors of a category. \n\n Scope required: ``internal_idp_update``" + parameters: + - $ref: '#/components/parameters/categoryIdPathParam' + responses: + '200': + $ref: '#/components/responses/OK' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-governance/{category-id}/connectors' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "operation": "UPDATE", + "connectors": [ + { + "id": "c3VzcGVuc2lvbi5ub3RpZmljYXRpb24", + "properties": [ + { + "name": "suspension.notification.enable", + "value": "false" + } + ] + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MultipleConnectorsPatchReq' + description: Governance connectors and properties to update + required: true + /identity-governance/{category-id}/connectors/{connector-id}: + get: + tags: + - Management + summary: Get a governance connector + operationId: getConnector + description: "Retrieve governance connector. \n\n Scope required: ``internal_governance_view``" + parameters: + - $ref: '#/components/parameters/categoryIdPathParam' + - $ref: '#/components/parameters/connectorIdPathParam' + responses: + '200': + description: Requested governance connector. + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectorRes' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-governance/{category-id}/connectors/{connector-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Management + summary: Patch a governance connector + operationId: patchConnector + description: "Patch governance connector. \n\n Scope required: ``internal_governance_update``" + parameters: + - $ref: '#/components/parameters/categoryIdPathParam' + - $ref: '#/components/parameters/connectorIdPathParam' + responses: + '200': + $ref: '#/components/responses/OK' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-governance/{category-id}/connectors/{connector-id}' \ + -H 'accept: */*' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "operation": "UPDATE", + "properties": [ + { + "name": "suspension.notification.enable", + "value": "false" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectorsPatchReq' + description: governance-connector to update +servers: + - url: https://api.asgardeo.io/t/{organization-name}/api/server/v1 +components: + parameters: + limitQueryParam: + in: query + name: limit + required: false + description: Maximum number of records to return. + schema: + type: integer + format: int32 + offsetQueryParam: + in: query + name: offset + required: false + description: Number of records to skip for pagination. + schema: + type: integer + format: int32 + filterQueryParam: + in: query + name: filter + required: false + description: Condition to filter the retrieval of records. + schema: + type: string + sortQueryParam: + in: query + name: sort + required: false + description: Define the order in which the retrieved records should be sorted. + schema: + type: string + categoryIdPathParam: + in: path + name: category-id + required: true + description: Id of the connector category. + schema: + type: string + connectorIdPathParam: + in: path + name: connector-id + required: true + description: Id of the connector. + schema: + type: string + responses: + Unauthorized: + description: Unauthorized. + ServerError: + description: Internal Server Error. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Not Found. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + InvalidInput: + description: Bad Request. + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + OK: + description: OK. + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} + schemas: + CategoriesRes: + type: object + description: Governance connector category response. + properties: + id: + type: string + description: Connector category id. + example: QWNjb3VudCBNYW5hZ2VtZW50IFBvbGljaWVz + name: + type: string + description: Connector category name. + example: Account Management Policies + self: + type: string + description: Path to retrieve the full connector information. + example: /t/{organization-name}/api/server/v1/identity-governance/QWNjb3VudCBNYW5hZ2VtZW50IFBvbGljaWVz + connectors: + type: array + description: Connectors of the category with minimal attributes. + items: + $ref: '#/components/schemas/CategoryConnectorsRes' + CategoryConnectorsRes: + type: object + description: Governance connector response with minimal attributes. + properties: + id: + type: string + description: Connector id. + example: c3VzcGVuc2lvbi5ub3RpZmljYXRpb24 + self: + type: string + description: Path to retrieve the full connector information. + example: /t/{organization-name}/api/server/v1/identity-governance/QWNjb3VudCBNYW5hZ2VtZW50IFBvbGljaWVz/connectors/c3VzcGVuc2lvbi5ub3RpZmljYXRpb24 + CategoryRes: + type: object + description: Governance connector category response. + properties: + name: + type: string + description: Connector category name. + example: Account Management Policies + connectors: + type: array + description: Connectors of the category with minimal attributes. + items: + $ref: '#/components/schemas/ConnectorRes' + ConnectorRes: + type: object + description: Governance connector response. + properties: + id: + type: string + description: Connector id. + example: c3VzcGVuc2lvbi5ub3RpZmljYXRpb24 + name: + type: string + description: Connector name. + example: suspension.notification + category: + type: string + description: Connector category. + example: Account Management Policies + friendlyName: + type: string + description: Connector friendly name. + example: Lock Idle Accounts + order: + type: integer + description: Connector order. + example: 0 + subCategory: + type: string + description: Connector subcategory. + example: DEFAULT + properties: + type: array + description: Define any additional properties if required. + items: + $ref: '#/components/schemas/PropertyRes' + PropertyRes: + type: object + description: Governance connector property. + properties: + name: + type: string + description: Property name. + example: suspension.notification.enable + value: + type: string + description: Property value. + example: 'false' + displayName: + type: string + description: Property display name. + example: Enable + description: + type: string + description: Property description. + example: Enable account suspend notifications. + ConnectorsPatchReq: + type: object + description: Governance connector property patch request. + required: + - operation + - properties + properties: + operation: + type: string + description: Governance connector properties patch operation. + enum: + - UPDATE + example: UPDATE + properties: + type: array + description: Governance connector properties to patch. + items: + $ref: '#/components/schemas/PropertyReq' + MultipleConnectorsPatchReq: + type: object + description: Multiple governance connectors properties patch request. + required: + - operation + - connectors + properties: + operation: + type: string + description: Governance connector properties patch operation. + enum: + - UPDATE + example: UPDATE + connectors: + type: array + description: Governance connectors to patch + items: + $ref: '#/components/schemas/ConnectorReq' + ConnectorReq: + type: object + description: Governance connector to patch + required: + - id + - properties + properties: + id: + type: string + description: Connector id. + example: c3VzcGVuc2lvbi5ub3RpZmljYXRpb24 + properties: + type: array + description: Governance connector properties to patch. + items: + $ref: '#/components/schemas/PropertyReq' + PropertyReq: + type: object + description: Governance connector property to patch. + required: + - name + - value + properties: + name: + type: string + description: Property name. + example: suspension.notification.enable + value: + type: string + description: Property value. + example: 'false' + Error: + type: object + required: + - code + - message + properties: + code: + type: string + description: The error code received. + example: AAA-00000 + message: + type: string + description: The displayed error message. + example: Some Error Message + description: + type: string + description: The description of the error that occurred. + example: Some Error Description + traceId: + type: string + description: An identifier to trace the error. + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 diff --git a/docusaurus-asgardeo/static/apis/restapis/identity-verification-providers.yaml b/docusaurus-asgardeo/static/apis/restapis/identity-verification-providers.yaml new file mode 100644 index 0000000000..feb8409858 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/identity-verification-providers.yaml @@ -0,0 +1,578 @@ +openapi: 3.0.3 +info: + title: Identity Verification Provider Management API + description: |- + This document specifies an **Identity Verification Provider Management RESTful API** for **Asgardeo**. The APIs provide the capability to add/update/delete/update identity verification providers. + version: "v1" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' +security: + - OAuth2: [] + - BasicAuth: [] +paths: + /idv-providers: + get: + tags: + - Identity Verification Providers + summary: | + List identity verification providers + description: > + This API provides the capability to retrieve the list of identity + verification providers.
+ Scope(Permission) required: `internal_idvp_view` + operationId: getIdVProviders + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/filterQueryParam' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/IdVProviderListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/idv-providers?limit={limit}&offset={offset}&filter={filter}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Identity Verification Providers + summary: | + Add a new identity verification provider. + description: > + This API provides the capability to add an identity verification provider.
+ Scope(Permission) required: `internal_idvp_add` + operationId: addIdVProvider + responses: + '201': + description: Successful response + headers: + Location: + description: Location of the newly created identity provider. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/IdVProviderResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IdVProviderRequest' + description: This represents the identity provider to be created. + required: true + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/idv-providers' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "name": "{provider_name}", + "type": "{provider_type}", + "description": "{provider_description}", + "attributes": [ + { + "key": "{attribute_key}", + "value": "{attribute_value}" + } + ] + }' + /idv-providers/{idv-provider-id}: + get: + tags: + - Identity Verification Providers + summary: | + Retrieve identity verification provider by identity verification provider's ID + description: > + This API provides the capability to retrieve the identity verification provider + details by using its ID. + Permission required:
+ * /permission/admin/manage/identity/idvp/view
+ Scope required:
+ * internal_idvp_view + operationId: getIdVProvider + parameters: + - name: idv-provider-id + in: path + description: ID of the identity verification provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/IdVProviderResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/idv-providers/{idv-provider-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Identity Verification Providers + summary: > + Update an identity verification provider. + description: > + This API provides the capability to update an identity verification provider
+ Scope(Permission) required: `internal_idvp_update` + operationId: updateIdVProviders + parameters: + - name: idv-provider-id + in: path + description: ID of the identity verification provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated identity provider. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/IdVProviderResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IdVProviderRequest' + required: true + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/idv-providers/{idv-provider-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "name": "{provider_name}", + "type": "{provider_type}", + "description": "{provider_description}", + "attributes": [ + { + "key": "{attribute_key}", + "value": "{attribute_value}" + } + ] + }' + delete: + tags: + - Identity Verification Providers + summary: | + Delete an identity verification provider by using the identity provider's ID. + description: > + This API provides the capability to delete an identity verification provider by + giving its ID.
+ Scope(Permission) required: `internal_idvp_delete` + operationId: deleteIdVProvider + parameters: + - name: idv-provider-id + in: path + description: ID of the identity verification provider. + required: true + schema: + type: string + responses: + '204': + description: Successfully Deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/idv-providers/{idv-provider-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /extensions/identity-verification-providers: + get: + tags: + - Identity Verification Provider Templates + operationId: getAllIdVPTemplates + summary: | + List application templates + description: > + This API provides the capability to retrieve the list of templates available.
+ Scope(Permission) required: `internal_extensions_view` + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/IdVPTemplateListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/extensions/identity-verification-providers' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + +components: + parameters: + limitQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + format: int32 + default: 10 + offsetQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + format: int32 + default: 0 + filterQueryParam: + in: query + name: filter + required: false + description: > + Condition to filter the retrieval of records. Supports 'sw', 'co', 'ew' + and 'eq' operations and also complex queries with 'and' operations. E.g. + /idv-providers?filter=name+sw+"Onfido"+and+isEnabled+eq+"true" + schema: + type: string + idVPQueryParam: + in: query + name: idvProviderid + required: false + description: | + Id of the identity verification provider. + schema: + type: string + schemas: + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + IdVProviderListResponse: + type: object + properties: + totalResults: + type: integer + example: 10 + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + identityVerificationProviders: + type: array + items: + $ref: '#/components/schemas/IdVProviderResponse' + IdVProviderResponse: + type: object + properties: + id: + type: string + example: 123e4567-e89b-12d3-a456-556642440000 + type: + type: string + example: ONFIDO + name: + type: string + example: ONFIDO + description: + type: string + example: identity verification provider + image: + type: string + example: "onfido-logo-url" + isEnabled: + type: boolean + example: true + claims: + type: array + items: + $ref: '#/components/schemas/VerificationClaim' + configProperties: + type: array + items: + $ref: '#/components/schemas/ConfigProperty' + IdVProviderRequest: + type: object + properties: + type: + type: string + example: ONFIDO + name: + type: string + example: ONFIDO + description: + type: string + example: identity verification provider + image: + type: string + example: "onfido-logo-url" + isEnabled: + type: boolean + example: true + claims: + type: array + items: + $ref: '#/components/schemas/VerificationClaim' + configProperties: + type: array + items: + $ref: '#/components/schemas/ConfigProperty' + required: + - type + - name + - isEnabled + ConfigProperty: + type: object + properties: + key: + type: string + example: token + value: + type: string + example: somePropertyValue + VerificationClaim: + type: object + properties: + localClaim: + type: string + example: 'http://wso2.org/claims/dob' + idvpClaim: + type: string + example: birthday + IdVPTemplateListResponse: + type: array + items: + $ref: '#/components/schemas/IdVPTemplateResponse' + IdVPTemplateResponse: + type: object + properties: + id: + type: string + example: TEMPLATE_ID + version: + type: string + example: v1.0.0 + name: + type: string + example: Template Name + description: + type: string + example: Template Description. + image: + type: string + example: "onfido-logo-url" + displayOrder: + type: integer + example: 1 + tags: + type: array + items: + type: string + example: + - Identity-Verification + category: + type: string + example: DEFAULT + type: + type: string + example: identity-verification-providers + self: + type: string + example: /api/server/v1/extensions/identity-verification-providers/ONFIDO + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://localhost:9443/oauth2/authorize' + tokenUrl: 'https://localhost:9443/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/idle-account-identification.yaml b/docusaurus-asgardeo/static/apis/restapis/idle-account-identification.yaml new file mode 100644 index 0000000000..c9ef159bbb --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/idle-account-identification.yaml @@ -0,0 +1,135 @@ +openapi: 3.0.0 +info: + description: > + This document specifies a RESTful API for identifying idle business user accounts in Asgardeo. The API provides the capability to retrieve a list of inactive users after a specified date. + version: "v1" + title: Asgardeo - Idle Account Identification Rest API +security: + - OAuth2: [] +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/idle-account-identification/v1' +paths: + /inactive-users: + get: + tags: + - Get inactive users + description: "Get inactive users after a specified date. \n\n Scope required: ``internal_user_mgt_list``" + operationId: getInactiveUsers + parameters: + - in: query + name: inactiveAfter + schema: + type: string + description: Users without login activity after this date are considered inactive. + example: 2023-01-31 + required: true + - in: query + name: excludeBefore + schema: + type: string + description: Users whose last login activity is before the specified date will be excluded from the list of inactive users included in the response. + example: 2023-01-01 + responses: + '200': + $ref: '#/components/responses/Success' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/idle-account-identification/v1/inactive-users?inactiveAfter=2023-01-31&excludeBefore=2023-01-01' \ + -H 'accept: application/json' + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: 80001 + message: + type: string + example: Some error message + description: + type: string + example: Some error description + Unauthorized: + type: object + required: + - code + - message + properties: + code: + type: string + example: 401 + message: + type: string + example: Unauthorized + description: + type: string + example: You are unauthorized to make this request + InactiveUsersList: + type: array + items: + $ref: '#/components/schemas/InactiveUser' + InactiveUser: + type: object + properties: + userId: + type: string + username: + type: string + userStoreDomain: + type: string + required: + - username + example: + userId: 3c780e73-9ca6-4e49-811e-8e697df22a91 + username: JohnDoe + userStoreDomain: DEFAULT + responses: + Unauthorized: + description: Unauthorized + content: + 'application/json': + schema: + $ref: '#/components/schemas/Unauthorized' + Forbidden: + description: Resource Forbidden + ServerError: + description: Internal Server Error + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + BadRequest: + description: Invalid Input Request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Success: + description: Inactive users returned successfully. + content: + 'application/json': + schema: + $ref: '#/components/schemas/InactiveUsersList' + securitySchemes: + OAuth2: + type: oauth2 + flows: + clientCredentials: + tokenUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + scopes: + internal_user_mgt_list: Grant permissions to read user records. \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/idp.yaml b/docusaurus-asgardeo/static/apis/restapis/idp.yaml new file mode 100644 index 0000000000..4149d8a53a --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/idp.yaml @@ -0,0 +1,3661 @@ +openapi: 3.0.0 +info: + description: > + This document specifies a RESTful API for managing identity providers in Asgardeo. The APIs provide the capability to `add`, `update`, `delete`, and `patch` identity providers. + version: "v1" + title: Asgardeo - Identity Provider Management API definition +security: + - OAuth2: [] +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' +paths: + /identity-providers: + get: + tags: + - Identity Providers + summary: | + List identity providers + description: "This API provides the capability to retrieve the list of identity providers. \n\n Scope(Permission) required: ``internal_idp_view``" + operationId: getIDPs + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/sortQueryParam' + - $ref: '#/components/parameters/sortByQueryParam' + - $ref: '#/components/parameters/requiredAttributesQueryParam' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '501': + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Identity Providers + summary: | + Add a new identity provider + description: "This API provides the capability to create a new identity provider. \n\n Scope(Permission) required: ``internal_idp_create``" + operationId: addIDP + responses: + '201': + description: Successful response + headers: + Location: + description: Location of the newly created identity provider. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderResponse' + examples: + identityProviderWithSystemDefinedAuthenticator: + $ref: '#/components/examples/SystemDefinedIdentityProviderResponseExample' + identityProviderWithUserDefineAuthenticator: + $ref: '#/components/examples/UserDefinedIdentityProviderResponseExample' + application/xml: + schema: + $ref: '#/components/schemas/IdentityProviderResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "google", + "description": "IdP for Google Federation", + "image": "google-logo-url", + "isPrimary": false, + "isFederationHub": false, + "homeRealmIdentifier": "localhost", + "certificate": { + "certificates": [ + "string" + ], + "jwksUri": "https://api.asgardeo.io/t/{org-name}/oauth2/jwks" + }, + "alias": "https://api.asgardeo.io/t/{org-name}/oauth2/token", + "claims": { + "userIdClaim": { + "uri": "http://wso2.org/claims/username" + }, + "roleClaim": { + "uri": "http://wso2.org/claims/username" + }, + "mappings": [ + { + "idpClaim": "country", + "localClaim": { + "uri": "http://wso2.org/claims/username" + } + } + ], + "provisioningClaims": [ + { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "defaultValue": "sathya" + } + ] + }, + "roles": { + "mappings": [ + { + "idpRole": "google-manager", + "localRole": "manager" + } + ], + "outboundProvisioningRoles": [ + "manager", + "hr-admin" + ] + }, + "federatedAuthenticators": { + "defaultAuthenticatorId": "U0FNTDJBdXRoZW50aWNhdG9y", + "authenticators": [ + { + "authenticatorId": "U0FNTDJBdXRoZW50aWNhdG9y", + "isEnabled": true, + "isDefault": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + } + ] + }, + "provisioning": { + "jit": { + "isEnabled": true, + "scheme": "PROVISION_SILENTLY", + "userstore": "DEFAULT", + "associateLocalUser": true, + "attributeSyncMethod": "OVERRIDE_ALL", + "accountLookupAttributeMappings": [ + { + "federatedAttribute": "email", + "localAttribute": "http://wso2.org/claims/username" + }, + { + "federatedAttribute": "mobile", + "localAttribute": "http://wso2.org/claims/mobile" + } + ] + }, + "outboundConnectors": { + "defaultConnectorId": "U0NJTQ", + "connectors": [ + { + "connectorId": "U0NJTQ", + "isEnabled": true, + "isDefault": false, + } + "rulesEnabled": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + } + ] + } + } + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderPOSTRequest' + examples: + identityProviderWithSystemDefinedAuthenticator: + $ref: '#/components/examples/IdentityProviderWithSystemDefinedAuthenticatorPOSTRequestExample' + identityProviderWithUserDefineAuthenticator: + $ref: '#/components/examples/IdentityProviderWithUserDefinedAuthenticatorPOSTRequestExample' + application/xml: + schema: + $ref: '#/components/schemas/IdentityProviderPOSTRequest' + description: This represents the identity provider to be created. + required: true + /identity-providers/meta/federated-authenticators: + get: + tags: + - Metadata + summary: | + List supported federated authenticators of IdPs + description: "This API provides the list of supported federated authenticators for an identity provider in Asgardeo. \n\nScope(Permission) required:
`internal_idp_view`" + operationId: getMetaFederatedAuthenticators + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetaFederatedAuthenticatorListItem' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/meta/federated-authenticators' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/meta/federated-authenticators/{federated-authenticator-id}: + get: + tags: + - Metadata + summary: | + Get metadata of a supported federated authenticator + description: "This API provides the details of a single supported federated authenticator for an identity provider in Asgardeo. \n\nScope(Permission) required: `internal_idp_view`" + operationId: getMetaFederatedAuthenticator + parameters: + - name: federated-authenticator-id + in: path + description: ID of a federated authenticator + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/MetaFederatedAuthenticator' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/meta/federated-authenticators/{federated-authenticator-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/meta/outbound-provisioning-connectors: + get: + tags: + - Metadata + summary: > + List supported outbound provisioning connectors of IdPs + description: "This API provides the list of supported federated authenticators for an identity provider (IdP) in the Asgardeo. \n\n Scope(Permission) required: `internal_idp_view`" + operationId: getMetaOutboundConnectors + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetaOutboundConnectorListItem' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/meta/outbound-provisioning-connectors' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/meta/outbound-provisioning-connectors/{outbound-provisioning-connector-id}: + get: + tags: + - Metadata + summary: | + Get metadata of a supported outbound provisioning connector + description: "This API provides the details of a single supported outbound provisioning connector for an identity provider (IdP) in the Asgardeo. \n\n Scope(Permission) required: `internal_idp_view`" + operationId: getMetaOutboundConnector + parameters: + - name: outbound-provisioning-connector-id + in: path + description: ID of an outbound provisioning connector + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/MetaOutboundConnector' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/meta/outbound-provisioning-connectors/{outbound-provisioning-connector-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/{identity-provider-id}: + get: + tags: + - Identity Providers + summary: | + Retrieve IdP by ID + description: "This API provides the capability to retrieve the identity provider details using its ID. \n\n Scope(Permission) required: ``internal_idp_view``" + operationId: getIDP + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderResponse' + examples: + identityProviderWithSystemDefinedAuthenticator: + $ref: '#/components/examples/SystemDefinedIdentityProviderResponseExample' + identityProviderWithUserDefineAuthenticator: + $ref: '#/components/examples/UserDefinedIdentityProviderResponseExample' + application/xml: + schema: + $ref: '#/components/schemas/IdentityProviderResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Identity Providers + summary: > + Patch an IdP property by ID + description: "This API provides the capability to update an identity provider property using patch request. identity provider (IdP) patch is supported only for key-value pairs. \n\n Scope(Permission) required: ``internal_idp_update``" + operationId: patchIDP + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated identity provider. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '[ + { + "operation": "REPLACE", + "path": "/homeRealmIdentifier", + "value": "google" + } + ]' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchRequest' + required: true + delete: + tags: + - Identity Providers + summary: | + Delete an identity provider by ID + description: "This API provides the capability to delete an identity provider by giving its ID. \n\n Scope(Permission) required: ``internal_idp_delete``" + operationId: deleteIDP + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider + required: true + schema: + type: string + - $ref: '#/components/parameters/forceQueryParam' + responses: + '204': + description: Successfully Deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}?force=false' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/{identity-provider-id}/federated-authenticators: + get: + tags: + - Federated Authenticators + summary: | + List federated authenticators of an IdP + description: "This API provides a list of federated authenticators enabled for a specific identity provider identified by its ID. \n\n Scope(Permission) required: `internal_idp_view`" + operationId: getFederatedAuthenticators + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticatorListResponse' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorListResponseExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorListResponseExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/federated-authenticators' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Federated Authenticators + summary: | + Update federated authenticators of an IdP + description: "This API updates federated authenticators enabled for a specific identity provider identified by its ID. \n\n Scope(Permission) required: `internal_idp_update`" + operationId: updateFederatedAuthenticators + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticatorListResponse' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorListResponseExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorListResponseExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/federated-authenticators' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "defaultAuthenticatorId": "U0FNTDJBdXRoZW50aWNhdG9y", + "authenticators": [ + { + "authenticatorId": "U0FNTDJBdXRoZW50aWNhdG9y", + "isEnabled": true, + "isDefault": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticatorRequest' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorsListPUTRequestExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorsListPUTRequestExample' + description: This represents the federated authenticators to be updated + required: true + '/identity-providers/{identity-provider-id}/federated-authenticators/{federated-authenticator-id}': + get: + tags: + - Federated Authenticators + summary: | + Retrieve federated authenticator config of an IdP + description: "This API provides the capability to retrieve the federated authenticator information of an identity provider by giving the federated authenticator's ID. \n\nScope(Permission) required:`internal_idp_view`" + operationId: getFederatedAuthenticator + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + - name: federated-authenticator-id + in: path + description: ID of the federated authenticator. + required: true + schema: + type: string + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticator' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorResponseExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorResponseExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/federated-authenticators/{federated-authenticator-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Federated Authenticators + summary: > + Update a federated authenticator of an IdP + description: "This API provides the capability to update an identity provider's federated authenticator config by specifying the authenticator ID. \n\n Scope(Permission) required: `internal_idp_update`" + operationId: updateFederatedAuthenticator + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + - name: federated-authenticator-id + in: path + description: ID of the federated authenticator. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated federated authenticator. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticator' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorResponseExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorResponseExample' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/federated-authenticators/{federated-authenticator-id}' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "isEnabled": true, + "isDefault": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FederatedAuthenticatorPUTRequest' + examples: + systemDefinedAuthenticatorsExample: + $ref: '#/components/examples/SystemDefinedAuthenticatorPUTRequestExample' + userDefinedAuthenticators: + $ref: '#/components/examples/UserDefinedAuthenticatorPUTRequestExample' + description: This represents the federated authenticator to be updated + required: true + '/identity-providers/{identity-provider-id}/provisioning': + get: + tags: + - Provisioning + summary: | + List provisioning entities of an IdP + description: "This API provides a list of available provisioning entities for an identity provider. This includes just-in-time provisioning config and outbound provisioning connectors \n\n Scope(Permission) required: `internal_idp_view`" + operationId: getProvisioningConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ProvisioningResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/provisioning' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /identity-providers/{identity-provider-id}/provisioning/outbound-connectors: + get: + tags: + - Provisioning + summary: | + List outbound provisioning connectors of an IdP + description: "This API provides a list of outbound provisioning connectors enabled for an identity provider. \n\n Scope(Permission) required: `internal_idp_view`" + operationId: getOutboundConnectors + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundConnectorListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/provisioning/outbound-connectors' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Provisioning + summary: | + Update outbound provisioning connectors of an IdP + description: "This API updates the list of outbound provisioning connectors enabled for an identity provider. \n\n Scope(Permission) required: `internal_idp_update`" + operationId: updateOutboundConnectors + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundConnectorListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/provisioning/outbound-connectors' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "defaultConnectorId": "U0NJTQ", + "connectors": [ + { + "connectorId": "U0NJTQ", + "isEnabled": true, + "isDefault": false, + "blockingEnabled": false, + "rulesEnabled": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundProvisioningRequest' + description: This represents the outbound provisioning connectors to be updated + required: true + '/identity-providers/{identity-provider-id}/provisioning/outbound-connectors/{outbound-provisioning-connector-id}': + get: + tags: + - Provisioning + summary: | + Retrieve outbound provisioning connector of an IdP + description: "This API provides the capability to retrieve an identity provider's outbound provisioning connector information by specifying the provisioning connector's ID. \n\n Scope(Permission) required: `internal_idp_view`" + operationId: getOutboundConnector + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + - name: outbound-provisioning-connector-id + in: path + description: ID of the outbound provisioning connector. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundConnector' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/provisioning/outbound-connectors/{outbound-provisioning-connector-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Provisioning + summary: | + Update outbound provisioning connector of an IdP + description: "This API provides the capability to update an outbound provisioning connector config of an identity provider by specifying the provisioning connector's ID. \n\n Scope(Permission) required: `internal_idp_update`" + operationId: updateOutboundConnector + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + - name: outbound-provisioning-connector-id + in: path + description: ID of the outbound provisioning connector. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated outbound provisioning connector. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundConnector' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/identity-provider-id/provisioning/outbound-connectors/outbound-provisioning-connector-id' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "isEnabled": true, + "isDefault": false, + "blockingEnabled": false, + "rulesEnabled": false, + "properties": [ + { + "key": "somePropertyKey", + "value": "somePropertyValue" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OutboundConnectorPUTRequest' + description: This represents the outbound provisioning connector to be updated + required: true + '/identity-providers/{identity-provider-id}/claims': + get: + tags: + - Claims + summary: | + Get claim config of an IdP + description: "This API provides the claim config for an identity provider. This includes idp-to-local claim mappings, claims to be outbound provisioned, userID claim URI, and role claim URI. \n\n Scope(Permission) required: `internal_idp_view`" + operationId: getClaimConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/Claims' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/claims' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Claims + summary: | + Update claims of an IdP + description: "This API provides the capability to update the claim config of an existing identity provider.\n\n Scope(Permission) required: `internal_idp_update`" + operationId: updateClaimConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated claim config. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/Claims' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/claims' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userIdClaim": { + "uri": "http://wso2.org/claims/username" + }, + "roleClaim": { + "uri": "http://wso2.org/claims/username" + }, + "mappings": [ + { + "idpClaim": "country", + "localClaim": { + "uri": "http://wso2.org/claims/username" + } + } + ], + "provisioningClaims": [ + { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "defaultValue": "sathya" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Claims' + description: This represents the claim config to be updated + required: true + '/identity-providers/{identity-provider-id}/roles': + get: + tags: + - Roles + summary: | + Get role config of an IdP + description: "This API provides the role config of an identity provider. This includes idp-to-local role mappings and/or a list of roles to be outbound-provisioned \n\n Scope(Permission) required: `internal_idp_view`" + operationId: getRoleConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Roles' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/identity-provider-id/roles' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Roles + summary: | + Update role config of an IdP + description: "This API provides the capability to update the role config of an identity provider by specifying the identity provider ID. \n\n Scope(Permission) required: `internal_idp_update`" + operationId: updateRoleConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated role config. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/Roles' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/roles' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "mappings": [ + { + "idpRole": "google-manager", + "localRole": "manager" + } + ], + "outboundProvisioningRoles": [ + "manager", + "hr-admin" + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Roles' + description: This represents the role config to be updated. + required: true + /identity-providers/{identity-provider-id}/provisioning/jit: + get: + tags: + - Provisioning + summary: | + Just-In-Time provisioning config of an IdP + description: "This API retrieves the Just-In-Time provisioning config of an identity provider by specifying the identity provider ID. \n\n Scope(Permission) required: `internal_idp_view`" + operationId: getJITConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/JustInTimeProvisioning' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/provisioning/jit' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Provisioning + summary: | + Update the just-in-time provisioning config of an IdP + description: "This API provides the capability to update the just-in-time provisioning config of an identity provider by specifying the identity provider's ID. This includes the ability to enable/disable JIT provisioning, change the provisioning user store and enable/disable user prompts for username, password, and consent. \n\n Scope(Permission) required: `internal_idp_update`" + operationId: updateJITConfig + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated just-in-time provisioning config. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/JustInTimeProvisioning' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/provisioning/jit' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "isEnabled": true, + "scheme": "PROVISION_SILENTLY", + "userstore": "DEFAULT", + "associateLocalUser": true, + "attributeSyncMethod": "OVERRIDE_ALL", + "accountLookupAttributeMappings": [ + { + "federatedAttribute": "email", + "localAttribute": "http://wso2.org/claims/email" + }, + { + "federatedAttribute": "mobile", + "localAttribute": "http://wso2.org/claims/mobile" + } + ] + }' + + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JustInTimeProvisioning' + description: This represents the just-in-time provisioning config to be updated. + required: true + '/identity-providers/{identity-provider-id}/connected-apps': + get: + tags: + - Connected Apps + summary: | + List connected apps of the IdP + description: "This API provides the list of applications that use this identity provider for federated authentication/provisioning.\n\nScope(Permission) required: `internal_idp_view`" + operationId: getConnectedApps + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectedApps' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/connected-apps' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + '/trusted-token-issuers': + get: + tags: + - Trusted Token Issuers + summary: | + List trusted token issuers + description: "This API provides the capability to retrieve the list of token issuers.\n\nScope(Permission) required: `internal_idp_view`" + operationId: getTrustedTokenIssuers + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/sortByQueryParam' + - $ref: '#/components/parameters/sortOrderQueryParam' + - $ref: '#/components/parameters/requiredAttributesQueryParam' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/IdentityProviderListResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/trusted-token-issuers' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Trusted Token Issuers + summary: | + Add a new trusted token issuer + description: "This API provides the capability to create a token issuer. \n\nScope(Permission) required: `internal_idp_create`" + operationId: addTrustedTokenIssuer + responses: + '201': + description: Successful response + headers: + Location: + description: Location of the newly created Token issuer. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/TrustedTokenIssuerResponse' + application/xml: + schema: + $ref: '#/components/schemas/TrustedTokenIssuerResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/trusted-token-issuers' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "google", + "description": "Trusted Token Issuer", + "image": "issuer-logo-url", + "templateId": "8ea23303-49c0-4253-b81f-82c0fe6fb4a0", + "certificate": { + "certificates": [ + "string" + ], + "jwksUri": "https://api.asgardeo.io/t/{org-name}/oauth2/jwks" + }, + "alias": "https://api.asgardeo.io/t/{org-name}/oauth2/token", + "issuer": "https://www.issuer.com", + "claims": { + "userIdClaim": { + "uri": "http://wso2.org/claims/username" + }, + "roleClaim": { + "uri": "http://wso2.org/claims/username" + }, + "mappings": [ + { + "idpClaim": "country", + "localClaim": { + "uri": "http://wso2.org/claims/username" + } + } + ], + "provisioningClaims": [ + { + "claim": { + "uri": "http://wso2.org/claims/username" + }, + "defaultValue": "sathya" + } + ] + } + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TrustedTokenIssuerPOSTRequest' + description: This represents the trusted token issuer to be created. + required: true + + '/trusted-token-issuers/{trusted-token-issuer-id}': + get: + tags: + - Trusted Token Issuers + summary: | + Retrieve IdP by trusted token issuer's ID + description: "This API provides the capability to retrieve the trusted token issuer details by using its ID.\n\nScope(Permission) required: `internal_idp_view`" + operationId: getTrustedTokenIssuer + parameters: + - name: trusted-token-issuer-id + in: path + description: ID of the trusted token issuer. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TrustedTokenIssuerResponse' + application/xml: + schema: + $ref: '#/components/schemas/TrustedTokenIssuerResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/trusted-token-issuers/{trusted-token-issuer-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Trusted Token Issuers + summary: > + Patch a trusted token issuer property by ID + description: "This API provides the capability to update a trusted token issuer property using patch request. Trusted token issuer patch is supported only for key-value pairs.\n\nScope(Permission) required: `internal_idp_update`" + operationId: patchTrustedTokenIssuer + parameters: + - name: trusted-token-issuer-id + in: path + description: ID of the trusted token issuer. + required: true + schema: + type: string + responses: + '200': + description: Successful response + headers: + Location: + description: Location of the updated trusted token issuer. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/TrustedTokenIssuerResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/trusted-token-issuers/{trusted-token-issuer-id}' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '[ + { + "operation": "REPLACE", + "path": "/homeRealmIdentifier", + "value": "google" + } + ]' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchRequest' + required: true + delete: + tags: + - Trusted Token Issuers + summary: | + Delete a trusted token issuer by ID + description: "This API provides the capability to delete a trusted token issuer by giving its ID. \n\nScope(Permission) required: ` internal_idp_delete`" + operationId: deleteTrustedTokenIssuer + parameters: + - name: trusted-token-issuer-id + in: path + description: ID of the trusted token issuer + required: true + schema: + type: string + - $ref: '#/components/parameters/forceQueryParam' + responses: + '204': + description: Successfully Deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/trusted-token-issuers/t{rusted-token-issuer-id}?force=false' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + '/identity-providers/{identity-provider-id}/implicit-association': + get: + tags: + - Implicit Association + summary: | + Get implicit association config of an IdP + description: "This API provides the implicit association config of an IdP including the status and the specified attributes for lookup.\n\nScope required: `internal_idp_view`" + operationId: getImplicitAssociation + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ImplicitAssociationResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + application/xml: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --request GET \ + --url https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/implicit-association \ + --header 'Accept: application/json, application/xml' \ + --header 'Authorization: Bearer {bearer-token}' + put: + tags: + - Implicit Association + summary: | + Update implicit association config of an IdP + description: "This API provides the capability to update the implicit association config of an identity provider by specifying the identity provider ID.\n\nScope required: `internal_idp_update`" + operationId: updateImplicitAssociation + parameters: + - name: identity-provider-id + in: path + description: ID of the identity provider. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ImplicitAssociationResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --request PUT \ + --url https://api.asgardeo.io/t/{organization-name}/api/server/v1/identity-providers/{identity-provider-id}/implicit-association \ + --header 'Accept: application/json' \ + --header 'Authorization: Bearer {bearer-token}' \ + --header 'Content-Type: application/json' \ + --data '{ + "isEnabled": true, + "lookupAttribute": [ + "http://wso2.org/claims/emailaddress" + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ImplicitAssociationPutRequest' + description: This represents the implicit association configs to be updated. + required: true +components: + parameters: + limitQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + format: int32 + offsetQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + format: int32 + filterQueryParam: + in: query + name: filter + required: false + description: > + Condition to filter the retrieval of records. Supports 'sw', 'co', 'ew' + and 'eq' operations and also complex queries with 'and' operations. E.g. + /identity-providers?filter=name+sw+"google"+and+isEnabled+eq+"true" + schema: + type: string + sortQueryParam: + in: query + name: sortOrder + required: false + description: | + Defines the order in which the retrieved records should be sorted. + _This parameter is not supported yet_ + schema: + type: string + enum: + - ASC + - DESC + sortByQueryParam: + in: query + name: sortBy + required: false + description: | + Attribute by which the retrieved records should be sorted. + _This parameter is not supported yet_ + schema: + type: string + requiredAttributesQueryParam: + in: query + name: requiredAttributes + required: false + description: | + Specifies the required parameters in the response. + _This parameter is not supported yet_ + schema: + type: string + forceQueryParam: + in: query + name: force + required: false + description: > + Enforces the forceful deletion of an identity provider, federated authenticator, or an outbound provisioning connector even though a service provider refers to it. + schema: + type: boolean + default: false + sortOrderQueryParam: + in: query + name: sortOrder + required: false + description: >- + Define the order in which the retrieved tenants should be sorted. + schema: + type: string + enum: + - asc + - desc + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + scopes: {} + schemas: + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + MetaProperty: + type: object + required: + - key + properties: + key: + type: string + example: 'httpBinding' + displayName: + type: string + example: 'HTTP Binding' + description: + type: string + example: 'Choose the HTTP Binding or decide from incoming request' + type: + type: string + enum: + - STRING + - BOOLEAN + - INTEGER + example: STRING + displayOrder: + type: integer + example: 10 + regex: + type: string + example: '[a-zA-Z]{3,30}' + isMandatory: + type: boolean + default: false + example: false + isConfidential: + type: boolean + default: false + options: + type: array + items: + type: string + example: ['HTTP-Redirect', 'HTTP-POST', 'As Per Request'] + defaultValue: + type: string + example: HTTP-Redirect + subProperties: + type: array + items: + $ref: '#/components/schemas/MetaProperty' + Property: + required: + - key + type: object + properties: + key: + type: string + example: somePropertyKey + value: + type: string + example: somePropertyValue + PatchRequest: + type: array + items: + $ref: '#/components/schemas/Patch' + Patch: + description: A JSONPatch as defined by RFC 6902. Patch operation is supported only for root level attributes of + an identity provider. + required: + - operation + - path + properties: + operation: + type: string + description: The operation to be performed. + enum: + - ADD + - REMOVE + - REPLACE + example: REPLACE + path: + type: string + description: A JSON-Pointer + example: '/homeRealmIdentifier' + value: + type: string + description: The value to be used within the operations. + example: 'google' + Link: + type: object + properties: + href: + type: string + description: Path to the target resource. + example: >- + '/t/{org_name}/api/server/v1/identity-providers/394b8adcce24c64a8a09a8d80abf8c337bd253de' + rel: + type: string + description: Describes how the current context is related to the target resource. + example: identity-providers + readOnly: true + Certificate: + type: object + properties: + certificates: + type: array + items: + type: string + jwksUri: + type: string + example: "https://api.asgardeo.io/t/{org-name}/oauth2/jwks" + samlMetadataUri: + type: string + description: The SAML metadata endpoint URL of the external identity provider. When configured, Asgardeo fetches and caches the signing certificate from this URL to validate SAML response signatures and IdP-initiated logout request signatures. + example: "https://idp.example.com/saml/metadata" + IdentityProviderPOSTRequest: + type: object + required: + - name + properties: + name: + type: string + example: google + description: The name of the identity provider (IdP). + description: + type: string + example: "IdP for Google Federation" + description: The name of the identity provider (IdP). + image: + type: string + example: "google-logo-url" + description: The URL to the logo image of the identity provider (IdP). + isPrimary: + type: boolean + default: false + isFederationHub: + type: boolean + default: false + homeRealmIdentifier: + type: string + example: localhost + certificate: + $ref: '#/components/schemas/Certificate' + alias: + type: string + example: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + claims: + $ref: '#/components/schemas/Claims' + roles: + $ref: '#/components/schemas/Roles' + federatedAuthenticators: + $ref: '#/components/schemas/FederatedAuthenticatorRequest' + provisioning: + $ref: '#/components/schemas/ProvisioningRequest' + IdentityProviderResponse: + type: object + properties: + id: + type: string + example: '123e4567-e89b-12d3-a456-556642440000' + name: + type: string + example: google + description: The name of the identity provider (IdP). + description: + type: string + description: The name of the identity provider (IdP). + isEnabled: + type: boolean + default: true + example: true + isPrimary: + type: boolean + default: false + image: + type: string + example: "google-logo-url" + isFederationHub: + type: boolean + example: false + homeRealmIdentifier: + type: string + example: localhost + certificate: + $ref: '#/components/schemas/Certificate' + alias: + type: string + example: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + claims: + $ref: '#/components/schemas/Claims' + roles: + $ref: '#/components/schemas/Roles' + federatedAuthenticators: + $ref: '#/components/schemas/FederatedAuthenticatorListResponse' + provisioning: + $ref: '#/components/schemas/ProvisioningResponse' + implicitAssociation: + $ref: '#/components/schemas/ImplicitAssociationResponse' + IdentityProviderListResponse: + type: object + properties: + totalResults: + type: integer + example: 10 + description: The total number of identity provider's (IdP) listed in the Response. + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "identity-provider?offset=50&limit=10", + "rel": "next", + }, { + "href": "identity-provider?offset=30&limit=10", + "rel": "previous", + } + ] + identityProviders: + type: array + items: + $ref: '#/components/schemas/IdentityProviderListItem' + IdentityProviderListItem: + type: object + properties: + id: + type: string + example: 123e4567-e89b-12d3-a456-556642440000 + description: The ID of the identity provider. + name: + type: string + example: google + description: The name of the identity provider. + description: + type: string + example: identity provider for google federation + description: The description of the identity provider. + isEnabled: + type: boolean + default: true + example: true + image: + type: string + example: "google-logo-url" + description: The logo image of the identity provider. + isPrimary: + type: boolean + example: false + isFederationHub: + type: boolean + example: false + homeRealmIdentifier: + type: string + example: localhost + certificate: + $ref: '#/components/schemas/Certificate' + alias: + type: string + example: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + claims: + $ref: '#/components/schemas/Claims' + roles: + $ref: '#/components/schemas/Roles' + federatedAuthenticators: + $ref: '#/components/schemas/FederatedAuthenticatorListResponse' + provisioning: + $ref: '#/components/schemas/ProvisioningResponse' + self: + type: string + example: /t/{org_name}/api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000 + description: The URL of the identity provider. + MetaFederatedAuthenticatorListItem: + type: object + properties: + authenticatorId: + type: string + example: U0FNTDJBdXRoZW50aWNhdG9y + description: The authenticator ID. + name: + type: string + example: SAML2Authenticator + description: The name of the authenticator + definedBy: + type: string + enum: + - SYSTEM + - USER + self: + type: string + example: /t/{org_name}/api/server/v1/identity-providers/meta/federated-authenticators/U0FNTFNTT0F1dGhlbnRpY2F0b3I + description: The URL of the identity provider. + MetaFederatedAuthenticator: + type: object + properties: + authenticatorId: + type: string + example: U0FNTFNTT0F1dGhlbnRpY2F0b3I + name: + type: string + example: SAML2Authenticator + displayName: + type: string + example: 'SAML2 Web SSO Configuration' + definedBy: + type: string + enum: + - SYSTEM + - USER + properties: + type: array + items: + $ref: '#/components/schemas/MetaProperty' + FederatedAuthenticatorRequest: + type: object + required: + - defaultAuthenticatorId + properties: + defaultAuthenticatorId: + type: string + description: >- + ID of the federated authenticator to be used as the default + authenticator for the respective identity provider. + example: U0FNTDJBdXRoZW50aWNhdG9y + authenticators: + type: array + items: + $ref: '#/components/schemas/FederatedAuthenticator' + description: >- + Includes the list of federated authenticators supported by the + respective identity provider. This should include the authenticator + specified as the `defaultAuthenticator`. + FederatedAuthenticator: + type: object + required: + - authenticatorId + properties: + authenticatorId: + type: string + example: U0FNTDJBdXRoZW50aWNhdG9y + name: + type: string + example: "SAML2Authenticator" + readOnly: true + isEnabled: + type: boolean + default: false + example: true + definedBy: + type: string + enum: + - SYSTEM + - USER + isDefault: + type: boolean + default: false + properties: + type: array + items: + $ref: '#/components/schemas/Property' + endpoint: + $ref: '#/components/schemas/Endpoint' + Endpoint: + type: object + required: + - uri + - authentication + properties: + uri: + type: string + example: https://abc.com/token + pattern: '^https?://.+' + authentication: + $ref: '#/components/schemas/AuthenticationType' + allowedHeaders: + type: array + description: List of HTTP headers to forward to the extension. + items: + type: string + example: [ "x-geo-location", "host"] + allowedParameters: + type: array + description: List of parameters to forward to the extension. + items: + type: string + example: [ "device-id"] + AuthenticationType: + type: object + description: > + The type of authentication required by the action's endpoint. The following options are supported: + + - NONE: No authentication is required.
+ ``{ + "type": "NONE" + }`` + + - BASIC: Basic authentication with a username and password.
+ ``{ + "type": "BASIC", + "properties": { + "username": "auth_username", + "password": "auth_password" + } + }`` + + - API_KEY: API key-based authentication, where the key is provided in an HTTP header.
+ ``{ + "type": "API_KEY", + "properties": { + "header": "X-API-Key", + "value": "12345-abcde-67890" + } + }`` + + - BEARER: Bearer token-based authentication.
+ ``{ + "type": "BEARER", + "properties": { + "accessToken": "0d6fed02-eac0-332b-8998-213a543139a0" + } + }`` + required: + - type + properties: + type: + type: string + enum: + - NONE + - BEARER + - API_KEY + - BASIC + example: BASIC + properties: + type: object + additionalProperties: true + example: + username: "auth_username" + password: "auth_password" + FederatedAuthenticatorPUTRequest: + type: object + properties: + authenticatorId: + type: string + example: + readOnly: true + name: + type: string + example: "SAML2Authenticator" + readOnly: true + isEnabled: + type: boolean + default: false + example: true + isDefault: + type: boolean + default: false + example: false + definedBy: + type: string + enum: + - SYSTEM + - USER + properties: + type: array + items: + $ref: '#/components/schemas/Property' + endpoint: + $ref: '#/components/schemas/Endpoint' + FederatedAuthenticatorListResponse: + type: object + properties: + defaultAuthenticatorId: + type: string + example: U0FNTFNTT0F1dGhlbnRpY2F0b3I + authenticators: + type: array + items: + $ref: '#/components/schemas/FederatedAuthenticatorListItem' + FederatedAuthenticatorListItem: + type: object + properties: + authenticatorId: + type: string + example: U0FNTFNTT0F1dGhlbnRpY2F0b3I + description: The ID of the authenticator. + name: + type: string + example: SAML2Authenticator + description: The name of the authenticator. + isEnabled: + type: boolean + default: false + example: true + definedBy: + type: string + enum: + - SYSTEM + - USER + self: + type: string + example: /t/{org_name}/api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000/federated-authenticators/U0FNTDJBdXRoZW50aWNhdG9y + description: The URL of the identity provider. + MetaOutboundConnectorListItem: + type: object + properties: + connectorId: + type: string + example: U0NJTQ + description: The identifier of the connector. + name: + type: string + example: SCIM + description: The name of the connector. + self: + type: string + example: /t/{org_name}/api/server/v1/identity-providers/meta/outbound-provisioning-connectos/U0NJTQ + description: The URL of the identity provider. + MetaOutboundConnector: + type: object + properties: + connectorId: + type: string + example: U0NJTQ + description: The identifier of the connector. + name: + type: string + example: SCIM + description: The name of the connector. + displayName: + type: string + example: SCIM Outbound Provisioning Connector + description: The display name of the connector. + blockingEnabled: + type: boolean + default: false + rulesEnabled: + type: boolean + default: false + properties: + type: array + items: + $ref: '#/components/schemas/MetaProperty' + ProvisioningRequest: + type: object + properties: + jit: + $ref: '#/components/schemas/JustInTimeProvisioning' + outboundConnectors: + $ref: '#/components/schemas/OutboundProvisioningRequest' + ProvisioningResponse: + type: object + properties: + jit: + $ref: '#/components/schemas/JustInTimeProvisioning' + outboundConnectors: + $ref: '#/components/schemas/OutboundConnectorListResponse' + OutboundProvisioningRequest: + type: object + required: + - defaultConnectorId + properties: + defaultConnectorId: + type: string + example: U0NJTQ + description: The identifier of the connector. + connectors: + type: array + items: + $ref: '#/components/schemas/OutboundConnector' + OutboundConnector: + type: object + required: + - connectorId + properties: + connectorId: + type: string + example: U0NJTQ + description: The identifier of the connector. + name: + type: string + example: SCIM + readOnly: true + description: The name of the connector. + isEnabled: + type: boolean + default: false + example: true + isDefault: + type: boolean + default: false + blockingEnabled: + type: boolean + default: false + rulesEnabled: + type: boolean + default: false + properties: + type: array + items: + $ref: '#/components/schemas/Property' + OutboundConnectorPUTRequest: + type: object + properties: + connectorId: + type: string + example: U0NJTQ + readOnly: true + description: The identifier of the connector. + name: + type: string + example: SCIM + readOnly: true + description: The name of the connector. + isEnabled: + type: boolean + default: false + example: true + isDefault: + type: boolean + default: false + blockingEnabled: + type: boolean + default: false + rulesEnabled: + type: boolean + default: false + properties: + type: array + items: + $ref: '#/components/schemas/Property' + OutboundConnectorListResponse: + type: object + properties: + defaultConnectorId: + type: string + example: U0NJTQ + description: The identifier of the connector. + connectors: + type: array + items: + $ref: '#/components/schemas/OutboundConnectorListItem' + OutboundConnectorListItem: + type: object + properties: + connectorId: + type: string + example: U0NJTQ + description: The identifier of the connector. + name: + type: string + example: SCIM + readOnly: true + description: The name of the connector. + isEnabled: + type: boolean + default: false + example: true + self: + type: string + example: /t/{org_name}/api/server/v1/identity-providers/123e4567-e89b-12d3-a456-556642440000/provisioning/outbound-connectors/U0NJTQ + description: The URL of the identity provider. + Roles: + type: object + properties: + mappings: + type: array + items: + $ref: '#/components/schemas/RoleMapping' + outboundProvisioningRoles: + type: array + items: + type: string + example: + - manager + - hr-admin + RoleMapping: + type: object + properties: + idpRole: + type: string + example: google-manager + localRole: + type: string + example: manager + IdPGroupsConfig: + type: array + description: IdP groups supported by the IdP. + items: + $ref: '#/components/schemas/IdPGroup' + minItems: 0 + IdPGroup: + type: object + required: + - name + description: Represents an IdP group supported by an Identity Provider. + properties: + name: + type: string + description: Name of the IdP group + example: google-admin + id: + type: string + description: UUID of the IdP group + example: 6b1f8513-3de0-4f28-9cad-b7400dbc94ae + Claims: + type: object + properties: + userIdClaim: + $ref: '#/components/schemas/Claim' + roleClaim: + $ref: '#/components/schemas/Claim' + mappings: + type: array + items: + $ref: '#/components/schemas/ClaimMapping' + provisioningClaims: + type: array + items: + $ref: '#/components/schemas/ProvisioningClaim' + ProvisioningClaim: + type: object + properties: + claim: + $ref: '#/components/schemas/Claim' + defaultValue: + type: string + example: sathya + ClaimMapping: + type: object + properties: + idpClaim: + type: string + example: country + localClaim: + $ref: '#/components/schemas/Claim' + Claim: + type: object + required: + - uri + properties: + id: + type: string + example: aHR0cDovL3dzbzIub3JnL2NsYWltcy91c2VybmFtZQ + readOnly: true + uri: + type: string + example: 'http://wso2.org/claims/username' + displayName: + type: string + example: Username + readOnly: true + JustInTimeProvisioning: + type: object + required: + - isEnabled + properties: + isEnabled: + type: boolean + default: false + example: true + scheme: + type: string + enum: + - PROMPT_USERNAME_PASSWORD_CONSENT + - PROMPT_PASSWORD_CONSENT + - PROMPT_CONSENT + - PROVISION_SILENTLY + default: PROVISION_SILENTLY + userstore: + type: string + default: PRIMARY + example: PRIMARY + associateLocalUser: + description: Specifies if the JIT-provisioned account should be associated with the local user account. + type: boolean + default: false + example: true + accountLookupAttributeMappings: + description: "This variable specifies the mapping between the federated attributes and the local user attributes for account lookup." + type: array + items: + type: object + properties: + federatedAttribute: + type: string + example: email + localAttribute: + type: string + example: http://wso2.org/claims/email + attributeSyncMethod: + description: "This variable specifies the method used for syncing attributes between the JIT-provisioned user account and the local user account. \n\n + Asgardeo allows the following syncing methods: \n\n +
    +
  • OVERRIDE_ALL: All attributes of the local user account will be overridden by the attributes received from the external identity provider.
  • +
  • NONE: None of the attributes received from the identity provider will be synced with the local user account.
  • +
  • PRESERVE_LOCAL: Only the attributes received from the identity provider will be updated while preserving the other attributes of the local user account.
  • + + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getEmailSenders + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailProviderList' + examples: + basicAuthWithAuthTypeResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithBasicAuthTypeListResponseExample' + clientCredentialResponseEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithClientCredentialAuthTypeListResponseExample' + httpBasicAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypeListResponseExample' + httpClientCredentialResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypeListResponseExample' + httpBearerTokenResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypeListResponseExample' + httpApiKeyResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypeListResponseExample' + httpNoneAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypeListResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/email' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Email Senders + summary: Create an email sender + description: | + This API provides the capability to create an email sender.\nIf the 'name' is not defined, 'EmailPublisher' is taken as the default name. For SMTP-based providers, Basic and Client Credential authentication types are supported. For HTTP-based providers, Basic, Client Credential, Bearer Token, API Key, and None authentication types are supported.
    + + Scope(Permission) required: `internal_notification_senders_create` + operationId: createEmailSender + requestBody: + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/HTTPBasedEmailSenderAdd' + - $ref: '#/components/schemas/SMTPBasedEmailSenderAdd' + examples: + basicAuthWithAuthTypePOSTEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderBasicAuthWithAuthTypePOSTRequestExample' + clientCredentialPOSTEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderClientCredentialPOSTRequestExample' + httpBasicAuthPOSTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypePOSTRequestExample' + httpClientCredentialPOSTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypePOSTRequestExample' + httpBearerTokenPOSTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypePOSTRequestExample' + httpApiKeyPOSTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypePOSTRequestExample' + httpNoneAuthPOSTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypePOSTRequestExample' + responses: + "201": + description: Successful Response + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/HTTPBasedEmailSenderAdd' + - $ref: '#/components/schemas/SMTPBasedEmailSenderAdd' + examples: + basicAuthWithAuthTypeResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithBasicAuthTypeResponseExample' + clientCredentialResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBasicAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypeResponseExample' + httpClientCredentialResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBearerTokenResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypeResponseExample' + httpApiKeyResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypeResponseExample' + httpNoneAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypeResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/email' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "fromAddress": "iam@gmail.com", + "authType": "BASIC", + "properties": [ + { + "key": "mail.smtp.starttls.enable", + "value": true + }, + { + "key": "userName", + "value": "iam" + }, + { + "key": "password", + "value": "iam123" + } + ] + }' + /notification-senders/email/{sender-name}: + get: + tags: + - Email Senders + summary: Retrieve an email sender by name + description: | + This API provides the capability to retrieve an email sender by name. + The URL encoded email sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSender' + examples: + basicAuthWithAuthTypeResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithBasicAuthTypeResponseExample' + clientCredentialResponseExample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBasicAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypeResponseExample' + httpClientCredentialResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBearerTokenResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypeResponseExample' + httpApiKeyResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypeResponseExample' + httpNoneAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypeResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/email/{email-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Email Senders + summary: Update an email sender + description: | + This API provides the capability to update an email sender by name. + The URL encoded email sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_update` + operationId: updateEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/HTTPBasedEmailSenderUpdate' + - $ref: '#/components/schemas/SMTPBasedEmailSenderUpdate' + examples: + basicAuthWithAuthTypePUTEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderBasicAuthWithAuthTypePUTRequestExample' + clientCredentialPUTEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderClientCredentialPUTRequestExample' + httpBasicAuthPUTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypePUTRequestExample' + httpClientCredentialPUTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypePUTRequestExample' + httpBearerTokenPUTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypePUTRequestExample' + httpApiKeyPUTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypePUTRequestExample' + httpNoneAuthPUTExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypePUTRequestExample' + + required: true + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSender' + examples: + basicAuthWithAuthTypePUTEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithBasicAuthTypeResponseExample' + clientCredentialPUTEXample: + $ref: '#/components/examples/SMTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBasicAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBasicAuthTypeResponseExample' + httpClientCredentialResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample' + httpBearerTokenResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithBearerTokenAuthTypeResponseExample' + httpApiKeyResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithAPIKeyAuthTypeResponseExample' + httpNoneAuthResponseExample: + $ref: '#/components/examples/HTTPBasedEmailSenderWithNoneAuthTypeResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/email/{email-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "fromAddress": "iam@gmail.com", + "authType": "BASIC", + "properties": [ + { + "key": "mail.smtp.starttls.enable", + "value": true + }, + { + "key": "userName", + "value": "iam" + }, + { + "key": "password", + "value": "iam123" + } + ] + }' + delete: + tags: + - Email Senders + summary: Delete an email sender by name + description: | + This API provides the capability to delete an email sender by name. + The URL encoded email sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_delete` + operationId: deleteEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/email/{email-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /notification-senders/sms: + get: + tags: + - SMS Senders + summary: Get a list of SMS senders + description: | + This API provides the capability to retrieve a list of SMS notification senders.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getSMSSenders + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSProviderList' + examples: + ListOfSMSProviderResponseExample: + $ref: '#/components/examples/SMSProvidersListResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/sms' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - SMS Senders + summary: Create a SMS sender + description: | + This API provides the capability to create a SMS sender. + If the 'name' is not not defined, 'SMSPublisher' is taken as the default name.
    + + Scope(Permission) required: `internal_notification_senders_create` + operationId: createSMSSender + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSenderAdd' + examples: + TwilioSMSProviderRequestExample: + $ref: '#/components/examples/TwilioSMSProviderRequestExample' + VonageSMSProviderRequestExample: + $ref: '#/components/examples/VonageSMSProviderRequestExample' + CustomSMSProviderRequestExample: + $ref: '#/components/examples/CustomSMSProviderRequestExample' + responses: + "201": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + examples: + TwilioSMSProviderResponseExample: + $ref: '#/components/examples/TwilioSMSProviderResponseExample' + VonageSMSProviderResponseExample: + $ref: '#/components/examples/VonageSMSProviderResponseExample' + CustomSMSProviderResponseExample: + $ref: '#/components/examples/CustomSMSProviderResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/sms' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "NEXMO", + "providerURL": "https://rest.nexmo.com/sms/json", + "key": "123**45", + "secret": "5tg**ssd", + "sender": "+94 775563324", + "type": "json", + "properties": [ + { + "key": "body.scope", + "value": "internal" + }, + { + "key": "http.headers", + "value": "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + } + ] + }' + /notification-senders/sms/{sender-name}: + get: + tags: + - SMS Senders + summary: Get a SMS sender by name + description: | + This API provides the capability to retrieve a SMS notification sender by name. + The URL encoded SMS sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + examples: + TwilioSMSProviderResponseExample: + $ref: '#/components/examples/TwilioSMSProviderResponseExample' + VonageSMSProviderResponseExample: + $ref: '#/components/examples/VonageSMSProviderResponseExample' + CustomSMSProviderResponseExample: + $ref: '#/components/examples/CustomSMSProviderResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - SMS Senders + summary: Update a SMS sender + description: | + This API provides the capability to update a SMS Sender. + The URL encoded SMS sender name is used as sender-name.
    + + + Scope(Permission) required: `internal_notification_senders_update` + operationId: updateSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSenderUpdateRequest' + examples: + TwilioSMSProviderRequestExample: + $ref: '#/components/examples/TwilioSMSProviderRequestExample' + VonageSMSProviderRequestExample: + $ref: '#/components/examples/VonageSMSProviderRequestExample' + CustomSMSProviderRequestExample: + $ref: '#/components/examples/CustomSMSProviderRequestExample' + required: true + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + examples: + TwilioSMSProviderResponseExample: + $ref: '#/components/examples/TwilioSMSProviderResponseExample' + VonageSMSProviderResponseExample: + $ref: '#/components/examples/VonageSMSProviderResponseExample' + CustomSMSProviderResponseExample: + $ref: '#/components/examples/CustomSMSProviderResponseExample' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "NEXMO", + "providerURL": "https://rest.nexmo.com/sms/json", + "key": "123**45", + "secret": "5tg**ssd", + "sender": "+94 775563324", + "type": "json", + "properties": [ + { + "key": "body.scope", + "value": "internal" + }, + { + "key": "http.headers", + "value": "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + } + ] + }' + delete: + tags: + - SMS Senders + summary: Delete a SMS sender by name + description: | + This API provides the capability to delete a SMS sender by name. + The URL encoded SMS sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_delete` + operationId: deleteSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /notification-senders/push: + get: + tags: + - Push Senders + summary: Get a list of push notification senders + description: | + This API provides the capability to retrieve the list of push notification senders.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getPushSenders + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushProviderList' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/push' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Push Senders + summary: Create a push notification sender + description: | + This API provides the capability to create a push notification sender. + If the 'name' is not not defined, 'PushPublisher' is taken as the default name.
    + + Scope(Permission) required: `internal_notification_senders_create` + operationId: createSMSSender + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PushSenderAdd' + example: + provider: FCM + properties: + - key: serviceAccountContent + value: "base64EncodedServiceAccountJsonString" + responses: + "201": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/push' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "FCM", + "properties": [ + { + "key": "serviceAccountContent", + "value": "base64EncodedServiceAccountJsonString" + } + ] + }' + /notification-senders/push/{sender-name}: + get: + tags: + - Push Senders + summary: Get a push sender by name + description: | + This API provides the capability to retrieve a push notification sender by name. + The URL encoded push sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getPushSender + parameters: + - name: sender-name + in: path + description: name of the push sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/push/{push-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Push Senders + summary: Update a push notification sender + description: | + This API provides the capability to update a push notification sender. + The URL encoded push notification sender name is used as sender-name.
    + + + Scope(Permission) required: `internal_notification_senders_update` + operationId: updatePushSender + parameters: + - name: sender-name + in: path + description: name of the push notification sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PushSenderUpdateRequest' + example: + provider: FCM + properties: + - key: serviceAccountContent + value: "base64EncodedServiceAccountJsonString" + required: true + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/push/{push-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "FCM", + "properties": [ + { + "key": "serviceAccountContent", + "value": "base64EncodedServiceAccountJsonString" + } + ] + }' + delete: + tags: + - Push Senders + summary: Delete a push notification sender by name + description: | + This API provides the capability to delete a push notification sender by name. + The URL encoded push notification sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_delete` + operationId: deletePushSender + parameters: + - name: sender-name + in: path + description: name of the push notification sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v2/notification-senders/push/{push-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Error: + type: object + properties: + code: + type: string + example: NSM-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + SMTPBasedEmailSenderAdd: + type: object + properties: + name: + type: string + provider: + type: string + example: SMTP + smtpServerHost: + type: string + smtpPort: + type: integer + fromAddress: + type: string + example: iam@gmail.com + authType: + type: string + example: CLIENT_CREDENTIAL + properties: + type: array + example: + - key: body.scope + value: "true" + - key: mail.smtp.starttls.enable + value: true + - key: clientId + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: clientSecret + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: tokenEndpoint + value: "https://login.microsoftonline.com/da76d684-740f-4d94-8717-9d5fb21dd1f9/oauth2/v2.0/token" + - key: scopes + value: "https://graph.microsoft.com/.default" + items: + $ref: '#/components/schemas/Properties' + HTTPBasedEmailSenderAdd: + type: object + properties: + name: + type: string + provider: + type: string + example: HTTP + providerURL: + type: string + example: https://custom.email.provider/send + authType: + type: string + example: BASIC + properties: + type: array + example: + - key: http.client.method + value: POST + - key: contentType + value: JSON + - key: http.headers + value: "X-Version: 1, Header1: value1" + - key: body + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: clientId + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: clientSecret + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: tokenEndpoint + value: "https://login.microsoftonline.com/da76d684-740f-4d94-8717-9d5fb21dd1f9/oauth2/v2.0/token" + - key: scopes + value: "https://graph.microsoft.com/.default" + items: + $ref: '#/components/schemas/Properties' + SMSSenderAdd: + required: + - provider + - contentType + type: object + properties: + name: + type: string + example: SMSPublisher + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + authentication: + $ref: '#/components/schemas/Authentication' + sender: + type: string + example: +94 775563324 + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSenderAdd: + required: + - provider + - properties + type: object + properties: + name: + type: string + example: PushPublisher + provider: + type: string + example: fcm + properties: + type: array + example: + - key: fcm.serviceAccount + value: jsonString + - key: aws.keyId + value: sampleKeyId + items: + $ref: '#/components/schemas/Properties' + EmailSender: + required: + - name + type: object + properties: + name: + type: string + example: EmailPublisher + provider: + type: string + example: SMTP + providerURL: + type: string + example: https://custom.email.provider/send + smtpServerHost: + type: string + example: smtp.gmail.com + smtpPort: + type: integer + example: 587 + fromAddress: + type: string + example: iam@gmail.com + authType: + type: string + example: BASIC + properties: + type: array + example: + - key: mail.smtp.starttls.enable + value: true + items: + $ref: '#/components/schemas/Properties' + SMSSender: + required: + - providerURL + - name + - provider + - contentType + type: object + properties: + name: + type: string + example: SMSPublisher + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + sender: + type: string + example: +94 775563324 + authentication: + $ref: '#/components/schemas/Authentication' + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSender: + required: + - provider + - name + properties: + name: + type: string + example: PushPublisher + provider: + type: string + example: fcm + properties: + type: array + example: + - key: fcm.serviceAccount + value: "jsonString" + - key: aws.keyId + value: "sampleKeyId" + items: + $ref: '#/components/schemas/Properties' + SMTPBasedEmailSenderUpdate: + type: object + properties: + provider: + type: string + example: SMTP + smtpServerHost: + type: string + smtpPort: + type: integer + fromAddress: + type: string + example: iam@gmail.com + authType: + type: string + example: CLIENT_CREDENTIAL + properties: + type: array + example: + - key: body.scope + value: "true" + - key: mail.smtp.starttls.enable + value: true + - key: clientId + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: clientSecret + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: tokenEndpoint + value: "https://login.microsoftonline.com/da76d684-740f-4d94-8717-9d5fb21dd1f9/oauth2/v2.0/token" + - key: scopes + value: "https://graph.microsoft.com/.default" + items: + $ref: '#/components/schemas/Properties' + HTTPBasedEmailSenderUpdate: + type: object + properties: + provider: + type: string + example: HTTP + providerURL: + type: string + example: https://custom.email.provider/send + authType: + type: string + example: BASIC + properties: + type: array + example: + - key: http.client.method + value: POST + - key: contentType + value: JSON + - key: http.headers + value: "X-Version: 1, Header1: value1" + - key: body + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: clientId + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: clientSecret + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: tokenEndpoint + value: "https://login.microsoftonline.com/da76d684-740f-4d94-8717-9d5fb21dd1f9/oauth2/v2.0/token" + - key: scopes + value: "https://graph.microsoft.com/.default" + items: + $ref: '#/components/schemas/Properties' + SMSSenderUpdateRequest: + required: + - provider + - contentType + type: object + properties: + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + authentication: + $ref: '#/components/schemas/Authentication' + sender: + type: string + example: +94 775563324 + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSenderUpdateRequest: + required: + - provider + - properties + type: object + properties: + provider: + type: string + properties: + type: array + example: + - key: fcm.serviceAccount + value: "jsonString" + - key: aws.keyId + value: "sampleKeyId" + items: + $ref: '#/components/schemas/Properties' + Properties: + required: + - key + - value + type: object + properties: + key: + type: string + value: + type: string + example: + - key: email + value: iam@gmail.com + EmailProviderList: + type: array + items: + $ref: '#/components/schemas/EmailSender' + SMSProviderList: + type: array + items: + $ref: '#/components/schemas/SMSSender' + PushProviderList: + type: array + items: + $ref: '#/components/schemas/PushSender' + Schema: + type: object + properties: + id: + type: integer + format: int64 + Authentication: + type: object + description: > + The type of authentication required by the action's endpoint. The following options are supported: + + - CLIENT_CREDENTIAL: Client credential authentication.
    + ``{ + "type": "CLIENT_CREDENTIAL", + "properties": { + "clientId": "3e172dd2-901b-43a9-a26a-728466795f01", + "clientSecret": "83cdc120-ccf6-4163-a4a8-c1ba3e872daa", + "tokenEndpoint": "https://custom.sms.provider/auth/token", + "scopes": "send_scope" + } + }`` + + - BASIC: Username and password based authentication.
    + ``{ + "type": "BASIC", + "properties": { + "username": "admin", + "password": "admin123" + } + }`` + - BEARER: Token based based authentication.
    + ``{ + "type": "BEARER", + "properties": { + "token": "dummy-token" + } + }`` + - API_KEY: API key secret based authentication.
    + ``{ + "type": "API_KEY", + "properties": { + "header": "auth", + "value": "123ert45" + } + }`` + required: + - type + properties: + type: + type: string + enum: + - CLIENT_CREDENTIAL + - BASIC + - BEARER + - API_KEY + - NONE + example: CLIENT_CREDENTIAL + properties: + type: object + description: Authentication properties specific to the selected type. + additionalProperties: true + example: + type: CLIENT_CREDENTIAL + properties: + clientId: 3e172dd2-901b-43a9-a26a-728466795f01 + clientSecret: 83cdc120-ccf6-4163-a4a8-c1ba3e872daa + tokenEndpoint: https://custom.sms.provider/auth/token + scopes: send_scope + parameters: + typeQueryParam: + name: type + in: query + description: | + Type of authenticators. Can be either 'LOCAL' or 'REQUEST_PATH' + required: false + style: form + explode: true + schema: + type: string + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{tenant-domain}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{tenant-domain}/oauth2/token + scopes: {} + examples: + SMTPBasedEmailSenderClientCredentialPOSTRequestExample: + summary: "Post request for SMTP based email providers with client credential authentication" + value: + name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "clientId" + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: "clientSecret" + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: "tokenEndpoint" + value: "https://login.microsoftonline.com/da84-740f-9d5ff9/oauth2/token" + - key: "scopes" + value: "https://graph.microsoft.com/.default" + SMTPBasedEmailSenderBasicAuthWithAuthTypePOSTRequestExample: + summary: "Post request for SMTP based email providers with basic authentication" + value: + name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "BASIC" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "userName" + value: "iam" + - key: "password" + value: "iam123" + HTTPBasedEmailSenderWithBasicAuthTypePOSTRequestExample: + summary: "Post request for HTTP based email providers with basic authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BASIC" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "userName" + value: "iam" + - key: "password" + value: "iam123" + HTTPBasedEmailSenderWithClientCredentialAuthTypePOSTRequestExample: + summary: "Post request for HTTP based email providers with client credential authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "clientId" + value: "client-id-123" + - key: "clientSecret" + value: "client-secret-abc" + - key: "tokenEndpoint" + value: "https://example.com/oauth2/token" + - key: "scopes" + value: "send_scope" + HTTPBasedEmailSenderWithBearerTokenAuthTypePOSTRequestExample: + summary: "Post request for HTTP based email providers with bearer token authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BEARER" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "accessToken" + value: "bearer-token" + HTTPBasedEmailSenderWithAPIKeyAuthTypePOSTRequestExample: + summary: "Post request for HTTP based email providers with API key authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "API_KEY" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "apiKeyHeader" + value: "API-Key-Header" + - key: "apiKeyValue" + value: "api-key-value" + HTTPBasedEmailSenderWithNoneAuthTypePOSTRequestExample: + summary: "Post request for HTTP based email providers with no authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "NONE" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + SMTPBasedEmailSenderClientCredentialPUTRequestExample: + summary: "Put request for SMTP based email providers with client credential authentication" + value: + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "clientId" + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: "clientSecret" + value: "83cdc120-ccf6-4163-a4a8-c1ba3e872daa" + - key: "tokenEndpoint" + value: "https://login.microsoftonline.com/da84-740f-9d5ff9/oauth2/token" + - key: "scopes" + value: "https://graph.microsoft.com/.default" + SMTPBasedEmailSenderBasicAuthWithAuthTypePUTRequestExample: + summary: "Put request for SMTP based email providers with basic authentication" + value: + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "BASIC" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "userName" + value: "iam" + - key: "password" + value: "iam123" + HTTPBasedEmailSenderWithBasicAuthTypePUTRequestExample: + summary: "Put request for HTTP based email providers with basic authentication" + value: + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BASIC" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "userName" + value: "iam" + - key: "password" + value: "iam123" + HTTPBasedEmailSenderWithClientCredentialAuthTypePUTRequestExample: + summary: "Put request for HTTP based email providers with client credential authentication" + value: + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "clientId" + value: "client-id-123" + - key: "clientSecret" + value: "client-secret-abc" + - key: "tokenEndpoint" + value: "https://example.com/oauth2/token" + - key: "scopes" + value: "send_scope" + HTTPBasedEmailSenderWithBearerTokenAuthTypePUTRequestExample: + summary: "Put request for HTTP based email providers with bearer token authentication" + value: + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BEARER" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "accessToken" + value: "bearer-token" + HTTPBasedEmailSenderWithAPIKeyAuthTypePUTRequestExample: + summary: "Put request for HTTP based email providers with API key authentication" + value: + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "API_KEY" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "apiKeyHeader" + value: "API-Key-Header" + - key: "apiKeyValue" + value: "api-key-value" + HTTPBasedEmailSenderWithNoneAuthTypePUTRequestExample: + summary: "Put request for HTTP based email providers with no authentication" + value: + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "NONE" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + SMTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample: + summary: "Response for SMTP based email providers with client credential authentication" + value: + name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "clientId" + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: "tokenEndpoint" + value: "https://login.microsoftonline.com/da84-740f-9d5ff9/oauth2/token" + - key: "scopes" + value: "https://graph.microsoft.com/.default" + SMTPBasedEmailSenderWithBasicAuthTypeResponseExample: + summary: "Response for SMTP based email providers with basic authentication" + value: + name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "BASIC" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "userName" + value: "iam" + HTTPBasedEmailSenderWithBasicAuthTypeResponseExample: + summary: "Response for HTTP based email providers with basic authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BASIC" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "userName" + value: "iam" + HTTPBasedEmailSenderWithClientCredentialAuthTypeResponseExample: + summary: "Response for HTTP based email providers with client credential authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "clientId" + value: "client-id-123" + - key: "tokenEndpoint" + value: "https://example.com/oauth2/token" + - key: "scopes" + value: "send_scope" + HTTPBasedEmailSenderWithBearerTokenAuthTypeResponseExample: + summary: "Response for HTTP based email providers with bearer token authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BEARER" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + HTTPBasedEmailSenderWithAPIKeyAuthTypeResponseExample: + summary: "Response for HTTP based email providers with API key authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "API_KEY" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "apiKeyHeader" + value: "API-Key-Header" + HTTPBasedEmailSenderWithNoneAuthTypeResponseExample: + summary: "Response for HTTP based email providers with no authentication" + value: + name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "NONE" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + SMTPBasedEmailSenderWithBasicAuthTypeListResponseExample: + summary: "List response containing an SMTP-based email provider with basic authentication" + value: + - name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "BASIC" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "userName" + value: "iam" + SMTPBasedEmailSenderWithClientCredentialAuthTypeListResponseExample: + summary: "List response containing an SMTP-based email provider with client credential authentication" + value: + - name: "EmailPublisher" + provider: "SMTP" + smtpServerHost: "smtp.gmail.com" + smtpPort: 587 + fromAddress: "test@gmail.com" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "mail.smtp.signature" + value: "Identity Server" + - key: "clientId" + value: "3e172dd2-901b-43a9-a26a-728466795f01" + - key: "tokenEndpoint" + value: "https://login.microsoftonline.com/da84-740f-9d5ff9/oauth2/token" + - key: "scopes" + value: "https://graph.microsoft.com/.default" + HTTPBasedEmailSenderWithBasicAuthTypeListResponseExample: + summary: "List response containing an HTTP-based email provider with basic authentication" + value: + - name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BASIC" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "userName" + value: "iam" + HTTPBasedEmailSenderWithClientCredentialAuthTypeListResponseExample: + summary: "List response containing an HTTP-based email provider with client credential authentication" + value: + - name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "CLIENT_CREDENTIAL" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "clientId" + value: "client-id-123" + - key: "tokenEndpoint" + value: "https://example.com/oauth2/token" + - key: "scopes" + value: "send_scope" + HTTPBasedEmailSenderWithBearerTokenAuthTypeListResponseExample: + summary: "List response containing an HTTP-based email provider with bearer token authentication" + value: + - name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "BEARER" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "accessToken" + value: "bearer-token" + HTTPBasedEmailSenderWithAPIKeyAuthTypeListResponseExample: + summary: "List response containing an HTTP-based email provider with API key authentication" + value: + - name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "API_KEY" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + - key: "apiKeyHeader" + value: "API-Key-Header" + - key: "apiKeyValue" + value: "api-key-value" + HTTPBasedEmailSenderWithNoneAuthTypeListResponseExample: + summary: "List response containing an HTTP-based email provider with no authentication" + value: + - name: "EmailPublisher" + provider: "HTTP" + providerURL: "https://api.example.com/api/v1" + authType: "NONE" + properties: + - key: "http.client.method" + value: "POST" + - key: contentType + value: "JSON" + - key: "http.headers" + value: "X-Version: 1, Custom-Header: value" + - key: "body" + value: "{\"subject\": \"{{subject}}\", \"body\": \"{{body}}\", \"footer\": \"{{footer}}\", \"to\": \"{{send-to}}\"}" + TwilioSMSProviderRequestExample: + summary: Post and PUT request for Twilio SMS Provider + value: + provider: Twilio + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: BASIC + properties: + username: "123ert45" + password: "5tg-rts-ssd" + VonageSMSProviderRequestExample: + summary: Post and PUT request for Vonage SMS Provider + value: + provider: Vonage + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: BASIC + properties: + username: "123ert45" + password: "5tg-rts-ssd" + CustomSMSProviderRequestExample: + summary: Post and PUT request for Custom SMS Provider + value: + provider: Custom + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: CLIENT_CREDENTIAL + properties: + clientId: 3e172dd2-901b-43a9-a26a-728466795f01 + clientSecret: 83cdc120-ccf6-4163-a4a8-c1ba3e872daa + tokenEndpoint: https://custom.sms.provider/auth/token + scopes: send_scope + TwilioSMSProviderResponseExample: + summary: Response for Twilio SMS Provider + value: + name: SMSPublisher + provider: Twilio + key: 123ert45 + secret: 5tg-rts-ssd + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: BASIC + properties: + username: "123ert45" + password: "5tg-rts-ssd" + VonageSMSProviderResponseExample: + summary: Response for Vonage SMS Provider + value: + name: SMSPublisher + provider: Vonage + key: 123ert45 + secret: 5tg-rts-ssd + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: BASIC + properties: + username: "123ert45" + password: "5tg-rts-ssd" + CustomSMSProviderResponseExample: + summary: Response for Custom SMS Provider + description: This document specifies a **RESTful API** for **WSO2 Identity Server Notification Senders** + value: + name: SMSPublisher + provider: Custom + key: "" + secret: "" + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: CLIENT_CREDENTIAL + properties: + clientId: 3e172dd2-901b-43a9-a26a-728466795f01 + clientSecret: 83cdc120-ccf6-4163-a4a8-c1ba3e872daa + tokenEndpoint: https://custom.sms.provider/auth/token + scopes: send_scope + SMSProvidersListResponseExample: + summary: Response for list of SMS Provider + value: + - name: SMSPublisher + provider: Custom + key: "" + secret: "" + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Accept: application/json, Content-Type: application/json" + authentication: + type: CLIENT_CREDENTIAL + properties: + clientId: 3e172dd2-901b-43a9-a26a-728466795f01 + clientSecret: 83cdc120-ccf6-4163-a4a8-c1ba3e872daa + tokenEndpoint: https://custom.sms.provider/auth/token + scopes: send_scope diff --git a/docusaurus-asgardeo/static/apis/restapis/notification-senders.yaml b/docusaurus-asgardeo/static/apis/restapis/notification-senders.yaml new file mode 100644 index 0000000000..456a7d793c --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/notification-senders.yaml @@ -0,0 +1,1360 @@ +openapi: 3.0.0 +info: + title: Notification Senders API + description: This document specifies **Email, SMS and Push notification sender RESTful API** for **Asgardeo** + version: "v1" +servers: + - url: https://{serverUrl}/t/{tenantDomain}/api/server/v1 + variables: + serverUrl: + default: api.asgardeo.io +security: + - OAuth2: [] +paths: + /notification-senders/email: + get: + tags: + - Email Senders + summary: Get a list of email senders + description: | + This API provides the capability to retrieve the list of email senders.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getEmailSenders + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailProviderList' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/email' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Email Senders + summary: Create an email sender + description: | + This API provides the capability to create an email sender.\n\nIf the 'name' is not not defined, 'EmailPublisher' is taken as the default name.
    + + Scope(Permission) required: `internal_notification_senders_create` + operationId: createEmailSender + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSenderAdd' + example: + fromAddress: iam@gmail.com + userName: iam + password: iam123 + properties: + - key: mail.smtp.starttls.enable + value: true + responses: + "201": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/email' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "fromAddress": "iam@gmail.com", + "userName": "iam", + "password": "iam123", + "properties": [ + { + "key": "mail.smtp.starttls.enable", + "value": true + } + ] + }' + /notification-senders/email/{sender-name}: + get: + tags: + - Email Senders + summary: Retrieve an email sender by name + description: | + This API provides the capability to retrieve an email sender by name. + The URL encoded email sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/email/{email-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Email Senders + summary: Update an email sender + description: | + This API provides the capability to update an email sender by name. + The URL encoded email sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_update` + operationId: updateEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSenderUpdateRequest' + example: + fromAddress: iam@gmail.com + userName: iam + password: iam123 + properties: + - key: mail.smtp.starttls.enable + value: true + required: true + responses: + "200": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/EmailSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/email/{email-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "fromAddress": "iam@gmail.com", + "userName": "iam", + "password": "iam123", + "properties": [ + { + "key": "mail.smtp.starttls.enable", + "value": true + } + ] + }' + delete: + tags: + - Email Senders + summary: Delete an email sender by name + description: | + This API provides the capability to delete an email sender by name. + The URL encoded email sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_delete` + operationId: deleteEmailSender + parameters: + - name: sender-name + in: path + description: name of the email sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/email/{email-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /notification-senders/sms: + get: + tags: + - SMS Senders + summary: Get a list of SMS senders + description: | + This API provides the capability to retrieve a list of SMS notification senders.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getSMSSenders + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSProviderList' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/sms' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - SMS Senders + summary: Create a SMS sender + description: | + This API provides the capability to create a SMS sender. + If the 'name' is not not defined, 'SMSPublisher' is taken as the default name.
    + + Scope(Permission) required: `internal_notification_senders_create` + operationId: createSMSSender + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSenderAdd' + example: + provider: NEXMO + providerURL: https://rest.nexmo.com/sms/json + key: 123**45 + secret: 5tg**ssd + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + responses: + "201": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/sms' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "NEXMO", + "providerURL": "https://rest.nexmo.com/sms/json", + "key": "123**45", + "secret": "5tg**ssd", + "sender": "+94 775563324", + "type": "json", + "properties": [ + { + "key": "body.scope", + "value": "internal" + }, + { + "key": "http.headers", + "value": "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + } + ] + }' + /notification-senders/sms/{sender-name}: + get: + tags: + - SMS Senders + summary: Get a SMS sender by name + description: | + This API provides the capability to retrieve a SMS notification sender by name. + The URL encoded SMS sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - SMS Senders + summary: Update a SMS sender + description: | + This API provides the capability to update a SMS Sender. + The URL encoded SMS sender name is used as sender-name.
    + + + Scope(Permission) required: `internal_notification_senders_update` + operationId: updateSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSenderUpdateRequest' + example: + provider: NEXMO + providerURL: https://rest.nexmo.com/sms/json + key: 123**45 + secret: 5tg**ssd + sender: +94 775563324 + type : json + properties: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + required: true + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SMSSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "NEXMO", + "providerURL": "https://rest.nexmo.com/sms/json", + "key": "123**45", + "secret": "5tg**ssd", + "sender": "+94 775563324", + "type": "json", + "properties": [ + { + "key": "body.scope", + "value": "internal" + }, + { + "key": "http.headers", + "value": "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + } + ] + }' + delete: + tags: + - SMS Senders + summary: Delete a SMS sender by name + description: | + This API provides the capability to delete a SMS sender by name. + The URL encoded SMS sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_delete` + operationId: deleteSMSSender + parameters: + - name: sender-name + in: path + description: name of the SMS sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/sms/{sms-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /notification-senders/push: + get: + tags: + - Push Senders + summary: Get a list of push notification senders + description: | + This API provides the capability to retrieve the list of push notification senders.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getPushSenders + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushProviderList' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/push' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Push Senders + summary: Create a push notification sender + description: | + This API provides the capability to create a push notification sender. + If the 'name' is not not defined, 'PushPublisher' is taken as the default name.
    + + Scope(Permission) required: `internal_notification_senders_create` + operationId: createSMSSender + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PushSenderAdd' + example: + provider: FCM + properties: + - key: serviceAccountContent + value: "base64EncodedServiceAccountJsonString" + responses: + "201": + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "409": + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/push' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "FCM", + "properties": [ + { + "key": "serviceAccountContent", + "value": "base64EncodedServiceAccountJsonString" + } + ] + }' + /notification-senders/push/{sender-name}: + get: + tags: + - Push Senders + summary: Get a push sender by name + description: | + This API provides the capability to retrieve a push notification sender by name. + The URL encoded push sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_view` + operationId: getPushSender + parameters: + - name: sender-name + in: path + description: name of the push sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/push/{push-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Push Senders + summary: Update a push notification sender + description: | + This API provides the capability to update a push notification sender. + The URL encoded push notification sender name is used as sender-name.
    + + + Scope(Permission) required: `internal_notification_senders_update` + operationId: updatePushSender + parameters: + - name: sender-name + in: path + description: name of the push notification sender + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PushSenderUpdateRequest' + example: + provider: FCM + properties: + - key: serviceAccountContent + value: "base64EncodedServiceAccountJsonString" + required: true + responses: + "200": + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/PushSender' + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/push/{push-sender-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "FCM", + "properties": [ + { + "key": "serviceAccountContent", + "value": "base64EncodedServiceAccountJsonString" + } + ] + }' + delete: + tags: + - Push Senders + summary: Delete a push notification sender by name + description: | + This API provides the capability to delete a push notification sender by name. + The URL encoded push notification sender name is used as sender-name.
    + + Scope(Permission) required: `internal_notification_senders_delete` + operationId: deletePushSender + parameters: + - name: sender-name + in: path + description: name of the push notification sender + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "405": + description: Method Not Allowed. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{tenant-domain}/api/server/v1/notification-senders/push/{push-sender-name}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Error: + type: object + properties: + code: + type: string + example: NSM-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + EmailSenderAdd: + required: + - fromAddress + type: object + properties: + name: + type: string + smtpServerHost: + type: string + smtpPort: + type: integer + fromAddress: + type: string + example: iam@gmail.com + userName: + type: string + example: iam + password: + type: string + example: iam123 + properties: + type: array + example: + - key: body.scope + value: "true" + - key: mail.smtp.starttls.enable + value: true + items: + $ref: '#/components/schemas/Properties' + SMSSenderAdd: + required: + - providerURL + - provider + - contentType + type: object + properties: + name: + type: string + example: SMSPublisher + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + sender: + type: string + example: +94 775563324 + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSenderAdd: + required: + - provider + - properties + type: object + properties: + name: + type: string + example: PushPublisher + provider: + type: string + example: fcm + properties: + type: array + example: + - key: fcm.serviceAccount + value: jsonString + items: + $ref: '#/components/schemas/Properties' + EmailSender: + required: + - fromAddress + - name + type: object + properties: + name: + type: string + example: EmailPublisher + smtpServerHost: + type: string + example: smtp.gmail.com + smtpPort: + type: integer + example: 587 + fromAddress: + type: string + example: iam@gmail.com + userName: + type: string + example: iam + password: + type: string + example: iam123 + properties: + type: array + example: + - key: mail.smtp.starttls.enable + value: true + items: + $ref: '#/components/schemas/Properties' + SMSSender: + required: + - providerURL + - name + - provider + - contentType + type: object + properties: + name: + type: string + example: SMSPublisher + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + sender: + type: string + example: +94 775563324 + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: body.scope + value: "internal" + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSender: + required: + - provider + - name + properties: + name: + type: string + example: PushPublisher + provider: + type: string + example: fcm + properties: + type: array + example: + - key: fcm.serviceAccount + value: "jsonString" + items: + $ref: '#/components/schemas/Properties' + EmailSenderUpdateRequest: + required: + - fromAddress + type: object + properties: + smtpServerHost: + type: string + example: smtp.gmail.com + smtpPort: + type: integer + example: 587 + fromAddress: + type: string + example: iam@gmail.com + userName: + type: string + example: iam + password: + type: string + example: iam123 + properties: + type: array + example: + - key: body.scope + value: "true" + - key: mail.smtp.starttls.enable + value: true + items: + $ref: '#/components/schemas/Properties' + SMSSenderUpdateRequest: + required: + - providerURL + - provider + - contentType + type: object + properties: + provider: + type: string + example: NEXMO + providerURL: + type: string + example: https://rest.nexmo.com/sms/json + key: + type: string + example: 123**45 + secret: + type: string + example: 5tg**ssd + sender: + type: string + example: +94 775563324 + contentType: + type: string + enum: + - JSON + - FORM + properties: + type: array + example: + - key: http.headers + value: "X-Version: 1, Authorization: bearer ,Accept: application/json ,Content-Type: application/json" + items: + $ref: '#/components/schemas/Properties' + PushSenderUpdateRequest: + required: + - provider + - properties + type: object + properties: + provider: + type: string + properties: + type: array + example: + - key: fcm.serviceAccount + value: "jsonString" + items: + $ref: '#/components/schemas/Properties' + Properties: + required: + - key + - value + type: object + properties: + key: + type: string + value: + type: string + example: + - key: email + value: iam@gmail.com + EmailProviderList: + type: array + items: + $ref: '#/components/schemas/EmailSender' + SMSProviderList: + type: array + items: + $ref: '#/components/schemas/SMSSender' + PushProviderList: + type: array + items: + $ref: '#/components/schemas/PushSender' + parameters: + typeQueryParam: + name: type + in: query + description: | + Type of authenticators. Can be either 'LOCAL' or 'REQUEST_PATH' + required: false + style: form + explode: true + schema: + type: string + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{tenant-domain}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{tenant-domain}/oauth2/token + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/oauth-dcr.yaml b/docusaurus-asgardeo/static/apis/restapis/oauth-dcr.yaml new file mode 100644 index 0000000000..86d1082cd7 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/oauth-dcr.yaml @@ -0,0 +1,448 @@ +openapi: 3.0.1 +info: + title: Asgardeo - OAuth2 Dynamic Client Registration API + description: | + This document specifies an OAuth2 Dynamic Client Registration endpoint for Asgardeo. +
    +
    + ⚠️ NOTE +
    +
    + Starting May 1, 2026, null fields will no longer appear in the DCR API response to align with REST best practices. + We recommend using this grace period to update your integrations and ensure continued functionality. +
    +
    + version: 1.1.0 +servers: +- url: https:/api.asgardeo.io/t/{org-name}/api/identity/oauth2/dcr/v1.1 +security: +- OAuth2: [] +paths: + /register: + get: + tags: + - OAuth2 DCR + summary: | + Get application by name + description: | + "This API is used to get/retrieve an OAuth2 application by `client_name`. \n\n" + Scope(Permission) required: `internal_dcr_view` + operationId: getApplicationByName + parameters: + - name: client_name + in: query + description: The name of the OAuth2 client application. + required: true + schema: + type: string + responses: + 200: + description: Successfully Retrieved + content: + application/json: + schema: + $ref: '#/components/schemas/application' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/oauth2/dcr/v1.1/register?client_name={client-app-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - OAuth2 DCR + summary: | + Register an OAuth2 app + description: "This API is used to create an OAuth2 application. + \n If your want to create your application to use the `implicit` or `authorization_code` grant types, you need to provide the `redirect_uri` field in your request.\ + \n If you are using any other grant type, \nsuch as `password`, you don't need to send the `redirect_uri` field in the request. + \n Check the sample request given below.\n\nScope(Permission) required: `internal_dcr_create`" + operationId: registerApplication + requestBody: + description: Application information to register. + content: + application/json: + schema: + $ref: '#/components/schemas/registrationRequest' + required: true + responses: + 201: + description: Created + content: + application/json: + schema: + $ref: '#/components/schemas/application' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/error' + 409: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/oauth2/dcr/v1.1/register' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "redirect_uris": [ + "string" + ], + "client_name": "string", + "client_id": "string", + "client_secret": "string", + "grant_types": [ + "authorization_code", + "password" + ], + "jwks_uri": "string", + "url": "string", + "ext_param_client_id": "string", + "ext_param_client_secret": "string", + "contacts": [ + "string" + ], + "post_logout_redirect_uris": [ + "string" + ], + "request_uris": [ + "string" + ], + "ext_param_sp_template": "string", + "backchannel_logout_uri": "string", + "backchannel_logout_session_required": true + }' + x-codegen-request-body-name: registrationRequest + /register/{client_id}: + get: + tags: + - OAuth2 DCR + summary: | + Get application by ID + description: | + "This API is used to retrieve an OAuth2 application by `client_id`. \n\n" + Scope(Permission) required: `internal_dcr_view` + operationId: getApplication + parameters: + - name: client_id + in: path + description: Unique identifier of the OAuth2 client application. + required: true + schema: + type: string + responses: + 200: + description: Successfully Retrieved + content: + application/json: + schema: + $ref: '#/components/schemas/application' + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/oauth2/dcr/v1.1/register/{client-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - OAuth2 DCR + summary: | + Update an OAuth2 app + description: | + "This API is used to update an OAuth2 application.\n\n" + Scope(Permission) required: `internal_dcr_update` + operationId: updateApplication + parameters: + - name: client_id + in: path + description: Unique identifier for the OAuth2 client application. + required: true + schema: + type: string + requestBody: + description: Application information to update. + content: + application/json: + schema: + $ref: '#/components/schemas/updateRequest' + required: true + responses: + 200: + description: Successfully updated + content: + application/json: + schema: + $ref: '#/components/schemas/application' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/error' + 409: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/oauth2/dcr/v1.1/register/{client_id}' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "redirect_uris": [ + "string" + ], + "client_name": "client_application", + "client_id": "string", + "client_secret": "string", + "grant_types": [ + "authorization_code", + "password" + ], + "backchannel_logout_uri": "string", + "backchannel_logout_session_required": true + }' + x-codegen-request-body-name: updateRequest + delete: + tags: + - OAuth2 DCR + summary: | + Delete an OAuth2 app + description: | + "This API is used to delete an OAuth2 application by `client_id`.\n\n" + Scope(Permission) required: `internal_dcr_delete` + operationId: deleteApplication + parameters: + - name: client_id + in: path + description: Unique identifier of the OAuth2 client application. + required: true + schema: + type: string + responses: + 204: + description: Successfully deleted + content: {} + 404: + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/oauth2/dcr/v1.1/register/{client_id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + x-wso2-request: | + curl -X DELETE -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -d '{}' "https://api.asgardeo.io/t/{org-name}/api/identity/oauth2/dcr/v1.1/register/s6BhdRkqt3" + x-wso2-response: | + "HTTP/1.1 204 No Content" +components: + schemas: + registrationRequest: + required: + - client_name + - redirect_uris + type: object + properties: + redirect_uris: + type: array + items: + type: string + description: The redirect URI determines where Asgardeo will redirect users after authentication and logout. + client_name: + type: string + description: The name of the OAuth2 client application. + ext_param_client_id: + type: string + description: The public identifier of the application. + ext_param_client_secret: + type: string + description: The secret corresponding to the `clientId` of the application. This is confidential and will be used to make requests and authenticate into your application. + grant_types: + type: array + example: + - authorization_code + - password + items: + type: string + description: "The This will determine how the application communicates with the token service. Asgardeo supports following grant types: +
      +
    • authorization_code
    • +
    • client_credentials
    • +
    • refresh_token
    • +
    • implicit
    • +
    • password
    • +
    " + jwks_uri: + type: string + url: + type: string + contacts: + type: array + items: + type: string + post_logout_redirect_uris: + type: array + items: + type: string + request_uris: + type: array + items: + type: string + ext_param_sp_template: + type: string + backchannel_logout_uri: + type: string + description: Represents the URL that is used for sending logout requests from the identity provider (IdP) to the application in a back-channel manner, without involving the user's browser. + backchannel_logout_session_required: + type: boolean + updateRequest: + type: object + properties: + redirect_uris: + type: array + items: + type: string + client_name: + type: string + example: "client_application" + description: The name of the OAuth2 client application. + client_id: + type: string + description: The public identifier of the application. + client_secret: + type: string + description: The secret corresponding to the `clientId` of the application. This is confidential and will be used to make requests and authenticate into your application. + grant_types: + type: array + example: + - authorization_code + - password + items: + type: string + description: "The This will determine how the application communicates with the token service. Asgardeo supports following grant types: +
      +
    • authorization_code
    • +
    • client_credentials
    • +
    • refresh_token
    • +
    • implicit
    • +
    • password
    • +
    " + backchannel_logout_uri: + type: string + backchannel_logout_session_required: + type: boolean + application: + type: object + properties: + client_id: + type: string + example: "s6BhdRkqt3" + description: The public identifier of the application. + client_secret: + type: string + example: "ZJYCqe3GGRvdrudKyZS0XhGv_Z45DuKhCUk0gBR1vZk" + description: The secret corresponding to the `clientId` of the application. This is confidential and will be used to make requests and authenticate into your application. + client_secret_expires_at: + type: string + example: "1577858400" + description: The remaining time for expiry of the `client_secret`. + redirect_uris: + type: array + items: + type: string + grant_types: + type: array + example: + - authorization_code + - password + items: + type: string + description: "The This will determine how the application communicates with the token service. Asgardeo supports following grant types: +
      +
    • authorization_code
    • +
    • client_credentials
    • +
    • refresh_token
    • +
    • implicit
    • +
    • password
    • +
    " + client_name: + type: string + example: "client_application" + description: The name of the OAuth2 client application. + error: + type: object + properties: + error: + type: string + error_description: + type: string + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{org-name}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{org-name}/oauth2/token + scopes: {} \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/offline-user-onboard.yaml b/docusaurus-asgardeo/static/apis/restapis/offline-user-onboard.yaml new file mode 100644 index 0000000000..8b54f14ba6 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/offline-user-onboard.yaml @@ -0,0 +1,104 @@ +openapi: 3.0.0 +info: + version: v1 + title: Offline User Onboard Management API + description: >- + This document specifies an **Offline user onboard management RESTFull API** for + Asgardeo. + +paths: + '/offline-invite-link': + post: + tags: + - Temporary Link + summary: Generates a random link that can be used to set a new password + description: | + 'Generates a random and secured one time link that can be used to set a new password for a user onboarded to the organization' + + Scope(Permission) required: `internal_offline_invite` + operationId: generateLink + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/InvitationRequest' + description: This represents the invitation request. + required: true + responses: + '201': + description: Created + content: + text/plain: + schema: + type: string + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/o/{organization-name}/api/users/v1/offline-invite-link' \ + -H 'Content-Type: application/json' \ + -H 'Accept: text/plain' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "username": "johnDoe", + "userstore": "DEFAULT" + }' +servers: + - url: 'https://api.asgardeo.io/o/{organization-name}/api/users/v1' + +security: + - OAuth2: [] +components: + schemas: + InvitationRequest: + type: object + required: + - username + - userstore + properties: + username: + type: string + description: Exisiting user's username + example: "johnDoe" + userstore: + type: string + description: User's userstore domain + example: "DEFAULT" + Error: + type: object + properties: + code: + type: string + example: "Some_error_code" + message: + type: string + example: "Some error message." + description: + type: string + example: "Some error description." + traceId: + type: string + example: "Some Correlation for Error Instance" + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/o/{organization-name}/oauth2/authorize' + tokenUrl: 'http://api.asgardeo.io/o/{organization-name}/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/org-management.yaml b/docusaurus-asgardeo/static/apis/restapis/org-management.yaml new file mode 100644 index 0000000000..26d5f1bd1b --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/org-management.yaml @@ -0,0 +1,1117 @@ +openapi: 3.0.0 +info: + version: "v1" + title: 'Asgardeo - Organization Management API Definition' + description: | + 'This is the RESTful API for organization management in Asgardeo. + + This API allows users to create, update, retrieve and delete organizations. + Other than that the API supports to share the application from the root organization to given organization, get the list of organizations that the application is shared to and delete the shared application from the organizations.' +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' + variables: + server-url: + default: https://api.asgardeo.io/t/{organization-name}/api/server/v1 + root-organization-name: + default: "{organization-name}" +security: + - OAuth2: [] + +paths: + /organizations: + post: + tags: + - Organization + description: | + This API is used to create the organization defined in the user input. + + Scope(Permission) required: `internal_organization_create` + summary: + Create a new organization. + operationId: organizationPost + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPOSTRequest' + description: This represents the organization to be added. + required: true + responses: + '201': + description: Successful response + headers: + Location: + description: Location of the newly created organization. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "ABC Builders", + "description": "Building constructions", + "attributes": [ + { + "key": "Country", + "value": "USA" + } + ] + }' + x-codegen-request-body-name: body + get: + description: | + This API is used to search and retrieve organizations created for this tenant. + + Organizations can be filtered by id, name, description, created, lastModified, status, parentId, and meta attributes. + + Supported operators: "eq"(equals), "co"(contains), "sw"(starts with), "ew"(ends with), "ge"(greater than or equals), "le"(less than or equals), "gt"(greater than), "lt"(less than) + + Multiple attributes can be combined using the "and" operator. + + Examples: + - filter=name+eq+ABC Builders + - filter=attributes.Country+eq+Sri Lanka + + Scope(Permission) required: `internal_organization_view` + summary: + Retrieve organizations created for this tenant which matches the defined search criteria, if any. + operationId: organizationsGet + parameters: + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/afterQueryParam' + - $ref: '#/components/parameters/beforeQueryParam' + - $ref: '#/components/parameters/recursiveQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationsResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /organizations/check-name: + post: + summary: Check organization with given name exist among the organizations hierarchy. + description: | + This API is used to check whether organization with particular name exist or not. + + If the organization name is available for use, the response will be "available": true, else it will be "available": false. + + Scope(Permission) required: `internal_organization_view` + operationId: organizationsCheckNamePost + requestBody: + description: OrganizationNameCheckPOSTRequest object containing the organization name. + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationNameCheckPOSTRequest' + required: true + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationNameCheckPOSTResponse' + '404': + $ref: '#/components/responses/NotFound' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/check-name' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "XYZ Builders" + }' + x-codegen-request-body-name: body + /organizations/{organization-id}: + get: + description: | + This API is used to get an existing organization identified by the organization ID. + + Scope(Permission) required: `internal_organization_view` + summary: + Get an existing organization, identified by the organization ID. + parameters: + - name: organization-id + in: path + description: ID of the organization. + required: true + schema: + type: string + example: 5355f3f0-f8b3-457f-805a-b32a668c5125 + - $ref: '#/components/parameters/includePermissionsQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/GetOrganizationResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/{organization-id}' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + description: | + This API provides the capability to update an organization property + using patch request. Organization patch is supported only for key-value pairs. + + Scope(Permission) required: `internal_organization_update` + summary: + Patch an organization property by ID. Patch is supported only for + key-value pairs. + parameters: + - name: organization-id + in: path + description: ID of the organization to be patched. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPatchRequest' + required: true + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationResponse' + example: + { + "id": "06c1f4e2-3339-44e4-a825-96585e3653b1", + "name": "XYZ Builders", + "description": "Building constructions", + "status": "ACTIVE", + "created": "2021-10-25T12:31:53.406Z", + "lastModified": "2021-10-25T12:31:53.406Z", + "type": "TENANT", + "parent": { + "id": "10084a8d-113f-4211-a0d5-efe36b082211", + "ref": "/api/server/v1/organizations/10084a8d-113f-4211-a0d5-efe36b082211" + }, + "hasChildren": false, + "attributes": [ + { + "key": "Country", + "value": "USA" + } + ] + } + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/{organization-id}' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '[ + { + "operation": "REPLACE", + "path": "/name", + "value": "XYZ Builders" + } + ]' + x-codegen-request-body-name: body + put: + description: | + This API provides the capability to update an organization by its id. + + Scope(Permission) required: `internal_organization_update` + summary: + Update an organization by ID. + parameters: + - name: organization-id + in: path + description: ID of the organization to be updated. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPUTRequest' + required: true + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationResponse' + example: + { + "id": "06c1f4e2-3339-44e4-a825-96585e3653b1", + "name": "ABCD Builders", + "description": "Building constructions company", + "status": "ACTIVE", + "created": "2021-10-25T12:31:53.406Z", + "lastModified": "2021-10-25T12:31:53.406Z", + "type": "TENANT", + "parent": { + "id": "10084a8d-113f-4211-a0d5-efe36b082211", + "ref": "/api/server/v1/organizations/10084a8d-113f-4211-a0d5-efe36b082211" + }, + "hasChildren": false, + "attributes": [ + { + "key": "Country", + "value": "USA" + } + ] + } + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location --request PUT 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/{organization-id}' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "name": "ABCD Builders", + "description": "Building constructions company", + "status": "ACTIVE", + "attributes": [ + { + "key": "Country", + "value": "USA" + } + ] + }' + x-codegen-request-body-name: body + delete: + description: | + This API provides the capability to delete an organization by + giving its ID. + + Scope(Permission) required: `internal_organization_delete` + summary: + Delete an organization by using the organization's ID. + parameters: + - name: organization-id + in: path + description: ID of the organization to be deleted. + required: true + schema: + type: string + responses: + '204': + description: Successfully deleted + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + tags: + - Organization + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/{organization-id}' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /organizations/self: + get: + tags: + - Organization + description: | + This API retrieves the organization information associated with the currently accessing organization. + + Scopes (Permissions) required: `internal_organization_view` + summary: Get organization details of the currently accessing organization. + operationId: getSelfOrganization + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationResponse' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location --request GET 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/self' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Organization + description: | + This API updates the editable fields of the organization associated with the currently accessing organization. + Currently only the organization name and version can be updated using this API. + + Scopes (Permissions) required: `internal_organization_update` + summary: Update organization details of the currently accessing organization. + operationId: patchSelfOrganization + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPatchRequest' + description: Partial update payload for the organization. + required: true + responses: + '200': + description: Successfully updated organization. + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/self' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '[ + { + "operation": "REPLACE", + "path": "/name", + "value": "ABCD Builders" + } + ]' + /organizations/metadata: + get: + tags: + - Organization Metadata + description: | + This API facilitates the retrieval of metadata including discovery attributes of the logged in organization.
    + + Scope(Permission) required: `internal_organization_view` + summary: + Get metadata of the logged in organization. + operationId: organizationMetadataGet + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationMetadata' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/metadata' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /organizations/meta-attributes: + get: + tags: + - Organization Meta Attributes + description: | + This API facilitates the retrieval of organization meta attributes which matches the defined search criteria, if any. + + Supported operators: "eq"(equals), "co"(contains), "sw"(starts with), "ew"(ends with), "ge"(greater than or equals), "le"(less than or equals), "gt"(greater than), "lt"(less than) + + Multiple filters can be combined using the "and" operator. + + Example: filter=attributes+eq+Country + + Scope(Permission) required: `internal_organization_view` + summary: Get meta attributes of organizations with filter capabilities. + operationId: organizationsMetaAttributesGet + parameters: + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/afterQueryParam' + - $ref: '#/components/parameters/beforeQueryParam' + - $ref: '#/components/parameters/recursiveQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/MetaAttributesResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/meta-attributes' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + parameters: + filterQueryParam: + in: query + name: filter + required: false + description: + Condition to filter the retrieval of records. + schema: + type: string + limitQueryParam: + in: query + name: limit + required: false + description: + Maximum number of records to be returned. (Should be greater than 0) + schema: + type: integer + format: int32 + minimum: 0 + offsetQueryParam: + in: query + name: offset + required: false + description: Number of records to skip for pagination. + schema: + type: integer + format: int32 + minimum: 0 + beforeQueryParam: + in: query + name: before + required: false + description: + Points to the previous range of data that can be retrieved. + schema: + type: string + afterQueryParam: + in: query + name: after + required: false + description: + Points to the next range of data to be returned. + schema: + type: string + recursiveQueryParam: + in: query + name: recursive + required: false + description: | + Determines whether a recursive search should happen. + If set to true, will include organizations in all levels of the hierarchy; If set to false, includes only organizations in the next level of the hierarchy. + schema: + type: boolean + default: false + showChildrenQueryParam: + in: query + name: showChildren + required: false + description: + Returns the organization details along with the child organization IDs belonging to this organization. + schema: + type: boolean + default: false + includePermissionsQueryParam: + in: query + name: includePermissions + required: false + description: + Returns the organization details along with permissions assigned for the requested user in this organization. + schema: + type: boolean + default: false + + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: ORG-00000 + description: An error code. + message: + type: string + example: Some Error Message + description: An error message. + description: + type: string + example: Some Error Description + description: An error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + description: An error trace identifier. + + OrganizationPOSTRequest: + type: object + required: + - name + properties: + name: + type: string + example: "ABC Builders" + orgHandle: + type: string + example: "abcbuilders" + description: + type: string + example: "Building constructions" + parentId: + type: string + description: "The parent organization id should be the organization where the request is invoked. If a value is not specified it will be resolved internally." + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + example: + { + "name": "ABC Builders", + "description": "Building constructions", + "attributes": [ + { + "key": "Country", + "value": "USA" + } + ] + } + OrganizationPUTRequest: + type: object + required: + - name + - status + properties: + name: + type: string + example: "ABCD Builders" + orgHandle: + type: string + example: "abcbuilders" + description: + type: string + example: "Building constructions company" + status: + type: string + enum: [ACTIVE, DISABLED] + example: ACTIVE + version: + type: string + example: 'v1.0.0' + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + OrganizationNameCheckPOSTRequest: + type: object + properties: + name: + type: string + example: "XYZ Builders" + OrganizationNameCheckPOSTResponse: + type: object + properties: + available: + type: boolean + example: true + Attribute: + type: object + required: + - key + - value + properties: + key: + type: string + example: "Country" + value: + type: string + example: "USA" + OrganizationsResponse: + type: object + properties: + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "/api/server/v1/organizations?limit=10&filter=name+co+der&next=MjAyMS0xMi0yMSAwNToxODozMS4wMDQzNDg=", + "rel": "next", + }, { + "href": "/api/server/v1/organizations?limit=10&filter=name+co+der&before=MjAyMS0xMi0yMSAwNToxODozMS4wMDQzNDg=", + "rel": "previous", + } + ] + organizations: + type: array + items: + $ref: '#/components/schemas/BasicOrganizationResponse' + Link: + type: object + properties: + href: + type: string + format: uri + description: Endpoint that will return the next or previous page of data. + rel: + type: string + description: Describes whether the provided link is to access the next or previous page of data. + readOnly: true + BasicOrganizationResponse: + type: object + required: + - id + - name + - orgHandle + - status + - version + - ref + properties: + id: + type: string + example: '06c1f4e2-3339-44e4-a825-96585e3653b1' + name: + type: string + example: 'ABC Builders' + orgHandle: + type: string + example: 'abcbuilders' + status: + type: string + enum: [ ACTIVE, DISABLED ] + example: ACTIVE + version: + type: string + example: 'v1.0.0' + hasChildren: + type: boolean + example: false + ref: + type: string + example: '/api/server/v1/organizations/06c1f4e2-3339-44e4-a825-96585e3653b1' + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + OrganizationResponse: + type: object + required: + - id + - name + - orgHandle + - status + - version + - created + - lastModified + - type + properties: + id: + type: string + example: '06c1f4e2-3339-44e4-a825-96585e3653b1' + name: + type: string + example: 'ABC Builders' + orgHandle: + type: string + example: 'abcbuilders' + description: + type: string + example: 'Building constructions' + status: + type: string + enum: [ACTIVE, DISABLED] + example: ACTIVE + version: + type: string + example: 'v1.0.0' + created: + type: string + example: '2021-10-25T12:31:53.406Z' + lastModified: + type: string + example: '2021-10-25T12:31:53.406Z' + type: + type: string + example: "TENANT" + enum: + - TENANT + parent: + $ref: '#/components/schemas/ParentOrganization' + hasChildren: + type: boolean + example: false + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + GetOrganizationResponse: + type: object + required: + - id + - name + - orgHandle + - status + - version + - created + - lastModified + - type + properties: + id: + type: string + example: '06c1f4e2-3339-44e4-a825-96585e3653b1' + name: + type: string + example: 'ABC Builders' + orgHandle: + type: string + example: 'abcbuilders' + description: + type: string + example: 'Building constructions' + status: + type: string + enum: [ACTIVE, DISABLED] + example: ACTIVE + version: + type: string + example: 'v1.0.0' + created: + type: string + example: '2021-10-25T12:31:53.406Z' + lastModified: + type: string + example: '2021-10-25T12:31:53.406Z' + type: + type: string + example: "TENANT" + enum: + - TENANT + parent: + $ref: '#/components/schemas/ParentOrganization' + hasChildren: + type: boolean + example: false + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + permissions: + type: array + items: + type: string + ancestorPath: + type: array + description: 'Ancestors up to the request initiated organization' + items: + type: object + properties: + id: + type: string + name: + type: string + depth: + type: integer + example: + [ + { + "id": "10084a8d-113f-4211-a0d5-efe36b082211", + "name": "Global Holding Corp", + "depth": 0 + } + ] + MetaAttributesResponse: + type: object + properties: + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "/api/server/v1/organizations/meta-attributes?limit=10&recursive=false&filter=attributes+co+C&after=MjAyMS0xMi0yMSAwNToxODozMS4wMDQzNDg=", + "rel": "next", + }, { + "href": "/api/server/v1/organizations/meta-attributes?limit=10&recursive=false&filter=attributes+co+C&before=MjAyMS0xMi0yMSAwNToxODozMS4wMDQzNDg=", + "rel": "previous", + } + ] + attributes: + type: array + items: + type: string + example: + - "Country" + - "Region" + #----------------------------------------------------- + # Organization Parent Object + #----------------------------------------------------- + ParentOrganization: + type: object + required: + - id + - ref + properties: + id: + type: string + example: '10084a8d-113f-4211-a0d5-efe36b082211' + ref: + type: string + example: '/api/server/v1/organizations/10084a8d-113f-4211-a0d5-efe36b082211' + + #----------------------------------------------------- + # Organization Patch Operation Object + #----------------------------------------------------- + OrganizationPatchRequest: + type: array + items: + $ref: '#/components/schemas/OrganizationPatchRequestItem' + OrganizationPatchRequestItem: + description: A JSONPatch as defined by RFC 6902. Patch operation is supported only for root level attributes of an organization. + required: + - operation + - path + properties: + operation: + type: string + description: The operation to be performed. + enum: + - ADD + - REMOVE + - REPLACE + example: REPLACE + path: + type: string + description: A JSON-Pointer + example: '/name' + value: + type: string + description: The value to be used within the operations. + example: 'XYZ Builders' + DiscoveryAttribute: + type: object + required: + - type + - value + properties: + type: + type: string + example: 'emailDomain' + values: + type: array + items: + type: string + example: 'abc.com' + OrganizationMetadata: + type: object + required: + - id + - name + - orgHandle + - status + - version + - created + - lastModified + - type + properties: + id: + type: string + example: '06c1f4e2-3339-44e4-a825-96585e3653b1' + name: + type: string + example: 'ABC Builders' + orgHandle: + type: string + example: 'abcbuilders' + description: + type: string + example: 'Building constructions' + status: + type: string + enum: [ACTIVE, DISABLED] + example: ACTIVE + version: + type: string + example: 'v1.0.0' + created: + type: string + example: '2021-10-25T12:31:53.406Z' + lastModified: + type: string + example: '2021-10-25T12:31:53.406Z' + type: + type: string + example: "TENANT" + enum: + - TENANT + parent: + $ref: '#/components/schemas/ParentOrganization' + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + permissions: + type: array + items: + type: string + discoveryAttributes: + type: array + items: + $ref: '#/components/schemas/DiscoveryAttribute' + + #-------------------------------------------------------- + # Descriptions of Organization Management API responses. + #-------------------------------------------------------- + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Requested resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + OrgNotFound: + description: Organization Not Found + OrgExist: + description: Organization Exist + #----------------------------------------------------- + # Applicable authentication mechanisms. + #----------------------------------------------------- + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/organization-discovery-config-mgt.yaml b/docusaurus-asgardeo/static/apis/restapis/organization-discovery-config-mgt.yaml new file mode 100644 index 0000000000..0e756d78a4 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/organization-discovery-config-mgt.yaml @@ -0,0 +1,250 @@ +openapi: 3.0.0 +info: + title: Asgardeo - Organization Discovery Configuration Management API Definition + description: This document specifies a **RESTful API** for Organization Discovery Configuration Management in Asgardeo. + version: "v1" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' + variables: + server-url: + default: https://api.asgardeo.io/t/{organization-name}/api/server/v1 + root-organization-name: + default: "{organization-name}" +security: + - OAuth2: [] + +paths: + /organization-configs/discovery: + get: + tags: + - Discovery + summary: Get organization discovery configuration. + description: | + This API facilitates the retrieval of discovery configuration of the root organization.
    + + Scope(Permission) required: `internal_organization_config_view` + operationId: getDiscoveryConfig + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/Config' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organization-configs/discovery' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Discovery + summary: Add organization discovery configuration. + description: | + This API provides the capability to add discovery configuration for the root organization.
    + + Scope(Permission) required: `internal_organization_config_add` + operationId: createDiscoveryConfig + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Config' + responses: + '201': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/Config' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organization-configs/discovery' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "properties": [ + { + "key": "emailDomain.enable", + "value": true + } + ] + }' + x-codegen-request-body-name: body + put: + tags: + - Discovery + summary: Update organization discovery configuration. + description: | + This API provides the capability to update discovery configuration of the root organization.
    + + Scope(Permission) required: `internal_organization_config_update` + operationId: updateDiscoveryConfig + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Config' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/Config' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location --request PUT 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organization-configs/discovery' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "properties": [ + { + "key": "emailDomain.enable", + "value": true + } + ] + }' + x-codegen-request-body-name: body + delete: + tags: + - Discovery + summary: Delete organization discovery configuration. + description: | + This API provides the capability to delete discovery configuration of the root organization.
    + + Scope(Permission) requiredd: `internal_organization_config_delete` + operationId: deleteDiscoveryConfig + responses: + '204': + $ref: '#/components/responses/NoContent' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organization-configs/discovery' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: OCM-00000 + description: An error code. + message: + type: string + example: Some Error Message + description: An error message. + description: + type: string + example: Some Error Description + description: An error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + description: An error trace identifier. + + Config: + type: object + required: + - properties + properties: + properties: + type: array + items: + $ref: '#/components/schemas/Properties' + Properties: + required: + - key + - value + type: object + properties: + key: + type: string + example: emailDomain.enable + value: + type: string + example: true + + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Requested resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Conflict: + description: Resource already exists. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + NoContent: + description: No content. + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/token + scopes: {} \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/organization-discovery.yaml b/docusaurus-asgardeo/static/apis/restapis/organization-discovery.yaml new file mode 100644 index 0000000000..22323842b4 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/organization-discovery.yaml @@ -0,0 +1,551 @@ +openapi: 3.0.0 +info: + version: "v1" + title: 'Organization Discovery API' + description: | + This document specifies an **Organization Discovery RESTful API** for Asgardeo. + +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' + +security: + - OAuth2: [] + +paths: + /organizations/discovery: + post: + tags: + - Organization Discovery + description: | + This API serves the purpose of adding discovery attributes to an organization, with the current restriction that only the primary organization has the capability to perform this action.
    + + Scope(Permission) required: `internal_organization_discovery_update` + summary: + Map discovery attributes to the organization. + operationId: organizationDiscoveryPost + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationDiscoveryPostRequest' + description: This represents the organization discovery attributes to be added. + required: true + responses: + '201': + description: Successful response + headers: + Location: + description: Location URL to fetch the discovery attributes of the organization. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationDiscoveryAttributes' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/discovery' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "organizationId": "06c1f4e2-3339-44e4-a825-96585e3653b1", + "attributes": [ + { + "type": "emailDomain", + "values": [ + "abc.com" + ] + } + ] + }' + x-codegen-request-body-name: body + get: + tags: + - Organization Discovery + description: | + This API facilitates the retrieval of discovery attributes of organizations in the hierarchy, allowing filtering by discovery attribute type and value. It currently provides the capability to retrieve these attributes from only the primary organization.
    + + Scope(Permission) required: `internal_organization_discovery_view` + summary: + Get discovery attributes of organizations. + operationId: organizationsDiscoveryGet + parameters: + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/limitQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationsDiscoveryResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/discovery' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /organizations/{organization-id}/discovery: + get: + tags: + - Organization Discovery + description: | + This API facilitates the retrieval of discovery attributes for an organization. It currently provides the capability to retrieve these attributes only from the primary organization.
    + + Scope(Permission) required: `internal_organization_discovery_view` + summary: + Get discovery attributes of the organization. + operationId: organizationDiscoveryGet + parameters: + - name: organization-id + in: path + description: ID of the organization whose discovery attributes are to be fetched. + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationDiscoveryAttributes' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/06c1f4e2-3339-44e4-a825-96585e3653b1/discovery' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + delete: + tags: + - Organization Discovery + description: | + This API serves the purpose of deleting discovery attributes of an organization, with the current restriction that only the primary organization has the capability to perform this action.
    + + Scope(Permission) required: `internal_organization_discovery_delete` + summary: + Delete discovery attributes of an organization. + parameters: + - name: organization-id + in: path + description: ID of the organization whose discovery attributes are to be deleted. + required: true + schema: + type: string + responses: + '204': + description: Successfully deleted + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/06c1f4e2-3339-44e4-a825-96585e3653b1/discovery' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Organization Discovery + description: | + This API serves the purpose of updating discovery attributes of an organization, with the current restriction that only the primary organization has the capability to perform this action.
    + + Scope(Permission) required: `internal_organization_discovery_update` + summary: + Update discovery attributes of an organization. + parameters: + - name: organization-id + in: path + description: ID of the organization whose discovery attributes are to be updated. + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationDiscoveryAttributes' + required: true + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationDiscoveryAttributes' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location --request PUT 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/06c1f4e2-3339-44e4-a825-96585e3653b1/discovery' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "attributes": [ + { + "type": "emailDomain", + "values": [ + "abc.com" + ] + } + ] + }' + x-codegen-request-body-name: body + /organizations/check-discovery: + post: + tags: + - Organization Discovery + summary: Check whether given discovery attribute exists among the organization hierarchy. + description: | + This API is used to verify whether a specific discovery attribute has already been associated with an organization within the hierarchy. It is available for use within any organization in the hierarchy. + + Scope(Permission) required: `internal_organization_discovery_view` + operationId: organizationCheckDiscovery + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationDiscoveryCheckPOSTRequest' + required: true + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationDiscoveryCheckPOSTResponse' + '404': + $ref: '#/components/responses/NotFound' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/organizations/check-discovery' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "type": "emailDomain", + "value": "abc.com" + }' + x-codegen-request-body-name: body +components: + parameters: + filterQueryParam: + in: query + name: filter + required: false + description: + Condition to filter the retrieval of records. + schema: + type: string + limitQueryParam: + in: query + name: limit + required: false + description: + Maximum number of records to be returned. (Should be greater than 0) + schema: + type: integer + format: int32 + minimum: 0 + offsetQueryParam: + in: query + name: offset + required: false + description: Number of records to skip for pagination. + schema: + type: integer + format: int32 + minimum: 0 + beforeQueryParam: + in: query + name: before + required: false + description: + Points to the previous range of data that can be retrieved. + schema: + type: string + afterQueryParam: + in: query + name: after + required: false + description: + Points to the next range of data to be returned. + schema: + type: string + recursiveQueryParam: + in: query + name: recursive + required: false + description: + Determines whether a recursive search should happen. + schema: + type: boolean + default: false + showChildrenQueryParam: + in: query + name: showChildren + required: false + description: + Returns the organization details along with the child organization IDs belonging to this organization. + schema: + type: boolean + default: false + includePermissionsQueryParam: + in: query + name: includePermissions + required: false + description: + Returns the organization details along with permissions assigned for the requested user in this organization. + schema: + type: boolean + default: false + + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: ORG-00000 + description: An error code. + message: + type: string + example: Some Error Message + description: An error message. + description: + type: string + example: Some Error Description + description: An error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + description: An error trace identifier. + Link: + type: object + properties: + href: + type: string + format: uri + description: Endpoint that will return the next or previous page of data. + rel: + type: string + description: Describes whether the provided link is to access the next or previous page of data. + readOnly: true + OrganizationDiscoveryPostRequest: + type: object + required: + - organizationId + - attributes + properties: + organizationId: + type: string + description: The ID of the organization whose discovery attributes are to be added. + example: '06c1f4e2-3339-44e4-a825-96585e3653b1' + attributes: + type: array + items: + $ref: '#/components/schemas/DiscoveryAttribute' + OrganizationDiscoveryAttributes: + type: object + required: + - attributes + properties: + attributes: + type: array + items: + $ref: '#/components/schemas/DiscoveryAttribute' + DiscoveryAttribute: + type: object + required: + - type + - value + properties: + type: + type: string + example: 'emailDomain' + values: + type: array + items: + type: string + example: 'abc.com' + OrganizationsDiscoveryResponse: + type: object + properties: + totalResults: + type: integer + example: 10 + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "/api/server/v1/organizations/discovery?filter=attributes.type+eq+emailDomain&limit=10&offset=50", + "rel": "next", + }, { + "href": "/api/server/v1/organizations/discovery?filter=attributes.type+eq+emailDomain&limit=10&offset=30", + "rel": "previous", + } + ] + organizations: + type: array + items: + $ref: '#/components/schemas/OrganizationDiscoveryResponse' + OrganizationDiscoveryResponse: + type: object + required: + - organizationId + - organizationName + - orgHandle + - attributes + properties: + organizationId: + type: string + description: The ID of the organization. + example: '06c1f4e2-3339-44e4-a825-96585e3653b1' + organizationName: + type: string + description: The name of the organization. + example: 'ABC Builders' + orgHandle: + type: string + description: The handle of the organization. + example: 'abcbuilders' + attributes: + type: array + items: + $ref: '#/components/schemas/DiscoveryAttribute' + OrganizationDiscoveryCheckPOSTRequest: + required: + - type + - value + type: object + properties: + type: + type: string + example: 'emailDomain' + value: + type: string + example: 'abc.com' + OrganizationDiscoveryCheckPOSTResponse: + type: object + required: + - available + properties: + available: + type: boolean + example: true + #-------------------------------------------------------- + # Descriptions of Organization Management API responses. + #-------------------------------------------------------- + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Requested resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + OrgNotFound: + description: Organization Not Found + OrgExist: + description: Organization Exist + #----------------------------------------------------- + # Applicable authentication mechanisms. + #----------------------------------------------------- + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/organization-user-share-v2.yaml b/docusaurus-asgardeo/static/apis/restapis/organization-user-share-v2.yaml new file mode 100644 index 0000000000..88edb4f6c0 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/organization-user-share-v2.yaml @@ -0,0 +1,1080 @@ +openapi: 3.0.0 +info: + version: 1.0.0 + title: "User Sharing API (v2)" + description: |- + This document defines the **User Sharing REST API (v2)** for organizations in **Asgardeo**. + It enables organization administrators to: + - Share users across child organizations. + - Configure per-organization user role assignments. + - Manage and revoke shared access. + - Retrieve a user's shared organizations and effective roles. + + **Shared scopes with User Sharing API v1:** The OAuth2 scopes `internal_user_share`, `internal_user_unshare`, and `internal_user_shared_access_view` are shared between this API (User Sharing v2) and the User Sharing v1 API. Authorizing either API automatically grants access to the equivalent endpoints in the other that use the same scopes. + + contact: + name: WSO2 + url: 'https://wso2.com/asgardeo/' + email: iam-dev@wso2.org + license: + name: Apache 2.0 + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v2' + variables: + organization-name: + default: "{organization-name}" + +security: + - OAuth2: [] + +paths: + /users/share: + post: + tags: + - User Sharing + summary: Share users with specific organizations + description: |- + Share one or more users with a selected set of organizations, optionally + assigning roles to each shared user in each target organization. + + This endpoint is treated as a **processing function**: + it triggers a sharing process and responds with `202 Accepted`. + + **Scope required:** `internal_user_share` + operationId: shareUsersWithSelected + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UserShareSelectedRequestBody" + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + organizations: + - orgId: "b028ca17-8f89-449c-ae27-fa955e66465d" + policy: "SELECTED_ORG_ONLY" + roleAssignment: + mode: "SELECTED" + roles: + - displayName: "Org Admin" + audience: + display: "My Org 1" + type: "organization" + - orgId: "a17b28ca-9f89-449c-ae27-fa955e66465f" + policy: "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN" + responses: + "202": + description: User sharing process triggered successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "User sharing process triggered successfully." + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v2/users/share' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8", + "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + ] + }, + "organizations": [ + { + "orgId": "b028ca17-8f89-449c-ae27-fa955e66465d", + "policy": "SELECTED_ORG_ONLY", + "roleAssignment": { + "mode": "SELECTED", + "roles": [ + { + "displayName": "Org Admin", + "audience": { + "display": "My Org 1", + "type": "organization" + } + } + ] + } + }, + { + "orgId": "a17b28ca-9f89-449c-ae27-fa955e66465f", + "policy": "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN" + } + ] + }' + + patch: + tags: + - User Sharing + summary: Perform incremental role assignment operations for already shared users + description: |- + Perform **incremental updates** to the shared attributes (eg: role assignments) update of already shared users. + + This endpoint supports **SCIM-like PATCH semantics**: + - `op: "add"` → assign additional roles. + - `op: "remove"` → remove specific roles. + + > **Note:** + > Only **role assignments** updates are managed here as of now. Sharing/unsharing organizations + > is handled via `/users/share`, `/users/share-with-all`, `/users/unshare`, + > and `/users/unshare-with-all`. + + **Scope required:** `internal_user_shared_access_update` + operationId: patchUserSharing + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UserSharingPatchRequest" + examples: + addAndRemoveRoles: + summary: Add and remove roles for a shared user in a specific organization + value: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + Operations: + - op: "add" + path: "organizations[orgId eq b028ca17-8f89-449c-ae27-fa955e66465d].roles" + value: + - displayName: "Org Viewer" + audience: + display: "My Org 1" + type: "organization" + - displayName: "App Editor" + audience: + display: "My App 1" + type: "application" + - op: "remove" + path: "organizations[orgId eq b028ca17-8f89-449c-ae27-fa955e66465d].roles" + value: + - displayName: "Org Admin" + audience: + display: "My Org 1" + type: "organization" + responses: + "202": + description: Role assignment patch operation processed successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "Shared user attributes patch process triggered successfully." + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Not Found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/api/server/v2/users/share' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + ] + }, + "Operations": [ + { + "op": "add", + "path": "organizations[orgId eq b028ca17-8f89-449c-ae27-fa955e66465d].roles", + "value": [ + { + "displayName": "Org Viewer", + "audience": { + "display": "My Org 1", + "type": "organization" + } + }, + { + "displayName": "App Editor", + "audience": { + "display": "My App 1", + "type": "application" + } + } + ] + }, + { + "op": "remove", + "path": "organizations[orgId eq b028ca17-8f89-449c-ae27-fa955e66465d].roles", + "value": [ + { + "displayName": "Org Admin", + "audience": { + "display": "My Org 1", + "type": "organization" + } + } + ] + } + ] + }' + + /users/share-with-all: + post: + tags: + - User Sharing + summary: Share users with all organizations + description: |- + Share one or more users with **all organizations** according to the specified policy. + + A common `roleAssignment` can be provided to assign roles in all matching organizations. + + This endpoint is treated as a **processing function** and responds with `202 Accepted`. + + **Scope required:** `internal_user_share` + operationId: shareUsersWithAll + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UserShareAllRequestBody" + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + policy: "ALL_EXISTING_AND_FUTURE_ORGS" + roleAssignment: + mode: "SELECTED" + roles: + - displayName: "Global Org Viewer" + audience: + display: "My Org 1" + type: "organization" + responses: + "202": + description: Share-all process triggered successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v2/users/share-with-all' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + ] + }, + "policy": "ALL_EXISTING_AND_FUTURE_ORGS", + "roleAssignment": { + "mode": "SELECTED", + "roles": [ + { + "displayName": "Global Org Viewer", + "audience": { + "display": "My Org 1", + "type": "organization" + } + } + ] + } + }' + + /users/unshare: + post: + tags: + - User Sharing + summary: Unshare users from specific organizations + description: |- + Unshare one or more users from a selected set of organizations. + + > **Note:** + > This only removes the user from the specified organizations. If the user + > was shared with a parent org plus its children via a broader policy, + > you must explicitly include all relevant organization IDs when unsharing. + + This endpoint is treated as a **processing function** and responds with `202 Accepted`. + + **Scope required:** `internal_user_unshare` + operationId: unshareUsersFromSelected + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UserUnshareSelectedRequestBody" + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + orgIds: + - "b028ca17-8f89-449c-ae27-fa955e66465d" + - "a17b28ca-9f89-449c-ae27-fa955e66465f" + responses: + "202": + description: Unsharing process triggered successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "User unsharing process triggered successfully." + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v2/users/unshare' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + ] + }, + "orgIds": [ + "b028ca17-8f89-449c-ae27-fa955e66465d", + "a17b28ca-9f89-449c-ae27-fa955e66465f" + ] + }' + + /users/unshare-with-all: + post: + tags: + - User Sharing + summary: Unshare users from all organizations + description: |- + Completely remove all shared access for one or more users from **all organizations**. + + This endpoint is treated as a **processing function** and responds with `202 Accepted`. + + **Scope required:** `internal_user_unshare` + operationId: unshareUsersFromAll + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/UserUnshareAllRequestBody" + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + responses: + "202": + description: Unshare-all process triggered successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/ProcessSuccessResponse" + example: + status: "Processing" + details: "User unsharing process triggered successfully." + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v2/users/unshare-with-all' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + ] + } + }' + + /users/{userId}/share: + get: + tags: + - User Accessible Organizations + summary: List organizations where the user has shared access + description: |- + Retrieve the list of organizations where the specified user has shared access, + including per-organization effective role assignments. + + The response shape depends on how the user was shared: + - If user has been shared via **`ALL_EXISTING_AND_FUTURE_ORGS`** policy → top-level `sharingMode` is returned, + and no per-org `sharingMode` is present on each organization entry. + - If user has been shared via **`SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN`** → no top-level `sharingMode` is returned, + and each organization entry includes its own `sharingMode`. + - If user has not been shared under any future applicable policies mentioned above, the response will simply include the list of shared organizations without any `sharingMode` information. + + This follows the same pattern as **`GET /applications/{applicationId}/share`**. + + **Scope required:** `internal_user_shared_access_view` + operationId: getUserSharedOrganizations + parameters: + - in: path + name: userId + required: true + schema: + type: string + description: The ID of the user. + - in: query + name: before + required: false + schema: + type: string + example: "Ng==" + description: Base64 encoded cursor value for backward pagination. + - in: query + name: after + required: false + schema: + type: string + example: "Ng==" + description: Base64 encoded cursor value for forward pagination. + - in: query + name: filter + required: false + schema: + type: string + example: "orgId eq b028ca17-8f89-449c-ae27-fa955e66465d" + description: |- + Condition to filter the retrieval of records. + Supports `sw`, `co`, `ew`, and `eq` operations. + - in: query + name: limit + required: false + schema: + type: integer + example: 10 + description: |- + Maximum number of records to return. If you do not specify this parameter, + this will return all shared organizations. + - in: query + name: recursive + required: false + schema: + type: boolean + description: |- + Determines whether a recursive search should happen. + If set to true, includes shared organizations in all levels of the hierarchy; + if set to false, includes only shared organizations in the next level of the hierarchy. + - in: query + name: attributes + required: false + schema: + type: string + example: "roles" + description: |- + Specifies the required parameters in the response. + Supported values: `roles`, `sharingMode`. + responses: + "200": + description: Successful response with the user's shared organizations. + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/UserSharedOrgsAllResponse" + - $ref: "#/components/schemas/UserSharedOrgsSelectedResponse" + examples: + sharedWithAll: + summary: User shared with all organizations + value: + links: + - href: "/t/{organization-name}/api/server/v2/users/7a1b7d63-8cfc-4dc9-9332-3f84641b72d8/share?limit=10&after=MTA=" + rel: "next" + sharingMode: + policy: "ALL_EXISTING_AND_FUTURE_ORGS" + roleAssignment: + mode: "SELECTED" + roles: + - displayName: "Global Org Viewer" + audience: + display: "My Org 1" + type: "organization" + organizations: + - orgId: "b028ca17-8f89-449c-ae27-fa955e66465d" + orgName: "Child Org 1" + orgHandle: "child-org-1" + orgStatus: "ACTIVE" + orgRef: "/t/wso2.com/api/server/v1/organizations/b028ca17-8f89-449c-ae27-fa955e66465d" + hasChildren: true + depthFromRoot: 1 + parentOrgId: "08f8c1d2-4b3e-4c5a-9f6b-7d8e9f0a1b2c" + parentUserId: "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + sharedUserId: "550e8400-e29b-41d4-a716-446655440000" + sharedType: "SHARED" + roles: + - displayName: "Global Org Viewer" + audience: + display: "My Org 1" + type: "organization" + sharedWithSelected: + summary: User shared with selected organizations + value: + links: + - href: "/t/{organization-name}/api/server/v2/users/7a1b7d63-8cfc-4dc9-9332-3f84641b72d8/share?limit=10&after=MTA=" + rel: "next" + organizations: + - orgId: "b028ca17-8f89-449c-ae27-fa955e66465d" + orgName: "Child Org 1" + orgHandle: "child-org-1" + orgStatus: "ACTIVE" + orgRef: "/t/wso2.com/api/server/v1/organizations/b028ca17-8f89-449c-ae27-fa955e66465d" + hasChildren: true + depthFromRoot: 1 + parentOrgId: "08f8c1d2-4b3e-4c5a-9f6b-7d8e9f0a1b2c" + parentUserId: "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + sharedUserId: "550e8400-e29b-41d4-a716-446655440000" + sharedType: "SHARED" + sharingMode: + policy: "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN" + roleAssignment: + mode: "SELECTED" + roles: + - displayName: "Org Admin" + audience: + display: "My Org 1" + type: "organization" + roles: + - displayName: "Org Admin" + audience: + display: "My Org 1" + type: "organization" + - orgId: "a17b28ca-9f89-449c-ae27-fa955e66465f" + orgName: "Child Org 2" + orgHandle: "child-org-2" + orgStatus: "ACTIVE" + orgRef: "/t/wso2.com/api/server/v1/organizations/a17b28ca-9f89-449c-ae27-fa955e66465f" + hasChildren: false + depthFromRoot: 1 + parentOrgId: "08f8c1d2-4b3e-4c5a-9f6b-7d8e9f0a1b2c" + parentUserId: "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + sharedUserId: "3f2504e0-4f89-41d3-9a0c-0305e82c3301" + sharedType: "SHARED" + sharingMode: + policy: "SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN" + roleAssignment: + mode: "NONE" + roles: [] + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Internal Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + x-codeSamples: + - lang: Curl + label: Basic + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v2/users/{userId}/share' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + - lang: Curl + label: With pagination and attributes + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v2/users/{userId}/share?limit=10&after=Ng==&attributes=roles,sharingMode&recursive=true' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + - lang: Curl + label: With filter + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v2/users/{userId}/share?filter=orgId+eq+b028ca17-8f89-449c-ae27-fa955e66465d' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + +components: + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: "https://api.asgardeo.io/t/{organization-name}/oauth2/authorize" + tokenUrl: "https://api.asgardeo.io/t/{organization-name}/oauth2/token" + scopes: + internal_user_share: "Share users across organizations." + internal_user_unshare: "Unshare users from organizations." + internal_user_shared_access_view: "View shared organizations and roles for a user." + internal_user_shared_access_update: "Update shared attributes (e.g., roles) for shared users." + + schemas: + + # ===== Core request models ===== + + UserCriteria: + type: object + description: Criteria for selecting users to share/unshare. + properties: + userIds: + type: array + description: List of user IDs. + items: + type: string + required: + - userIds + + UserShareSelectedRequestBody: + type: object + description: |- + Request body for sharing users with a **selected set of organizations**. + required: + - userCriteria + - organizations + properties: + userCriteria: + $ref: "#/components/schemas/UserCriteria" + organizations: + type: array + description: List of organizations to share users with, along with policies and optional role assignments. + items: + $ref: "#/components/schemas/UserOrgShareConfig" + + UserOrgShareConfig: + type: object + description: Per-organization sharing configuration for selected organizations. + required: + - orgId + - policy + properties: + orgId: + type: string + description: Organization ID to share the users with. + policy: + type: string + description: |- + Sharing scope for this organization. + + Possible values: + - `SELECTED_ORG_ONLY` + - `SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN` + roleAssignment: + $ref: "#/components/schemas/RoleAssignment" + description: |- + Optional role assignment configuration for this organization. + If omitted, the default behavior is to assign **no roles** (equivalent to `mode = NONE`). + + UserShareAllRequestBody: + type: object + description: |- + Request body for sharing users with **all organizations** controlled by the selected policy. + required: + - userCriteria + - policy + properties: + userCriteria: + $ref: "#/components/schemas/UserCriteria" + policy: + type: string + description: |- + Global sharing policy. + + Possible values: + - `ALL_EXISTING_AND_FUTURE_ORGS` + roleAssignment: + $ref: "#/components/schemas/RoleAssignment" + description: |- + Optional global role assignment configuration that applies to all organizations + covered by this policy. If omitted, default behavior is **no roles**. + + UserUnshareSelectedRequestBody: + type: object + description: |- + Request body for unsharing users from selected organizations. + required: + - userCriteria + - orgIds + properties: + userCriteria: + $ref: "#/components/schemas/UserCriteria" + orgIds: + type: array + description: List of organization IDs from which users should be unshared. + items: + type: string + + UserUnshareAllRequestBody: + type: object + description: |- + Request body for unsharing users from **all organizations**. + required: + - userCriteria + properties: + userCriteria: + $ref: "#/components/schemas/UserCriteria" + + # ===== PATCH models ===== + + UserSharingPatchRequest: + type: object + description: |- + PATCH request for performing incremental role assignment operations + on already shared users. + required: + - userCriteria + - Operations + properties: + userCriteria: + $ref: "#/components/schemas/UserCriteria" + Operations: + type: array + items: + $ref: "#/components/schemas/UserSharingPatchOperation" + + UserSharingPatchOperation: + type: object + description: |- + A single PATCH operation (SCIM-like) for user sharing. + + Currently supported: + - `op: "add"` → Add roles. + - `op: "remove"` → Remove roles. + required: + - op + - path + properties: + op: + type: string + description: "Operation type. Supported values: `add`, `remove`." + path: + type: string + description: |- + JSON-like path in the format: + - `organizations[orgId eq \"\"].roles` + value: + type: array + description: |- + List of roles to add/remove under the specified path. + items: + $ref: "#/components/schemas/RoleShareConfig" + + # ===== Role assignment models ===== + + RoleAssignment: + type: object + description: |- + Role assignment configuration for shared users. + + This controls which roles are assigned to the user in the target organization. + + - `NONE` → Do not assign any roles via user sharing. + - `SELECTED` → Assign only the roles listed under `roles`. + properties: + mode: + type: string + enum: + - NONE + - SELECTED + default: SELECTED + description: Mode of role assignment. + roles: + type: array + description: |- + List of roles to assign when `mode = SELECTED`. + Required when `mode = SELECTED`. Ignored when `mode = NONE`. + items: + $ref: "#/components/schemas/RoleShareConfig" + + RoleShareConfig: + type: object + description: |- + Role to be assigned to the shared user in the sub-organization. + required: + - displayName + - audience + properties: + displayName: + type: string + description: "Human-readable name of the role." + example: "Org Admin" + audience: + type: object + required: + - display + - type + properties: + display: + type: string + description: "Display name of the audience (organization or application)." + example: "My Org 1" + type: + type: string + description: |- + Type of the role audience: + - `organization` + - `application` + example: "organization" + + # ===== Sharing Mode models ===== + + SharingModeAll: + type: object + description: |- + Top-level sharing mode present when the user is shared with ALL organizations. + Policy is always `ALL_EXISTING_AND_FUTURE_ORGS`. + required: + - policy + - roleAssignment + properties: + policy: + type: string + enum: + - ALL_EXISTING_AND_FUTURE_ORGS + description: Global sharing policy covering all existing and future organizations. + roleAssignment: + $ref: "#/components/schemas/RoleAssignment" + + SharingModeSelected: + type: object + description: |- + Per-org sharing mode present when the user is shared with SELECTED organizations. + Policy is always `SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN`. + required: + - policy + - roleAssignment + properties: + policy: + type: string + enum: + - SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN + description: Sharing policy scoped to a selected organization and its children. + roleAssignment: + $ref: "#/components/schemas/RoleAssignment" + + # ===== Organization entry models ===== + + UserSharedOrganizationBase: + type: object + description: Common fields for a shared organization entry. + properties: + orgId: + type: string + description: ID of the child organization. + orgName: + type: string + description: Name of the child organization. + orgHandle: + type: string + description: Unique, human-readable handle of the organization. + example: "sampleOrg" + orgStatus: + type: string + description: Current status of the organization. + example: "ACTIVE" + orgRef: + type: string + description: API reference of the organization resource. + example: "/t/wso2.com/api/server/v1/organizations/b4526d91-a8bf-43d2-8b14-c548cf73065b" + hasChildren: + type: boolean + description: Indicates whether the organization has child organizations. + depthFromRoot: + type: integer + description: Depth of the organization in the hierarchy, where root is 0. + example: 1 + parentOrgId: + type: string + nullable: true + description: ID of the parent (sharing initiated) organization. + parentUserId: + type: string + nullable: true + description: ID of the user in the parent (sharing initiated) organization. + sharedUserId: + type: string + description: ID of the shared user object in the target organization. + sharedType: + type: string + description: Shared type of the user. + example: "SHARED" + roles: + type: array + description: Effective roles assigned to this user in this organization via user sharing. + items: + $ref: "#/components/schemas/RoleShareConfig" + + UserSharedOrganizationAllEntry: + description: |- + Organization entry when user is shared via ALL_EXISTING_AND_FUTURE_ORGS policy. + No per-org sharingMode is present. + allOf: + - $ref: "#/components/schemas/UserSharedOrganizationBase" + + UserSharedOrganizationSelectedEntry: + description: |- + Organization entry when user is shared via SELECTED org policy. + Includes per-org sharingMode with policy SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN. + allOf: + - $ref: "#/components/schemas/UserSharedOrganizationBase" + - type: object + required: + - sharingMode + properties: + sharingMode: + $ref: "#/components/schemas/SharingModeSelected" + + # ===== Top-level response models ===== + + UserSharedOrgsAllResponse: + type: object + description: |- + Response when the user is shared with ALL organizations. + - Top-level `sharingMode` is present with policy `ALL_EXISTING_AND_FUTURE_ORGS`. + - Per-org `sharingMode` is absent on each organization entry. + required: + - sharingMode + - organizations + properties: + links: + type: array + items: + $ref: "#/components/schemas/Link" + sharingMode: + $ref: "#/components/schemas/SharingModeAll" + organizations: + type: array + items: + $ref: "#/components/schemas/UserSharedOrganizationAllEntry" + + UserSharedOrgsSelectedResponse: + type: object + description: |- + Response when the user is shared with SELECTED organizations. + - Top-level `sharingMode` is absent. + - Each organization entry includes its own `sharingMode` with policy + `SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN`. + required: + - organizations + properties: + links: + type: array + items: + $ref: "#/components/schemas/Link" + organizations: + type: array + items: + $ref: "#/components/schemas/UserSharedOrganizationSelectedEntry" + + # ===== Common models ===== + + Link: + type: object + properties: + href: + type: string + example: "/t/{organization-name}/api/server/v2/users/7a1b7d63-8cfc-4dc9-9332-3f84641b72d8/share?limit=10&after=MTA=" + rel: + type: string + example: "next" + + ProcessSuccessResponse: + type: object + description: |- + Indicates that a sharing / unsharing / patch process has been triggered. + properties: + status: + type: string + example: "Processing" + details: + type: string + example: "User sharing process triggered successfully." + + Error: + type: object + description: | + Error response model with a code, message, description, and trace ID. + required: + - code + - message + - traceId + properties: + code: + type: string + example: "US-00000" + message: + type: string + example: "Some error message." + description: + type: string + example: "Some error description." + traceId: + type: string + example: "e0fbcfeb-7fc2-4b62-8b82-72d3c5fbcdeb" diff --git a/docusaurus-asgardeo/static/apis/restapis/organization-user-share.yaml b/docusaurus-asgardeo/static/apis/restapis/organization-user-share.yaml new file mode 100644 index 0000000000..e563bbd821 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/organization-user-share.yaml @@ -0,0 +1,804 @@ +openapi: 3.0.0 +info: + version: "v1" + title: 'User Sharing API (deprecated)' + description: |- + This document defines the **User Sharing REST API for organizations** in **Asgardeo**. This enables organization administrators to share users across child organizations, manage and revoke shared access, and retrieve users' shared organizations and roles. + + **Shared scopes with User Sharing API v2:** The OAuth2 scopes `internal_user_share`, `internal_user_unshare`, and `internal_user_shared_access_view` are shared between this API (v1) and the User Sharing v2 API. Authorizing either API automatically grants access to the equivalent endpoints in the other that use the same scopes. + +security: + - OAuth2: [] + - BasicAuth: [] + +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' + variables: + tenant-domain: + default: "{tenant-domain}" + +paths: + /users/share: + post: + tags: + - User Sharing + summary: Share a user across specific organizations + description: | + This API shares one or more users across specified organizations, assigning roles based on the provided policy. The policy defines the sharing scope for each organization, including whether access extends to child organizations. + + > **Important**
    + > If you switch a user from a general sharing policy to a selective sharing policy or vice versa, without unsharing a user, it can lead to access issues. To ensure a smooth transition, first unshare the user from all organizations and share them again with the desired organization(s) under the updated policy.
    + > If you overlook this step and notice unexpected user-sharing behavior when new organizations are created, use the `/users/unshare-with-all` API to reset access before applying the new sharing policy. + + Scope(Permission) required: `internal_user_share` + operationId: processUserSharing + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserShareRequestBody' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + organizations: + - orgId: "b028ca17-8f89-449c-ae27-fa955e66465d" + policy: "SELECTED_ORG_ONLY" + roles: + - displayName: "role_2" + audience: + display: "My Org 1" + type: "organization" + - orgId: "a17b28ca-9f89-449c-ae27-fa955e66465f" + policy: "SELECTED_ORG_WITH_EXISTING_IMMEDIATE_AND_FUTURE_CHILDREN" + roles: [] + required: true + responses: + '202': + description: Sharing process triggered successfully. + content: + application/json: + schema: + $ref: '#/components/schemas/ProcessSuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/users/share' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token} \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8", + "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + ] + }, + "organizations": [ + { + "orgId": "b028ca17-8f89-449c-ae27-fa955e66465d", + "policy": "SELECTED_ORG_ONLY", + "roles": [ + { + "displayName": "role_2", + "audience": { + "display": "My Org 1", + "type": "organization" + } + } + ] + }, + { + "orgId": "a17b28ca-9f89-449c-ae27-fa955e66465f", + "policy": "SELECTED_ORG_WITH_EXISTING_IMMEDIATE_AND_FUTURE_CHILDREN", + "roles": [] + } + ] + }' + x-codegen-request-body-name: body + + /users/share-with-all: + post: + tags: + - User Sharing + summary: Share a user with all organizations + description: | + This API shares users across all organizations, applying the provided roles to each organization. The policy determines the scope of sharing, including whether it applies to all current organizations or future organizations as well. + + > **Important**
    + > If you switch a user from a general sharing policy to a selective sharing policy or vice versa, without unsharing a user, it can lead to access issues. To ensure a smooth transition, first unshare the user from all organizations and share them again with the desired organization(s) under the updated policy.
    + > If you overlook this step and notice unexpected user-sharing behavior when new organizations are created, use the `/users/unshare-with-all` API to reset access before applying the new sharing policy. + + Scope(Permission) required: `internal_user_share` + operationId: processUserSharingAll + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserShareWithAllRequestBody' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + policy: "ALL_EXISTING_ORGS_ONLY" + roles: + - displayName: "role_1" + audience: + display: "My Org 1" + type: "organization" + - displayName: "role_2" + audience: + display: "My App 1" + type: "application" + required: true + responses: + '202': + description: Sharing process triggered successfully. + content: + application/json: + schema: + $ref: '#/components/schemas/ProcessSuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/users/share-with-all' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token} \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8", + "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + ] + }, + "policy": "ALL_EXISTING_ORGS_ONLY", + "roles": [ + { + "displayName": "role_1", + "audience": { + "display": "My Org 1", + "type": "organization" + } + }, + { + "displayName": "role_2", + "audience": { + "display": "My App 1", + "type": "application" + } + } + ] + }' + x-codegen-request-body-name: body + + /users/unshare: + post: + tags: + - User Sharing + summary: Unshare a user from specific organizations + description: | + The parent organization admins can use this API to unshare a shared user from a selected list of organizations. + The payload includes the list of user IDs and the organizations from which the users should be unshared. + + Note the following details: + - unsharing can only be done from the same organization that initially shared the user. + - if you have shared a user with an organization and its children, unsharing the user from that + organization will not unshare the user from the child organizations. + You must explicitly declare all the organization IDs from which the user should be removed. + + Scope(Permission) required: `internal_user_unshare` + operationId: processUserUnsharing + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserUnshareRequestBody' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + organizations: + - "b028ca17-8f89-449c-ae27-fa955e66465d" + - "a17b28ca-9f89-449c-ae27-fa955e66465f" + required: true + responses: + '202': + description: Unsharing process triggered successfully. + content: + application/json: + schema: + $ref: '#/components/schemas/ProcessSuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/users/unshare' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token} \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8", + "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + ] + }, + "organizations": [ + "b028ca17-8f89-449c-ae27-fa955e66465d", + "a17b28ca-9f89-449c-ae27-fa955e66465f" + ] + }' + x-codegen-request-body-name: body + + /users/unshare-with-all: + post: + tags: + - User Sharing + summary: Remove a user's shared access + description: | + This API removes all shared access for one or more users, unsharing them from all organizations. + Note that unsharing can only be done from the same organization that initially shared the user. + + Scope(Permission) required: `internal_user_unshare` + operationId: removeUserSharing + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserUnshareWithAllRequestBody' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + required: true + responses: + '202': + description: Share removal process triggered successfully. + content: + application/json: + schema: + $ref: '#/components/schemas/ProcessSuccessResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/users/unshare-with-all' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token} \ + -d '{ + "userCriteria": { + "userIds": [ + "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8", + "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + ] + } + }' + x-codegen-request-body-name: body + + /users/{userId}/shared-organizations: + get: + tags: + - User Accessible Organizations + summary: Get the list of organizations accessible by the user + description: | + This API retrieves the list of organizations where the specified user has shared access. + + Scope(Permission) required: `internal_user_shared_access_view` + parameters: + - in: path + name: userId + required: true + schema: + type: string + description: The ID of the user. + - in: query + name: after + schema: + type: string + description: The cursor indicating the item after which the next page of results will begin. + - in: query + name: before + schema: + type: string + description: The cursor pointing to the item before which the previous page of results should be returned. + - in: query + name: limit + schema: + type: integer + description: The maximum number of results to return per page. + - in: query + name: filter + schema: + type: string + description: A filter to apply to the results, such as by organization name or other criteria. + - in: query + name: recursive + schema: + type: boolean + default: false + description: Whether to retrieve organizations recursively, including child organizations. + responses: + '200': + description: Successful Response with Accessible Organizations + content: + application/json: + schema: + $ref: '#/components/schemas/UserSharedOrganizationsResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/users/{userId}/shared-organizations' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token} + + /users/{userId}/shared-roles: + get: + tags: + - User Accessible Roles + summary: Get roles assigned to a user in an organization + description: | + This API fetches the roles assigned to the specified user within a particular organization.
    + Note that the roles returned are only the roles assigned by the organization that initially shared the user. + Any additional roles assigned to the user from the shared organizations are not included in this response. + + Scope(Permission) required: `internal_user_shared_access_view` + parameters: + - in: path + name: userId + required: true + schema: + type: string + description: The ID of the user for whom roles are being retrieved. + - in: query + name: orgId + required: true + schema: + type: string + description: The organization ID for which roles are being fetched. + - in: query + name: after + schema: + type: string + description: The cursor indicating the item after which the next page of results will begin. + - in: query + name: before + schema: + type: string + description: The cursor pointing to the item before which the previous page of results should be returned. + - in: query + name: limit + schema: + type: integer + description: The maximum number of results to return per page. + - in: query + name: filter + schema: + type: string + description: Filter to apply when retrieving the roles. + - in: query + name: recursive + schema: + type: boolean + description: Set to true to retrieve roles recursively. + responses: + '200': + description: Successful Response with Accessible Roles + content: + application/json: + schema: + $ref: '#/components/schemas/UserSharedRolesResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/users/{userId}/shared-roles?orgId={orgId}' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token} + +components: + + securitySchemes: + + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: + share: internal_user_share + unshare: internal_user_unshare + view: internal_user_shared_access_view + + schemas: + + UserShareRequestBody: + type: object + description: | + The request body for sharing users with multiple child organizations. + Includes a list of users, organizations, sharing scope as policy, and roles. + required: + - userCriteria + - organizations + properties: + userCriteria: + type: object + description: Contains a list of user IDs to be shared. + properties: + userIds: + type: array + description: List of user IDs. + items: + type: string + description: The ID of a user to be shared. + organizations: + type: array + description: List of organizations specifying sharing scope and roles. + items: + type: object + required: + - orgId + - policy + properties: + orgId: + type: string + description: The ID of the organization to share the users with. + policy: + type: string + description: | + The scope of sharing for this organization. Possible values are: + + - SELECTED_ORG_ONLY:
    + Share the resource only with the selected organization. + - SELECTED_ORG_WITH_ALL_EXISTING_CHILDREN_ONLY:
    + Share with the selected organization and all its existing child organizations. New child organizations created after the policy is applied will **not** be included. + - SELECTED_ORG_WITH_ALL_EXISTING_AND_FUTURE_CHILDREN:
    + Share with the selected organization, all its current child organizations, and automatically include any future child organizations created later. + - SELECTED_ORG_WITH_EXISTING_IMMEDIATE_CHILDREN_ONLY:
    + Share only with the selected organization’s immediate existing child organizations. Future immediate children are **not** included. + - SELECTED_ORG_WITH_EXISTING_IMMEDIATE_AND_FUTURE_CHILDREN:
    + Share with the selected organization’s immediate existing child organizations and automatically include any immediate child organizations created in the future. + roles: + type: array + description: A list of roles to be shared with the organization. + items: + $ref: '#/components/schemas/RoleWithAudience' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + organizations: + - orgId: "b028ca17-8f89-449c-ae27-fa955e66465d" + policy: "SELECTED_ORG_ONLY" + roles: + - displayName: "role_2" + audience: + display: "My Org 1" + type: "organization" + - orgId: "a17b28ca-9f89-449c-ae27-fa955e66465f" + policy: "SELECTED_ORG_ONLY" + roles: [] + + UserShareWithAllRequestBody: + type: object + description: | + Process a request to share users with all organizations. + The payload contains the roles applicable across all organizations and a policy that defines the scope of sharing. + required: + - userCriteria + - policy + properties: + userCriteria: + type: object + description: Contains a list of user IDs to be shared. + properties: + userIds: + type: array + description: List of user IDs. + items: + type: string + description: The ID of a user to be shared. + policy: + type: string + description: | + The scope of sharing for this organization. Possible values are: + + - ALL_EXISTING_ORGS_ONLY:
    + Share the resource with all organizations that exist at the time the policy is applied. New organizations created after the policy is applied will **not** be included. + - ALL_EXISTING_AND_FUTURE_ORGS:
    + Share the resource with all current organizations and automatically include any organizations created in the future. + - IMMEDIATE_EXISTING_ORGS_ONLY:
    + Share the resource only with immediate child organizations that exist when the policy is applied. Future immediate child organizations are **not** included. + - IMMEDIATE_EXISTING_AND_FUTURE_ORGS:
    + Share the resource with immediate existing child organizations and automatically include any immediate child organizations created in the future. + roles: + type: array + description: A list of roles shared across all organizations. + items: + $ref: '#/components/schemas/RoleWithAudience' + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + policy: "ALL_EXISTING_ORGS_ONLY" + roles: + - displayName: "role_1" + audience: + display: "My Org 1" + type: "organization" + - displayName: "role_2" + audience: + display: "My App 1" + type: "application" + + UserUnshareRequestBody: + type: object + description: | + The request body for unsharing users from multiple organizations. + Includes a list of user IDs and a list of organization IDs. + required: + - userCriteria + - organizations + properties: + userCriteria: + type: object + description: Contains a list of user IDs to be unshared. + properties: + userIds: + type: array + description: List of user IDs. + items: + type: string + description: The ID of a user to be unshared. + organizations: + type: array + description: List of organization IDs from which the users should be unshared. + items: + type: string + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + organizations: + - "b028ca17-8f89-449c-ae27-fa955e66465d" + - "a17b28ca-9f89-449c-ae27-fa955e66465f" + + UserUnshareWithAllRequestBody: + type: object + description: | + The request body for unsharing users from all organizations. + Includes a list of user IDs. + required: + - userCriteria + properties: + userCriteria: + type: object + description: Contains a list of user IDs to be unshared. + properties: + userIds: + type: array + description: List of user IDs. + items: + type: string + description: The ID of a user to be unshared. + example: + userCriteria: + userIds: + - "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + - "5d2a1c84-9f7a-43cd-b12e-6e52d7f87e16" + + UserSharedOrganizationsResponse: + type: object + description: | + Response listing organizations where a user has shared access, including sharing policies, shared type and pagination links for navigating results. + properties: + links: + type: array + description: Pagination links for navigating the result set. + items: + type: object + properties: + href: + type: string + description: URL to navigate to the next or previous page. + rel: + type: string + description: Indicates if the link is for the "next" or "previous" page. + sharedOrganizations: + type: array + description: A list of shared access details for the user across multiple organizations + items: + type: object + properties: + orgId: + type: string + description: ID of the child organization + example: "b028ca17-8f89-449c-ae27-fa955e66465d" + orgName: + type: string + description: Name of the child organization + example: "Organization Name" + sharedUserId: + type: string + description: ID of the shared user + example: "7a1b7d63-8cfc-4dc9-9332-3f84641b72d8" + sharedType: + type: string + description: Shared type of the user (SHARED/INVITED) + example: "SHARED" + rolesRef: + type: string + description: URL reference to retrieve paginated roles for the shared user in this organization + example: "/api/server/v1/users/{userId}/shared-roles?orgId={orgId}" + + UserSharedRolesResponse: + type: object + description: | + Response showing the roles assigned to a user within a specific organization, with pagination support for large role sets. + properties: + links: + type: array + description: Pagination links for navigating the result set. + items: + type: object + properties: + href: + type: string + description: URL to navigate to the next or previous page. + rel: + type: string + description: Indicates if the link is for the "next" or "previous" page. + roles: + type: array + description: A list of roles with audience details + items: + $ref: '#/components/schemas/RoleWithAudience' + + RoleWithAudience: + type: object + description: | + Represents a user role within a specific audience (organization or application), defined by its display name and audience type. + required: + - displayName + - audience + properties: + displayName: + type: string + description: Display name of the role + example: "role_1" + audience: + type: object + required: + - display + - type + properties: + display: + type: string + description: Display name of the audience + example: "My Org 1" + type: + type: string + description: Type of the audience, e.g., 'organization' or 'application' + example: "organization" + + ProcessSuccessResponse: + type: object + description: | + Indicates that the sharing or unsharing process has started successfully, with the current status and relevant details. + properties: + status: + type: string + description: Status of the process. + example: "Processing" + details: + type: string + description: Additional information about the process. + example: "User sharing process triggered successfully." + + Error: + type: object + description: | + Details of an error, including code, message, description, and a trace ID to help with debugging. + required: + - code + - message + - traceId + properties: + code: + type: string + example: "OUI-00000" + description: An error code. + message: + type: string + example: "Some Error Message" + description: An error message. + description: + type: string + example: "Some Error Description" + description: An error description. + traceId: + type: string + format: uuid + example: "e0fbcfeb-7fc2-4b62-8b82-72d3c5fbcdeb" + description: A trace ID in UUID format to help with debugging. diff --git a/docusaurus-asgardeo/static/apis/restapis/password-recovery.yaml b/docusaurus-asgardeo/static/apis/restapis/password-recovery.yaml new file mode 100644 index 0000000000..2632889543 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/password-recovery.yaml @@ -0,0 +1,936 @@ +openapi: 3.0.0 +info: + version: "v1-oas3" + title: Asgardeo - Password Recovery API + description: | + This is the RESTful API for password recovery initiated by the user. +
    To access this API in Asgardeo, you need to first [get an access token](https://wso2.com/asgardeo/docs/apis/authentication/#get-an-access-token) from your organization using the following scopes. + + Scopes required:
    + - ```internal_identity_mgt_view``` + - ```internal_identity_mgt_update``` + - ```internal_identity_mgt_create``` + - ```internal_identity_mgt_delete``` + +security: + - OAuth2: [] +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/users/v2' +paths: + /recovery/password/init: + post: + tags: + - Password Recovery + summary: | + Initiate password recovery + operationId: initiatePasswordRecovery + description: | + This API is used to initiate the password recovery flow. The API will return recovery information for password recovery. + responses: + '200': + description: | + The user is successfully identified for the given claims and returning available notification channels for the user. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AccountRecoveryType' + examples: + response: + value: + - mode: recoverWithNotifications + flowConfirmationCode: 1234-1234-1234-1234 + channelInfo: + recoveryCode: 1234-55678-5668-2345 + channels: + - id: 1 + type: EMAIL + value: wso2***********.com + preferred: false + - id: 2 + type: SMS + value: '**********123' + preferred: true + links: + - rel: next + href: /api/users/v2/recovery/password/recovery + type: POST + '400': + description: Bad Request. The request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10001 + message: bad_request + description: Bad request. + traceId: 23456fghj678vb78 + '404': + description: >- + No user found for the given set of claims or no recovery channels + are availabe for the user. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10002 + message: Not found + description: No user found. + traceId: 23456fghj678vb78 + '409': + description: Multiple users were found for the given claims. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10008 + message: Conflict + description: Multiple users were found for given claims. + traceId: 23456fghj678vb78 + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-15001 + message: Internal Error + description: Internal Error. + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/password/init' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "claims": [ + { + "uri": "http://wso2.org/claims/givenname", + "value": "user1" + } + ], + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/InitRequest' + description: | + Request to initiate password recovery process. The request should contain the claims to identify the user. User claims are `REQUIRED`. + required: true + /recovery/password/recover: + post: + tags: + - Password Recovery + summary: | + Get recovery information + operationId: recoverPassword + description: | + This API is used to send recovery information to the user who matches the recovery code via the channel specified by the channel ID. + The API will return the recovery flow confirmation code. + responses: + '202': + description: | + - Password recovery initiated via internal channels. API will send a `confirmationCode`/`otp` to the channel specified by the user. + - Use the confirmation code/OTP with "password recovery confirm API" to confirm the password recovery. + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordRecoveryInternalNotifyResponse' + examples: + response: + value: + code: PWR-02002 + message: Password recovery information sent via user preferred notification channel. + flowConfirmationCode: 1234-1234-1234-1234 + notificationChannel: EMAIL + resendCode: 12345-45678-6789098-8765 + links: + - rel: next + href: api/users/v2/recovery/password/confirm + type: POST + - rel: resend + href: api/users/v2/recovery/password/resend + type: POST + '400': + description: Bad Request. Request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: bad_request + description: Bad request + traceId: 23456fghj678vb78 + '403': + description: Password recovery is not enabled. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10004 + message: Forbidden + description: Password recovery is not enabled. + traceId: 23456fghj678vb78 + '404': + description: Recovery code is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: not_found + description: Recovery code not found. + traceId: 23456fghj678vb78 + '406': + description: | + - The recovery code given in the request is not valid or expired. + - Channel ID is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10003 + message: not acceptable + description: 'invalid error code: 1234-2345-12345-123456' + traceId: 23456fghj678vb78 + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/password/recover' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "recoveryCode": "1234-5678-2455-3433", + "channelId": "1", + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RecoveryRequest' + description: | + - Request to receive recovery notifications. + - The `recoveryCode` and `channelId` are required fields. + - Note that the `channelId` should always be a value larger than `0`. + required: true + /recovery/password/resend: + post: + tags: + - Password Recovery + summary: | + Resend password recovery confirmation details + operationId: resendConfirmation + description: | + - This API is used to resend a `confirmation code`/`OTP` to the user via a user-preferred channel defined at password recovery. + - The API will return the next API calls. + responses: + '202': + description: | + - This API will send a `confirmationCode`/`otp` to the channel specified by the user. + - Use the confirmation code/OTP with "password recovery confirm API" to confirm the password recovery. + content: + application/json: + schema: + $ref: '#/components/schemas/ResendConfirmationCodeInternalResponse' + examples: + response: + value: + code: PWR-02002 + message: successful_request + flowConfirmationCode: 1234-1234-1234-1234 + notificationChannel: EMAIL + resendCode: 1234-12345-234-123456 + links: + - rel: next + href: api/user/v2/recovery/password/recover + type: POST + - rel: resend + href: api/users/v2/recovery/password/resend + type: POST + '400': + description: Bad Request. Request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10001 + message: bad_request + description: Bad request. + traceId: 23456fghj678vb78 + '404': + description: Resend code is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10001 + message: not_found + description: Recovery code not found. + traceId: 23456fghj678vb78 + '406': + description: The Resend code given in the request is not valid or expired. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10003 + message: not acceptable + description: 'invalid error code: 1234-2345-12345-123456' + traceId: 23456fghj678vb78 + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/password/resend' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "resendCode": "1234-2ws34-1234", + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ResendConfirmationRequest' + description: | + Request to resend the `confirmationCode`/`otp` to the user via a user preferred channel. + required: true + /recovery/password/confirm: + post: + tags: + - Password Recovery + summary: | + Confirm password recovery + operationId: confirmRecovery + description: | + - This API is used to validate the `confirmationCode`/`otp` given at password recovery. + - Use the returned `reset code` with the "password reset API" to reset the password. + - The API will return the `reset code` and the next API call. + responses: + '200': + description: | + - Password reset confirmed. + - Use the returned `resetCode` with the "password reset API" to reset the password. + content: + application/json: + schema: + $ref: '#/components/schemas/ResetCodeResponse' + examples: + response: + value: + resetCode: 2806aed9-fe7c-4b47-a91f-0aa897fac9a2 + links: + - rel: next + href: | + /t/{organization-name}/api/users/v2/recovery/password/reset + type: POST + '400': + description: Bad Request. Request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: bad_request + description: Bad request. + traceId: 23456fghj678vb78 + '404': + description: Confirmation code is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: not_found + description: Recovery code not found. + traceId: 23456fghj678vb78 + '406': + description: | + The confirmation code given in the request is not valid or expired. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: not acceptable + description: 'invalid error code: 1234-2345-12345-123456' + traceId: 23456fghj678vb78 + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/password/confirm' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "confirmationCode": "1234-2ws34-12345", + "otp": "wi8Ivm", + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConfirmRequest' + description: | + - Request to confirm the password recovery. + - `confirmationCode` is `REQUIRED`. + - `otp` is required only for OTP based password recovery. The `flowConfirmationCode` returned from the password recovery request should be set as the `confirmationCode` for OTP-based recovery. + required: true + /recovery/password/reset: + post: + tags: + - Password Recovery + summary: | + Reset password + operationId: resetPassword + description: > + This API is used to reset the password of the user who matches the flowConfirmationCode given by the recover API and the resetCode given by the confirmation API. + responses: + '200': + description: Successful password reset. + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordResetResponse' + examples: + response: + value: + code: PWR-02005 + message: Successful password reset + '400': + description: Bad Request. Request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: bad_request + description: Bad request. + traceId: 23456fghj678vb78 + '404': + description: Reset code is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: not_found + description: Recovery code not found. + traceId: 23456fghj678vb78 + '406': + description: The reset code given in the request is not valid or expired. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: not acceptable + description: 'invalid error code: 1234-2345-12345-123456' + traceId: 23456fghj678vb78 + '412': + description: Password policy violation. + content: + application/json: + schema: + $ref: '#/components/schemas/RetryErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: bad_request + description: Password policy violation. + traceId: 23456fghj678vb78 + resetCode: 1234-12345-sdf-34567567 + links: [ + { + "rel": "next", + "href": "/t/{organization-name}/api/users/v2/recovery/password/reset", + "type": "POST" + } + ] + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/password/reset' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "resetCode": "string", + "flowConfirmationCode": "string", + "password": "string", + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ResetRequest' + description: | + - Request to reset the password. + - `resetCode`, `flowConfirmationCode` and `password` are required. + required: true +components: + schemas: + InitRequest: + type: object + description: Request to initiate an account recovery + properties: + claims: + type: array + description: The user claims to identify the user as `UserClaim` objects. + items: + $ref: '#/components/schemas/UserClaim' + properties: + type: array + description: (OPTIONAL) Additional META properties + items: + $ref: '#/components/schemas/Property' + required: + - claims + RecoveryRequest: + type: object + description: | + Request to start the password recovery for the user who matches with the recovery code via the given `channelId`. + properties: + recoveryCode: + type: string + description: Recovery code for the user. + example: 1234-5678-2455-3433 + channelId: + type: string + description: | + The identifier of the notification channel that the user prefers to get recovery notifications. + example: '1' + properties: + type: array + description: (OPTIONAL) Additional META properties. + items: + $ref: '#/components/schemas/Property' + required: + - recoveryCode + - channelId + ResendConfirmationRequest: + type: object + description: Request to resend the confirmation code in password recovery. + properties: + resendCode: + type: string + description: Resend code returned by the password recovery API. + example: 1234-2ws34-1234 + properties: + type: array + description: (OPTIONAL) Additional META properties. + items: + $ref: '#/components/schemas/Property' + ConfirmRequest: + type: object + description: Request to confirm password recovery. + required: + - confirmationCode + properties: + confirmationCode: + type: string + description: Confirmation code of the recovery flow. + example: 1234-2ws34-12345 + otp: + type: string + description: OTP sent to the user + example: wi8Ivm + properties: + type: array + description: (OPTIONAL) Additional META properties. + items: + $ref: '#/components/schemas/Property' + ResetRequest: + type: object + description: Object to reset the password of a user. + required: + - resetCode + - flowConfirmationCode + - password + properties: + resetCode: + type: string + description: resetCode given by the confirm API. + flowConfirmationCode: + type: string + description: Confirmation code of the recovery flow. + password: + type: string + description: New password given by the user. + properties: + type: array + description: (OPTIONAL) Additional META properties. + items: + $ref: '#/components/schemas/Property' + PasswordRecoveryInternalNotifyResponse: + type: object + properties: + code: + type: string + description: Success status code. + example: PWR-02002 + message: + type: string + description: Success status message. + example: successful_request + flowConfirmationCode: + type: string + description: Recovery flow confirmation code. + example: 1234-1234-1234-1234 + notificationChannel: + type: string + description: Channel that is used to send recovery information. + example: EMAIL + resendCode: + type: string + description: | + Code to resend the confirmation code to the user via the user-selected channel. + example: 1234-123456-12345-12345 + links: + type: array + description: Contains next available API calls. + items: + $ref: '#/components/schemas/APICall' + ResetCodeResponse: + properties: + resetCode: + type: string + description: Password reset code to reset the password. + example: 1234-55678-5668-2345 + links: + type: array + description: Contains next available API calls. + items: + $ref: '#/components/schemas/APICall' + PasswordResetResponse: + type: object + description: API response for a successful password reset. + properties: + code: + type: string + description: Operation code + example: PWR-02001 + message: + type: string + description: Message regarding the operation. + example: successful_request + ResendConfirmationCodeInternalResponse: + type: object + description: The object encapsulates the details regarding the resend confirmation code. + properties: + code: + type: string + description: Success status code. + example: PWR-02002 + message: + type: string + description: Success status message. + example: successful_request + flowConfirmationCode: + type: string + description: Recovery flow confirmation code. + example: 1234-1234-1234-1234 + notificationChannel: + type: string + description: Channel that is used to send recovery information. + example: EMAIL + resendCode: + type: string + description: The code to resend the confirmation code. + example: 1234-12345-234-123456 + links: + type: array + description: Contains next available API calls. + items: + $ref: '#/components/schemas/APICall' + RetryErrorResponse: + type: object + properties: + code: + type: string + description: Error code corresponding to the error. + example: PWR-10004 + message: + type: string + description: Error message + example: Retry + description: + type: string + description: Error description + example: Password policy violation + traceId: + type: string + description: Some correlation for error instance. + example: 2345dfgh678h789bhjk + resetCode: + type: string + description: Password reset code used in the request. + example: 1234-34567-3456-2345678 + links: + type: array + description: Contains next available API calls. + items: + $ref: '#/components/schemas/APICall' + ErrorResponse: + type: object + properties: + code: + type: string + description: Error code corresponding to the error. + example: UAR-10001 + message: + type: string + description: Error message + example: invalid_request + description: + type: string + description: Description of the error. + example: Invalid claim uri + traceId: + type: string + description: Some correlation for error instance. + example: 2345dfgh678h789bhjk + AccountRecoveryType: + type: object + description: Object that encapsulates details of the account recovery channel. + properties: + mode: + type: string + example: recoverWithNotifications + flowConfirmationCode: + type: string + example: 1234-1234-1234-1234 + channelInfo: + $ref: '#/components/schemas/RecoveryChannelInformation' + links: + type: array + description: Contains next available API calls. + items: + $ref: '#/components/schemas/APICall' + RecoveryChannelInformation: + description: Response with the recovery ID and the available recovery channels. + properties: + recoveryCode: + type: string + description: Code to recover the user account. + example: 1234-55678-5668-2345 + channels: + type: array + description: Lists the available recovery channels for the user. + items: + $ref: '#/components/schemas/RecoveryChannel' + RecoveryChannel: + type: object + description: Object with notification channel attributes. + properties: + id: + type: string + description: Identifier given to the channel. + example: '1' + type: + type: string + description: Type of the channel. + example: EMAIL + value: + type: string + description: Masked channel value. + example: wso2***********.com + preferred: + type: boolean + description: Specifies whether the channel is a user-preferred channel. + example: true + UserClaim: + type: object + description: Object that holds a user claim and the corresponding value. + properties: + uri: + type: string + description: Claim uri + example: 'http://wso2.org/claims/givenname' + value: + type: string + description: Value for the claim. + example: user1 + Property: + type: object + description: Object that holds a property as a key, value pair. + properties: + key: + type: string + description: Unique identifier as the key of the property. + example: key + value: + type: string + description: Value of the property. + example: value + APICall: + type: object + description: Object that holds the next API call details. + properties: + rel: + type: string + description: Next API call. + example: next + href: + type: string + description: Next API URL. + example: /api/users/recovery/v2/ + type: + type: string + description: HTTP method type. + example: POST + securitySchemes: + OAuth2: + type: oauth2 + flows: + clientCredentials: + tokenUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + scopes: + internal_identity_mgt_view: Grants read access + internal_identity_mgt_create: Grants write access + internal_identity_mgt_delete: Grants permission to delete records + internal_identity_mgt_update: Grants permission to update existing records \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/push-notification-devices.yaml b/docusaurus-asgardeo/static/apis/restapis/push-notification-devices.yaml new file mode 100644 index 0000000000..cb316105c4 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/push-notification-devices.yaml @@ -0,0 +1,331 @@ +openapi: 3.0.0 +info: + version: "v1" + title: 'Push Notification Device Management API' + description: 'This is the RESTful API for managing devices used for the push notification feature by the users in Asgardeo.' +servers: + - url: 'https://api.asgardeo.io/t/{tenant-domain}/api/users/v1/me/push' +tags: + - name: me + description: Operations for the authenticated user. + - name: device + description: Operations initiated through user's push authenticator device. +paths: + /discovery-data: + get: + tags: + - me + description: | + This API is used to generate registration discovery data for the device registration QR code. + Scope(Permission) required: `internal_login` + summary: | + Generate data for device registration. + operationId: getRegistrationDiscoveryData + responses: + '200': + description: Successfully generated registration discovery data. + content: + application/json: + schema: + $ref: '#/components/schemas/DiscoveryDataDTO' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + /devices: + post: + tags: + - device + description: | + This API is used to register a push notification device into the Identity Server. This API will be invoked from the device. + summary: Register devices to receive push notifications. + operationId: registerDevice + requestBody: + description: Request body sent by a device for registration. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/RegistrationRequestDTO' + responses: + '201': + description: Registered a new device + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + get: + tags: + - me + description: | + This API is used to list the devices registered for the particular user. + Scope(Permission) required: `internal_login` + summary: Get all devices registered for a user. + operationId: getDevices + responses: + '200': + description: Listed devices registered for a user + content: + application/json: + schema: + $ref: '#/components/schemas/DeviceDTOList' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + /devices/{deviceId}: + get: + tags: + - me + description: | + This API is used to get a specific registered device. + Scope(Permission) required: `internal_login` + summary: Get device details by device ID. + operationId: getDeviceById + parameters: + - name: deviceId + in: path + description: ID of the device to be returned + required: true + schema: + type: string + responses: + '200': + description: Successfully returned the device belongs to the ID + content: + application/json: + schema: + $ref: '#/components/schemas/DeviceDTO' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + delete: + tags: + - me + description: | + This API is used to remove a registered device. + Scope(Permission) required: `internal_login` + summary: Remove a registered device + operationId: deleteDeviceById + parameters: + - name: deviceId + in: path + description: ID of the device to be removed + required: true + schema: + type: string + responses: + '204': + description: The device was removed. + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + /devices/{deviceId}/remove: + post: + tags: + - device + description: | + This API is used to remove a registered device through device. + summary: Remove a registered device from the device. + operationId: removeDeviceFromMobile + parameters: + - name: deviceId + in: path + description: ID of the device to be removed + required: true + schema: + type: string + requestBody: + description: Remove request sent from the device. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/RemoveRequestDTO' + responses: + '204': + description: The device was removed. + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' +components: + schemas: + DiscoveryDataDTO: + type: object + description: Device registration information + properties: + deviceId: + description: Device ID + type: string + example: b03f90c9-6723-48f6-863b-a35f1ac77f57 + username: + description: Username + type: string + example: admin + host: + description: Host + type: string + example: https://api.asgardeo.io/ + tenantDomain: + description: Tenant domain + type: string + example: carbon.super + organizationId: + description: Organization ID + type: string + example: b03f90c9-6723-48f6-863b-a35f1ac77f57 + organizationName: + description: Organization name + type: string + example: sampleOrg + challenge: + description: Challenge + type: string + example: b03f90c9-6723-48f6-863b-a35f1ac77f57 + RegistrationRequestDTO: + type: object + description: The registration request body sent from the device + properties: + deviceId: + type: string + description: Unique UUID for the device + example: b03f90c9-6723-48f6-863b-a35f1ac77f57 + model: + type: string + description: Model of the device + example: iPhone 16 + name: + type: string + description: Name of the device + example: My Device + deviceToken: + type: string + description: device token unique to the device + example: 'fuRr8s_eQrmB88nu5Tz8oa:APA91bFMqYbuzDYyOGK28VoiLHWYXZYzGNVg3tfxfNwKPH-jDIFpNDdUHkmq5wqBUySYZnuHfpycyQvUrPhwV3UZ1YzjUNLvb9gzFZudfJd1N3fWuU0w2nq_hVJc0UPRabvNPuJy8wMB' + publicKey: + type: string + description: Public key of the keypair generated by the device for the account + example: 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOhCpj5pAEqdCdyxuHii0oLFAgnTePMI1EeomZHCRaZZNGv8fdcHyme9rpknNx/caAz9Gck5HrB/vto86cHpBkAghsBBLLWPUlblWNZCBX4pqFhZu+uZKvOnSqp1SwP13yx72nLKbjHRRJGgwCrg/mbdSGN/QKxRU+UhdKVVpQIDAQAB' + signature: + type: string + description: Signature string comprising of the pushId and the challenge + example: 'rT/VxgPYMioT6wHajYg0mJpBv46HvFBm/elZ/VL4ClUIFfX7i3Ou5ER5sEiFtehaurLXPNsA8hF4SQAueVBRymEAmchhwYlT160g3wv6kDQvWLkTqnLWGfn++wg5xRManOoN9zG9GhxCgRr9y+lk9rtvydfX0lTcdEZBkynSJnM=' + RegistrationResponseDTO: + type: object + description: The registration response sent after successful device registration. + properties: + deviceId: + type: string + description: Unique UUID for the device. + example: b03f90c9-6723-48f6-863b-a35f1ac77f57 + DeviceDTO: + type: object + description: Model for the registered device object + properties: + deviceId: + type: string + example: b03f90c9-6723-48f6-863b-a35f1ac77f57 + name: + type: string + example: My Phone + model: + type: string + example: iPhone 16 + provider: + type: string + example: fcm + DeviceDTOList: + type: array + items: + $ref: '#/components/schemas/DeviceDTO' + RemoveRequestDTO: + type: object + description: Remove device request body sent from the device + required: + - token + properties: + token: + type: string + description: JWT containing the remove device information signed with a unique private key + example: 'signedJWTToken' + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: UOM-00000 + description: An error code. + message: + type: string + example: Some Error Message + description: An error message. + description: + type: string + example: Some Error Description + description: An error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + description: An error trace identifier. + #-------------------------------------------------------- + # Descriptions of error responses. + #-------------------------------------------------------- + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' diff --git a/docusaurus-asgardeo/static/apis/restapis/roles.yaml b/docusaurus-asgardeo/static/apis/restapis/roles.yaml new file mode 100644 index 0000000000..444f2fa076 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/roles.yaml @@ -0,0 +1,1166 @@ +openapi: 3.0.0 +info: + title: Asgardeo - SCIM 2.0 Roles V2 API + version: v2 + description: | + This is the RESTful API for SCIM 2.0 Roles API in Asgardeo. + This API allows creating, deleting, listing, roles and updating role name, permissions, users and groups of the roles. + + To access the SCIM 2.0 Roles APIs in Asgardeo, you need to first [get an access token](https://wso2.com/asgardeo/docs/apis/authentication/#get-an-access-token) from your organization. +servers: + - url: https://api.asgardeo.io/t/{organization-name}/scim2/v2 +security: + - OAuth2: [] + +paths: + /Roles: + get: + tags: + - Roles Endpoint + summary: Filter Roles + description: > + This API returns roles according to the specified filter, sort and + pagination parameters. + + + Scope(Permission) required: `internal_role_mgt_view` + operationId: getRoleV2 + parameters: + - name: filter + in: query + description: Filter expression for filtering + required: false + schema: + type: string + - name: startIndex + in: query + description: The 1-based index of the first query result + required: false + schema: + type: integer + format: int32 + - name: count + in: query + description: Specifies the desired maximum number of query results per page. + required: false + schema: + type: integer + format: int32 + - name: sortBy + in: query + description: |- + Specifies the attribute whose value + SHALL be used to order the returned responses + required: false + schema: + type: string + - name: sortOder + in: query + description: The order in which the "sortBy" parameter is applied. + required: false + schema: + type: string + responses: + '200': + description: Valid roles are found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RolesListResponseObjectV2' + '401': + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + '403': + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + '404': + description: No Role found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoRoleAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/v2/Roles' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Roles Endpoint + summary: Create Role + description: > + This API creates a role and returns the details of the created role + including its unique ID. + + + Scope(Permission) required: + - `internal_role_mgt_create` + + ➕ Additional Scopes + + To assign permissions, users, or groups to the role you create, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Assign permissions | `internal_role_mgt_permissions_update` | + | Assign users | `internal_role_mgt_users_update` | + | Assign groups | `internal_role_mgt_groups_update` | + operationId: createRoleV2 + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RoleCreationObjectV2' + responses: + '201': + description: Valid role is created + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RolePostResponseObjectV2' + '401': + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + '403': + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + '404': + description: Role is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorRoleNotAvailable' + '409': + description: Role already exist + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorRoleAlreadyAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/v2/Roles' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:schemas:extension:2.0:Role" + ], + "displayName": "loginRole", + "audience": { + "value": "3645709f-ea8d-5595-7690-e1fa0efe3df9", + "type": "application" + }, + "users": [ + { + "value": "008bba85-451d-414b-87de-c03b5a1f4217" + } + ], + "groups": [ + { + "value": "7bac6a86-1f21-4937-9fb1-5be4a93ef469" + } + ], + "permissions": [ + { + "value": "internal_login", + "display": "Internal Login" + } + ] + }' + x-codegen-request-body-name: body + /Roles/.search: + post: + tags: + - Roles Endpoint + summary: Search Roles + description: > + This API returns roles according to the specified filter, sort and + pagination parameters. + + + Scope(Permission) required: `internal_role_mgt_view` + operationId: getRolesByPostV2 + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RoleSearchRequestObjectV2' + responses: + '200': + description: Valid roles are found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RoleSearchResponseObjectV2' + '401': + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + '403': + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + '404': + description: Valid roles are not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RoleSearchErrorResponseObject' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/v2/Roles/.search' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:SearchRequest" + ], + "startIndex": 1, + "filter": "displayName eq loginRole" + }' + x-codegen-request-body-name: body + /Roles/{id}: + get: + tags: + - Roles Endpoint + summary: Get Role by ID + description: > + This API returns the role details of a particular role using its unique + ID. + + + Scope(Permission) required: `internal_role_mgt_view` + operationId: getRolebyIdV2 + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + required: false + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + required: false + schema: + type: string + responses: + '200': + description: Valid role is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RoleGetResponseObjectV2' + '401': + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + '403': + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + '404': + description: Valid role is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoRoleAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/v2/Roles/{role-id}' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Roles Endpoint + summary: Update Role - PUT + description: | + This API updates the role details and returns the updated role details + using a PUT operation. + + Scope(Permission) required: + - `internal_role_mgt_update` + + ➕ Additional Scopes + + To update permissions, users, or groups assignments of the role, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Update permissions | `internal_role_mgt_permissions_update` | + | Update users | `internal_role_mgt_users_update` | + | Update groups | `internal_role_mgt_groups_update` | + operationId: updateRoleV2 + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RolePutRequestObjectV2' + responses: + '200': + description: Role is updated + content: + application/scim+json: + schema: + $ref: '#/components/schemas/RolePutResponseObjectV2' + '400': + description: Invalid Input + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + '401': + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + '403': + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + '404': + description: Valid role is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoRoleAvailable' + '406': + description: Not Acceptable + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNotAcceptable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/v2/Roles/{role-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "displayName": "loginRole", + "users": [ + { + "value": "409ca90b-2ba6-4474-9a45-2cf7376e6e43" + } + ], + "groups": [ + { + "value": "7bac6a86-1f21-4937-9fb1-5be4a93ef469" + } + ], + "permissions": [ + { + "value": "internal_login", + "display": "Internal Login" + } + ] + }' + x-codegen-request-body-name: body + delete: + tags: + - Roles Endpoint + summary: Delete Role + description: | + This API deletes a particular role using its unique ID. + + Scope(Permission) required: `internal_role_mgt_delete` + operationId: deleteRoleV2 + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + responses: + '204': + description: Role is deleted + '401': + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + '403': + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + '404': + description: Valid role is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoRoleAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/v2/Roles/{role-id}' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Roles Endpoint + summary: Update Role - PATCH + description: | + This API updates the role details and returns the updated role details + using a PATCH operation. + + Scope(Permission) required: + + - `internal_role_mgt_update` + + ➕ Additional Scopes + + To update permissions, users, or groups assignments of the role, you also need the following additional scopes: + + | Action | Scope | + |---------|--------| + | Update permissions | `internal_role_mgt_permissions_update` | + | Update users | `internal_role_mgt_users_update` | + | Update groups | `internal_role_mgt_groups_update` | + operationId: patchRole + parameters: + - name: id + in: path + description: Unique id of the resource type. + required: true + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchRoleOperationRequestObjectV2' + responses: + '200': + description: Role is updated + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchRoleOperationResponseObjectV2' + '401': + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + '403': + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + '404': + description: Valid role is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoRoleAvailable' + '406': + description: Not Acceptable + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNotAcceptable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/v2/Roles/{role-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:PatchOp" + ], + "Operations": [ + { + "op": "add", + "path": "groups", + "value": [ + { + "value": "7bac6a86-1f21-4937-9fb1-5be4a93ef469" + } + ] + }, + { + "op": "add", + "path": "users", + "value": [ + { + "value": "9cac6a86-1f21-4937-9fb1-5be4a93ef349" + } + ] + }, + { + "op": "remove", + "path": "users[value eq 0565f472-28fe-4d93-83ad-096c66ed4a47]" + }, + { + "op": "remove", + "path": "groups[value eq 9065f445-265e-4rfg3-83ad-666c66ed4a55]" + }, + { + "op": "replace", + "value": { + "permissions": [ + { + "value": "internal_group_mgt_view" + } + ] + } + } + ] + }' + x-codegen-request-body-name: body +components: + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/token + scopes: + view: internal_role_mgt_view + create: internal_role_mgt_create + update: internal_role_mgt_update + delete: internal_role_mgt_delete + schemas: + RolesListResponseObjectV2: + type: object + properties: + totalResults: + type: integer + example: 3 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 3 + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/RoleObV2' + RoleSearchRequestObjectV2: + type: object + properties: + schemas: + type: object + example: + - urn:ietf:params:scim:api:messages:2.0:SearchRequest + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + filter: + type: string + example: displayName eq loginRole + RoleSearchResponseObjectV2: + type: object + properties: + totalResults: + type: integer + example: 1 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 3 + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/RoleObV2' + RoleObV2: + type: object + properties: + displayName: + type: string + example: loginRole + meta: + type: object + properties: + location: + type: string + example: >- + https://api.asgardeo.io/t/{org-name}/scim2/v2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + id: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My App + type: + type: string + example: application + properties: + type: array + items: + type: object + properties: + name: + type: string + example: isSharedRole + value: + type: string + example: 'false' + RoleCreationObjectV2: + type: object + required: + - displayName + - schemas + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:extension:2.0:Role + displayName: + type: string + example: loginRole + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + type: + type: string + enum: + - application + - organization + example: application + users: + type: array + items: + type: object + example: + value: 008bba85-451d-414b-87de-c03b5a1f4217 + groups: + type: array + items: + type: object + example: + value: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + permissions: + type: array + items: + type: object + properties: + value: + type: string + example: internal_login + display: + type: string + example: Internal Login + RoleGetResponseObjectV2: + type: object + properties: + displayName: + type: string + example: loginRole + meta: + type: object + properties: + location: + type: string + example: >- + https://api.asgardeo.io/t/{org-name}/scim2/v2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + resourceType: + type: string + example: Role + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:extension:2.0:Role + id: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My App + type: + type: string + enum: + - application + - organization + example: application + users: + type: array + items: + type: object + properties: + $ref: + type: string + example: >- + https://api.asgardeo.io/t/{org-name}/scim2/Users/3a12bae9-4386-44be-befd-caf349297f45 + display: + type: string + example: kim + value: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + groups: + type: array + items: + type: object + properties: + $ref: + type: string + example: >- + https://api.asgardeo.io/t/{org-name}/scim2/Groups/7bac6a86-1f21-4937-9fb1-5be4a93ef469 + display: + type: string + example: PRIMARY/manager + value: + type: string + example: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + permissions: + type: array + items: + type: object + properties: + value: + type: string + example: internal_login + display: + type: string + example: Internal Login + associatedApplications: + type: array + items: + type: object + properties: + value: + type: string + display: + type: string + example: + - value: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: My App + properties: + type: array + items: + type: object + properties: + name: + type: string + example: isSharedRole + value: + type: string + example: 'false' + RolePostResponseObjectV2: + type: object + properties: + displayName: + type: string + example: loginRole + meta: + type: object + properties: + location: + type: string + example: >- + https://api.asgardeo.io/t/{org-name}/scim2/v2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + resourceType: + type: string + example: Role + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:extension:2.0:Role + id: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My App + type: + type: string + enum: + - application + - organization + example: application + RolePutRequestObjectV2: + type: object + properties: + displayName: + type: string + example: loginRole + users: + type: array + items: + type: object + example: + value: 409ca90b-2ba6-4474-9a45-2cf7376e6e43 + groups: + type: array + items: + type: object + example: + value: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + permissions: + type: array + items: + type: object + properties: + value: + type: string + example: internal_login + display: + type: string + example: Internal Login + RolePutResponseObjectV2: + type: object + properties: + displayName: + type: string + example: loginRole + meta: + type: object + properties: + location: + type: string + example: >- + https://api.asgardeo.io/t/{org-name}/scim2/v2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + resourceType: + type: string + example: Role + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:extension:2.0:Role + id: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My App + type: + type: string + enum: + - application + - organization + example: application + PatchRoleOperationRequestObjectV2: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:PatchOp + Operations: + type: array + example: + - op: add + path: groups + value: + - value: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + - op: add + path: users + value: + - value: 9cac6a86-1f21-4937-9fb1-5be4a93ef349 + - op: remove + path: "users[value eq 0565f472-28fe-4d93-83ad-096c66ed4a47]" + - op: remove + path: "groups[value eq 9065f445-265e-4rfg3-83ad-666c66ed4a55]" + items: + $ref: '#/components/schemas/RolePatchOperationobjV2' + RolePatchOperationobjV2: + type: object + properties: + op: + type: string + enum: + - add + - remove + - replace + path: + type: string + value: + type: array + items: + type: object + properties: + value: + type: string + example: + - op: add + path: groups + value: + - value: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + - op: add + path: users + value: + - value: 9cac6a86-1f21-4937-9fb1-5be4a93ef349 + - op: remove + path: users[value eq 0565f472-28fe-4d93-83ad-096c66ed4a47] + PatchRoleOperationResponseObjectV2: + type: object + properties: + displayName: + type: string + example: loginRole + meta: + type: object + properties: + location: + type: string + example: >- + https://api.asgardeo.io/t/{org-name}/scim2/v2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + resourceType: + type: string + example: Role + schemas: + type: object + example: + - urn:ietf:params:scim:schemas:extension:2.0:Role + id: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + audience: + type: object + properties: + value: + type: string + example: 3645709f-ea8d-5595-7690-e1fa0efe3df9 + display: + type: string + example: My App + type: + type: string + enum: + - application + - organization + example: application + ErrorInvalidInput: + type: object + required: + - status + - schema + - detail + properties: + status: + type: string + example: '400' + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: invalidSyntax + detail: + type: string + example: Request is unparsable, syntactically incorrect, or violates schema. + ErrorUnauthorized: + type: object + required: + - status + - schema + properties: + status: + type: string + example: '401' + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: Unauthorized + ErrorNotAcceptable: + type: object + required: + - status + - schema + properties: + status: + type: string + example: '406' + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: Not Acceptable + ErrorForbidden: + type: object + required: + - status + - schema + properties: + status: + type: string + example: '403' + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: Forbidden + ErrorNoRoleAvailable: + type: object + required: + - status + - schema + - detail + properties: + status: + type: string + example: '404' + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Role not found in the system. + ErrorRoleNotAvailable: + type: object + required: + - status + - schema + - detail + properties: + status: + type: string + example: '404' + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: >- + No Role with the id : 4645709c-ea8c-4495-8590-e1fa0efe3de0 in the + system. + ErrorRoleAlreadyAvailable: + type: object + required: + - status + - schema + - detail + properties: + status: + type: string + example: '409' + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: 'Role with name: Internal/loginRole already exists in the system.' + RoleSearchErrorResponseObject: + type: object + required: + - totalResults + - startIndex + - itemsPerPage + - schemas + properties: + totalResults: + type: integer + example: 0 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 0 + schemas: + type: array + items: + example: urn:ietf:params:scim:api:messages:2.0:ListResponse diff --git a/docusaurus-asgardeo/static/apis/restapis/rule-metadata.yaml b/docusaurus-asgardeo/static/apis/restapis/rule-metadata.yaml new file mode 100644 index 0000000000..857b83853f --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/rule-metadata.yaml @@ -0,0 +1,401 @@ +openapi: 3.0.1 +info: + title: Asgardeo Rule Metadata REST API + description: "The Rule Metadata API provides the essential metadata required to configure rules dynamically based on the flow context. \nThe metadata retrieved by this API is designed to support rule configuration in the user interface (UI) by delivering information about each configurable field, the set of applicable comparison operators (e.g., equals, contains) for each field, and lists of possible values or options for fields.\n" + contact: + name: WSO2 + url: https://wso2.com/identity-and-access-management/ + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: v1 +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' +security: +- OAuth2: [] +paths: + /rules/metadata: + get: + tags: + - Metadata + summary: Get metadata for rule configuration. + description: |+ + This API provides a list of fields, associated metadata, and applicable operators for each field based on the specified flow type. This information is used to populate the UI for rule configuration. + + Scope (Permission) required: ``internal_rule_metadata_view`` + + operationId: getExpressionMeta + parameters: + - name: flow + in: query + description: | + Specifies the flow to retrieve rule metadata. This ensures that the metadata returned is relevant to the given flow. + + Note: At present, only the 'preIssueAccessToken','preUpdatePassword' and 'preUpdateProfile' flows are supported. + required: true + style: form + explode: true + schema: + type: string + enum: + - preIssueAccessToken + - preUpdatePassword + - preUpdateProfile + - preLogin + - postLogin + - inLogin + - preRegistration + - inRegistration + - inPasswordExpiry + responses: + "200": + description: Applicable fields and operators + content: + application/json: + schema: + $ref: '#/components/schemas/ExpressionMeta' + examples: + preIssueAccessToken: + summary: Sample response for pre-issue access token flow + value: + - field: + name: application + displayName: application + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + value: + inputType: options + valueType: reference + valueReferenceAttribute: id + valueDisplayAttribute: name + links: + - href: /applications?offset=0&limit=10 + method: GET + rel: values + - href: /applications?filter=name+eq+*&limit=10 + method: GET + rel: filter + - field: + name: grantType + displayName: grant type + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + value: + inputType: options + valueType: string + values: + - name: authorization_code + displayName: authorization code + - name: password + displayName: password + - name: refresh_token + displayName: refresh token + - name: client_credentials + displayName: client credentials + - name: urn:ietf:params:oauth:grant-type:token-exchange + displayName: token exchange + preUpdatePassword: + summary: Sample response for pre-update password flow + value: + - field: + name: flow + displayName: flow + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + value: + inputType: options + valueType: string + values: + - name: adminInitiatedPasswordReset + displayName: Admin initiated password reset + - name: adminInitiatedPasswordUpdate + displayName: Admin initiated password update + - name: adminInitiatedUserInviteToSetPassword + displayName: Admin initiated user invite to set password + - name: applicationInitiatedPasswordUpdate + displayName: Application initiated password update + - name: userInitiatedPasswordReset + displayName: User initiated password reset + - name: userInitiatedPasswordUpdate + displayName: User initiated password update + - name: adminInitiatedRegistration + displayName: Admin initiated registration + - name: applicationInitiatedRegistration + displayName: Application initiated registration + - name: userInitiatedRegistration + displayName: User initiated registration + preUpdateProfile: + summary: Sample response for pre-update profile flow + value: + - field: + name: flow + displayName: flow + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + value: + inputType: options + valueType: string + values: + - name: adminInitiatedProfileUpdate + displayName: Admin initiated profile update + - name: applicationInitiatedProfileUpdate + displayName: Application initiated profile update + - name: userInitiatedProfileUpdate + displayName: User initiated profile update + - field: + name: claim + displayName: claim + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + value: + inputType: options + valueType: reference + valueReferenceAttribute: claimURI + valueDisplayAttribute: displayName + links: + - href: /claim-dialects/local/claims?exclude-hidden-claims=true + method: GET + rel: values + inLogin: + summary: Sample response for login flow + value: + - field: + name: role + displayName: user.role + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + value: + inputType: options + valueType: reference + valueReferenceAttribute: id + valueDisplayAttribute: name + links: + - href: /scim2/Roles?offset=0&limit=10 + method: GET + rel: values + - href: /scim2/Roles?filter=name+eq+*&limit=10 + method: GET + rel: filter + - field: + name: group + displayName: user.group + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + value: + inputType: options + valueType: reference + valueReferenceAttribute: id + valueDisplayAttribute: name + links: + - href: /scim2/Groups?offset=0&limit=10 + method: GET + rel: values + - href: /scim2/Groups?filter=name+eq+*&limit=10 + method: GET + rel: filter + - field: + name: email + displayName: user.email + operators: + - name: equals + displayName: equals + - name: notEquals + displayName: not equals + - name: startsWith + displayName: starts with + - name: endsWith + displayName: ends with + - name: contains + displayName: contains + value: + inputType: input + valueType: string + "400": + description: Bad Request + "401": + description: Unauthorized + "500": + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/rules/metadata?flow=preIssueAccessToken' \ + --header 'Authorization: Bearer {bearer_token}' +components: + schemas: + ExpressionMeta: + type: array + description: Represents the metadata for rule expressions. It includes field definitions and associated operators. + items: + $ref: '#/components/schemas/FieldDefinition' + FieldDefinition: + type: object + properties: + field: + $ref: '#/components/schemas/Field' + operators: + type: array + description: | + Specifies the list of valid operators that can be applied to this field in rule expressions. Each operator defines a comparison or matching condition (e.g., \"equals\", \"contains\", \"greaterThan\") that determines how the field's value will be evaluated within a rule. + items: + $ref: '#/components/schemas/Operator' + value: + $ref: '#/components/schemas/Value' + Field: + type: object + properties: + name: + type: string + description: Name of the field. This is an immutable attribute and uniquely identifies the field allowed in the rule. + example: role + displayName: + type: string + description: Display name of the field. Use as a user friendly label of the field to show in UI. + example: user.role + dependantFields: + type: array + description: Lists the names of fields on which this field depends for its display or selection in the next expression. + example: [] + items: + type: string + Value: + type: object + properties: + inputType: + type: string + description: | + Defines how the field should be presented and populated in the rule configuration UI. This property indicates whether the field allows direct user input or if the values are selected from predefined options. Possible types include: + + - "input": Allows for direct user entry, such as text or numeric input. + - "options": Provides a list of selectable values, often fetched from an external data source, enabling users to pick from predefined choices. + enum: + - input + - options + valueType: + type: string + description: | + Specifies the expected data type for the field’s value within a rule expression. This property defines how the field's value should be interpreted when used in rule conditions. Possible types include: + - "string": Text value. + - "number": Numerical value. + - "boolean": True or false. + - "date": Date value. + - "reference": A reference to an external identifier, often used with options-type fields to indicate that the value is an ID or a unique attribute from related data." + enum: + - string + - number + - boolean + - date + - reference + valueReferenceAttribute: + type: string + description: "The key attribute in the options data (e.g., 'id') used to represent the option's selected value in rule expressions. Only available when 'valueType' is 'reference'." + example: id + valueDisplayAttribute: + type: string + description: "The attribute to show as the label for each option in the dropdown (e.g., 'name') when listing options. Only available when 'valueType' is 'reference'." + example: name + links: + type: array + description: Endpoints to retrieve or search for options dynamically. Included only when 'valueType' is 'reference'. + example: + - href: /scim2/roles?offset=0&limit=10 + method: GET + rel: values + - href: /scim2/roles/.search + method: GET + rel: filter + items: + $ref: '#/components/schemas/Link' + values: + type: array + description: "List of selectable values for options fields when 'valueType' is 'string', 'number', 'boolean', or 'date'." + items: + $ref: '#/components/schemas/ValueObject' + Operator: + type: object + properties: + name: + type: string + description: Name of the operator. The immutable identifier of the operator referenced within the rule expression. + displayName: + type: string + description: Display name of the operator. Use as a user friendly label of the operator to show in UI. + ValueObject: + type: object + properties: + name: + type: string + description: The name that uniquely identifies the option. + displayName: + type: string + description: The display name for the option. + Link: + type: object + properties: + href: + type: string + description: Url of the endpoint. + method: + type: string + description: Http method. + enum: + - GET + rel: + type: string + description: Indicates the endpoint’s relation to retrieving or filtering field values. + enum: + - values + - filter + Error: + type: object + properties: + code: + type: string + description: Error code + example: RMS-00000 + message: + type: string + description: Error message. + example: Some error message. + description: + type: string + description: Detailed error description. + example: Some error description. + traceId: + type: string + description: Trace identifier to refer at troubleshooting logs to troubleshoot the problem. + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + scopes: + read: internal_rule_metadata_view diff --git a/docusaurus-asgardeo/static/apis/restapis/scim2-agents.yaml b/docusaurus-asgardeo/static/apis/restapis/scim2-agents.yaml new file mode 100644 index 0000000000..edb5c29627 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/scim2-agents.yaml @@ -0,0 +1,894 @@ +openapi: 3.1.0 +info: + title: AI Agent Management API + description: | + This document specifies the REST API for **AI Agent Management** in **Asgardeo**. + The Agent Management API allows to create, retrieve, update, and delete AI agent identities, allowing agents to be managed in the same way as human users while remaining clearly distinguishable from them. + version: 1.0.0 +servers: + - url: https://api.asgardeo.io/t/{organization-name}/scim2 +security: + - OAuth2: [] + - BasicAuth: [] +paths: + /Agents: + get: + tags: + - Agents Endpoint + summary: Retrieve a list of agents + description: | + This API returns agents according to the specified pagination and attribute parameters.
    + Scope(Permission) required: `internal_agent_mgt_list` + operationId: getAgents + parameters: + - name: startIndex + in: query + description: The 1-based index of the first query result. + schema: + type: integer + format: int32 + minimum: 1 + default: 1 + - name: count + in: query + description: Specifies the desired maximum number of query results per page. + schema: + type: integer + format: int32 + minimum: 0 + default: 100 + - name: attributes + in: query + description: A multi-valued list of strings indicating the names of resource attributes to include in the response. + schema: + type: array + items: + type: string + - name: excludedAttributes + in: query + description: A multi-valued list of strings indicating the names of resource attributes to exclude in the response. + schema: + type: array + items: + type: string + responses: + 200: + description: Successful response with a list of AI agents. + content: + application/scim+json: + schema: + $ref: '#/components/schemas/AgentListResponseObject' + 400: + description: Bad Request + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 500: + description: Internal Server Error + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInternalServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X GET \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Agents' \ + -H 'Accept: application/scim+json' \ + -H 'Authorization: Bearer {access_token}' + + post: + tags: + - Agents Endpoint + summary: Create a new AI agent + description: | + This API creates an AI agent and returns the agent details along with the agent's unique ID and initial password. + Scope(Permission) required: `internal_agent_mgt_create` + operationId: createAgent + requestBody: + description: Agent object that needs to be created. + required: true + content: + application/scim+json: + schema: + $ref: '#/components/schemas/AgentCreateObject' + example: + urn:scim:wso2:agent:schema: + Description: "Intelligent Vet Assistant" + DisplayName: "Vetassist AI" + Owner: "7a6f7b26-f9ea-48ea-9012-87d6b54f4055@{organization-name}" + responses: + 201: + description: Agent created successfully. + content: + application/scim+json: + schema: + $ref: '#/components/schemas/AgentResponseObject' + example: + password: "K#B79pB%dq*v7sE!" + meta: + created: "2025-12-17T06:17:51.835814Z" + location: "https://api.asgardeo.io/t/{organization-name}/scim2/Agents/688d98c0-1c8d-49c2-9316-559a76cd9240" + lastModified: "2025-12-17T06:17:52.150201Z" + resourceType: "Agent" + schemas: + - "urn:ietf:params:scim:schemas:core:2.0:User" + - "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" + - "urn:scim:wso2:schema" + - "urn:scim:schemas:extension:custom:User" + - "urn:scim:wso2:agent:schema" + roles: + - audienceValue: "10084a8d-113f-4211-a0d5-efe36b082211" + display: "everyone" + audienceType: "organization" + value: "97e4626a-b16e-4735-9896-536bc4f4481e" + $ref: "https://api.asgardeo.io/t/{organization-name}/scim2/v2/Roles/97e4626a-b16e-4735-9896-536bc4f4481e" + audienceDisplay: "{organization-name}" + id: "688d98c0-1c8d-49c2-9316-559a76cd9240" + userName: "AGENT/688d98c0-1c8d-49c2-9316-559a76cd9240" + urn:scim:wso2:agent:schema: + Owner: "7a6f7b26-f9ea-48ea-9012-87d6b54f4055@{organization-name}" + Description: "Intelligent Vet Assistant" + DisplayName: "Vetassist AI" + urn:scim:wso2:schema: + lastPasswordUpdateTime: "1765952272085" + 400: + description: Bad Request + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Not Found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNotFound' + 500: + description: Internal Server Error + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInternalServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X POST \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Agents' \ + -H 'Accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {access_token}' \ + -d '{ + "urn:scim:wso2:agent:schema": { + "Description": "Intelligent Vet Assistant", + "DisplayName": "Vetassist AI", + "Owner": "7a6f7b26-f9ea-48ea-9012-87d6b54f4055@{organization-name}" + } + }' + + /Agents/{agentId}: + get: + tags: + - Agents Endpoint + summary: Retrieve an agent by ID + description: | + This API returns the agent details for the specified agent ID. + Scope(Permission) required: `internal_agent_mgt_view` + operationId: getAgentById + parameters: + - name: agentId + in: path + description: ID of the agent to retrieve. + required: true + schema: + type: string + - name: attributes + in: query + description: A multi-valued list of strings indicating the names of resource attributes to include in the response. + schema: + type: array + items: + type: string + - name: excludedAttributes + in: query + description: A multi-valued list of strings indicating the names of resource attributes to exclude in the response. + schema: + type: array + items: + type: string + responses: + 200: + description: Successful response with agent details. + content: + application/scim+json: + schema: + $ref: '#/components/schemas/AgentResponseObject' + example: + meta: + created: "2025-12-17T06:17:51.835814Z" + location: "https://api.asgardeo.io/t/{organization-name}/scim2/Agents/ced368ab-29f5-46c1-a192-ffb678b8f747" + lastModified: "2025-12-17T06:17:52.150201Z" + resourceType: "Agent" + schemas: + - "urn:ietf:params:scim:schemas:core:2.0:User" + - "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" + - "urn:scim:wso2:schema" + - "urn:scim:schemas:extension:custom:User" + - "urn:scim:wso2:agent:schema" + roles: + - audienceValue: "10084a8d-113f-4211-a0d5-efe36b082211" + display: "everyone" + audienceType: "organization" + value: "97e4626a-b16e-4735-9896-536bc4f4481e" + $ref: "https://api.asgardeo.io/t/{organization-name}/scim2/v2/Roles/97e4626a-b16e-4735-9896-536bc4f4481e" + audienceDisplay: "{organization-name}" + id: "ced368ab-29f5-46c1-a192-ffb678b8f747" + userName: "AGENT/ced368ab-29f5-46c1-a192-ffb678b8f747" + urn:scim:wso2:agent:schema: + Owner: "7a6f7b26-f9ea-48ea-9012-87d6b54f4055@{organization-name}" + Description: "Intelligent Vet Assistant" + DisplayName: "Vetassist AI" + urn:scim:wso2:schema: + lastPasswordUpdateTime: "1765952272085" + 400: + description: Bad Request + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Not Found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNotFound' + 500: + description: Internal Server Error + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInternalServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X GET \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Agents/{agentId}' \ + -H 'Accept: application/scim+json' \ + -H 'Authorization: Bearer {access_token}' + + put: + tags: + - Agents Endpoint + summary: Update an existing agent by ID (replace) + description: | + This API replaces the existing agent details with the provided agent object. + Scope(Permission) required: `internal_agent_mgt_update` + operationId: updateAgentById + parameters: + - name: agentId + in: path + description: ID of the agent to update. + required: true + schema: + type: string + requestBody: + description: Agent object that needs to be updated. + required: true + content: + application/scim+json: + schema: + $ref: '#/components/schemas/AgentUpdateObject' + example: + urn:scim:wso2:agent:schema: + Description: "Updated Description" + DisplayName: "Vetassist AI" + Owner: "7a6f7b26-f9ea-48ea-9012-87d6b54f4055@{organization-name}" + id: "ced368ab-29f5-46c1-a192-ffb678b8f747" + userName: "AGENT/ced368ab-29f5-46c1-a192-ffb678b8f747" + responses: + 200: + description: Agent updated successfully. + content: + application/scim+json: + schema: + $ref: '#/components/schemas/AgentResponseObject' + 400: + description: Bad Request + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Not Found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNotFound' + 500: + description: Internal Server Error + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInternalServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X PUT \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Agents/{agentId}' \ + -H 'Accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {access_token}' \ + -d '{ + "urn:scim:wso2:agent:schema": { + "Description": "Updated Description", + "DisplayName": "Vetassist AI", + "Owner": "7a6f7b26-f9ea-48ea-9012-87d6b54f4055@{organization-name}" + }, + "id": "14a11c02-d947-482c-9084-734fa1c22c2c", + "userName": "AGENT/{agentId}" + }' + + delete: + tags: + - Agents Endpoint + summary: Delete an agent by ID + description: | + This API deletes the specified agent. + Scope(Permission) required: `internal_agent_mgt_delete` + operationId: deleteAgentById + parameters: + - name: agentId + in: path + description: ID of the agent to delete. + required: true + schema: + type: string + responses: + 204: + description: Agent deleted successfully. + 400: + description: Bad Request + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Not Found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNotFound' + 500: + description: Internal Server Error + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInternalServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X DELETE \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Agents/{agentId}' \ + -H 'Accept: application/scim+json' \ + -H 'Authorization: Bearer {access_token}' + + patch: + tags: + - Agents Endpoint + summary: Partially update an agent by ID + description: | + This API applies partial modifications to the specified agent using SCIM PATCH operations. + Common use cases include: + - Updating agent description + - Deactivating an agent + - Updating agent secret/password + Scope(Permission) required: `internal_agent_mgt_update` + operationId: patchAgentById + parameters: + - name: agentId + in: path + description: ID of the agent to partially update. + required: true + schema: + type: string + requestBody: + description: Patch operations to apply to the agent. + required: true + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchOperation' + examples: + updateDescription: + summary: Update agent description + value: + schemas: + - "urn:ietf:params:scim:api:messages:2.0:PatchOp" + Operations: + - op: "replace" + path: "urn:scim:wso2:agent:schema:Description" + value: "AI assistant specializing in veterinary diagnostics and pet care recommendations." + deactivateAgent: + summary: Deactivate an agent + value: + schemas: + - "urn:ietf:params:scim:api:messages:2.0:PatchOp" + Operations: + - op: "replace" + path: "active" + value: false + updateSecret: + summary: Update agent secret + value: + schemas: + - "urn:ietf:params:scim:api:messages:2.0:PatchOp" + Operations: + - op: "replace" + path: "password" + value: "NewSecretPassword123!" + responses: + 200: + description: Agent updated successfully. + content: + application/scim+json: + schema: + $ref: '#/components/schemas/AgentResponseObject' + 400: + description: Bad Request + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Not Found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNotFound' + 500: + description: Internal Server Error + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInternalServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Agents/{agentId}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {access_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:PatchOp" + ], + "Operations": [ + { + "op": "replace", + "path": "urn:scim:wso2:agent:schema:Description", + "value": "AI assistant specializing in veterinary diagnostics and pet care recommendations." + } + ] + }' +components: + schemas: + AgentCreateObject: + type: object + description: SCIM agent resource for creation. + properties: + "urn:scim:wso2:agent:schema": + type: object + required: + - DisplayName + - Owner + properties: + Description: + type: string + description: A description for the agent. + example: "Intelligent Vet Assistant" + DisplayName: + type: string + description: A human-readable name for the agent. + example: "Vetassist AI" + Owner: + type: string + description: The ID of the owner of this agent. + example: "7a6f7b26-f9ea-48ea-9012-87d6b54f4055@{organization-name}" + required: + - "urn:scim:wso2:agent:schema" + AgentUpdateObject: + type: object + description: SCIM agent resource for update. + properties: + id: + type: string + description: A unique identifier for the SCIM resource. + example: "ced368ab-29f5-46c1-a192-ffb678b8f747" + userName: + type: string + description: Unique identifier for the agent. + example: "AGENT/ced368ab-29f5-46c1-a192-ffb678b8f747" + "urn:scim:wso2:agent:schema": + type: object + properties: + Description: + type: string + description: A description for the agent. + example: "Updated Description" + DisplayName: + type: string + description: A human-readable name for the agent. + example: "Vetassist AI" + Owner: + type: string + description: The ID of the owner of this agent. + example: "7a6f7b26-f9ea-48ea-9012-87d6b54f4055@{organization-name}" + AgentResponseObject: + type: object + description: SCIM agent resource. + properties: + schemas: + type: array + items: + type: string + description: A complex attribute that contains one or more URIs that indicate the namespaces of the SCIM schemas that define the attributes present in the resource. + example: + - "urn:ietf:params:scim:schemas:core:2.0:User" + - "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" + - "urn:scim:wso2:schema" + - "urn:scim:schemas:extension:custom:User" + - "urn:scim:wso2:agent:schema" + id: + type: string + description: A unique identifier for the SCIM resource as defined by the service provider. + readOnly: true + example: "ced368ab-29f5-46c1-a192-ffb678b8f747" + meta: + type: object + description: A complex attribute containing resource metadata. + readOnly: true + properties: + resourceType: + type: string + description: The name of the resource type. + example: "Agent" + created: + type: string + format: date-time + description: The date and time at which the resource was added to the service provider. + example: "2025-12-17T06:17:51.835814Z" + lastModified: + type: string + format: date-time + description: The date and time at which the resource was last modified in the service provider. + example: "2025-12-17T06:17:52.150201Z" + location: + type: string + description: The URI of the resource being returned. + example: "https://api.asgardeo.io/t/{organization-name}/scim2/Agents/ced368ab-29f5-46c1-a192-ffb678b8f747" + userName: + type: string + description: Unique identifier for the agent. + example: "AGENT/ced368ab-29f5-46c1-a192-ffb678b8f747" + password: + type: string + writeOnly: true + description: The agent's clear text password (only returned on creation). + example: "K#B79pB%dq*v7sE!" + roles: + type: array + description: A list of roles for the agent. + items: + $ref: '#/components/schemas/Role' + "urn:scim:wso2:schema": + type: object + properties: + lastPasswordUpdateTime: + type: string + description: The epoch timestamp when the password was last updated. + example: "1765952272085" + "urn:scim:wso2:agent:schema": + type: object + properties: + Description: + type: string + description: A description for the agent. + example: "AI assistant specializing in veterinary diagnostics and pet care recommendations." + DisplayName: + type: string + description: A human-readable name for the agent. + example: "Vetassist AI" + Owner: + type: string + description: The ID of the owner of this agent. + example: "7a6f7b26-f9ea-48ea-9012-87d6b54f4055@{organization-name}" + AgentListResponseObject: + type: object + description: A list of SCIM agents. + properties: + totalResults: + type: integer + format: int32 + description: The total number of results returned by the list operation. + example: 1 + startIndex: + type: integer + format: int32 + description: The 1-based index of the first result in the current page. + example: 1 + itemsPerPage: + type: integer + format: int32 + description: The number of results in the current page. + example: 1 + schemas: + type: array + items: + type: string + description: A complex attribute that contains one or more URIs that indicate the namespaces of the SCIM schemas that define the attributes present in the resource. + example: + - "urn:ietf:params:scim:api:messages:2.0:ListResponse" + Resources: + type: array + items: + $ref: '#/components/schemas/AgentResponseObject' + Role: + type: object + description: A complex attribute that specifies the agent's roles. + properties: + value: + type: string + description: The identifier of the role. + example: "97e4626a-b16e-4735-9896-536bc4f4481e" + $ref: + type: string + description: The URI of the role. + example: "https://api.asgardeo.io/t/{organization-name}/scim2/v2/Roles/97e4626a-b16e-4735-9896-536bc4f4481e" + display: + type: string + description: A human-readable name for the role. + example: "everyone" + audienceValue: + type: string + description: The audience value of the role. + example: "10084a8d-113f-4211-a0d5-efe36b082211" + audienceType: + type: string + description: The audience type of the role. + example: "organization" + audienceDisplay: + type: string + description: A human-readable display name for the role's audience. + example: "organization-name" + PatchOperation: + type: object + description: A single SCIM patch operation. + properties: + schemas: + type: array + items: + type: string + example: + - "urn:ietf:params:scim:api:messages:2.0:PatchOp" + Operations: + type: array + items: + type: object + properties: + op: + type: string + description: The type of operation. Valid values are 'add', 'remove', or 'replace'. + enum: + - add + - remove + - replace + path: + type: string + description: The attribute path to be modified. + example: "urn:scim:wso2:agent:schema:Description" + value: + oneOf: + - type: string + - type: object + - type: array + description: The value to be added, removed, or replaced. This can be a simple value, an object, or an array. + example: "Updated Description from Patch" + required: + - schemas + - Operations + ErrorInvalidInput: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - "urn:ietf:params:scim:api:messages:2.0:Error" + scimType: + type: string + description: A SCIM detail error keyword. + example: "invalidValue" + detail: + type: string + description: A more specific error message. + example: "Invalid input provided" + status: + type: string + description: The HTTP status code. + example: "400" + ErrorUnauthorized: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - "urn:ietf:params:scim:api:messages:2.0:Error" + detail: + type: string + description: A more specific error message. + example: "Authentication required" + status: + type: string + description: The HTTP status code. + example: "401" + ErrorForbidden: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - "urn:ietf:params:scim:api:messages:2.0:Error" + detail: + type: string + description: A more specific error message. + example: "You don't have enough permissions to perform this operation" + status: + type: string + description: The HTTP status code. + example: "403" + ErrorNotFound: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - "urn:ietf:params:scim:api:messages:2.0:Error" + detail: + type: string + description: A more specific error message. + example: "The specified resource does not exist" + status: + type: string + description: The HTTP status code. + example: "404" + ErrorConflict: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - "urn:ietf:params:scim:api:messages:2.0:Error" + detail: + type: string + description: A more specific error message. + example: "The requested operation would create a duplicate resource" + status: + type: string + description: The HTTP status code. + example: "409" + ErrorInternalServerError: + type: object + properties: + schemas: + type: array + items: + type: string + example: + - "urn:ietf:params:scim:api:messages:2.0:Error" + detail: + type: string + description: A more specific error message. + example: "Unexpected error occurred during processing the request" + status: + type: string + description: The HTTP status code. + example: "500" + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/token + scopes: + internal_agent_mgt_create: Create agents + internal_agent_mgt_list: List agents + internal_agent_mgt_view: View agent details + internal_agent_mgt_update: Update agents + internal_agent_mgt_delete: Delete agents + BasicAuth: + type: http + scheme: basic diff --git a/docusaurus-asgardeo/static/apis/restapis/scim2-bulk.yaml b/docusaurus-asgardeo/static/apis/restapis/scim2-bulk.yaml new file mode 100644 index 0000000000..6299f9bf05 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/scim2-bulk.yaml @@ -0,0 +1,633 @@ +openapi: 3.0.1 +info: + title: Asgardeo - SCIM 2.0 Bulk API + description: | + This document specifies **SCIM 2.0 Bulk RESTful API** for **Asgardeo**. To access the SCIM 2.0 APIs in Asgardeo, you need to first [get an access token](https://wso2.com/asgardeo/docs/apis/authentication/#get-an-access-token) from your organization. + version: "v1" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/scim2' +tags: + - name: Bulk Endpoint + description: | + This endpoint is used to create/update/delete SCIM resources (users and/or groups) in bulk. +paths: + /Bulk: + post: + tags: + - Bulk Endpoint + summary: Create/Update/Replace/Delete SCIM Resources (Users/ Groups) in Bulk + description: | + This API is used to create/update/replace/delete SCIM resources in bulk. You need to specify different operations in the request payload corresponding to the type of bulk update:

    + - **POST** operation: Adds new resources.
    + - **PUT** operation: Replaces an existing resource.
    + - **PATCH** operation: Updates attributes of an existing resource.
    + - **DELETE** operation: Removes an existing resource.
    + - Scopes required: ``internal_bulk_resource_create`` or an [operation-wise scope](../../scim2/scim2-batch-operations/#scopepermission-required-for-batch-operations) + - Flow type: Client Credentials OAuth Flow + + operationId: createBulkUsers + requestBody: + content: + application/scim+json: + schema: + oneOf: + - $ref: '#/components/schemas/BulkUserCreateObject' + - $ref: '#/components/schemas/BulkUserUpdateObject' + - $ref: '#/components/schemas/BulkUserReplaceObject' + - $ref: '#/components/schemas/BulkUserDeleteObject' + - $ref: '#/components/schemas/BulkGroupCreateObject' + - $ref: '#/components/schemas/BulkGroupUpdateObject' + - $ref: '#/components/schemas/BulkGroupReplaceObject' + - $ref: '#/components/schemas/BulkGroupDeleteObject' + responses: + 201: + description: Valid user is created + content: + application/scim+json: + schema: + $ref: '#/components/schemas/BulkUserResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 409: + description: Users already exists + content: {} + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Bulk' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "failOnErrors": 1, + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:BulkRequest" + ], + "Operations": [ + { + "method": "POST", + "path": "/Users", + "bulkId": "ytrewq", + "data": { + "schemas": [ + "urn:ietf:params:scim:schemas:core:2.0:User" + ], + "userName": "DEFAULT/kim@gmail.com", + "password": "Pass@kim1" + } + } + ] + }' + x-codegen-request-body-name: body +components: + schemas: + BulkUserCreateObject: + type: object + title: create user + properties: + failOnErrors: + type: integer + example: 1 + description: The number of errors that will be accepted by Asgardeo before returning the response. + schemas: + type: array + description: This is the schema that is required for sending bulk requests + items: + type: string + example: "urn:ietf:params:scim:api:messages:2.0:BulkRequest" + Operations: + type: array + description: Array of operations. To add multiple new users, add an array of POST operations. You can include any number of operations in one bulk request. + items: + $ref: '#/components/schemas/BulkUserOb' + required: + - schemas + - Operations + BulkUserUpdateObject: + type: object + title: update user + properties: + failOnErrors: + type: integer + example: 1 + description: The number of errors that will be accepted by Asgardeo before returning the response. + schemas: + type: array + description: This is the schema that is required for sending bulk requests + items: + type: string + example: "urn:ietf:params:scim:api:messages:2.0:BulkRequest" + Operations: + type: array + description: Array of operations. To update multiple users, add an array of PATCH operations. You can include any number of operations in one bulk request. + items: + $ref: '#/components/schemas/BulkUserUpdateOb' + required: + - schemas + - Operations + BulkUserReplaceObject: + type: object + title: replace user + properties: + failOnErrors: + type: integer + example: 1 + description: The number of errors that will be accepted by Asgardeo before returning the response. + schemas: + type: array + description: This is the schema that is required for sending bulk requests + items: + type: string + example: "urn:ietf:params:scim:api:messages:2.0:BulkRequest" + Operations: + type: array + description: Array of operations. To replace multiple users, add an array of PUT operations. You can include any number of operations in one bulk request. + items: + $ref: '#/components/schemas/BulkUserReplaceOb' + required: + - schemas + - Operations + BulkUserDeleteObject: + type: object + title: delete user + properties: + failOnErrors: + type: integer + example: 1 + description: The number of errors that will be accepted by Asgardeo before returning the response. + schemas: + type: array + description: This is the schema that is required for sending bulk requests + items: + type: string + example: "urn:ietf:params:scim:api:messages:2.0:BulkRequest" + Operations: + type: array + description: Array of operations. To delete multiple users, add an array of DELETE operations. You can include any number of operations in one bulk request. + items: + $ref: '#/components/schemas/BulkUserDeleteOb' + required: + - schemas + - Operations + BulkGroupCreateObject: + type: object + title: create group + properties: + failOnErrors: + type: integer + example: 1 + description: The number of errors that will be accepted by Asgardeo before returning the response. + schemas: + type: array + description: This is the schema that is required for sending bulk requests + items: + type: string + example: "urn:ietf:params:scim:api:messages:2.0:BulkRequest" + Operations: + type: array + description: Array of operations. To add multiple new user groups, add an array of POST operations. You can include any number of operations in one bulk request. + items: + $ref: '#/components/schemas/BulkGroupCreateOb' + required: + - schemas + - Operations + BulkGroupUpdateObject: + type: object + title: update group + properties: + failOnErrors: + type: integer + example: 1 + description: The number of errors that will be accepted by Asgardeo before returning the response. + schemas: + type: array + description: This is the schema that is required for sending bulk requests + items: + type: string + example: "urn:ietf:params:scim:api:messages:2.0:BulkRequest" + Operations: + type: array + description: Array of operations. To update multiple user groups, add an array of PATCH operations. You can include any number of operations in one bulk request. + items: + $ref: '#/components/schemas/BulkGroupUpdateOb' + required: + - schemas + - Operations + BulkGroupReplaceObject: + type: object + title: replace group + properties: + failOnErrors: + type: integer + example: 1 + description: The number of errors that will be accepted by Asgardeo before returning the response. + schemas: + type: array + description: This is the schema that is required for sending bulk requests + items: + type: string + example: "urn:ietf:params:scim:api:messages:2.0:BulkRequest" + Operations: + type: array + description: Array of operations. To replace multiple user groups, add an array of PUT operations. You can include any number of operations in one bulk request. + items: + $ref: '#/components/schemas/BulkGroupReplaceOb' + required: + - schemas + - Operations + BulkGroupDeleteObject: + type: object + title: delete group + properties: + failOnErrors: + type: integer + example: 1 + description: The number of errors that will be accepted by Asgardeo before returning the response. + schemas: + type: array + description: This is the schema that is required for sending bulk requests + items: + type: string + example: "urn:ietf:params:scim:api:messages:2.0:BulkRequest" + Operations: + type: array + description: Array of operations. To delete multiple user groups, add an array of PUT operations. You can include any number of operations in one bulk request. + items: + $ref: '#/components/schemas/BulkGroupDeleteOb' + required: + - schemas + - Operations + BulkUserOb: + type: object + properties: + method: + type: string + description: The method that should be used in the operation + example: POST + path: + type: string + description: Add this path to specify that a new user is being added. + example: /Users + bulkId: + type: string + description: A unique identifier for the bulk operation. The bulkid is required for POST operations. + example: ytrewq + data: + type: object + description: Specify the details of the new user that should be added. + properties: + schemas: + type: array + description: Specify the list of SCIM2 user schemas to which the new user should be linked. + example: + - urn:ietf:params:scim:schemas:core:2.0:User + - urn:ietf:params:scim:schemas:enterprise:2.0:User + - urn:scim:wso2:schema + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + userName: + type: string + description: The email address that should be set as the username. + example: DEFAULT/kim@gmail.com + password: + type: string + description: The password that is set for the user. + example: Pass@kim1 + required: + - schemas + - username + - password + required: + - method + - path + - bulkId + - data + BulkUserUpdateOb: + type: object + properties: + method: + type: string + description: The method that should be used in the operation + example: PATCH + path: + type: string + description: Add this path to specify the new user that is being updated. (Optional if op is add or replace) + example: /Users/{user_id} + bulkId: + type: integer + description: A unique identifier for the bulk operation. The bulkid is required for POST operations. + example: An integer value + data: + type: object + description: Specify the details of the new user that should be updated. + properties: + op: + type: string + description: The operation that should be applied to the existing user data. + example: + - add + - replace + - remove + path: + type: string + description: The path to the resource (user attribute) that should be updated. (Optional if op is add or replace) + example: If the name of the user is to be updated, the path should be “name”. + value: + type: string + description: The value of the parameter specified by the path. (Optional if op is add or replace) + example: If the path is “name”, the value should be the actual name. + required: + - op + - path + - value + required: + - method + - path + - data + BulkUserReplaceOb: + type: object + properties: + method: + type: string + description: The method that should be used in the operation + example: PUT + path: + type: string + description: Add this path to specify the existing user that should be replaced by the new user information that is added. + example: /Users/{user_id} + bulkId: + type: integer + description: A unique identifier for the bulk operation. The bulkid is required for POST operations. + example: An integer value + data: + type: object + description: Specify the new user details that should be used to replace the existing user specified in the path. + properties: + schemas: + type: array + description: Specify the list of SCIM2 user schemas to which the new user should be linked. + example: + - urn:ietf:params:scim:schemas:core:2.0:User + - urn:ietf:params:scim:schemas:enterprise:2.0:User + - urn:scim:wso2:schema + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + userName: + type: string + description: The name of the attribute that will be replaced. + example: smith + name: + type: object + description: The name of the attribute that will be replaced. + properties: + givenName: + type: string + example: Smith + familyName: + type: string + example: Berry + required: + - schemas + - userName + - name + required: + - method + - path + - data + BulkUserDeleteOb: + type: object + properties: + method: + type: string + description: The method that should be used in the operation + example: DELETE + path: + type: string + description: Add this path to specify the existing user that should be deleted. + example: /Users/{user_id} + required: + - method + - path + BulkGroupCreateOb: + type: object + properties: + method: + type: string + description: The method that should be used in the operation + example: POST + path: + type: string + description: Add this path to specify that a new user group that should be added. + example: /Groups + bulkId: + type: integer + description: A unique identifier for the bulk operation. The bulkid is required for POST operations. + example: An integer value + data: + type: object + description: Specify the details of the new user group that should be added. + properties: + displayName: + type: string + description: The display name of the user group. + members: + type: array + description: An array of member users. + items: + type: object + properties: + display: + type: string + description: The display name of a user assigned to the group.(Required if members is used) + example: The username + value: + type: string + description: The ID of the user.(Required if members is used) + example: The user ID. + required: + - displayName + required: + - method + - path + - data + BulkGroupUpdateOb: + type: object + properties: + method: + type: string + description: The method that should be used in the operation + example: PATCH + path: + type: string + description: Add this path to specify the user group that should be updated. + example: /Groups/{group_id} + bulkId: + type: integer + description: A unique identifier for the bulk operation. The bulkid is required for POST operations. + example: An integer value + data: + type: object + description: Specify the details that should be updated for the user group specified in the path. + properties: + op: + type: string + description: The operation that should be applied to the existing user group. + example: + - add + - replace + - remove + path: + type: string + description: Specify “members” as the path.(Optional if op is add or replace) + example: members + value: + type: array + description: An array of users that belong to the group.(Optional if op is remove) + items: + type: object + properties: + display: + type: string + description: The display name of the user, who is a member.(Required if path is set to members) + example: The username + value: + type: string + description: The user ID of the member user.(Required if path is set to members) + example: The user ID + required: + - op + - path + - value + required: + - method + - path + - data + BulkGroupReplaceOb: + type: object + properties: + method: + type: string + description: The method that should be used in the operation + example: PUT + path: + type: string + description: Add this path to specify the existing user group that should be replaced by the new information that is added. + example: /Groups/{group_id} + bulkId: + type: integer + description: A unique identifier for the bulk operation. The bulkid is required for POST operations. + example: An integer value + data: + type: object + description: Specify the new group details that should be used to replace the existing user group specified in the path. + properties: + displayName: + type: string + description: The display name of the user group. + members: + type: array + description: Array of member users. + items: + type: object + properties: + display: + type: string + description: The display name of a user assigned to the group. + example: The username + value: + type: string + description: The ID of the user. + example: The user ID. + required: + - display + - value + required: + - displayName + - members + required: + - method + - path + - data + BulkGroupDeleteOb: + type: object + properties: + method: + type: string + description: The method that should be used in the operation + example: DELETE + path: + type: string + description: Add this path to specify the existing user group that should be deleted. + example: /Groups/{group_id} + required: + - method + - path + BulkUserResponseObject: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:BulkResponse + Operations: + $ref: '#/components/schemas/OperationObBulk' + OperationObBulk: + type: object + properties: + bulkId: + type: string + example: qwerty + method: + type: string + example: POST + location: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Users/81cbba1b-c259-485d-8ba4-79afb03e5bd1 + status: + type: object + properties: + code: + type: string + example: "201" + ErrorUnauthorized: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Authorization failure. Authorization information was invalid or missing from your request." + status: + type: string + example: "401" + ErrorForbidden: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Operation is not permitted. You do not have permission to make this request." + status: + type: string + example: "403" diff --git a/docusaurus-asgardeo/static/apis/restapis/scim2-groups.yaml b/docusaurus-asgardeo/static/apis/restapis/scim2-groups.yaml new file mode 100644 index 0000000000..57a3881804 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/scim2-groups.yaml @@ -0,0 +1,859 @@ +openapi: 3.0.1 +info: + title: Asgardeo - SCIM 2.0 Groups API + description: | + This document specifies **SCIM 2.0 Group Management RESTful API** for **Asgardeo**. This endpoint performs actions related to all users in the organization. To access the SCIM 2.0 APIs in Asgardeo, you need to first [get an access token](https://wso2.com/asgardeo/docs/apis/authentication/#get-an-access-token) from your organization. + version: "v1" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/scim2' +paths: + /Groups: + get: + tags: + - Groups Endpoint + summary: Filter Groups + description: "This API returns groups according to the specified filter, sort, and pagination parameters.\n\n + - Scope(Permission) required: ``internal_group_mgt_view`` \n\n + - Flow type: Client Credentials OAuth Flow" + operationId: getGroup + parameters: + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + - name: filter + in: query + description: Filter expression for filtering + schema: + type: string + - name: startIndex + in: query + description: The 1-based index of the first query result + schema: + type: integer + format: int32 + - name: count + in: query + description: Specifies the desired maximum number of query results per page. + schema: + type: integer + format: int32 + - name: domain + in: query + description: The name of the user store where filtering needs to be applied. + schema: + type: string + responses: + 200: + description: Valid groups are found / No Group found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupsListResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Groups' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Groups Endpoint + summary: Create Group + description: "This API creates a group and returns the details of the created group including its unique ID.\n\n + - Scope(Permission) required: ``internal_group_mgt_create``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: createGroup + parameters: + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupRequestObject' + required: false + responses: + 201: + description: Valid group is created + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Group is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorGroupNotAvailable' + 409: + description: Group already exist + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorGroupAlreadyAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Groups' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + x-codegen-request-body-name: body + /Groups/.search: + post: + tags: + - Groups Endpoint + summary: Search Groups + description: "This API returns groups according to the specified filter, sort, and pagination parameters.\n\n + - Scope(Permission) required: ``internal_group_mgt_view``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: getGroupsByPost + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupSearchRequestObject' + required: false + responses: + 200: + description: Valid groups are found / Valid groups are not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupSearchResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Groups/.search' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:SearchRequest" + ], + "startIndex": 1, + "filter": "displayName eq manager" + }' + x-codegen-request-body-name: body + /Groups/{id}: + get: + tags: + - Groups Endpoint + summary: Get Group by ID + description: "This API returns the group details of a particular group using its unique ID.\n\n + - Scope(Permission) required: ``internal_group_mgt_view``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: getGroup by id + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + responses: + 200: + description: Valid group is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid group is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoGroupAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Groups/{group-id}' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Groups Endpoint + summary: Update Group - PUT + description: "This API updates the group details and returns the updated group details using a PUT operation.\n\n + - Scope(Permission) required: ``internal_group_mgt_update`` \n\n + - Flow type: Client Credentials OAuth Flow" + operationId: updateGroup + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupPutRequestObject' + required: false + responses: + 200: + description: Group is updated + content: + application/scim+json: + schema: + $ref: '#/components/schemas/GroupPutResponseObject' + 400: + description: Invalid Input + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid group is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoGroupAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Groups/{group-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "displayName": "manager", + "members": [ + { + "value": "409ca90b-2ba6-4474-9a45-2cf7376e6e43", + "display": "kris" + } + ] + }' + x-codegen-request-body-name: body + delete: + tags: + - Groups Endpoint + summary: Delete Group + description: "This API deletes a particular group using its unique ID.\n\n + - Scope(Permission) required: ``internal_group_mgt_delete``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: deleteGroup + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + responses: + 204: + description: Group is deleted + content: {} + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid group is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoGroupAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Groups/{group-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Groups Endpoint + summary: Update Group - PATCH + description: "This API updates the group details and returns the updated group details using a PATCH operation.\n\n + - Scope(Permission) required: ``internal_group_mgt_update``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: patchGroup + parameters: + - name: id + in: path + description: Unique id of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchGroupOperationRequestObject' + required: false + responses: + 200: + description: Group is updated + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchGroupOperationResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid group is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorNoGroupAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Groups/{group-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:PatchOp" + ], + "Operations": [ + { + "op": "add", + "value": { + "members": [ + { + "display": "kris", + "value": "409ca90b-2ba6-4474-9a45-2cf7376e6e43" + } + ] + } + } + ] + }' + x-codegen-request-body-name: body +components: + schemas: + GroupsListResponseObject: + type: object + properties: + totalResults: + type: integer + example: 3 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 3 + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/groupOb' + groupOb: + type: object + properties: + displayName: + type: string + example: DEFAULT/manager + meta: + type: object + properties: + created: + type: string + example: 2019-08-26T14:27:36 + location: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Groups/7bac6a86-1f21-4937-9fb1-5be4a93ef469 + lastModified: + type: string + example: 2019-08-26T14:27:36 + members: + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Users/3a12bae9-4386-44be-befd-caf349297f45 + display: + type: string + example: kim + value: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + roles: + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + display: + type: string + example: loginRole + value: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + id: + type: string + example: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + GroupRequestObject: + required: + - displayName + - schemas + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:Group + displayName: + type: string + example: DEFAULT/manager + members: + type: array + items: + type: object + properties: {} + example: + value: 008bba85-451d-414b-87de-c03b5a1f4217 + display: kim + GroupResponseObject: + type: object + properties: + displayName: + type: string + example: DEFAULT/manager + meta: + type: object + properties: + created: + type: string + example: 2019-08-26T14:27:36 + location: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Groups/7bac6a86-1f21-4937-9fb1-5be4a93ef469 + lastModified: + type: string + example: 2019-08-26T14:27:36 + resourceType: + type: string + example: Group + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:Group + id: + type: string + example: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + members: + description: The members of the group. Note that if the group is from a remote user store, a limited number of members will be returned. You can use filters to query remaining users. For example - `emails+eq+user@gmail.com+and+groups+eq+remote_group_01` + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Users/3a12bae9-4386-44be-befd-caf349297f45 + display: + type: string + example: kim + value: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + roles: + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + display: + type: string + example: loginRole + value: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + GroupSearchRequestObject: + type: object + properties: + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:api:messages:2.0:SearchRequest + startIndex: + type: integer + example: 1 + filter: + type: string + example: displayName eq manager + GroupSearchResponseObject: + type: object + properties: + totalResults: + type: integer + example: 1 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 3 + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/groupOb' + GroupPutResponseObject: + type: object + properties: + displayName: + type: string + example: DEFAULT/manager + meta: + type: object + properties: + created: + type: string + example: 2019-08-26T14:27:36 + location: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Groups/7bac6a86-1f21-4937-9fb1-5be4a93ef469 + lastModified: + type: string + example: 2019-08-26T14:27:36 + resourceType: + type: string + example: Group + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:Group + id: + type: string + example: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + members: + type: array + items: + type: object + properties: {} + example: + display: kris + value: 409ca90b-2ba6-4474-9a45-2cf7376e6e43 + GroupPutRequestObject: + type: object + properties: + displayName: + type: string + example: manager + members: + type: array + items: + type: object + properties: {} + example: + value: 409ca90b-2ba6-4474-9a45-2cf7376e6e43 + display: kris + PatchGroupOperationRequestObject: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:PatchOp + Operations: + type: array + items: + $ref: '#/components/schemas/GroupItemObj' + GroupItemObj: + type: object + properties: + op: + type: string + enum: + - add + - remove + - replace + value: + type: object + properties: + members: + type: array + items: + type: object + properties: {} + example: + display: kris + value: 409ca90b-2ba6-4474-9a45-2cf7376e6e43 + PatchGroupOperationResponseObject: + type: object + properties: + displayName: + type: string + example: DEFAULT/manager + meta: + type: object + properties: + created: + type: string + example: 2019-08-26T14:27:36 + location: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Groups/7bac6a86-1f21-4937-9fb1-5be4a93ef469 + lastModified: + type: string + example: 2019-08-26T14:27:36 + resourceType: + type: string + example: Group + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:schemas:core:2.0:Group + id: + type: string + example: 7bac6a86-1f21-4937-9fb1-5be4a93ef469 + members: + type: array + items: + type: object + properties: {} + example: + - display: kris + value: 409ca90b-2ba6-4474-9a45-2cf7376e6e43 + - display: kim + value: 007bfc66-e4f0-4d53-9dfd-0c4a77b33257 + ErrorGroupAlreadyAvailable: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "409" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: 'Group with name: DEFAULT/manager already exists in the system.' + ErrorGroupNotAvailable: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: 'No Group with the id : 89a2a363-c90f-47e9-afae-949d026dad16 in + the user store.' + ErrorNoGroupAvailable: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Group not found in the user store. + ErrorUnauthorized: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Authorization failure. Authorization information was invalid or missing from your request." + status: + type: string + example: "401" + ErrorForbidden: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Operation is not permitted. You do not have permission to make this request." + status: + type: string + example: "403" + ErrorInvalidInput: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "400" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: invalidSyntax + detail: + type: string + example: Request is unparsable, syntactically incorrect, or violates schema. diff --git a/docusaurus-asgardeo/static/apis/restapis/scim2-me.yaml b/docusaurus-asgardeo/static/apis/restapis/scim2-me.yaml new file mode 100644 index 0000000000..d350b559e6 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/scim2-me.yaml @@ -0,0 +1,693 @@ +openapi: 3.0.1 +info: + title: SCIM 2.0 Me API + description: | + This document specifies **SCIM 2.0 Me RESTful API** for **Asgardeo**. + version: "v1" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/scim2' +tags: + - name: Me Endpoint + description: This endpoint performs actions on the logged in user. +paths: + /Me: + get: + tags: + - Me Endpoint + summary: Get Me + description: "This API returns the user details of the currently authenticated user.\n\n + - Scope(Permission) required: ``internal_login`` \n\n + - Flow type: Authorization Code OAuth Flow" + parameters: + - name: attributes + in: query + description: SCIM defined `attributes` parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined ``excludedAttribute`` parameter. + schema: + type: string + responses: + 200: + description: Valid user is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 404: + description: Valid User is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Me' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Me Endpoint + summary: Update Me + description: "This API uses a PUT operation to update user details.\n\n + - Scope(Permission) required:``internal_login``\n\n + - Flow type: Authorization Code OAuth Flow" + operationId: updateUserMe + parameters: + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserUpdateObject' + required: true + responses: + 200: + description: User is updated + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 404: + description: Valid user is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Me' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [], + "name": { + "givenName": "Kim", + "familyName": "Berry" + }, + "userName": "DEFAULT/kim@gmail.com", + "emails": [ + { + "value": "kim@gmail.com", + "primary": true + } + ], + "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": { + "manager": { + "value": "Taylor" + } + } + }' + patch: + tags: + - Me Endpoint + summary: Update Me - PATCH + description: "This API uses a PATCH operation to update user details.\n\n + - Scope(Permission) required: ``internal_login`` \n\n + - Flow type: Authorization Code OAuth Flow" + operationId: patchUserMe + parameters: + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchOperationInput' + required: false + responses: + 200: + description: User is updated + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchOperationResponseOutput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 404: + description: Valid user is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Me' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:PatchOp" + ], + "Operations": [ + { + "op": "add", + "value": { + "nickName": "shaggy" + } + } + ] + }' + x-codegen-request-body-name: body +components: + schemas: + UserObject: + title: Set a password for the user + required: + - password + type: object + properties: + schemas: + type: object + properties: {} + example: [] + name: + type: object + properties: + givenName: + type: string + description: The `givenName` you specify will be entered for the First Name attribute in the user's profile. + example: Kim + familyName: + type: string + description: The `familyName` you specify will be entered for the Last Name attribute in the user's profile. + example: Berry + userName: + type: string + description: By default, the username should be the email address and it will be stored in the `DEFAULT` user store. However, if username validation is changed to `Alphanumeric` in your Asgardeo organization, you need to specify an alphanumeric value (a-z, A-Z, 0-9) as the username instead of the email. + example: DEFAULT/kim@gmail.com + password: + type: string + description: Use this parameter to set a password for the user account. The user will be able to reset this password later. When setting the password, be sure to follow the password-validation rules configured for your organization. + example: aBcd!23# + emails: + type: array + description: This email will be entered for the Email attribute in the user's profile. + example: + - value: kim@gmail.com + primary: true + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + urn:scim:wso2:schema: + type: object + properties: + verifyEmail: + type: boolean + description: When the administrator sets the password for the new user account, this parameter specifies if the new user should confirm the new account through email. If this parameter is set to `true`, an email is sent to the user's email address requesting confirmation. + example: true + UserObjectPassInvite: + title: Invite the user to set their own password + type: object + properties: + schemas: + type: object + properties: {} + example: [] + name: + type: object + properties: + givenName: + type: string + description: The `givenName` you specify will be entered for the First Name attribute in the user's profile. + example: Kim + familyName: + type: string + description: The `familyName` you specify will be entered for the Last Name attribute in the user's profile. + example: Berry + userName: + type: string + description: By default, the username should be the email address and it will be stored in the `DEFAULT` user store. However, if username validation is changed to `Alphanumeric` in your Asgardeo organization, you need to specify an alphanumeric value (a-z, A-Z, 0-9) as the username instead of the email. + example: DEFAULT/kim@gmail.com + emails: + type: array + description: This email will be entered for the Email attribute in the user's profile. + example: + - value: kim@gmail.com + primary: true + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + urn:scim:wso2:schema: + type: object + properties: + askPassword: + type: boolean + description: If this parameter is set to `true`, users will be allowed configure their own password. An email is sent to the specified email address, which will have instructions for the user to set the password and confirm the new user account. + example: true + UserResponseObject: + required: + - meta + type: object + properties: + meta: + type: object + properties: + created: + type: string + example: 2018-08-17T10:34:29Z + location: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Users/008bba85-451d-414b-87de-c03b5a1f4217 + lastModified: + type: string + example: 2018-08-17T10:34:29Z + resourceType: + type: string + example: User + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:schemas:core:2.0:User + - urn:ietf:params:scim:schemas:extension:enterprise:2.0:User + username: + type: string + example: DEFAULT/kim@gmail.com + id: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + name: + type: object + properties: + givenName: + type: string + example: Kim + familyName: + type: string + example: Berry + emails: + type: array + example: + - kim@gmail.com + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + roles: + type: object + properties: {} + example: + - type: default + value: Internal/everyone + UserUpdateObject: + type: object + properties: + schemas: + type: object + properties: {} + example: [] + name: + type: object + properties: + givenName: + type: string + example: Kim + familyName: + type: string + example: Berry + userName: + type: string + example: DEFAULT/kim@gmail.com + emails: + type: array + example: + - value: kim@gmail.com + primary: true + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + PatchOperationInput: + type: object + properties: + schemas: + type: array + items: + type: object + example: urn:ietf:params:scim:api:messages:2.0:PatchOp + Operations: + type: array + items: + $ref: '#/components/schemas/OperationMeItem' + OperationMeItem: + type: object + properties: + op: + type: string + enum: + - add + - remove + - replace + value: + type: object + properties: + nickName: + type: string + example: shaggy + PatchOperationResponseOutput: + required: + - meta + type: object + properties: + meta: + type: object + properties: + created: + type: string + example: 2018-08-17T10:34:29Z + location: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Users/008bba85-451d-414b-87de-c03b5a1f4217 + lastModified: + type: string + example: 2018-08-17T10:34:29Z + resourceType: + type: string + example: User + schemas: + type: array + items: + type: string + example: "" + username: + type: string + example: kim + id: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + name: + type: object + properties: + givenName: + type: string + example: Kim + familyName: + type: string + example: Berry + emails: + type: array + example: + - kim@gmail.com + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + roles: + type: array + items: + type: object + properties: + $ref: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Roles/4645709c-ea8c-4495-8590-e1fa0efe3de0 + display: + type: string + example: loginRole + value: + type: string + example: 4645709c-ea8c-4495-8590-e1fa0efe3de0 + nickName: + type: string + example: shaggy + UserObjectListResponseObject: + type: object + properties: + totalResults: + type: integer + example: 1 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 1 + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/UserResponseObject' + UserSearchRequestObject: + type: object + example: + schemas: + - urn:ietf:params:scim:api:messages:2.0:SearchRequest + attributes: + - name.familyName + - userName + filter: userName sw ki and name.familyName co err + domain: DEFAULT + startIndex: 1 + count: 10 + SPConfigResponse: + type: object + example: + patch: + supported: true + filter: + maxResults: 200 + supported: true + documentationUri: http://example.com/help/scim.html + authenticationSchemes: + - name: OAuth Bearer Token + description: Authentication scheme using the OAuth Bearer Token Standard + specUri: http://www.rfc-editor.org/info/rfc6750 + type: oauthbearertoken + primary: true + - name: HTTP Basic + description: Authentication scheme using the HTTP Basic Standard + specUri: http://www.rfc-editor.org/info/rfc2617 + type: httpbasic + primary: false + schemas: + - urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig + etag: + supported: false + sort: + supported: false + bulk: + maxPayloadSize: 1048576 + maxOperations: 1000 + supported: true + changePassword: + supported: false + ErrorInvalidInput: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "400" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: invalidSyntax + detail: + type: string + example: Request is unparsable, syntactically incorrect, or violates schema. + ErrorUnauthorized: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Authorization failure. Authorization information was invalid or missing from your request." + status: + type: string + example: "401" + ErrorNotAcceptable: + required: + - status + type: object + properties: + status: + type: string + example: "406" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: Not Acceptable + ErrorForbidden: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Operation is not permitted. You do not have permission to make this request." + status: + type: string + example: "403" + ErrorUserNotAvailable: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: 'No user with the id : 008bba85-451d-414b-87de-c03b5a1f4217 in + the user store.' + ErrorSchemaNotFound: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Schema not found. + ErrorInternalServerError: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "500" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Internal Server Error. + securitySchemes: + OAuth2: + type: oauth2 + description: "You can use the following OAuth grant types to securely access the respective API endpoints. + \n\n **Authorization Code OAuth Flow** + \n\n Authorization URL: 'https://api.asgardeo.io/t/{org-name}/oauth2/authorize' + \n\n This flow type is used for the `me` endpoint of SCIM2 APIs. You can use the following scope for this endpoints. + \n\n - ```internal_login```: Grant permission for an authenticated user for self management. + \n\n**Client Credentials OAuth Flow** + \n\n Token URL: https://api.asgardeo.io/t/{org-name}/oauth2/token + \n\n This flow type is used for the following endpoints: + \n\n - `users` endpoint + \n\n - `group` endpoint + \n\n - `bulk` endpoint + \n\n - `resource type` endpoint + \n\n - `service provider config` endpoint + \n\n You can use the following scopes for each of the endpoints. + \n\n - ```internal_user_mgt_list```: Grant permissions to read user records. + \n\n - ```internal_user_mgt_create```: Grant permissions to create new users. + \n\n - ```internal_user_mgt_update```: Grant permissions to update existing users. + \n\n - ```internal_user_mgt_delete```: Grant permissions to delete users. + \n\n - ```internal_group_mgt_view```: Grant permissions to read group records. + \n\n - ```internal_group_mgt_create```: Grant permissions to create new group records. + \n\n - ```internal_group_mgt_update```: Grant permissions to update existing group records. + \n\n - ```internal_group_mgt_delete```: Grant permissions to delete group records." diff --git a/docusaurus-asgardeo/static/apis/restapis/scim2-resource-types.yaml b/docusaurus-asgardeo/static/apis/restapis/scim2-resource-types.yaml new file mode 100644 index 0000000000..e8a6ba643c --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/scim2-resource-types.yaml @@ -0,0 +1,125 @@ +openapi: 3.0.1 +info: + title: SCIM 2.0 Resource Types Retrieval API + description: | + This document specifies **SCIM 2.0 Resource types RESTful API** for **Asgardeo**. + version: "v1" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/scim2' +tags: + - name: Resource Types Endpoint + description: This API lists and returns metadata about resource types. +paths: + /ResourceTypes: + get: + tags: + - Resource Types Endpoint + summary: Get Resource Types + description: "This API lists and returns metadata about resource types.\n\n + No Scope(Permission) required." + operationId: getResourceType + responses: + 200: + description: Schema is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ResourceTypeResponse' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 404: + description: Schema not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorSchemaNotFound' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/ResourceTypes' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + ResourceTypeResponse: + type: object + properties: + schemas: + type: array + items: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:ResourceType + resourceType: + type: array + items: + $ref: '#/components/schemas/UserObResourceType' + UserObResourceType: + type: object + properties: + schema: + type: string + example: urn:ietf:params:scim:schemas:core:2.0:User + endpoint: + type: string + example: /Users + meta: + type: object + properties: + location: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/ResourceType/User + resourceType: + type: string + example: ResourceType + name: + type: string + example: User + description: + type: string + example: User Account + schemaExtensions: + type: object + properties: + schema: + type: string + example: urn:ietf:params:scim:schemas:extension:enterprise:2.0:User + required: + type: boolean + example: false + id: + type: string + example: User + ErrorUnauthorized: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Authorization failure. Authorization information was invalid or missing from your request." + status: + type: string + example: "401" + ErrorSchemaNotFound: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Schema not found. diff --git a/docusaurus-asgardeo/static/apis/restapis/scim2-schemas.yaml b/docusaurus-asgardeo/static/apis/restapis/scim2-schemas.yaml new file mode 100644 index 0000000000..058cdabf15 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/scim2-schemas.yaml @@ -0,0 +1,356 @@ +openapi: 3.0.1 +info: + title: SCIM 2.0 Schemas Retrieval API + description: | + This document specifies **SCIM 2.0 Schemas RESTful API** for **Asgardeo**. + version: "v1" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/scim2' +tags: + - name: Schemas Endpoint + description: This API lists and returns metadata about SCIM 2.0 schemas. +paths: + /Schemas: + get: + tags: + - Schemas Endpoint + summary: Get All Schemas + description: "This API returns all supported SCIM 2.0 schema definitions.\n\n + No additional scopes or permissions required. Authentication is required." + operationId: getSchemas + responses: + 200: + description: Schemas are found + content: + application/scim+json: + schema: + type: array + items: + $ref: '#/components/schemas/SchemaObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 404: + description: Schema not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorSchemaNotFound' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Schemas' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + + '/Schemas/{id}': + get: + tags: + - Schemas Endpoint + summary: Get Schema by ID + description: "This API returns the SCIM 2.0 schema definition identified by the given id.\n\n + No additional scopes or permissions required. Authentication is required." + operationId: getSchemaById + parameters: + - name: id + in: path + description: Unique ID of the schema (e.g., urn:ietf:params:scim:schemas:core:2.0:User). + required: true + schema: + type: string + responses: + 200: + description: Schema is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/SchemaObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 404: + description: Schema not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorSchemaNotFound' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Schemas/{id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + +components: + schemas: + SchemaObject: + type: object + properties: + name: + type: string + description: The name of the schema. + example: "User" + description: + type: string + description: The description of the schema. + example: "User Account" + attributes: + type: array + description: The list of attributes defined in the schema. + items: + $ref: '#/components/schemas/SchemaAttribute' + id: + type: string + description: The unique URI of the schema. + example: "urn:ietf:params:scim:schemas:core:2.0:User" + + SchemaAttribute: + type: object + properties: + name: + type: string + description: The attribute's name. + example: "userName" + type: + type: string + description: The attribute's data type. + enum: + - STRING + - COMPLEX + - BOOLEAN + - DECIMAL + - INTEGER + - DATE_TIME + - DATE + - BINARY + - REFERENCE + example: "STRING" + multiValued: + type: boolean + description: Whether the attribute is multi-valued. + example: false + description: + type: string + description: The attribute's human-readable description. + example: "Username" + required: + type: boolean + description: Whether the attribute is required. + example: false + caseExact: + type: boolean + description: Whether the string attribute is case sensitive. + example: false + mutability: + type: string + description: Indicates whether the attribute is mutable. + enum: + - READ_ONLY + - READ_WRITE + - IMMUTABLE + - WRITE_ONLY + example: "READ_WRITE" + returned: + type: string + description: Indicates when an attribute is returned in a response. + enum: + - ALWAYS + - NEVER + - DEFAULT + - REQUEST + example: "DEFAULT" + uniqueness: + type: string + description: Indicates how unique a value must be. + enum: + - NONE + example: "NONE" + displayName: + type: string + description: The display name of the attribute. + example: "Username" + displayOrder: + type: integer + description: The display order of the attribute. + example: 1 + supportedByDefault: + type: boolean + description: Whether the attribute is supported by default. + example: true + sharedProfileValueResolvingMethod: + type: string + description: The method used to resolve shared profile values. + example: "FromOrigin" + regEx: + type: string + description: The regular expression for validating the attribute value. + example: "^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,10})+$" + subAttributes: + type: array + description: The sub-attributes of a COMPLEX attribute. + items: + $ref: '#/components/schemas/SchemaSubAttribute' + profiles: + type: object + description: Profile-specific configurations for the attribute. + properties: + console: + type: object + properties: + supportedByDefault: + type: boolean + example: true + inputFormat: + type: object + description: The input format configuration for the attribute. + properties: + inputType: + type: string + example: "text_input" + excludedUserStores: + type: string + description: Comma-separated list of excluded user stores. + example: "" + + SchemaSubAttribute: + type: object + properties: + name: + type: string + description: The sub-attribute's name. + example: "familyName" + type: + type: string + description: The sub-attribute's data type. + enum: + - STRING + - COMPLEX + - BOOLEAN + - DECIMAL + - INTEGER + - DATE_TIME + - DATE + - BINARY + - REFERENCE + example: "STRING" + multiValued: + type: boolean + description: Whether the sub-attribute is multi-valued. + example: false + description: + type: string + description: The sub-attribute's human-readable description. + example: "Last Name" + required: + type: boolean + description: Whether the sub-attribute is required. + example: false + caseExact: + type: boolean + description: Whether the string sub-attribute is case sensitive. + example: false + mutability: + type: string + description: Indicates whether the sub-attribute is mutable. + enum: + - READ_ONLY + - READ_WRITE + - IMMUTABLE + - WRITE_ONLY + example: "READ_WRITE" + returned: + type: string + description: Indicates when a sub-attribute is returned in a response. + enum: + - ALWAYS + - NEVER + - DEFAULT + - REQUEST + example: "DEFAULT" + uniqueness: + type: string + description: Indicates how unique a value must be. + enum: + - NONE + example: "NONE" + displayName: + type: string + description: The display name of the sub-attribute. + example: "Last Name" + displayOrder: + type: integer + description: The display order of the sub-attribute. + example: 3 + supportedByDefault: + type: boolean + description: Whether the sub-attribute is supported by default. + example: true + sharedProfileValueResolvingMethod: + type: string + description: The method used to resolve shared profile values. + example: "FromOrigin" + regEx: + type: string + description: The regular expression for validating the sub-attribute value. + profiles: + type: object + description: Profile-specific configurations for the sub-attribute. + properties: + console: + type: object + properties: + supportedByDefault: + type: boolean + example: true + inputFormat: + type: object + description: The input format configuration for the sub-attribute. + properties: + inputType: + type: string + example: "text_input" + excludedUserStores: + type: string + description: Comma-separated list of excluded user stores. + example: "" + + ErrorUnauthorized: + required: + - status + - schemas + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Authorization failure. Authorization information was invalid or missing from your request." + status: + type: string + example: "401" + + ErrorSchemaNotFound: + required: + - detail + - status + - schemas + type: object + properties: + status: + type: string + example: "404" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Schema not found. diff --git a/docusaurus-asgardeo/static/apis/restapis/scim2-sp-configs.yaml b/docusaurus-asgardeo/static/apis/restapis/scim2-sp-configs.yaml new file mode 100644 index 0000000000..2f9619dae5 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/scim2-sp-configs.yaml @@ -0,0 +1,106 @@ +openapi: 3.0.1 +info: + title: Asgardeo - SCIM 2.0 Service Provider Configs API + description: | + This document specifies **SCIM 2.0 Service provider configuration RESTful API** for **Asgardeo**. + version: "v1" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/scim2' +paths: + /ServiceProviderConfig: + get: + tags: + - Service Provider Config Endpoint + summary: Get Service Provider Config + description: "This API returns the service provider's configuration details.\n\n + No Scope(Permission) required." + operationId: getServiceProviderConfig + responses: + 200: + description: Schema is found + content: + application/json: + schema: + $ref: '#/components/schemas/SPConfigResponse' + 401: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 404: + description: Schema not found + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorSchemaNotFound' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/ServiceProviderConfig' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + SPConfigResponse: + type: object + example: + patch: + supported: true + filter: + maxResults: 200 + supported: true + documentationUri: http://example.com/help/scim.html + authenticationSchemes: + - name: OAuth Bearer Token + description: Authentication scheme using the OAuth Bearer Token Standard + specUri: http://www.rfc-editor.org/info/rfc6750 + type: oauthbearertoken + primary: true + - name: HTTP Basic + description: Authentication scheme using the HTTP Basic Standard + specUri: http://www.rfc-editor.org/info/rfc2617 + type: httpbasic + primary: false + schemas: + - urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig + etag: + supported: false + sort: + supported: false + bulk: + maxPayloadSize: 1048576 + maxOperations: 1000 + supported: true + changePassword: + supported: false + ErrorUnauthorized: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Authorization failure. Authorization information was invalid or missing from your request." + status: + type: string + example: "401" + ErrorSchemaNotFound: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Schema not found. diff --git a/docusaurus-asgardeo/static/apis/restapis/scim2-users.yaml b/docusaurus-asgardeo/static/apis/restapis/scim2-users.yaml new file mode 100644 index 0000000000..3fff9df7d3 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/scim2-users.yaml @@ -0,0 +1,852 @@ +openapi: 3.0.1 +info: + title: Asgardeo - SCIM 2.0 Users API + description: | + This document specifies **SCIM 2.0 User Management RESTful API** for **Asgardeo**. This endpoint performs actions related to all users in the organization. To access the SCIM 2.0 APIs in Asgardeo, you need to first [get an access token](https://wso2.com/asgardeo/docs/apis/authentication/#get-an-access-token) from your organization. + version: "v1" +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/scim2' +paths: + /Users: + get: + tags: + - Users Endpoint + summary: Filter Users + description: "This API returns users according to the filter, sort and pagination parameters. Pagination is not supported across user stores and LDAP multi-attribute group filtering. However, filtering is supported across multiple user stores.\n\n + - Scope(Permission) required: ``internal_user_mgt_list``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: getUser + parameters: + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + - name: filter + in: query + description: The expression used for filtering. Supported filters are ‘Ew’, ‘Eq’, ‘Co’, ‘Sw’, ‘Ne’ and ‘and’. + schema: + type: string + - name: startIndex + in: query + description: The 1-based index of the first query result + schema: + type: integer + format: int32 + - name: count + in: query + description: Specifies the desired maximum number of query results per page. + schema: + type: integer + format: int32 + - name: domain + in: query + description: The name of the user store where filtering needs to be applied. + schema: + type: string + responses: + 200: + description: Valid users are found / Valid users are not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserObjectListResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Users' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + post: + tags: + - Users Endpoint + summary: Create User + description: "This API creates a user and returns the user details along with\ + \ the user's unique ID.\n\n\ + You can create a user in two ways:\n\ + 1. **Set a password for the user**: Include the `password` parameter in the request body to set an initial password for the user.\n\ + 2. **Invite the user to set their own password**: Set the `askPassword` parameter to `true` in the `urn:scim:wso2:schema` extension. An email will be sent to the user with instructions to set their password and confirm their account.\n\n + \nScope(Permission) required:`internal_user_mgt_create`\n \n" + operationId: createUser + parameters: + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + oneOf: + - $ref: '#/components/schemas/UserObject' + - $ref: '#/components/schemas/UserObjectPassInvite' + required: false + responses: + 201: + description: User is created. + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserResponseObject' + 400: + description: Invalid Input + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInvalidInput' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 500: + description: Internal Server Error + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorInternalServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Users' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [], + "name": { + "givenName": "Kim", + "familyName": "Berry" + }, + "userName": "DEFAULT/kim@gmail.com", + "password": "aBcd!23#", + "emails": [ + { + "value": "kim@gmail.com", + "primary": true + } + ], + "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": { + "manager": { + "value": "Taylor" + } + }, + "urn:scim:wso2:schema": { + "verifyEmail": true + } + }' + x-codegen-request-body-name: body + /Users/.search: + post: + tags: + - Users Endpoint + summary: Search Users + description: "This API returns users according to the filter, sort and pagination parameters.\n\n + - Scope(Permission) required: ``internal_user_mgt_list``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: getUsersByPost + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserSearchRequestObject' + required: false + responses: + 200: + description: Valid users are found / Valid users are not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserObjectListResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Users/.search' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:SearchRequest" + ], + "attributes": [ + "name.familyName", + "userName" + ], + "filter": "userName sw ki and name.familyName co err", + "domain": "PRIMARY", + "startIndex": 1, + "count": 10 + }' + x-codegen-request-body-name: body + /Users/{id}: + get: + tags: + - Users Endpoint + summary: Get User by ID + description: "Return user details if a user found.\n\n + - Scope(Permission) required: ``internal_user_mgt_view``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: getUser by id + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + responses: + 200: + description: Valid user is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid user is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Users/{user-id}' \ + -H 'accept: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Users Endpoint + summary: Update User - PUT + description: "This API updates user details and return the updated user details using a PUT operation.\n\n + - Scope(Permission) required: ``internal_user_mgt_update``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: updateUser + parameters: + - name: id + in: path + description: Unique ID of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserUpdateObject' + required: false + responses: + 200: + description: Valid user is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid user is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Users/{user-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [], + "name": { + "givenName": "Kim", + "familyName": "Berry" + }, + "userName": "DEFAULT/kim@gmail.com", + "emails": [ + { + "value": "kim@gmail.com", + "primary": true + } + ], + "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": { + "manager": { + "value": "Taylor" + } + } + }' + x-codegen-request-body-name: body + delete: + tags: + - Users Endpoint + summary: Delete User by ID + description: "This API deletes a user using the user's unique ID.\n\n + - Scope(Permission) required: ``internal_user_mgt_delete``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: deleteUser + parameters: + - name: id + in: path + description: Unique ID of the user that you want to delete. + required: true + schema: + type: string + responses: + 204: + description: User is deleted + content: {} + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid user is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Users/{user-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + patch: + tags: + - Users Endpoint + summary: Update User - PATCH + description: "This API updates user details and returns the updated user details using a PATCH operation.\n\n + - Scope(Permission) required: ``internal_user_mgt_update``\n\n + - Supported Operations:``add``, ``replace``, ``remove``\n\n + - Flow type: Client Credentials OAuth Flow" + operationId: patchUser + parameters: + - name: id + in: path + description: Unique id of the resource type. + required: true + schema: + type: string + - name: attributes + in: query + description: SCIM defined attributes parameter. + schema: + type: string + - name: excludedAttributes + in: query + description: SCIM defined excludedAttribute parameter. + schema: + type: string + requestBody: + content: + application/scim+json: + schema: + $ref: '#/components/schemas/PatchOperationInput' + required: false + responses: + 200: + description: Valid user is found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/UserResponseObject' + 401: + description: Unauthorized + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUnauthorized' + 403: + description: Forbidden + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorForbidden' + 404: + description: Valid user is not found + content: + application/scim+json: + schema: + $ref: '#/components/schemas/ErrorUserNotAvailable' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/scim2/Users/{user-id}' \ + -H 'accept: application/scim+json' \ + -H 'Content-Type: application/scim+json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "schemas": [ + "urn:ietf:params:scim:api:messages:2.0:PatchOp" + ], + "Operations": [ + { + "op": "add", + "value": { + "nickName": "shaggy" + } + } + ] + }' + x-codegen-request-body-name: body +components: + schemas: + UserObject: + title: Set a password for the user + required: + - password + type: object + properties: + schemas: + type: object + properties: {} + example: [] + name: + type: object + properties: + givenName: + type: string + description: The `givenName` you specify will be entered for the First Name attribute in the user's profile. + example: Kim + familyName: + type: string + description: The `familyName` you specify will be entered for the Last Name attribute in the user's profile. + example: Berry + userName: + type: string + description: By default, the username should be the email address and it will be stored in the `DEFAULT` user store. However, if username validation is changed to `Alphanumeric` in your Asgardeo organization, you need to specify an alphanumeric value (a-z, A-Z, 0-9) as the username instead of the email. + example: DEFAULT/kim@gmail.com + password: + type: string + description: Use this parameter to set a password for the user account. The user will be able to reset this password later. When setting the password, be sure to follow the password-validation rules configured for your organization. + example: aBcd!23# + emails: + type: array + description: This email will be entered for the Email attribute in the user's profile. + example: + - value: kim@gmail.com + primary: true + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + urn:scim:wso2:schema: + type: object + properties: + verifyEmail: + type: boolean + description: When the administrator sets the password for the new user account, this parameter specifies if the new user should confirm the new account through email. If this parameter is set to `true`, an email is sent to the user's email address requesting confirmation. + example: true + UserObjectPassInvite: + title: Invite the user to set their own password + type: object + properties: + schemas: + type: object + properties: {} + example: [] + name: + type: object + properties: + givenName: + type: string + description: The `givenName` you specify will be entered for the First Name attribute in the user's profile. + example: Kim + familyName: + type: string + description: The `familyName` you specify will be entered for the Last Name attribute in the user's profile. + example: Berry + userName: + type: string + description: By default, the username should be the email address and it will be stored in the `DEFAULT` user store. However, if username validation is changed to `Alphanumeric` in your Asgardeo organization, you need to specify an alphanumeric value (a-z, A-Z, 0-9) as the username instead of the email. + example: DEFAULT/kim@gmail.com + emails: + type: array + description: This email will be entered for the Email attribute in the user's profile. + example: + - value: kim@gmail.com + primary: true + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + urn:scim:wso2:schema: + type: object + required: + - askPassword + properties: + askPassword: + type: boolean + description: If this parameter is set to `true`, users will be allowed configure their own password. An email is sent to the specified email address, which will have instructions for the user to set the password and confirm the new user account. + example: true + UserResponseObject: + required: + - meta + type: object + properties: + meta: + type: object + properties: + created: + type: string + example: 2018-08-17T10:34:29Z + location: + type: string + example: https://api.asgardeo.io/t/{org-name}/scim2/Users/008bba85-451d-414b-87de-c03b5a1f4217 + lastModified: + type: string + example: 2018-08-17T10:34:29Z + resourceType: + type: string + example: User + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:schemas:core:2.0:User + - urn:ietf:params:scim:schemas:extension:enterprise:2.0:User + username: + type: string + example: DEFAULT/kim@gmail.com + id: + type: string + example: 008bba85-451d-414b-87de-c03b5a1f4217 + name: + type: object + properties: + givenName: + type: string + example: Kim + familyName: + type: string + example: Berry + emails: + type: array + example: + - kim@gmail.com + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + roles: + type: object + properties: {} + example: + - type: default + value: Internal/everyone + UserObjectListResponseObject: + type: object + properties: + totalResults: + type: integer + example: 1 + startIndex: + type: integer + example: 1 + itemsPerPage: + type: integer + example: 1 + schemas: + type: object + properties: {} + example: + - urn:ietf:params:scim:api:messages:2.0:ListResponse + Resources: + type: array + items: + $ref: '#/components/schemas/UserResponseObject' + UserSearchRequestObject: + type: object + properties: + schemas: + type: array + example: + - urn:ietf:params:scim:api:messages:2.0:SearchRequest + attributes: + type: array + description: SCIM defined attributes parameter. + example: + - name.familyName + - userName + filter: + type: string + description: The expression used for filtering. Supported filters are ew, eq, co, sw, and and. + example: userName sw ki and name.familyName co err + domain: + type: string + description: The name of the user store where filtering needs to be applied. + example: DEFAULT + startIndex: + type: integer + format: int32 + description: The 1-based index of the first query result + example: 1 + count: + type: integer + format: int32 + description: Specifies the desired maximum number of query results per page.
    (For organizations created on or after November 19, 2024, a threshold value of 100 will be applied to the count parameter. To fetch more users, use pagination.) + example: 10 + UserUpdateObject: + type: object + properties: + schemas: + type: object + properties: {} + example: [] + name: + type: object + properties: + givenName: + type: string + example: Kim + familyName: + type: string + example: Berry + userName: + type: string + example: DEFAULT/kim@gmail.com + emails: + type: array + example: + - value: kim@gmail.com + primary: true + items: + type: object + properties: {} + urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: + type: object + properties: + manager: + type: object + properties: + value: + type: string + example: Taylor + PatchOperationInput: + type: object + properties: + schemas: + type: array + items: + type: object + example: urn:ietf:params:scim:api:messages:2.0:PatchOp + Operations: + type: array + items: + $ref: '#/components/schemas/OperationMeItem' + OperationMeItem: + type: object + properties: + op: + type: string + enum: + - add + - remove + - replace + value: + type: object + properties: + nickName: + type: string + example: shaggy + ErrorUnauthorized: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Authorization failure. Authorization information was invalid or missing from your request." + status: + type: string + example: "401" + ErrorForbidden: + required: + - status + type: object + properties: + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: "Operation is not permitted. You do not have permission to make this request." + status: + type: string + example: "403" + ErrorInvalidInput: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "400" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + scimType: + type: string + example: invalidSyntax + detail: + type: string + example: Request is unparsable, syntactically incorrect, or violates schema. + ErrorInternalServerError: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "500" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: Internal Server Error. + ErrorUserNotAvailable: + required: + - detail + - status + type: object + properties: + status: + type: string + example: "404" + schemas: + type: string + example: urn:ietf:params:scim:api:messages:2.0:Error + detail: + type: string + example: 'No user with the id : 008bba85-451d-414b-87de-c03b5a1f4217 in + the user store.' \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/session.yaml b/docusaurus-asgardeo/static/apis/restapis/session.yaml new file mode 100644 index 0000000000..a5069c00cb --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/session.yaml @@ -0,0 +1,467 @@ +openapi: 3.0.1 +info: + title: Asgardeo - User Session Management API + description: "This is the RESTful API for managing user sessions in Asgardeo. + \n To access the session management APIs in Asgardeo, you need to first [get an access token](https://wso2.com/asgardeo/docs/apis/authentication/#get-an-access-token) from your organization." + version: v1 +servers: +- url: https://api.asgardeo.io/t/{organization-name}/api/users/v1 +security: +- OAuth2: [] +tags: +- name: me + description: Session management operations for the authenticated user. +- name: admin + description: | + Operations available for privileged users, to be invoked on behalf of another user. +paths: + /me/sessions: + get: + tags: + - me + summary: Get active sessions + description: "A user can have multiple active sessions. This endpoint is used to retrieve information of all the active sessions of the authenticated user.\n\n + Scope required:``internal_login``" + operationId: getSessionsOfLoggedInUser + responses: + 200: + description: Successfully retrieved session information + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions' + example: + userId: 81fae417-13f6-4db6-9501-7ce128608cb5 + sessions: + - applications: + - id: 298c5fd8-01ac-4ada-bc10-1ce37f32140b + subject: admin + appName: travelocity-requestpath + appId: "4" + - id: 27385fd8-01ac-4ada-bc10-1ce37363h40b + subject: admin + appName: avis-basic + appId: "5" + userAgent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 + Firefox/15.0.1 + ip: 127.0.0.1 + loginTime: "1565586399249" + lastAccessTime: "1565586435955" + id: 30e775bcc2c858ff88584b38b017d6c703a6657f38320804a071ff82fce1a0fe + 401: + description: Unauthorized + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Resource Not Found + content: {} + 500: + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/sessions' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + delete: + tags: + - me + summary: Terminate all sessions + description: "A user has multiple active sessions. This endpoint is used to terminate all the active sessions of the authenticated user.\n\n + Scope required: ``internal_login``" + operationId: terminateSessionsByLoggedInUser + responses: + 204: + description: No Content + content: {} + 400: + description: Invalid input request + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: {} + 403: + description: Resource Forbidden + content: {} + 500: + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/sessions' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /me/sessions/{session-id}: + delete: + tags: + - me + summary: Terminate a session + description: "A user has multiple active sessions. This API terminates a specific session of the authenticated user identified by the `session-id`.\n\n + Scope required: ``internal_login`` " + operationId: terminateSessionByLoggedInUser + parameters: + - name: session-id + in: path + description: ID of the session. + required: true + schema: + type: string + responses: + 204: + description: No Content + content: {} + 400: + description: Invalid input request + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: {} + 403: + description: Resource Forbidden + content: {} + 500: + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/sessions/{session-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /{user-id}/sessions: + get: + tags: + - admin + summary: Get active sessions + description: "Retrieves information related to the active sessions of a user + identified by the `user-id`. \n\n + Scope required: ``internal_session_view``" + operationId: getSessionsByUserId + parameters: + - name: user-id + in: path + description: ID of the user. + required: true + schema: + type: string + responses: + 200: + description: Successfully retrieved session information. + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions' + 400: + description: Invalid input request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: {} + 403: + description: Resource Forbidden + content: {} + 404: + description: Resource Not Found + content: {} + 500: + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/{user-id}/sessions' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + delete: + tags: + - admin + summary: Terminate all sessions + description: "Delete all the sessions of a user identified by the `user-id`.\n\n + Scope required: ``internal_session_delete``" + operationId: terminateSessionsByUserId + parameters: + - name: user-id + in: path + description: ID of the user. + required: true + schema: + type: string + responses: + 204: + description: No Content + content: {} + 400: + description: Invalid input request + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: {} + 500: + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/{user-id}/sessions' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /{user-id}/sessions/{session-id}: + delete: + tags: + - admin + summary: Terminate a session + description: "Terminate a specific session of a user identified by the `session-id`.\n\n + Scope required: ``internal_session_delete`` " + operationId: terminateSessionBySessionId + parameters: + - name: user-id + in: path + description: ID of the user. + required: true + schema: + type: string + - name: session-id + in: path + description: ID of the session. + required: true + schema: + type: string + responses: + 204: + description: No Content + content: {} + 400: + description: Invalid input request + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + content: {} + 500: + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/{user-id}/sessions/{session-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Application: + required: + - appId + - appName + - id + - subject + type: object + properties: + id: + type: string + description: Unique ID of the application. + example: 298c5fd8-01ac-4ada-bc10-1ce37f32140b + subject: + type: string + description: Username of the logged in user for the application. + example: apiuser01 + appName: + type: string + description: Name of the application. + example: sampleApp + appId: + type: string + description: ID of the application. + example: "012" + Session: + type: object + properties: + applications: + type: array + description: List of applications in the session. + items: + $ref: '#/components/schemas/Application' + userAgent: + type: string + description: User agent of the session. + example: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 + Firefox/15.0.1 + ip: + type: string + description: IP address of the session. + example: 172.95.192.63 + loginTime: + type: string + description: Login time of the session. + example: "1560412617" + lastAccessTime: + type: string + description: Last access time of the session. + example: "1560416196" + id: + type: string + description: ID of the session. + example: 8d9806d1-4efc-483e-a96a-a0fa77d4328b + Sessions: + type: object + properties: + userId: + type: string + example: "00000001" + sessions: + type: array + description: List of active sessions. + items: + $ref: '#/components/schemas/Session' + Error: + required: + - code + - message + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + responses: + Forbidden: + description: Resource Forbidden + content: {} + InvalidInput: + description: Invalid input request + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + NoContent: + description: No Content + content: {} + NotFound: + description: Resource Not Found + content: {} + NotImplemented: + description: Not Implemented + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + OK: + description: OK + content: {} + ServerError: + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Unauthorized + content: {} + parameters: + limitQueryParam: + name: limit + in: query + description: | + Maximum number of records to return. + _This parameter is not supported yet._ + schema: + type: integer + format: int32 + offsetQueryParam: + name: offset + in: query + description: | + Number of records to skip for pagination. + _This parameter is not supported yet._ + schema: + type: integer + format: int32 + filterQueryParam: + name: filter + in: query + description: | + Condition to filter the retrival of records. + _This parameter is not supported yet._ + schema: + type: string + sortQueryParam: + name: sort + in: query + description: | + Define the order in which the retrieved records should be sorted. + _This parameter is not supported yet._ + schema: + type: string + userIdPathParam: + name: user-id + in: path + description: ID of the user. + required: true + schema: + type: string + sessionIdPathParam: + name: session-id + in: path + description: ID of the session. + required: true + schema: + type: string + securitySchemes: + OAuth2: + type: oauth2 + flows: + clientCredentials: + tokenUrl: https://api.asgardeo.io/t/{org-name}/oauth2/token + scopes: + internal_login: Grant permission for an authenticated user for self session management. + internal_session_view: Grant permissions to list seeion info. + internal_session_delete: Grant permissions to delete sessions. \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/totp.yaml b/docusaurus-asgardeo/static/apis/restapis/totp.yaml new file mode 100644 index 0000000000..6161a0148f --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/totp.yaml @@ -0,0 +1,226 @@ +openapi: 3.0.0 + +info: + description: | + This is the RESTful API for a user to manage TOTP QR URLs/secrets in Asgardeo. + version: "v1" + title: "Asgardeo - TOTP API Definition" +servers: +- url: https://api.asgardeo.io/t/{organization-name}/api/users/v1 + +security: + - OAuth2: [] + +tags: +- name: me + description: Operations for the authenticated user. + +paths: + /me/totp: + post: + description: + "This API is used to perform following actions.\n\n +
  • INIT- Generate the TOTP QR code URL for the authenticated user.
  • \n +
  • REFRESH - Refresh the TOTP secret key of the authenticated user.
  • \n +
  • VALIDATE - Validate the user entered verification code.
  • \n\n Scope required: ``internal_login``" + summary: | + Generate, refresh and validate the QR + parameters: + - name: request + in: path + description: Actions supported by the API. Actions can be INIT, VALIDATE or REFRESH + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UserRequest' + responses: + 200: + description: TOTP secret successfully refreshed + 201: + description: Created + content: + application/json: + schema: + $ref: '#/components/schemas/TOTPResponse' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized + 403: + description: Resource Forbidden + 409: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/totp' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "action": "INIT, REFRESH, VALIDATE", + "verificationCode": 0 + }' + + tags: + - me + get: + tags: + - me + summary: Retrieve the QR Code URL + description: + "This API is used to retrieve the QR code URL of the authenticated user.\n\n Scope required:``internal_login``" + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/TOTPResponse' + 401: + description: Unauthorized + 403: + description: Resource Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/totp' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + delete: + tags: + - me + summary: Reset TOTP credentials + description: + "This API is used to delete the TOTP credentials of the authenticated user.\n\n Scope required:``internal_login``" + responses: + 200: + description: Credentials deleted successfully + 401: + description: Unauthorized + 403: + description: Resource Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/totp' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + /me/totp/secret: + get: + tags: + - me + summary: Retrieve the TOTP secret + description: + "This API is used to retrieve the TOTP secret of the authenticated user.\n\n Scope required:``internal_login``" + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/TOTPSecretResponse' + 401: + description: Unauthorized + 403: + description: Resource Forbidden + 500: + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v1/me/totp/secret' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: "some_error_code" + message: + type: string + example: "Some Error Message" + description: + type: string + example: "Some Error Description" + traceId: + type: string + example: "Some Correlation for Error Instance" + + UserRequest: + type: object + required: [action] + properties: + action: + type: string + example: INIT, REFRESH, VALIDATE + enum: [INIT, REFRESH, VALIDATE] + verificationCode: + type: integer + example: Verification code that need to be verified by the server + + TOTPResponse: + type: object + properties: + qrCodeUrl: + type: string + description: QR Code URL for the authenticated user + isValid: + type: boolean + description: Secret key of the authenticated user + + TOTPSecretResponse: + type: object + properties: + secret: + type: string + description: Refreshed TOTP secret key of the authenticated user + + securitySchemes: + OAuth2: + type: oauth2 + description: "You can use the following OAuth grant type to securely access the respective API endpoints. + \n\n **Authorization Code OAuth Flow** + \n\n Authorization URL: 'https://api.asgardeo.io/t/{org-name}/oauth2/authorize' + \n\n This flow type is used for the ```me``` endpoint of TOTP APIs. You can use the following scope for this endpoints. + \n\n - ```internal_login```: Grant permission for an authenticated user for self management." \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/user-account-recovery.yaml b/docusaurus-asgardeo/static/apis/restapis/user-account-recovery.yaml new file mode 100644 index 0000000000..6e569e394f --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/user-account-recovery.yaml @@ -0,0 +1,1402 @@ +openapi: 3.0.0 +info: + version: "v2" + title: User Account Recovery API + description: > + This document specifies **User initiated Username and Password Recovery related RESTful API** for Asgardeo. +paths: + /recovery/username/init: + post: + tags: + - Username Recovery + summary: Initiate Username Recovery + operationId: initiateUsernameRecovery + description: | + - This API is used to initiate username recovery by user. The API will + return available recovery information for username recovery with + notifications. + + - Use the returned __recoveryCode__ and the __channelId__ with + __username recover api__ to confirm the the username recovery and to + receive recovery notifications via the channel specified by the user. + + Scope(Permission) required: `internal_user_recovery_create` + responses: + '200': + description: >- + User is successfully identified for the given claims and returning + available notification channels for the user. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AccountRecoveryType' + examples: + response: + value: + - mode: recoverWithNotifications + channelInfo: + recoveryCode: 1234-55678-5668-2345 + channels: + - id: 1 + type: EMAIL + value: wso2***********.com + preferred: true + - id: 2 + type: SMS + value: '**********123' + preferred: false + links: + - rel: next + href: /api/users/v2/recovery/username/recover + type: POST + '400': + description: Bad Request. The request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10001 + message: bad_request + description: bad request + traceId: 23456fghj678vb78 + '403': + description: Username recovery is not enabled. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UNR-10003 + message: Forbidden + description: Username recovery is not enabled + traceId: 23456fghj678vb78 + '404': + description: >- + No user found for the given set of claims or no recovery channels + are available for the user. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10002 + message: Not found + description: No user found + traceId: 23456fghj678vb78 + '409': + description: Multiple users found for the given claims. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10008 + message: Conflict + description: Multiple users found for given claims + traceId: 23456fghj678vb78 + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UNR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/username/init' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "claims": [ + { + "uri": "http://wso2.org/claims/givenname", + "value": "user1" + } + ], + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/InitRequest' + description: >- + Request to initate username recovery process. The request should + contain the claims to identify the user. User claims are `REQUIRED`. + required: true + /recovery/username/recover: + post: + tags: + - Username Recovery + summary: Get Recovery Information + operationId: recoverUsername + description: | + - This API is used to confirm username recovery and send username + recovery information to the user who matches the recovery code via the + channel specified by the channel Id. + - __NOTE__: If the notification channel is __EXTERNAL__, the API will return the username of the user. + + Scope(Permission) required: `internal_user_recovery_create` + responses: + '200': + description: >- + Username is successfully recovered and the __notification channel__ + is `EXTERNAL`. + content: + application/json: + schema: + $ref: '#/components/schemas/UsernameRecoveryNotifyResponse' + examples: + response: + value: + code: UNR-02002 + message: Username recovery information sent externally + notificationChannel: EXTERNAL + username: PRIMARY/sominda1@carbon.super + '202': + description: Username is successfully recovered. + content: + application/json: + schema: + $ref: '#/components/schemas/UsernameRecoveryNotifyResponse' + examples: + response: + value: + code: UNR-02001 + message: >- + Username recovery information sent via user preferred + notification channel + notificationChannel: EMAIL + '400': + description: Bad Request. Request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UNR-10001 + message: bad_request + description: bad request + traceId: 23456fghj678vb78 + '404': + description: Recovery code is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UNR-10001 + message: not_found + description: recovery code not found + traceId: 23456fghj678vb78 + '406': + description: | + - Recovery code given in the request is not valid or expired. + - Channel id is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UNR-10001 + message: not acceptable + description: 'invalid error code : 1234-2345-12345-123456' + traceId: 23456fghj678vb78 + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UNR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/username/recover' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "recoveryCode": "1234-5678-2455-3433", + "channelId": "1", + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RecoveryRequest' + description: > + - Request to confirm username recovery and receive recovery + notifications. + + - `recoveryCode` and `channelId` are `REQUIRED`. + + - __NOTE__ `channelId` should always be __larger than 0__. + required: true + /recovery/password/init: + post: + tags: + - Password Recovery + summary: | + Initiate password recovery + operationId: initiatePasswordRecovery + description: | + - This API is used to initiate password recovery by user. The API will + return recovery information for password recovery with challenge + questions and password recovery with notifications. + + - `mode` __recoverWithNotifications__ contains recovery flow confirmation code, available communication channels and a recovery code for password recovery with notifications. + The next API call will be returned in the response. + + - If `password recovery with notifications` is not enabled, the response + will not contain __recoverWithNotifications__ mode. + + - __recoverWithChallengeQuestions__ contains the next API call to begin + the recovery process via challenge questions. + + - If `password recovery with challenge questions` is not enabled, the + response will not contain __recoverWithChallengeQuestions__ mode. + + Scope(Permission) required: `internal_user_recovery_create` + responses: + '200': + description: >- + User is successfully identified for the given claims and returning + available notification channels for the user. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AccountRecoveryType' + examples: + response: + value: + - mode: recoverWithNotifications + flowConfirmationCode: 1234-1234-1234-1234 + channelInfo: + recoveryCode: 1234-55678-5668-2345 + channels: + - id: 1 + type: EMAIL + value: wso2***********.com + preferred: false + - id: 2 + type: SMS + value: '**********123' + preferred: true + links: + - rel: next + href: /api/users/v2/recovery/password/recovery + type: POST + - mode: recoverWithChallengeQuestions + links: + - rel: next + href: >- + /t/carbon.super/api/identity/recovery/v0.9/security-question?username=sominda + type: GET + '400': + description: Bad Request. The request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10001 + message: bad_request + description: bad request + traceId: 23456fghj678vb78 + '404': + description: >- + No user found for the given set of claims or no recovery channels + are available for the user. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10002 + message: Not found + description: No user found + traceId: 23456fghj678vb78 + '409': + description: Multiple users found for the given claims. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10008 + message: Conflict + description: Multiple users found for given claims + traceId: 23456fghj678vb78 + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/password/init' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "claims": [ + { + "uri": "http://wso2.org/claims/givenname", + "value": "user1" + } + ], + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/InitRequest' + description: >- + Request to initiate password recovery process. The request should + contain the claims to identify the user. User claims are `REQUIRED`. + required: true + /recovery/password/recover: + post: + tags: + - Password Recovery + summary: | + Get Recovery Information + operationId: recoverPassword + description: | + - This API is used to send recovery information to the user who matches + the recovery code via the channel specified by the channel Id. The API will return the recovery flow confirmation code. + + - NOTE: If the notification channel is EXTERNAL, the API will return a + confirmationCode. + + - Use the returned confirmation code with __password recovery confirm + API__ to verify the password recovery process. + + - The API will return the next API call. + + Scope(Permission) required: `internal_user_recovery_create` + responses: + '200': + description: > + - Password recovery initiated via `EXTERNAL` channel. API will + return a `confirmationCode` to confirm password recovery. + + - Use the confirmation code with __password recovery confirm API__ + to confirm the password recovery. + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordRecoveryExternalNotifyResponse' + examples: + response: + value: + code: PWR-02002 + message: Password recovery information sent externally + flowConfirmationCode: 1234-1234-1234-1234 + notificationChannel: EXTERNAL + confirmationCode: 12345-45678-6789098-8765 + resendCode: 12345-45678-6789098-8765 + links: + - rel: next + href: api/users/v2/recovery/password/confirm + type: POST + - rel: resend + href: api/users/v2/recovery/password/resend + type: POST + '202': + description: > + - Password recovery initiated via internal channels. API will send a + `confirmationCode`/`otp` to the channel specified by the user. + + - Use the confirmation code/OTP with __password recovery confirm API__ + to confirm the password recovery. + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordRecoveryInternalNotifyResponse' + examples: + response: + value: + code: PWR-02002 + message: Password recovery information sent externally + flowConfirmationCode: 1234-1234-1234-1234 + notificationChannel: EMAIL + resendCode: 12345-45678-6789098-8765 + links: + - rel: next + href: api/users/v2/recovery/password/confirm + type: POST + - rel: resend + href: api/users/v2/recovery/password/resend + type: POST + '400': + description: Bad Request. Request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: bad_request + description: bad request + traceId: 23456fghj678vb78 + '403': + description: Password recovery is not enabled. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10004 + message: Forbidden + description: Password recovery is not enabled + traceId: 23456fghj678vb78 + '404': + description: Recovery code is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: not_found + description: recovery code not found + traceId: 23456fghj678vb78 + '406': + description: | + - Recovery code given in the request is not valid or expired. + - Channel id is not valid + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10003 + message: not acceptable + description: 'invalid error code : 1234-2345-12345-123456' + traceId: 23456fghj678vb78 + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/password/recover' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "recoveryCode": "1234-5678-2455-3433", + "channelId": "1", + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RecoveryRequest' + description: | + - Request to receive recovery notifications. + - `recoveryCode` and `channelId` are `REQUIRED`. + - __NOTE__ `channelId` should always be __larger than 0__. + required: true + /recovery/password/resend: + post: + tags: + - Password Recovery + summary: | + Resend password recovery confirmation details + operationId: resendConfirmation + description: | + - This API is used to resend a confirmation code/OTP to the user via a user + preferred channel defined at password recovery. + + - NOTE: The API cannot be used when the notification channel is + external. + + - The API will return the next API calls. + + Scope(Permission) required: `internal_user_recovery_create` + responses: + '200': + description: > + - API will return a new `confirmationCode`. + + - Use the confirmation code with __password recovery confirm API__ + to confirm the password recovery. + content: + application/json: + schema: + $ref: '#/components/schemas/ResendConfirmationCodeExternalResponse' + examples: + response: + value: + code: PWR-02002 + message: successful_request + flowConfirmationCode: 1234-1234-1234-1234 + notificationChannel: EXTERNAL + confirmationCode: 1234-12345-234-123456 + resendCode: 1234-12345-234-123456 + links: + - rel: next + href: api/users/v2/recovery/password/recover + type: POST + - rel: resend + href: api/users/v2/recovery/password/resend + type: POST + '202': + description: > + - API will send a `confirmationCode`/`otp` to the channel specified by the + user. + + - Use the confirmation code/OTP with __password recovery confirm API__ + to confirm the password recovery. + content: + application/json: + schema: + $ref: '#/components/schemas/ResendConfirmationCodeInternalResponse' + examples: + response: + value: + code: PWR-02002 + message: successful_request + flowConfirmationCode: 1234-1234-1234-1234 + notificationChannel: EMAIL + resendCode: 1234-12345-234-123456 + links: + - rel: next + href: api/user/v2/recovery/password/recover + type: POST + - rel: resend + href: api/users/v2/recovery/password/resend + type: POST + '400': + description: Bad Request. Request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10001 + message: bad_request + description: bad request + traceId: 23456fghj678vb78 + '404': + description: Resend code is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10001 + message: not_found + description: recovery code not found + traceId: 23456fghj678vb78 + '406': + description: Resend code given in the request is not valid or expired. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-10003 + message: not acceptable + description: 'invalid error code : 1234-2345-12345-123456' + traceId: 23456fghj678vb78 + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: UAR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/password/resend' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "resendCode": "1234-2ws34-1234", + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ResendConfirmationRequest' + description: > + - Request to resend the `confirmationCode`/`otp` to the user via a user + preferred channel. + + - Can send additional properties. + required: true + /recovery/password/confirm: + post: + tags: + - Password Recovery + summary: | + Confirm password recovery + operationId: confirmRecovery + description: | + - This API is used to validate the __confirmationCode__/__otp__ given at + password recovery. + + - Use the returned __reset code__ with the __password reset API__ to + reset the password. + + - The API will return the next API call. + + Scope(Permission) required: `internal_user_recovery_create` + responses: + '200': + description: | + - Password reset confirmed. + - `resetCode` is returned. + content: + application/json: + schema: + $ref: '#/components/schemas/ResetCodeResponse' + examples: + response: + value: + resetCode: 2806aed9-fe7c-4b47-a91f-0aa897fac9a2 + links: + - rel: next + href: >- + /t/carbon.super/api/users/v2/recovery/password/reset + type: POST + '400': + description: Bad Request. Request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: bad_request + description: bad request + traceId: 23456fghj678vb78 + '404': + description: Confirmation code is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: not_found + description: recovery code not found + traceId: 23456fghj678vb78 + '406': + description: | + Confirmation code given in the request is not valid or expired. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: not acceptable + description: 'invalid error code : 1234-2345-12345-123456' + traceId: 23456fghj678vb78 + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/password/confirm' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "confirmationCode": "1234-2ws34-12345", + "otp": "wi8Ivm", + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConfirmRequest' + description: | + - Request to confirm the password recovery. + - `confirmationCode` is `REQUIRED`. + - `otp` is required only for OTP based password recovery. The __flowConfirmationCode__ returned from the password recovery request should be set as the `confirmationCode` for OTP based recovery. + required: true + /recovery/password/reset: + post: + tags: + - Password Recovery + summary: | + Reset password + operationId: resetPassword + description: | + This API is used to reset the password of the user who matches the flowConfirmationCode given by the recover API and the resetCode given by the confirmation API. + + Scope(Permission) required: `internal_user_recovery_create` + responses: + '200': + description: Successful password reset. + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordResetResponse' + examples: + response: + value: + code: PWR-02005 + message: Successful password reset + '400': + description: Bad Request. Request cannot be processed by the server. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: bad_request + description: bad request + traceId: 23456fghj678vb78 + '404': + description: Reset code is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: not_found + description: recovery code not found + traceId: 23456fghj678vb78 + '406': + description: Reset code given in the request is not valid or expired. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: not acceptable + description: 'invalid error code : 1234-2345-12345-123456' + traceId: 23456fghj678vb78 + '412': + description: Password policy violation. + content: + application/json: + schema: + $ref: '#/components/schemas/RetryErrorResponse' + examples: + response: + value: + code: PWR-10001 + message: bad_request + description: password policy violation + traceId: 23456fghj678vb78 + resetCode: 1234-12345-sdf-34567567 + links: [ + { + "rel": "next", + "href": "/t/carbon.super/api/users/v2/recovery/password/reset", + "type": "POST" + } + ] + '500': + description: Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + response: + value: + code: PWR-15001 + message: Internal Error + description: Internal Error + traceId: 23456fghj678vb78 + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/users/v2/recovery/password/reset' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "resetCode": "string", + "flowConfirmationCode": "string", + "password": "string", + "properties": [ + { + "key": "key", + "value": "value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ResetRequest' + description: | + - Request to reset the password. + - `resetCode`, `flowConfirmationCode` and `password` are required. + required: true +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/users/v2' + +components: + schemas: + InitRequest: + type: object + description: Request to initiate an account recovery + properties: + claims: + type: array + description: User claims to identify the user as UserClaim objects + items: + $ref: '#/components/schemas/UserClaim' + properties: + type: array + description: (OPTIONAL) Additional META properties + items: + $ref: '#/components/schemas/Property' + required: + - claims + RecoveryRequest: + type: object + description: >- + Request to start the recovery for the user who matches the recovery code + via the given channelID + properties: + recoveryCode: + type: string + description: Recovery code for the user + example: 1234-5678-2455-3433 + channelId: + type: string + description: >- + Id of the notification channel that user prefers to get recovery + notifications. + example: '1' + properties: + type: array + description: (OPTIONAL) Additional META properties + items: + $ref: '#/components/schemas/Property' + required: + - recoveryCode + - channelId + ResendConfirmationRequest: + type: object + description: Request to resend the confirmation code in password recovery + properties: + resendCode: + type: string + description: Resend code returned by the password recovery API + example: 1234-2ws34-1234 + properties: + type: array + description: (OPTIONAL) Additional META properties + items: + $ref: '#/components/schemas/Property' + ConfirmRequest: + type: object + description: Request to confirm password recovery + required: + - confirmationCode + properties: + confirmationCode: + type: string + description: Confirmation code of the recovery flow + example: 1234-2ws34-12345 + otp: + type: string + description: OTP sent to the user + example: wi8Ivm + properties: + type: array + description: (OPTIONAL) Additional META properties + items: + $ref: '#/components/schemas/Property' + ResetRequest: + type: object + description: Object to reset the password of a user + required: + - resetCode + - password + properties: + resetCode: + type: string + description: resetCode given by the confirm API + flowConfirmationCode: + type: string + description: Confirmation code of the recovery flow + password: + type: string + description: New password given by the user + properties: + type: array + description: (OPTIONAL) Additional META properties + items: + $ref: '#/components/schemas/Property' + PasswordRecoveryInternalNotifyResponse: + type: object + properties: + code: + type: string + description: Success status code + example: PWR-02002 + message: + type: string + description: Success status message + example: successful_request + flowConfirmationCode: + type: string + description: Recovery flow confirmation code + example: 1234-1234-1234-1234 + notificationChannel: + type: string + description: Channel that is used to send recovery information + example: EMAIL + resendCode: + type: string + description: >- + Code to resend the confirmation code to the user via user + selected channel + example: 1234-123456-12345-12345 + links: + type: array + description: Contains available api calls + items: + $ref: '#/components/schemas/APICall' + PasswordRecoveryExternalNotifyResponse: + type: object + properties: + code: + type: string + description: Success status code + example: PWR-02002 + message: + type: string + description: Success status message + example: successful_request + flowConfirmationCode: + type: string + description: Recovery flow confirmation code + example: 1234-1234-1234-1234 + notificationChannel: + type: string + description: Channel that is used to send recovery information + example: EXTERNAL + confirmationCode: + type: string + description: > + - Confirmation code for password recovery when the notifications are + externally managed. + + - The confirmation code will be returned only if the notification + channel is _EXTERNAL_. Use this code with password confirm API to + get a password reset code. + example: 12345-45678-6789098-8765 + resendCode: + type: string + description: >- + Code to get a new confirmation code. + example: 1234-123456-12345-12345 + links: + type: array + description: Contains available api calls + items: + $ref: '#/components/schemas/APICall' + UsernameRecoveryNotifyResponse: + type: object + description: API response for successful username recovery + properties: + code: + type: string + description: Success status code + example: UNR-02001 + message: + type: string + description: Success status message + example: successful_request + notificationChannel: + type: string + description: Channel which the recovery information is sent to the user + example: EXTERNAL + username: + type: string + example: user1 + description: > + - Username of the user + + - Username will be returned _ONLY IF_ the notification channel is + `EXTERNAL` + required: + - code + - message + - notificationChannel + - username + ResetCodeResponse: + properties: + resetCode: + type: string + description: Password reset code to reset the password + example: 1234-55678-5668-2345 + links: + type: array + description: Contains available api calls + items: + $ref: '#/components/schemas/APICall' + PasswordResetResponse: + type: object + description: API response for a successful password reset + properties: + code: + type: string + description: Operation code + example: PWR-02001 + message: + type: string + description: Message regarding the operation. + example: successful_request + ResendConfirmationCodeExternalResponse: + type: object + description: Object encapsulate the details regarding resend confirmation code + properties: + code: + type: string + description: Success status code + example: PWR-02002 + message: + type: string + description: Success status message + example: successful_request + flowConfirmationCode: + type: string + description: Recovery flow confirmation code + example: 1234-1234-1234-1234 + notificationChannel: + type: string + description: Channel that is used to send recovery information + example: EMAIL + confirmationCode: + type: string + description: Confirmation code to confirm the password recovery + example: 1234-12345-234-123456 + resendCode: + type: string + description: Resend code to resend the confirmation code + example: 1234-12345-234-123456 + links: + type: array + description: Contains available api calls + items: + $ref: '#/components/schemas/APICall' + ResendConfirmationCodeInternalResponse: + type: object + description: Object encapsulate the details regarding resend confirmation code + properties: + code: + type: string + description: Success status code + example: PWR-02002 + message: + type: string + description: Success status message + example: successful_request + flowConfirmationCode: + type: string + description: Recovery flow confirmation code + example: 1234-1234-1234-1234 + notificationChannel: + type: string + description: Channel that is used to send recovery information + example: EMAIL + resendCode: + type: string + description: Resend code to resend the confirmation code + example: 1234-12345-234-123456 + links: + type: array + description: Contains available api calls + items: + $ref: '#/components/schemas/APICall' + RetryErrorResponse: + type: object + properties: + code: + type: string + description: Error code corresponding to the error + example: PWR-10004 + message: + type: string + description: Error message + example: Retry + description: + type: string + description: Error description + example: Password policy violation + traceId: + type: string + description: Some Correlation for Error Instance + example: 2345dfgh678h789bhjk + resetCode: + type: string + description: Password reset code used in the request + example: 1234-34567-3456-2345678 + links: + type: array + description: Contains available api calls + items: + $ref: '#/components/schemas/APICall' + ErrorResponse: + type: object + properties: + code: + type: string + description: Error code corresponding to the error + example: UAR-10001 + message: + type: string + description: Error message + example: invalid_request + description: + type: string + description: Description about the error + example: Invalid claim uri + traceId: + type: string + description: Some Correlation for Error Instance + example: 2345dfgh678h789bhjk + AccountRecoveryType: + type: object + description: Object that encapsulates details of the account recovery channel + properties: + mode: + type: string + example: recoverWithNotifications + flowConfirmationCode: + type: string + example: 1234-1234-1234-1234 + channelInfo: + $ref: '#/components/schemas/RecoveryChannelInformation' + links: + type: array + description: Contains available api calls + items: + $ref: '#/components/schemas/APICall' + RecoveryChannelInformation: + description: Response with the recovery ID and the available recovery channels + properties: + recoveryCode: + type: string + description: Code to recovery the user account + example: 1234-55678-5668-2345 + channels: + type: array + description: Available recovery channels for the user + items: + $ref: '#/components/schemas/RecoveryChannel' + RecoveryChannel: + type: object + description: Object with notification channel attributes + properties: + id: + type: string + description: Id given to the channel + example: '1' + type: + type: string + description: Type of the chanel + example: EMAIL + value: + type: string + description: Masked channel value + example: wso2***********.com + preferred: + type: boolean + description: Whether the channel is a user preferred channel + example: true + UserClaim: + type: object + description: Object that holds a user claim and the corresponding value + properties: + uri: + type: string + description: Claim uri + example: 'http://wso2.org/claims/givenname' + value: + type: string + description: Value for the claim + example: user1 + Property: + type: object + description: 'object that holds a property as a key, value pair' + properties: + key: + type: string + description: Unique identifier as the key of the property + example: key + value: + type: string + description: Value of the property + example: value + APICall: + type: object + description: Object that holds next API call details + properties: + rel: + type: string + description: Next API call + example: next + href: + type: string + description: Next API url + example: /api/users/recovery/v2/ + type: + type: string + description: HTTP method type + example: POST \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/user-identity-verification.yaml b/docusaurus-asgardeo/static/apis/restapis/user-identity-verification.yaml new file mode 100644 index 0000000000..df94a55357 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/user-identity-verification.yaml @@ -0,0 +1,299 @@ +openapi: 3.0.3 +info: + title: Identity Verification API + description: |- + This is the RESTful API for users to manage their identity verification information stored in Asgardeo. +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/users/v1' +security: + - OAuth2: [] + - BasicAuth: [] +paths: + /me/idv/verify: + post: + tags: + - Me - Identity Verification + summary: Verify an Identity + description: > + This API provides the capability to verify a user with the configured verification required attributes.
    + Scope(Permission) required: `internal_login` + operationId: meVerifyIdentity + requestBody: + description: Verify an identity + content: + application/json: + schema: + $ref: '#/components/schemas/verifyRequest' + required: true + responses: + '201': + description: Accepted + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/verificationPostResponse' + '200': + description: Successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/verificationPostResponse' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /me/idv/claims: + get: + tags: + - Me - Identity Verification + summary: Get the identity verification claims of a user + description: > + This API provides the capability to retrieve the verification details of a user. +
    Scope(Permission) required: `internal_login` + operationId: meGetIdVClaims + parameters: + - $ref: '#/components/parameters/idVPQueryParam' + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/verificationClaimResponse' + '400': + description: Invalid status value + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /me/idv/claims/{claim-id}: + get: + tags: + - Me - Identity Verification + summary: Get identity verification claim + description: > + This API provides the capability to retrieve a identity verification claim of a user. +
    Scope(Permission) required: `internal_login` + operationId: meGetIdVClaim + parameters: + - name: claim-id + in: path + description: Claim that needs to retrieve verification metadata + required: true + schema: + type: string + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/verificationClaimResponse' + '400': + description: Invalid status value + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + +components: + parameters: + limitQueryParam: + in: query + name: limit + required: false + description: | + Maximum number of records to return. + schema: + type: integer + format: int32 + offsetQueryParam: + in: query + name: offset + required: false + description: | + Number of records to skip for pagination. + schema: + type: integer + format: int32 + idVPQueryParam: + in: query + name: idVProviderId + required: false + description: | + Id of the identity verification provider. + schema: + type: string + schemas: + Error: + type: object + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: e0fbcfeb-****-****-8dd0-7b7d38e13047 + verificationPostResponse: + type: object + properties: + idVProviderId: + type: string + example: "d75b8685-****-****-a555-80a3eecb5af2" + claims: + type: array + items: + $ref: '#/components/schemas/verificationClaimResponse' + verificationClaimResponse: + type: object + properties: + id: + type: string + example: aHR0cDovL3******************cy91c2VybmFtZQ + readOnly: true + uri: + type: string + example: 'http://wso2.org/claims/dob' + isVerified: + type: boolean + example: true + idVProviderId: + type: string + example: '2159375-****-****-a456-5566424414527' + claimMetadata: + $ref: '#/components/schemas/claimMetadata' + verificationClaimRequest: + type: object + properties: + uri: + type: string + example: 'http://wso2.org/claims/dob' + isVerified: + type: boolean + example: true + idVProviderId: + type: string + example: '2159375-****-****-a456-5566424414527' + claimMetadata: + $ref: '#/components/schemas/claimMetadata' + verificationClaimUpdateRequest: + type: object + properties: + isVerified: + type: boolean + example: true + claimMetadata: + $ref: '#/components/schemas/claimMetadata' + required: + - isVerified + - claimMetadata + claimMetadata: + type: object + additionalProperties: true + example: '{"source": "Provider", "trackingId": "123e4567-****-****-a456-556642440000" }' + verificationClaimPostRequest: + type: array + items: + $ref: '#/components/schemas/verificationClaimRequest' + verificationClaimPostResponse: + type: array + items: + $ref: '#/components/schemas/verificationClaimResponse' + verifyRequest: + type: object + properties: + idVProviderId: + type: string + example: "d75b8685-383a-4320-a555-80a3eecb5af2" + claims: + type: array + items: + type: string + example: + - http://wso2.org/claims/dob + - http://wso2.org/claims/country + properties: + type: array + items: + $ref: '#/components/schemas/ProviderProperty' + required: + - identityVerificationProvider + - properties + ProviderProperty: + type: object + properties: + key: + type: string + example: status + value: + type: string + example: "INITIATED" + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://localhost:9443/oauth2/authorize' + tokenUrl: 'https://localhost:9443/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/user-organization.yaml b/docusaurus-asgardeo/static/apis/restapis/user-organization.yaml new file mode 100644 index 0000000000..e3367da37d --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/user-organization.yaml @@ -0,0 +1,339 @@ +openapi: 3.0.0 +info: + version: "v1" + title: 'Asgardeo - User Organization Management API Definition' + description: | + This document specifies an **User Organization Management RESTful API** for **Asgardeo**. + + This API provides the capability to retrieve the resident organization of the authenticated user. + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html +servers: + - url: 'https://api.asgardeo.io/t/{root-organization-name}/api/users/v1/me/organizations' + variables: + root-organization-name: + default: {root-organization-name} +security: + - OAuth2: [] + +tags: + - name: me + description: Operations for the authenticated user + +paths: + /: + get: + tags: + - me + summary: + This API is used to search and retrieve child organizations which are authorized for the user. + description: + Retrieve authorized organizations which matches the defined search criteria, if any. + + Scope(Permission) required: `internal_login` + parameters: + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/afterQueryParam' + - $ref: '#/components/parameters/beforeQueryParam' + - $ref: '#/components/parameters/recursiveQueryParam' + - $ref: '#/components/parameters/authorizedAppNameQueryParam' + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationsResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/api/users/v1/me/organizations' \ + -H 'Authorization: Bearer {access_token}' \ + -H 'Content-Type: application/json' + /root: + get: + tags: + - me + summary: | + Get the root organization of the authenticated user + description: | + This API provides the capability to retrieve the root organization of the authenticated user. + + Scope(Permission) required: `internal_login` + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/RootOrganizationResponse' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/api/users/v1/me/organizations/root' \ + -H 'Authorization: Bearer {access_token}' \ + -H 'Content-Type: application/json' + /root/descendants: + get: + tags: + - me + summary: | + Get the descendant organizations of the authenticated user's resident organization + description: | + This API provides the capability to retrieve + the descendant organizations of the authenticated user's resident organizations. The response includes + the organization's id and name from the resident organization to the accessed child organization. + + Scope(Permission) required: `internal_login` + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/RootDescendantsOrganizationResponse' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{root-organization-name}/api/users/v1/me/organizations/root/descendants' \ + -H 'Authorization: Bearer {access_token}' \ + -H 'Content-Type: application/json' + +components: + parameters: + filterQueryParam: + in: query + name: filter + required: false + description: + Condition to filter the retrieval of records. + schema: + type: string + limitQueryParam: + in: query + name: limit + required: false + description: + Maximum number of records to be returned. (Should be greater than 0) + schema: + type: integer + format: int32 + minimum: 0 + beforeQueryParam: + in: query + name: before + required: false + description: + Points to the previous range of data that can be retrieved. + schema: + type: string + afterQueryParam: + in: query + name: after + required: false + description: + Points to the next range of data to be returned. + schema: + type: string + recursiveQueryParam: + in: query + name: recursive + required: false + description: + Determines whether a recursive search should happen. + schema: + type: boolean + default: false + authorizedAppNameQueryParam: + in: query + name: authorizedAppName + required: false + description: + Retrieves the organizations that are authorized for the user through the role bound to the application. + schema: + type: string + schemas: + RootOrganizationResponse: + type: object + required: + - id + - name + properties: + id: + type: string + example: '77084a9d-113f-8281-a0d3-efe34b083213' + name: + type: string + example: 'ABC Builders' + + OrganizationsResponse: + type: object + properties: + links: + type: array + items: + $ref: '#/components/schemas/Link' + example: + [ + { + "href": "/t/{root-organization-name}/api/users/v1/me/organizations?limit=10&filter=name+co+der&next=MjAyMS0xMi0yMSAwNToxODozMS4wMDQzNDg=", + "rel": "next", + }, { + "href": "/t/{root-organization-name}/api/users/v1/me/organizations?limit=10&filter=name+co+der&before=MjAyMS0xMi0yMSAwNToxODozMS4wMDQzNDg=", + "rel": "previous", + } + ] + organizations: + type: array + items: + $ref: '#/components/schemas/Organization' + Link: + type: object + properties: + href: + type: string + format: uri + description: Endpoint that will return the next or previous page of data. + rel: + type: string + description: Describes whether the provided link is to access the next or previous page of data. + readOnly: true + Organization: + type: object + required: + - id + - name + - status + - version + - ref + properties: + id: + type: string + example: 'b4526d91-a8bf-43d2-8b14-c548cf73065b' + name: + type: string + example: 'ABC Builders' + status: + type: string + enum: [ ACTIVE, DISABLED ] + example: ACTIVE + version: + type: string + example: 'v1.0.0' + ref: + type: string + example: '/t/{root-organization-name}/api/server/v1/organizations/b4526d91-a8bf-43d2-8b14-c548cf73065b' + + BasicOrganizationObject: + type: object + required: + - id + - name + properties: + id: + type: string + example: '77084a9d-113f-8281-a0d3-efe34b083213' + name: + type: string + example: 'ABC Builders' + + RootDescendantsOrganizationResponse: + type: array + items: + $ref: '#/components/schemas/BasicOrganizationObject' + + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: UOM-00000 + description: An error code. + message: + type: string + example: Some Error Message + description: An error message. + description: + type: string + example: Some Error Description + description: An error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + description: An error trace identifier. + + #-------------------------------------------------------- + # Descriptions of error responses. + #-------------------------------------------------------- + responses: + BadRequest: + description: Invalid input in the request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Authentication information is missing or invalid. + Forbidden: + description: Access forbidden. + ServerError: + description: Internal server error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + + #----------------------------------------------------- + # Applicable authentication mechanisms. + #----------------------------------------------------- + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{root-organization-name}/oauth2/token' + scopes: {} diff --git a/docusaurus-asgardeo/static/apis/restapis/user-password.yaml b/docusaurus-asgardeo/static/apis/restapis/user-password.yaml new file mode 100644 index 0000000000..7d15d44b07 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/user-password.yaml @@ -0,0 +1,163 @@ +openapi: 3.0.0 +info: + version: "v1" + title: Asgardeo - Self Password Update API + description: | + This is the RESTful API for self-password updates in Asgardeo, allowing authenticated users to change their own passwords. + + Scope(Permission) required: `internal_user_password_update` + +

    ⚠️ Mandatory Configuration

    +

    To enable this API, you must authorize the following API resource within your application settings in the Asgardeo Console:

    +
      +
    • API Resource: /api/users/v1/me/change-password
    • +
    • Authorization Policy: Set to No Authorization Policy
    • +
    • Required Scope: internal_user_password_update
    • +
    +

    Once these settings are applied, any user who authenticates through the application and requests the internal_user_password_update scope will be granted permission automatically. Applications that have not configured this specific API resource and policy will be unable to support self-password updates via this API.

    +
    +security: + - OAuth2: + - internal_user_password_update +tags: + - name: me + description: Operations for the authenticated user. +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/users/v1' + +paths: + /me/change-password: + post: + tags: + - me + summary: Change user password + description: | + This API is used to change the password of the authenticated user. + + Scope(Permission) required: `internal_user_password_update` + operationId: changePassword + requestBody: + description: Password change request. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordChangeRequest' + responses: + '204': + $ref: '#/components/responses/Success' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + +components: + schemas: + #----------------------------------------------------- + # Password Change Request object + #----------------------------------------------------- + PasswordChangeRequest: + type: object + required: + - currentPassword + - newPassword + properties: + currentPassword: + type: string + description: Current password of the user. + example: "CurrentPassword123" + newPassword: + type: string + description: New password to set for the user. + example: "NewPassword456" + + #----------------------------------------------------- + # Error object + #----------------------------------------------------- + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: "PWD-10001" + message: + type: string + example: "Invalid current password" + description: + type: string + example: "The current password provided is incorrect." + traceId: + type: string + example: "e0fbcfeb-3617-43c4-8dd0-7b7d38e13047" + + #----------------------------------------------------- + # Descriptions of common responses + #----------------------------------------------------- + responses: + Success: + description: Password successfully changed + BadRequest: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + examples: + InvalidCurrentPassword: + $ref: '#/components/examples/InvalidCurrentPassword' + PasswordPolicyViolation: + $ref: '#/components/examples/PasswordPolicyViolation' + Unauthorized: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + Forbidden: + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + ServerError: + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + + #----------------------------------------------------- + # Examples + #----------------------------------------------------- + examples: + InvalidCurrentPassword: + summary: Wrong current password + value: + code: "PWD-10001" + message: "Invalid current password" + description: "The current password provided is incorrect." + traceId: "e0fbcfeb-3617-43c4-8dd0-7b7d38e13047" + PasswordPolicyViolation: + summary: New password too weak + value: + code: "PWD-10003" + message: "Password policy violation" + description: "The minimum length of password should be 8." + traceId: "e0fbcfeb-3617-43c4-8dd0-7b7d38e13047" + + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: + internal_user_password_update: Allows the authenticated user to update their own password. diff --git a/docusaurus-asgardeo/static/apis/restapis/user-store.yaml b/docusaurus-asgardeo/static/apis/restapis/user-store.yaml new file mode 100644 index 0000000000..6cdcb9db5f --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/user-store.yaml @@ -0,0 +1,1187 @@ +openapi: 3.0.0 +info: + description: > + This document specifies the **Userstore Management RESTful API** for Asgardeo. + version: "v1" + title: UserStore Management Rest API + +security: + - OAuth2: [] +paths: + /userstores: + post: + tags: + - User Store + summary: Add a secondary user store. + operationId: addUserStore + description: | + This API provides the capability to add a secondary user store. + + **NOTE:** + + To retrieve the available user store classes/types, use the **api/server/v1/userstores/meta/types** API. + + When creating a user store, it will be **disabled by default**. To enable the user store, include the `disabled` property set to `false` in the properties of the payload. + + Scope(Permission) required: `internal_userstore_create` + responses: + '201': + description: Successful response + headers: + Location: + description: >- + Location of the newly created secondary user store. userstore id is generated as base-64-url-encoded(domain-name) value. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreResponse' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "typeId": "VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg", + "description": "Some description about the user store.", + "name": "JDBC-SECONDARY", + "properties": [ + { + "name": "some property name", + "value": "some property value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreReq' + description: Secondary user store to add. + get: + tags: + - User Store + summary: Retrieve the list of secondary user stores + operationId: getSecondaryUserStores + description: | + This API provides the capability to list the configured secondary user stores.
    + + Scope(Permission) required: `internal_userstore_view` + parameters: + - $ref: '#/components/parameters/limitQueryParam' + - $ref: '#/components/parameters/offsetQueryParam' + - $ref: '#/components/parameters/filterQueryParam' + - $ref: '#/components/parameters/sortQueryParam' + - $ref: '#/components/parameters/requiredAttributesQueryParam' + responses: + '200': + description: Successful response. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UserStoreListResponse' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /userstores/import: + post: + tags: + - User Store + summary: | + Import a secondary user store from a file + description: | + This API provides the capability to import a user store from + the configurations provided as a `YAML`, `JSON` or `XML` file.
    + + Scope(Permission) required: `internal_userstore_create` + operationId: importUserStoreFromFile + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/FileUpload' + description: This represents the user store to be created. + responses: + '201': + description: Successful response + headers: + Location: + description: >- + Location of the newly created secondary userstore. userstore id is generated as base-64-url-encoded(domain-name) value. + schema: + type: string + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + x-codeSample: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/import' \ + -H 'accept: */*' \ + -H 'Content-Type: multipart/form-data' \ + -F 'file=@file-name.xml;type=text/xml' + /userstores/primary: + get: + tags: + - User Store + summary: >- + Retrieve the configurations of primary user store + operationId: getPrimaryUserStore + description: | + This API provides the capability to retrieve the configurations of the primary user store.
    + + Scope(Permission) required: `internal_userstore_view` + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreConfigurationsRes' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/primary' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /userstores/{userstore-domain-id}: + get: + tags: + - User Store + summary: >- + Retrieve the configurations of secondary user store based on its domain id + operationId: getUserStoreByDomainId + description: | + This API provides the capability to retrieve the configurations of + a secondary user store based on its domain id.
    + + Scope(Permission) required: `internal_userstore_view` + parameters: + - $ref: '#/components/parameters/domainNamePathParam' + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreConfigurationsRes' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/{userstore-domain-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + delete: + tags: + - User Store + summary: Delete a secondary user store + operationId: deleteUserStore + description: | + This API provides the capability to delete a secondary user store based on + matching to the given user store domain id.
    + + Scope(Permission) required: `internal_userstore_delete` + parameters: + - $ref: '#/components/parameters/domainNamePathParam' + responses: + '204': + $ref: '#/components/responses/NoContent' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'DELETE' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/{userstore-domain-id}' \ + -H 'accept: */*' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - User Store + summary: Update a user store by its domain id + operationId: updateUserStore + description: | + This API provides the capability to edit a user store based on its + domain id
    + + Scope(Permission) required: `internal_userstore_update` + parameters: + - in: path + name: userstore-domain-id + required: true + description: Current domain id of the user store + schema: + type: string + example: SkRCQy1TRUNPTkRBUlk + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreResponse' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/{userstore-domain-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "typeId": "VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg", + "description": "Some description about the user store.", + "name": "JDBC-SECONDARY", + "properties": [ + { + "name": "some property name", + "value": "some property value" + } + ] + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreReq' + # But not allowing to change the typeName and name in the PUT request. + description: >- + The secondary user store values which are needed to be edited for a + given domain id. + patch: + tags: + - User Store + summary: Patch the secondary user store by it's domain id + operationId: patchUserStore + description: | + This API provides the capability to update the secondary user store's + property using patch request by using its domain id. + + Scope(Permission) required: `internal_userstore_update` + parameters: + - $ref: '#/components/parameters/domainNamePathParam' + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreResponse' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PATCH' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/userstore-domain-id' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '[ + { + "operation": "REPLACE", + "path": "/properties/Disabled", + "value": "true" + } + ]' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchRequest' + required: true + /userstores/{userstore-domain-id}/export: + get: + tags: + - User Store + summary: | + Export a secondary user store by its domain id + description: | + This API provides the capability to retrieve the configurations of a + secondary user store based on its domain id as an `XML`, `YAML`, or `JSON` file.
    + + Scope(Permission) required: `internal_userstore_view` + operationId: exportUserStoreToFile + parameters: + - name: userstore-domain-id + in: path + description: ID of the user store domain. + required: true + schema: + type: string + example: SkRCQy1TRUNPTkRBUlk + - $ref: '#/components/parameters/fileTypeHeaderParam' + responses: + '200': + description: Successful response. + content: + application/json: + schema: + type: string + example: 'Sample userstore configuration in the requested format' + application/yaml: + schema: + type: string + example: 'Sample userstore configuration in the requested format' + application/xml: + schema: + type: string + example: 'Sample userstore configuration in the requested format' + application/octet-stream: + schema: + type: string + example: 'Sample userstore configuration in the requested format' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/{domain-id}/export' \ + -H 'accept: application/json' + /userstores/{userstore-domain-id}/import: + put: + tags: + - User Store + summary: | + Update an existing user store by importing configs from a file + description: | + This API provides the capability to update an existing user store by importing + user store configurations provided as a YAML, JSON or XML file.
    + + Scope(Permission) required: `internal_userstore_update` + operationId: updateUserStoreFromFile + parameters: + - name: userstore-domain-id + in: path + description: ID of the user store. + required: true + schema: + type: string + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/FileUpload' + description: This represents the user store to be updated. + responses: + '200': + description: Successfully Updated. + headers: + Location: + description: >- + Location of the updated userstore. userstore id is generated as base-64-url-encoded(domain-name) value. + schema: + type: string + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/{userstore-domain-id}/import' \ + -H 'accept: */*' \ + -H 'Content-Type: multipart/form-data' \ + -F 'file=@file-name.xml;type=text/xml' + /userstores/{userstore-domain-id}/attribute-mappings: + patch: + tags: + - User Store + summary: Update the secondary user store attribute mappings by it's domain id. + operationId: updateAttributeMappings + description: | + This API provides the capability to update the secondary user store's attribute mappings using patch request by using its domain id.
    + + Scope(Permission) required: `internal_userstore_update` + parameters: + - $ref: '#/components/parameters/domainNamePathParam' + responses: + '200': + $ref: '#/components/responses/OK' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AttributeMappingsReq' + required: true + x-codeSamples: + - lang: Curl + source: | + curl --location --request PATCH 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/{userstore-domain-id}/attribute-mappings' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '[ + { + "claimURI": "http://wso2.org/claims/username", + "mappedAttribute": "username" + } + ]' + /userstores/meta/types: + get: + tags: + - Meta + summary: Retrieve the available user store classes/types + operationId: getAvailableUserStoreTypes + description: | + This API provides the capability to retrieve the available user store + types
    + + Scope(Permission) required: `internal_userstore_view` + responses: + '200': + description: Successful Response. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AvailableUserStoreClassesRes' + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/meta/types' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /userstores/meta/types/{type-id}: + get: + tags: + - Meta + summary: >- + Retrieve the properties of secondary user store of a given user store type + operationId: getUserStoreManagerProperties + description: | + This API provides the capability to retrieve the properties of secondary + user store of a given class name.
    + + Scope(Permission) required: `internal_userstore_view` + parameters: + - in: path + name: type-id + required: true + description: Id of the user store type + schema: + type: string + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/MetaUserStoreType' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '501': + $ref: '#/components/responses/NotImplemented' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/meta/types/{user-store-type-id}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + '/userstores/meta/types/{type-id}/attributes': + get: + tags: + - Meta + summary: >- + Retrieve the meta attributes of a user store of a given user store type. + operationId: getUserStoreAttributeMappings + description: | + This API provides the capability to retrieve the attribute mappings + of a given user store type.
    + + Scope(Permission) required: `internal_userstore_view` + parameters: + - in: path + name: type-id + required: true + description: Id of the user store type + schema: + type: string + - $ref: '#/components/parameters/includeIdentityClaimsQueryParam' + responses: + '200': + description: Successful Response. + content: + application/json: + schema: + $ref: '#/components/schemas/UserStoreAttributeMappingResponse' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/meta/types/{user-store-type-id}/attributes' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + /userstores/test-connection: + post: + tags: + - User Store + summary: Test the connection to the datasource used by a JDBC user store manager. + operationId: testRDBMSConnection + description: | + This API provides the capability to test the connection to the + datasource used by a JDBC user store manager.
    + + Scope(Permission) required: `internal_userstore_view` + responses: + '200': + description: Successful response. + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectionEstablishedResponse' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'POST' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/userstores/test-connection' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "driverName": "com.mysql.jdbc.Driver", + "connectionURL": "jdbc:mysql://192.168.48.154:3306/test", + "username": "root", + "connectionPassword": "root" + }' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RDBMSConnectionReq' + description: >- + RDBMS connection properties used to connect to the datasource used by a + JDBC user store manager. +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}Aq2w3/api/server/v1' +components: + parameters: + domainNamePathParam: + name: userstore-domain-id + in: path + required: true + description: The unique name of the user store domain + schema: + type: string + example: SkRCQy1TRUNPTkRBUlk + includeIdentityClaimsQueryParam: + in: query + name: includeIdentityClaimMappings + required: false + description: Whether to include the identity claim mappings with user store attributes. + example: true + schema: + type: boolean + limitQueryParam: + in: query + name: limit + required: false + description: maximum number of records to return + schema: + type: integer + format: int32 + offsetQueryParam: + in: query + name: offset + required: false + description: number of records to skip for pagination + schema: + type: integer + format: int32 + filterQueryParam: + in: query + name: filter + required: false + description: Condition to filter the retrieval of records. + schema: + type: string + sortQueryParam: + in: query + name: sort + required: false + description: Define the order of how the retrieved records should be sorted. + schema: + type: string + requiredAttributesQueryParam: + in: query + name: requiredAttributes + required: false + description: Define set of user store attributes (as comma separated) to be returned. + schema: + type: string + fileTypeHeaderParam: + in: header + name: Accept + required: false + description: | + Content type of the file. + schema: + type: string + default: application/yaml + enum: + - application/json + - application/xml + - application/yaml + - application/x-yaml + - text/yaml + - text/xml + - text/json + responses: + NotFound: + description: The specified resource is not found. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Unauthorized. + ServerError: + description: Internal Server Error. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + NotImplemented: + description: Not Implemented. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + InvalidInput: + description: Invalid input request. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + Conflict: + description: Element Already Exists. + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + Deleted: + description: Item Deleted + Created: + description: User Store Created. + OK: + description: OK. + Success: + description: Connection Established. + NoContent: + description: No Content. + Forbidden: + description: Resource Forbidden. + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth/token' + scopes: + read: Grants read access + write: Grants write access + admin: Grants read and write access to administrative information + schemas: + UserStoreReq: + type: object + required: + - typeId + - description + - name + - properties + description: Secondary user store request. + properties: + typeId: + type: string + description: The id of the user store manager class type. + example: VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg + description: + type: string + description: Description of the user store. + example: Some description about the user store. + name: + type: string + description: This is a unique name that identifies the user store. + example: JDBC-SECONDARY + properties: + type: array + description: >- + Various properties related to the user store such as connection URL, + connection password etc. + items: + $ref: '#/components/schemas/Property' + claimAttributeMappings: + type: array + description: Claim attribute mappings. + items: + $ref: '#/components/schemas/ClaimAttributeMapping' + PatchRequest: + type: array + items: + $ref: '#/components/schemas/PatchDocument' + ConnectionEstablishedResponse: + type: object + properties: + connection: + type: boolean + example: true + PatchDocument: + description: A JSONPatch document as defined by RFC 6902 + required: + - operation + - path + properties: + operation: + type: string + description: The operation to be performed + enum: + - ADD + - REMOVE + - REPLACE + example: REPLACE + path: + type: string + description: A JSON-Pointer + example: /properties/Disabled + value: + type: string + description: The value to be used within the operations + example: 'true' + RDBMSConnectionReq: + required: + - driverName + - connectionURL + - username + - connectionPassword + description: RDBMS Connection Request. + properties: + domain: + type: string + description: User store domain name. + example: PRIMARY + driverName: + type: string + description: Driver Name. + example: com.mysql.jdbc.Driver + connectionURL: + type: string + description: The Connection URL. + example: 'jdbc:mysql://192.168.48.154:3306/test' + username: + type: string + description: The username. + example: root + connectionPassword: + type: string + description: The password. + example: root + ClaimAttributeMapping: + type: object + required: + - claimURI + - mappedAttribute + properties: + claimURI: + type: string + description: A unique URI specific to the claim. + example: "http://wso2.org/claims/username" + mappedAttribute: + type: string + description: Userstore attribute to be mapped to. + example: "username" + AttributeMappingsReq: + type: array + description: Array of ClaimURI attribute mappings. + items: + $ref: '#/components/schemas/ClaimAttributeMapping' + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: AAA-00000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + Property: + type: object + required: + - name + - value + properties: + name: + type: string + example: some property name + value: + type: string + example: some property value + UserStoreListResponse: + type: object + properties: + id: + type: string + example: SkRCQy1TRUNPTkRBUlk + description: base64 url encoded value of domain name + name: + type: string + example: JDBC-SECONDARY + description: Domain name of the secondary user store. + enabled: + type: boolean + example: true + description: Enabled status of the userstore. + description: + type: string + example: Some description of the user store + isLocal: + type: boolean + example: true + description: Whether the user store is local or not. + self: + type: string + example: /t/{organization-name}/api/server/v1/userstores/SkRCQy1TRUNPTkRBUlk + description: Location of the created/updated resource. + typeName: + type: string + example: UniqueIDJDBCUserStoreManager + description: User store type name. + properties: + type: array + description: Requested configured user store property for the set + items: + $ref: '#/components/schemas/AddUserStorePropertiesRes' + MetaUserStoreType: + type: object + properties: + typeName: + type: string + example: UniqueIDJDBCUserStoreManager + typeId: + type: string + example: b3JnLndzbzIuY2FyYm9uLnVzZXIuY29yZS5qZGJjLkpEQkNVc2VyU3RvcmVNYW5hZ2Vy + className: + type: string + example: org.wso2.carbon.user.core.jdbc.UniqueIDJDBCUserStoreManager + isLocal: + type: boolean + example: true + description: Whether the user store is local or not. + properties: + $ref: '#/components/schemas/UserStorePropertiesRes' + UserStoreResponse: + type: object + properties: + id: + type: string + example: SkRCQy1TRUNPTkRBUlk= + description: base64 url encoded value of domain name + name: + type: string + example: JDBC-SECONDARY + description: domain name of the secondary user store + typeName: + type: string + example: UniqueIDJDBCUserStoreManager + typeId: + type: string + example: VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg + description: + type: string + example: Some description of the user store + properties: + type: array + description: Configured user store proper for the set. + items: + $ref: '#/components/schemas/AddUserStorePropertiesRes' + claimAttributeMappings: + type: array + description: Configured user store claim attribute mappings + items: + $ref: '#/components/schemas/ClaimAttributeMapping' + AvailableUserStoreClassesRes: + type: object + description: Available User Store Classes Response. + properties: + typeId: + type: string + example: VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg + typeName: + type: string + example: UniqueIDJDBCUserStoreManager + className: + type: string + example: org.wso2.carbon.user.core.jdbc.UniqueIDJDBCUserStoreManager + isLocal: + type: boolean + example: true + description: Whether the user store is local or not. + self: + type: string + example: /t/{organization-name}/api/server/v1/userstores/meta/types/VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg + UserStoreConfigurationsRes: + type: object + description: Available User Store Configurations Response. + properties: + typeName: + type: string + example: UniqueIDJDBCUserStoreManager + typeId: + type: string + example: VW5pcXVlSURKREJDVXNlclN0b3JlTWFuYWdlcg + name: + type: string + example: JDBC-SECONDARY + description: + type: string + example: Some description of the user store + className: + type: string + example: org.wso2.carbon.user.core.jdbc.UniqueIDJDBCUserStoreManager + isLocal: + type: boolean + example: true + description: Whether the user store is local or not. + properties: + type: array + description: Configured user store property for the set + items: + $ref: '#/components/schemas/AddUserStorePropertiesRes' + claimAttributeMappings: + type: array + description: Requested configured user store claim attribute mappings. + items: + $ref: '#/components/schemas/ClaimAttributeMapping' + AddUserStorePropertiesRes: + type: object + description: Available User Store Properties. + required: + - name + - value + properties: + name: + type: string + example: ConnectionName + value: + type: string + example: 'CN=,DC=' + UserStorePropertiesRes: + properties: + Mandatory: + type: array + items: + $ref: '#/components/schemas/PropertiesRes' + Optional: + type: array + items: + $ref: '#/components/schemas/PropertiesRes' + Advanced: + type: array + items: + $ref: '#/components/schemas/PropertiesRes' + PropertiesRes: + type: object + properties: + name: + type: string + example: Some Mandatory Property Name + defaultValue: + type: string + example: Some Mandatory Property Value + description: + type: string + example: Description of the property + attributes: + type: array + items: + $ref: '#/components/schemas/Attribute' + Attribute: + type: object + properties: + name: + type: string + example: category + value: + type: string + example: basic + UserStoreAttributeMappingResponse: + type: object + properties: + typeName: + type: string + description: Type name of the user store. + example: org.wso2.carbon.user.core.ldap.UniqueIDActiveDirectoryUserStoreManager + typeId: + type: string + description: Type id of the user store. + example: b3JnLndzbzIuY2FyYm9uLnVzZXIuY29yZS5qZGJjLkpEQkNVc2VyU3RvcmVNYW5hZ2Vy + isLocal: + type: boolean + description: Whether the user store is local or not. + example: true + attributeMappings: + type: array + description: User store attribute mappings. + items: + $ref: '#/components/schemas/UserStoreAttributeResponse' + UserStoreAttributeResponse: + type: object + properties: + claimId: + type: string + description: Claim id of the attribute. + example: bzIuY2FyYm9uLnVzZXIuY29yZS5qZG + claimURI: + type: string + description: Claim URI of the attribute. + example: http://wso2.org/claims/givenname + mappedAttribute: + type: string + description: Mapped attribute name. + example: givenName + displayName: + type: string + description: Display name of the attribute. + example: First Name + FileUpload: + type: object + properties: + file: + type: string + format: binary + description: File uploaded during import. diff --git a/docusaurus-asgardeo/static/apis/restapis/validation.yaml b/docusaurus-asgardeo/static/apis/restapis/validation.yaml new file mode 100644 index 0000000000..68c916364d --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/validation.yaml @@ -0,0 +1,443 @@ +openapi: 3.0.0 +info: + version: "v1" + title: Asgardeo - Validation API + description: + "This is the RESTful API for managing input validation configuration for an organization in WSO2 Asgardeo. + This API allows retrieving and updating the input validation configurations." +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' +security: + - OAuth2: [] +paths: + /validation-rules: + get: + tags: + - Validation Rules + description: Get validation rules for user inputs (e.g., password). + operationId: Get Validation Rules + responses: + '200': + $ref: '#/components/responses/Success' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/validation-rules' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Validation Rules + description: | + Update validation rules for user inputs. + + Scopes required: `internal_config_mgt_update` + operationId: Update Validation Rules + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationConfiguration' + examples: + Rules: + value: + - field: password/username + rules: + - validator: LengthValidator + properties: + - key: min.length + value: 5 + - key: max.length + value: 15 + Regex: + value: + - field: password/username + regEx: + - validator: JavaRegExValidator + properties: + - key: java.regex + value: (?=.*[A-Z]) + description: Represents the validation criteria. + required: true + responses: + '200': + $ref: '#/components/responses/Success' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/validation-rules' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '[ + { + "field": "password/username", + "rules": [ + { + "validator": "LengthValidator", + "properties": [ + { + "key": "min.length", + "value": 5 + }, + { + "key": "max.length", + "value": 15 + } + ] + } + ] + } + ]' + /validation-rules/{field}: + get: + tags: + - Validation Rules for a specific field + description: Get validation rules for a particular field of user inputs (e.g., password). + operationId: Get Validation Rules for a field + parameters: + - name: field + in: path + description: name of the field + required: true + style: simple + explode: false + schema: + type: string + responses: + '200': + $ref: '#/components/responses/SuccessForField' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/validation-rules/{field-name}' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' + put: + tags: + - Validation Rules for a specific field + description: | + Update validation rules of a particular field of user inputs. + + Scopes required: `internal_config_mgt_update` + operationId: Update validation rules for a user inputs field + parameters: + - name: field + in: path + description: name of the field + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ValidationConfigModelForField' + example: + rules: + - validator: LengthValidator + properties: + - key: min.length + value: 5 + - key: max.length + value: 15 + description: Represents the validation criteria. + required: true + responses: + '200': + $ref: '#/components/responses/SuccessForField' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'PUT' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/validation-rules/field-name' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {bearer_token}' \ + -d '{ + "rules": [ + { + "validator": "LengthValidator", + "properties": [ + { + "key": "min.length", + "value": 5 + }, + { + "key": "max.length", + "value": 15 + } + ] + } + ] + }' + /validation-rules/validators: + get: + tags: + - Validators + description: Retrieve all available validators that can be configured. + operationId: Get available Validators + responses: + '200': + description: Configurations successfully updated. + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/ValidatorModel' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + x-codeSamples: + - lang: Curl + source: | + curl -X 'GET' \ + 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/validation-rules/validators' \ + -H 'accept: application/json' \ + -H 'Authorization: Bearer {bearer_token}' +components: + schemas: + ValidatorModel: + type: object + properties: + type: + type: string + enum: + - RULE + - REGEX + name: + type: string + example: LengthValidator + properties: + type: array + items: + $ref: '#/components/schemas/PropertyModel' + PropertyModel: + type: object + properties: + name: + type: string + example: min.length + description: Name of the validator property. + description: + type: string + example: Minimum length required + description: Description for the validator property. + displayName: + type: string + example: Minimum limit + description: Display name for the validator property. + type: + type: string + example: int + description: Type of the validator property value. + displayOrder: + type: integer + example: 1 + description: Display the order of the validator property. + ValidationConfiguration: + type: array + items: + $ref: '#/components/schemas/ValidationConfigModel' + ValidationConfigModel: + type: object + required: + - field + properties: + field: + type: string + example: password + rules: + type: array + items: + $ref: '#/components/schemas/RuleModel' + regEx: + type: array + items: + $ref: '#/components/schemas/RuleModel' + ValidationConfigModelForField: + type: object + properties: + rules: + type: array + items: + $ref: '#/components/schemas/RuleModel' + regEx: + type: array + items: + $ref: '#/components/schemas/RuleModel' + RuleModel: + type: object + required: + - validator + - properties + properties: + validator: + type: string + example: lengthValidator + description: Name of the validator. + properties: + type: array + items: + $ref: '#/components/schemas/MappingModel' + MappingModel: + type: object + required: + - key + - value + properties: + key: + type: string + description: Name of the validator property. + value: + type: string + description: Value of the validator property. + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: VR-60001 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + NotFoundError: + type: object + required: + - code + - message + properties: + code: + type: string + example: IVM-60002 + message: + type: string + example: Field is not found. + description: + type: string + example: Invalid or unsupported field is provided. + responses: + Unauthorized: + description: Unauthorized + Forbidden: + description: Resource Forbidden + ServerError: + description: Internal Server Error + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + BadRequest: + description: Invalid Input Request + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + NotFound: + description: Invalid or unsupported field is provided. + content: + 'application/json': + schema: + $ref: '#/components/schemas/NotFoundError' + Success: + description: Configurations successfully updated. + content: + 'application/json': + schema: + $ref: '#/components/schemas/ValidationConfiguration' + examples: + Rules: + value: + - field: password/username + rules: + - validator: LengthValidator + properties: + - key: min.length + value: 5 + - key: max.length + value: 15 + Regex: + value: + - field: password/username + regEx: + - validator: JavaRegExValidator + properties: + - key: java.regex + value: (?=.*[A-Z]) + SuccessForField: + description: Successfully updated configurations for the field. + content: + 'application/json': + schema: + $ref: '#/components/schemas/ValidationConfigModel' + example: + field: password/username + rules: + - validator: LengthValidator + properties: + - key: min.length + value: 5 + - key: max.length + value: 15 + securitySchemes: + OAuth2: + type: oauth2 + flows: + clientCredentials: + tokenUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + scopes: + internal_config_mgt_update: Grants permission to update validation configurations + \ No newline at end of file diff --git a/docusaurus-asgardeo/static/apis/restapis/vc-templates.yaml b/docusaurus-asgardeo/static/apis/restapis/vc-templates.yaml new file mode 100644 index 0000000000..0a761ddc14 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/vc-templates.yaml @@ -0,0 +1,495 @@ +openapi: 3.0.0 +info: + title: "Asgardeo Verifiable Credential Template Management API" + version: "v1" + description: "Admin API for managing verifiable credential templates in Asgardeo." + contact: + name: WSO2 + url: 'https://wso2.com/asgardeo/' + email: architecture@wso2.org + license: + name: Apache 2.0 + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' + +security: + - OAuth2: [] + +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' + +paths: + /vc-templates: + get: + tags: ["VC Templates"] + summary: "List templates" + operationId: "listVCTemplates" + parameters: + - $ref: '#/components/parameters/before' + - $ref: '#/components/parameters/after' + - $ref: '#/components/parameters/filter' + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/attributes' + responses: + "200": + description: "Array of templates" + content: + application/json: + schema: + $ref: "#/components/schemas/VCTemplateList" + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + post: + tags: ["VC Templates"] + summary: "Add new template" + operationId: "addVCTemplate" + requestBody: + required: true + content: + application/json: + schema: { $ref: "#/components/schemas/VCTemplateCreationModel" } + examples: + createEmployeeBadge: + value: + identifier: "EmployeeBadge" + displayName: "EmployeeBadge" + format: "jwt_vc_json" + claims: + - name: "given_name" + type: "LOCAL" + claimUri: "http://wso2.org/claims/givenname" + - name: "email" + type: "LOCAL" + claimUri: "http://wso2.org/claims/emailaddress" + expiresIn: 31536000 + responses: + '201': + description: "Created" + headers: + Location: + schema: { type: string } + example: "/api/server/v1/vc-templates/7e5f9d2a-6b5e-4df6-9b87-8a3d1a4a0c31" + content: + application/json: + schema: { $ref: "#/components/schemas/VCTemplate" } + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + + /vc-templates/{template-id}: + parameters: + - in: path + name: template-id + required: true + schema: { type: string} + description: "Server-generated UUID of the template." + get: + tags: ["VC Templates"] + summary: "Get template" + operationId: "getVCTemplate" + responses: + "200": + description: "Template" + content: + application/json: + schema: { $ref: "#/components/schemas/VCTemplate" } + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + put: + tags: ["VC Templates"] + summary: "Update template" + operationId: "updateVCTemplate" + requestBody: + required: true + content: + application/json: + schema: { $ref: "#/components/schemas/VCTemplateUpdateModel" } + responses: + "200": + description: "Updated" + content: + application/json: + schema: { $ref: "#/components/schemas/VCTemplate" } + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + delete: + tags: ["VC Templates"] + summary: "Delete template" + operationId: "deleteVCTemplate" + responses: + '204': + description: Template Deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + + /vc-templates/{template-id}/offer: + parameters: + - in: path + name: template-id + required: true + schema: { type: string } + description: "Server-generated UUID of the template." + post: + tags: ["VC Templates"] + summary: "Generate or regenerate credential offer" + description: "Creates a new credential offer." + operationId: "generateVCCredentialOffer" + responses: + '200': + description: "Offer generated or regenerated successfully" + content: + application/json: + schema: + $ref: '#/components/schemas/VCTemplate' + '404': + description: "Template not found" + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + delete: + tags: ["VC Templates"] + summary: "Revoke credential offer" + description: "Revokes and deletes the existing credential offer." + operationId: "revokeVCCredentialOffer" + responses: + '200': + description: "Offer revoked successfully" + content: + application/json: + schema: + $ref: '#/components/schemas/VCTemplate' + '404': + description: "Template or offer not found" + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + +components: + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: {} + + schemas: + VCTemplate: + type: object + required: + - id + - identifier + - displayName + - format + - claims + - expiresIn + properties: + id: + type: string + example: "7e5f9d2a-6b5e-4df6-9b87-8a3d1a4a0c31" + identifier: + type: string + description: "Stable key; human/machine readable." + example: "EmployeeBadge" + displayName: + type: string + description: "Display name of the template" + example: "EmployeeBadge" + description: + type: string + description: "Description name of the template" + example: "EmployeeBadge" + format: + type: string + example: jwt_vc_json + claims: + type: array + items: + $ref: '#/components/schemas/Claim' + expiresIn: + type: integer + example: 31536000 + offerId: + type: string + nullable: true + description: "Backend-generated UUID for the credential offer. Null if no offer has been generated." + example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + VCTemplateCreationModel: + type: object + required: + - identifier + - format + - claims + - expiresIn + properties: + identifier: + type: string + displayName: + type: string + description: "Display name of the template" + description: + type: string + description: "Description name of the template" + example: "EmployeeBadge" + format: + type: string + claims: + type: array + items: + $ref: '#/components/schemas/Claim' + expiresIn: + type: integer + minimum: 60 + VCTemplateList: + type: object + properties: + totalResults: + type: integer + example: 1 + links: + type: array + items: + $ref: '#/components/schemas/PaginationLink' + VCTemplates: + type: array + items: + $ref: '#/components/schemas/VCTemplateListItem' + VCTemplateListItem: + type: object + required: + - id + - identifier + - displayName + properties: + id: + type: string + example: "7e5f9d2a-6b5e-4df6-9b87-8a3d1a4a0c31" + identifier: + type: string + description: "Stable key; human/machine readable." + example: "EmployeeBadge" + displayName: + type: string + description: "Published as `credential_template_id` in issuer metadata. Defaults to `identifier` if omitted." + example: "EmployeeBadge" + VCTemplateUpdateModel: + type: object + description: "Fields allowed to change after creation." + properties: + displayName: + type: string + description: "If not provided, server sets to `identifier`." + format: + type: string + claims: + type: array + items: + $ref: '#/components/schemas/Claim' + expiresIn: + type: integer + minimum: 60 + Claim: + type: object + required: + - name + - type + - claimUri + properties: + name: + type: string + description: "The claim name as it appears in the issued VC." + example: "given_name" + type: + type: string + example: "LOCAL" + claimUri: + type: string + description: > + The claim reference used for resolution. For LOCAL, this is the WSO2 IS + claim URI. + example: "http://wso2.org/claims/givenname" + PaginationLink: + type: object + properties: + rel: + type: string + example: before + href: + type: string + example: /api/server/v1/vc-templates?after=NDoy + Error: + type: object + properties: + code: + type: string + example: Some error code. + message: + type: string + example: Some error message. + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 + + parameters: + before: + name: before + in: query + required: false + description: | + Base64 encoded cursor value for backward pagination. + schema: + type: string + example: Ng== + + after: + name: after + in: query + required: false + description: | + Base64 encoded cursor value for forward pagination. + schema: + type: string + example: Ng== + + filter: + name: filter + in: query + required: false + description: | + Condition to filter the retrieval of records. Supports 'sw', 'co', 'ew' and 'eq' operations. + schema: + type: string + example: identifier+eq+greetings + + limit: + name: limit + in: query + required: false + description: | + Maximum number of records to return. + schema: + type: integer + example: 10 + + attributes: + name: attributes + in: query + required: false + description: Specifies the required attributes in the response. Only 'properties' attribute is currently supported. + schema: + type: string diff --git a/docusaurus-asgardeo/static/apis/restapis/verification-code-management-me.yaml b/docusaurus-asgardeo/static/apis/restapis/verification-code-management-me.yaml new file mode 100644 index 0000000000..de2ee8fbee --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/verification-code-management-me.yaml @@ -0,0 +1,167 @@ +openapi: 3.1.0 +info: + title: Verification Code Management Me API + description: | + This API provides endpoints for the authenticated user to manage verification codes. + version: 1.0.0 +servers: + - url: https://api.asgardeo.io/t/{organization-name}/api/identity/user/v1.0 +security: + - OAuth2: [] +tags: + - name: me + description: Operations for the authenticated user +paths: + /me/validate-code: + post: + tags: + - me + summary: Validate code + description: | + This API is used by the authenticated user to validate a verification code. + + Scope(Permission) required: `internal_login` + operationId: meValidateCode + requestBody: + description: The validation code retrieved for the verification scenario and optional properties. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/MeCodeValidationRequest' + responses: + '202': + description: Accepted + content: {} + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X POST \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "code": "string", + "properties": [] + }' \ + "https://api.asgardeo.io/t/{organization-name}/api/identity/user/v1.0/me/validate-code" + /me/resend-code: + post: + tags: + - me + summary: Resend code + description: | + This API is used by the authenticated user to resend a verification code. + + Scope(Permission) required: `internal_login` + operationId: meResendCode + requestBody: + description: Optional property parameters. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/MeResendCodeRequest' + responses: + '201': + description: Created + content: {} + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X POST \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "properties": [ + { + "key": "string", + "value": "string" + } + ] + }' \ + "https://api.asgardeo.io/t/{organization-name}/api/identity/user/v1.0/me/resend-code" +components: + schemas: + MeCodeValidationRequest: + type: object + required: + - code + properties: + code: + type: string + properties: + type: array + items: + $ref: '#/components/schemas/Property' + MeResendCodeRequest: + type: object + required: + - properties + properties: + properties: + type: array + items: + $ref: '#/components/schemas/Property' + Property: + type: object + properties: + key: + type: string + value: + type: string + Error: + type: object + properties: + code: + type: string + message: + type: string + description: + type: string + traceId: + type: string + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{organization-name}/oauth2/token' + scopes: + internal_login: Grant permission for an authenticated user for self management. diff --git a/docusaurus-asgardeo/static/apis/restapis/verification-code-management.yaml b/docusaurus-asgardeo/static/apis/restapis/verification-code-management.yaml new file mode 100644 index 0000000000..afc20289c1 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/verification-code-management.yaml @@ -0,0 +1,175 @@ +openapi: 3.1.0 +info: + title: Verification Code Management API + description: | + This API manages verification codes for various verification scenarios including validation and resending. + version: 1.0.0 +servers: + - url: https://api.asgardeo.io/t/{organization-name}/api/identity/user/v1.0 +security: + - OAuth2: [] + +paths: + /validate-code: + post: + tags: + - Verification Code + summary: Validate code + description: | + This API is used to validate the code generated during the verification process associated with a user. + + Scope(Permission) required: `internal_user_code_mgt_create` + operationId: validateCode + requestBody: + description: The validation code retrieved for the verification scenario, and optional property parameters. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CodeValidationRequest' + responses: + '202': + description: Accepted + content: {} + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X POST \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "code": "string", + "properties": [] + }' \ + "https://api.asgardeo.io/t/{organization-name}/api/identity/user/v1.0/validate-code" + /resend-code: + post: + tags: + - Verification Code + summary: Resend code + description: | + This API is used to resend the confirmation code if it is missing. + + Scope(Permission) required: `internal_user_code_mgt_create` + operationId: resendCode + requestBody: + description: User information and optional property parameters to resend the verification code. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ResendCodeRequest' + responses: + '201': + description: Created + content: {} + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl -X POST \ + -H 'Authorization: Bearer ' \ + -H 'Content-Type: application/json' \ + -d '{ + "user": { + "username": "string", + "realm": "string" + }, + "properties": [ + { + "key": "string", + "value": "string" + } + ] + }' \ + 'https://api.asgardeo.io/t/{organization-name}/api/identity/user/v1.0/resend-code' +components: + schemas: + CodeValidationRequest: + type: object + properties: + code: + type: string + properties: + type: array + items: + $ref: '#/components/schemas/Property' + Error: + type: object + properties: + code: + type: string + message: + type: string + description: + type: string + traceId: + type: string + Property: + type: object + properties: + key: + type: string + value: + type: string + ResendCodeRequest: + type: object + properties: + user: + $ref: '#/components/schemas/User' + properties: + type: array + items: + $ref: '#/components/schemas/Property' + User: + type: object + properties: + username: + type: string + realm: + type: string + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/authorize + tokenUrl: https://api.asgardeo.io/t/{organization-name}/oauth2/token + scopes: + internal_user_code_mgt_create: Grants create access to user code management in the organization (root) + diff --git a/docusaurus-asgardeo/static/apis/restapis/webhook-management.yaml b/docusaurus-asgardeo/static/apis/restapis/webhook-management.yaml new file mode 100644 index 0000000000..f25570d5f4 --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/webhook-management.yaml @@ -0,0 +1,530 @@ +openapi: 3.0.0 +info: + version: v1 + title: Asgardeo - Webhook Management Rest API + description: > + The Webhook Management REST API provides a standardized interface to manage webhooks within Asgardeo. Webhooks allow external systems to receive real-time notifications for various events, such as login successes or failures, enabling seamless integration and automation across external applications and services. + This API empowers developers and administrators to create, update, delete, and retrieve webhook configurations tailored to their specific business needs and event-driven workflows. +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' +security: + - OAuth2: [] + +paths: + /webhooks: + get: + summary: List Webhooks + description: "This API returns the detailed summary of the webhooks.\n\n Scope(Permission) required: `internal_webhook_view` \n\n" + operationId: getWebhooks + tags: + - Webhooks + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookList' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/webhooks' -H 'Authorization: Bearer {bearer_token}' + + post: + summary: Add Webhook + description: "Create a new webhook. \n\n Scope(Permission) required: `internal_webhook_create` \n\n" + operationId: createWebhook + tags: + - Webhooks + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookRequest' + responses: + '201': + description: Webhook Created + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request POST 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/webhooks' \ + -H 'Authorization: Bearer {bearer_token}' \ + -H 'Content-Type: application/json' \ + -d '{ + "endpoint": "https://example.com/webhook", + "name": "Login Webhook", + "secret": "my-secret", + "channelsSubscribed": ["https://schemas.identity.wso2.org/events/login", "https://schemas.identity.wso2.org/events/registration"], + "eventProfile": { + "name": "WSO2", + "uri": "https://schemas.identity.wso2.org/events" + }, + "status": "ACTIVE" + }' + + /webhooks/{webhookId}: + get: + summary: Retrieve Webhook by ID + description: "This API returns the webhook details along with the webhook unique ID. \n\n Scope(Permission) required: `internal_webhook_view` \n\n" + operationId: getWebhookByWebhookId + tags: + - Webhooks + parameters: + - name: webhookId + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Webhook not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/webhooks/{webhookId}' -H 'Authorization: Bearer {bearer_token}' + + delete: + summary: Delete Webhook + description: "This API deletes a webhook using the webhook unique ID. \n\n Scope(Permission) required: `internal_webhook_delete` \n\n" + operationId: deleteWebhook + tags: + - Webhooks + parameters: + - name: webhookId + in: path + required: true + schema: + type: string + responses: + '204': + description: Webhook Deleted + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Webhook not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request DELETE 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/webhooks/{webhookId}' -H 'Authorization: Bearer {bearer_token}' + + + /webhooks/{webhookId}/activate: + post: + summary: Activate Webhook + description: "Activate a webhook by its unique ID.\n\n Scope(Permission) required: `internal_webhook_update` \n\n" + operationId: activateWebhook + tags: + - Webhooks + parameters: + - name: webhookId + in: path + required: true + schema: + type: string + responses: + '200': + description: Webhook Activated + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Webhook not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request POST 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/webhooks/{webhookId}/activate' \ + -H 'Authorization: Bearer {bearer_token}' + + /webhooks/{webhookId}/deactivate: + post: + summary: Deactivate Webhook + description: "Deactivate a webhook by its unique ID.\n\n Scope(Permission) required: `internal_webhook_update` \n\n" + operationId: deactivateWebhook + tags: + - Webhooks + parameters: + - name: webhookId + in: path + required: true + schema: + type: string + responses: + '200': + description: Webhook Deactivated + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Webhook not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request POST 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/webhooks/{webhookId}/deactivate' \ + -H 'Authorization: Bearer {bearer_token}' + + /webhooks/{webhookId}/retry: + post: + summary: Retry Webhook Subscription or Unsubscription + description: "Retry a webhook subscription or unsubscription by its unique ID.\n\n Scope(Permission) required: `internal_webhook_update` \n\n" + operationId: retryWebhook + tags: + - Webhooks + parameters: + - name: webhookId + in: path + required: true + schema: + type: string + responses: + '200': + description: Webhook Retried + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Webhook not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location --request POST 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/webhooks/{webhookId}/retry' \ + -H 'Authorization: Bearer {bearer_token}' + +components: + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + scopes: + internal_webhook_view: View webhooks + internal_webhook_create: Create webhooks + internal_webhook_update: Update webhooks + internal_webhook_delete: Delete webhooks + + schemas: + WebhookRequest: + type: object + required: + - endpoint + - eventProfile + - name + - channelsSubscribed + properties: + endpoint: + type: string + description: Webhook URL. + example: https://example.com/webhook + eventProfile: + type: object + required: + - name + - uri + properties: + name: + type: string + description: Webhook Event Profile. + example: WSO2 + uri: + type: string + description: Webhook Event Profile URI. + example: https://schemas.identity.wso2.org/events + name: + type: string + description: Webhook name. + example: Login Webhook. + secret: + type: string + description: Secret for validating webhook payloads. + example: my-secret + channelsSubscribed: + type: array + items: + type: string + description: List of channels to subscribe to. + example: ["https://schemas.identity.wso2.org/events/login", "https://schemas.identity.wso2.org/events/registration"] + status: + type: string + enum: + - ACTIVE + - INACTIVE + description: Webhook Status. + example: "ACTIVE" + + WebhookSubscription: + type: object + properties: + channelUri: + type: string + description: Channel URI to subscribe to. + example: https://schemas.identity.wso2.org/events/login + status: + type: string + enum: + - SUBSCRIPTION_ACCEPTED + - SUBSCRIPTION_PENDING + - SUBSCRIPTION_ERROR + - UNSUBSCRIPTION_ACCEPTED + - UNSUBSCRIPTION_PENDING + - UNSUBSCRIPTION_ERROR + description: Status of the subscription. + example: SUBSCRIPTION_PENDING + + WebhookResponse: + type: object + properties: + id: + type: string + example: 'eeb8c1a2-3f4d-4e5b-8c6f-7d8e9f0a1b2c' + createdAt: + type: string + example: '2024-05-01T12:00:00Z' + updatedAt: + type: string + example: '2024-05-02T12:00:00Z' + endpoint: + type: string + description: Webhook URL. + example: https://example.com/webhook + eventProfile: + type: object + required: + - name + - uri + properties: + name: + type: string + description: Webhook Event Profile. + example: WSO2 + uri: + type: string + description: Webhook Event Profile URI. + example: https://schemas.identity.wso2.org/events + name: + type: string + description: Webhook name. + example: Login webhook. + channelsSubscribed: + type: array + description: List of channel subscriptions with status. + items: + $ref: '#/components/schemas/WebhookSubscription' + example: + - channelUri: https://schemas.identity.wso2.org/events/login + status: SUBSCRIPTION_ACCEPTED + - channelUri: https://schemas.identity.wso2.org/events/registration + status: SUBSCRIPTION_ERROR + status: + type: string + enum: + - ACTIVE + - PARTIALLY_ACTIVE + - INACTIVE + - PARTIALLY_INACTIVE + description: Webhook Status. + example: "ACTIVE" + + WebhookSummary: + type: object + properties: + id: + type: string + example: 'eeb8c1a2-3f4d-4e5b-8c6f-7d8e9f0a1b2c' + createdAt: + type: string + example: '2024-05-01T12:00:00Z' + updatedAt: + type: string + example: '2024-05-02T12:00:00Z' + endpoint: + type: string + description: Webhook URL. + example: https://example.com/webhook + name: + type: string + description: Webhook name. + example: Login webhook. + status: + type: string + enum: + - ACTIVE + - PARTIALLY_ACTIVE + - INACTIVE + - PARTIALLY_INACTIVE + description: Webhook Status. + example: "ACTIVE" + self: + type: string + example: /t/{organization_name}/api/server/v1/webhooks/123e4567-e89b-12d3-a456-556642440000 + + WebhookList: + type: object + properties: + webhooks: + type: array + items: + $ref: '#/components/schemas/WebhookSummary' + + Error: + type: object + properties: + code: + type: string + example: WEBHOOK-00001 + message: + type: string + example: Some error message. + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 diff --git a/docusaurus-asgardeo/static/apis/restapis/webhook-metadata.yaml b/docusaurus-asgardeo/static/apis/restapis/webhook-metadata.yaml new file mode 100644 index 0000000000..e9776721fc --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/webhook-metadata.yaml @@ -0,0 +1,188 @@ +openapi: 3.0.0 +info: + version: v1 + title: Asgardeo - Webhook Metadata Rest API + description: > + The Webhook Metadata REST API provides a standardized interface to retrieve + supported event profiles and the associated events within Asgardeo. This API + enables clients to dynamically fetch available events for webhook subscription based on the + selected event profile, improving flexibility and profile-awareness in integrations. +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' +security: + - OAuth2: [] + +paths: + /webhooks/metadata: + get: + summary: List Event Profiles + description: "This API returns the list of event profiles supported by Asgardeo.\n\n Scope(Permission) required: `internal_webhook_meta_view` \n\n" + operationId: getEventProfiles + tags: + - Webhook Metadata + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookMetadata' + '401': + description: Unauthorized + '403': + description: Forbidden + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + x-codeSamples: + - lang: Curl + source: | + curl --location 'https://api.asgardeo.io/t/{organization-name}/api/server/v1/webhooks/metadata/event-profiles' -H 'Authorization: Bearer {bearer_token}' + + /webhooks/metadata/event-profiles/{profileName}: + get: + summary: Get Event Profile Details + description: > + This API retrieves detailed information about a specific event profile including its channels and events. + + Scope(Permission) required: `internal_webhook_meta_view` + operationId: getEventProfile + tags: + - Webhook Metadata + parameters: + - name: profileName + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/EventProfile' + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Profile not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + +components: + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + scopes: + internal_webhook_view: View webhook metadata + + schemas: + Event: + type: object + properties: + eventName: + type: string + example: loginSuccess + eventDescription: + type: string + example: Triggered when a user logs in successfully. + eventUri: + type: string + example: https://schemas.identity.wso2.org/events/logins/loginSuccess + + Channel: + type: object + properties: + name: + type: string + example: analytics + description: + type: string + example: Events related to user behavior analytics. + uri: + type: string + example: https://schemas.identity.wso2.org/channels/analytics + events: + type: array + items: + $ref: '#/components/schemas/Event' + + EventProfile: + type: object + properties: + profile: + type: string + example: WSO2 + uri: + type: string + example: "https://schemas.identity.wso2.org" + channels: + type: array + items: + $ref: '#/components/schemas/Channel' + + WebhookMetadata: + type: object + properties: + profiles: + type: array + items: + $ref: '#/components/schemas/EventProfileMetadata' + adapter: + type: object + properties: + name: + type: string + example: "httppublisher" + type: + type: string + example: "Publisher" + + EventProfileMetadata: + type: object + properties: + name: + type: string + example: "WSO2" + uri: + type: string + example: "https://schemas.identity.wso2.org" + self: + type: string + example: /t/{organization_name}/api/server/v1/webhooks/metadata/event-profiles/WSO2 + + Error: + type: object + properties: + code: + type: string + example: WEBHOOK-METADATA-00001 + message: + type: string + example: Some error message. + description: + type: string + example: Some error description. + traceId: + type: string + example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047 diff --git a/docusaurus-asgardeo/static/apis/restapis/workflow.yaml b/docusaurus-asgardeo/static/apis/restapis/workflow.yaml new file mode 100644 index 0000000000..3d9ee3332c --- /dev/null +++ b/docusaurus-asgardeo/static/apis/restapis/workflow.yaml @@ -0,0 +1,1255 @@ +openapi: 3.0.0 +info: + description: > + This is the RESTful API for managing workflows in Asgardeo. + version: v1 + title: Asgardeo - Workflow Management Rest API +servers: + - url: 'https://api.asgardeo.io/t/{organization-name}/api/server/v1' +security: + - OAuth2: [] + +paths: + /workflows: + get: + tags: + - Workflow Management + summary: Retrieve all the available workflows. + description: | + Retrieve all the available workflows in the system. + + Scope required: ``internal_workflow_view`` + + operationId: getWorkflows + parameters: + - $ref: "#/components/parameters/limitQueryParam" + - $ref: "#/components/parameters/offsetQueryParam" + - $ref: "#/components/parameters/filterQueryParam" + responses: + "200": + description: Successful response + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowListResponse" + example: + totalResults: 10 + startIndex: 1 + count: 10 + workflows: + - id: "100" + name: User Approval Workflow + description: Approves requests for user related tasks + engine: Simple Workflow Engine + template: MultiStepApprovalTemplate + - id: "101" + name: User Role Approval Workflow + description: Approves requests for user role related tasks + engine: Simple Workflow Engine + template: MultiStepApprovalTemplate + - id: "102" + name: User Claim Approval Workflow + description: Approves requests for user claim related tasks + engine: Simple Workflow Engine + template: SingleStepApprovalTemplate + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/ServerError" + post: + tags: + - Workflow Management + summary: Add a new workflow. + description: | + Create a new workflow using the specified workflow template and execution engine. + + Scope required: ``internal_workflow_create`` + + operationId: addWorkflow + responses: + "201": + description: Successful response + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowResponse" + example: + id: "100" + name: User Approval Workflow + description: Workflow to approve user role related requests + engine: Simple Workflow Engine + notificationsForInitiator: + channels: ["email", "sms"] + events: ["onApproval", "onRejection"] + template: + name: MultiStepApprovalTemplate + notificationsForApprovers: + channels: ["email", "sms"] + events: ["onAssignment", "onRelease"] + steps: + - step: 1 + options: + - entity: roles + values: + - 123 + - 124 + - entity: users + values: + - 234 + - 235 + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "409": + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/ServerError" + requestBody: + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowRequest" + description: This represents the workflow to be created. + required: true + /workflows/{workflow-id}: + get: + tags: + - Workflow Management + summary: Retrieve the workflow by workflow id. + description: | + Retrieve information about a specific workflow identified by the workflow id. + + Scope required: ``internal_workflow_view`` + + operationId: getWorkflowById + parameters: + - $ref: "#/components/parameters/workflowIdPathParam" + responses: + "200": + description: Successful response + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowResponse" + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/ServerError" + put: + tags: + - Workflow Management + summary: Update an existing workflow. + description: | + Update a workflow identified by workflow-id. + + Scope required: ``internal_workflow_update`` + + operationId: updateWorkflow + parameters: + - $ref: "#/components/parameters/workflowIdPathParam" + responses: + "200": + description: Successful response + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowResponse" + example: + id: "100" + name: User Approval Workflow + description: Workflow to approve user role related requests + engine: Simple Workflow Engine + notificationsForInitiator: + channels: ["email", "sms"] + events: ["onApproval", "onRejection"] + template: + name: MultiStepApprovalTemplate + notificationsForApprovers: + channels: ["email", "sms"] + events: ["onAssignment", "onRelease"] + steps: + - step: 1 + options: + - entity: roles + values: + - 123 + - entity: users + values: + - 234 + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/ServerError" + requestBody: + description: Contains the details of the updated workflow. + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowRequest" + example: + id: "100" + name: User Approval Workflow + description: Workflow to approve user role related requests + engine: Simple Workflow Engine + notificationsForInitiator: + channels: ["email", "sms"] + events: ["onApproval", "onRejection"] + template: + name: MultiStepApprovalTemplate + notificationsForApprovers: + channels: ["email", "sms"] + events: ["onAssignment", "onRelease"] + steps: + - step: 1 + options: + - entity: roles + values: + - 123 + - entity: users + values: + - 234 + delete: + tags: + - Workflow Management + summary: Delete the workflow by workflow-id. + description: | + Delete a specific workflow identified by the workflow-id + + Scope required: ``internal_workflow_delete`` + + operationId: deleteWorkflowById + parameters: + - $ref: "#/components/parameters/workflowIdPathParam" + responses: + "204": + $ref: "#/components/responses/Deleted" + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/ServerError" + /workflow-associations: + get: + tags: + - Workflow Associations Management + summary: Retrieve all the available workflow associations. + description: | + Retrieve all the available workflow associations in the system. + + Scope required: ``internal_workflow_association_view`` + + operationId: getWorkflowAssociations + parameters: + - $ref: "#/components/parameters/limitQueryParam" + - $ref: "#/components/parameters/offsetQueryParam" + - $ref: "#/components/parameters/filterQueryParam" + responses: + "200": + description: Successful Response + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowAssociationListResponse" + example: + totalResults: 10 + startIndex: 1 + count: 10 + workflowAssociations: + - id: "500" + associationName: User Registration Workflow Association + operation: ADD_USER + workflowName: User Approval Workflow + isEnabled: true + - id: "501" + associationName: Role Update Workflow Association + operation: UPDATE_ROLE + workflowName: User Role Approval Workflow + isEnabled: true + - id: "502" + associationName: User Deletion Workflow Association + operation: DELETE_USER + workflowName: User Approval Workflow + isEnabled: false + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/ServerError" + post: + tags: + - Workflow Associations Management + summary: Create a new workflow association. + description: | + Create a new workflow association by assigning a user operation to an existing workflow. + + Scope required: ``internal_workflow_association_create`` + + operationId: addWorkflowAssociation + responses: + "201": + description: Item Created + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowAssociationResponse" + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "409": + $ref: "#/components/responses/Conflict" + "500": + $ref: "#/components/responses/ServerError" + requestBody: + description: Contains the details of the newly created workflow association. + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowAssociationRequest" + required: true + /workflow-associations/{association-id}: + get: + tags: + - Workflow Associations Management + summary: Get the workflow association by association-id. + description: | + Get a specific workflow association identified by the association id. + + Scope required: ``internal_workflow_association_view`` + + operationId: getWorkflowAssociationById + parameters: + - $ref: "#/components/parameters/associationIdPathParam" + responses: + "200": + description: Array of workflow associations matching the search criteria + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowAssociationResponse" + example: + id: "500" + associationName: User Registration Workflow Association + operation: ADD_USER + workflowName: User Approval Workflow + isEnabled: true + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/ServerError" + delete: + tags: + - Workflow Associations Management + summary: Delete the workflow association by association-id. + description: | + Delete a specific workflow association identified by the association ID. + + Scope required: ``internal_workflow_association_view`` + + operationId: deleteWorkflowAssociationById + parameters: + - $ref: "#/components/parameters/associationIdPathParam" + responses: + "204": + $ref: "#/components/responses/Deleted" + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/ServerError" + patch: + tags: + - Workflow Associations Management + summary: | + Partially update association by association-id. + operationId: updateAssociation + description: | + Partially update an association by association-id.
    + + Scope required: ``internal_workflow_association_update`` + + parameters: + - $ref: "#/components/parameters/associationIdPathParam" + requestBody: + description: Represents the association details to be updated. + content: + application/json: + schema: + $ref: "#/components/schemas/WorkflowAssociationPatchRequest" + example: + associationName: User Registration Workflow Association + operation: ADD_USER + workflowId: "100" + isEnabled: true + responses: + "200": + description: Successfully Updated + content: + "application/json": + schema: + $ref: "#/components/schemas/WorkflowAssociationResponse" + example: + id: "500" + associationName: User Registration Workflow Association + operation: ADD_USER + workflowName: User Approval Workflow + isEnabled: true + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "401": + description: "#/components/responses/Unauthorized" + "403": + description: "#/components/responses/Forbidden" + "409": + description: "#/components/responses/Conflict" + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Server Error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + + /workflow-instances: + get: + tags: + - Workflow Instances Management + summary: Get workflow instances for a tenant + description: | + Retrieve workflow instances filtered by various parameters. + + Scope required: ``internal_workflow_instance_view`` + + operationId: getWorkflowInstances + parameters: + - name: limit + in: query + schema: + type: integer + default: 25 + - name: offset + in: query + schema: + type: integer + default: 0 + - name: filter + in: query + description: | + Filter conditions using logical expressions. Supported operators: `eq`, `le`, `ge`. + + Combine multiple conditions with `and`. + + Example: + + `operationType+eq+ADD_USER+and+requestType+eq+MY_TASKS+and+status+eq+PENDING+and+createdAt+ge+2025-06-01 09:57:47.000+and+createdAt+le+2025-07-31 09:57:47.000` + schema: + type: string + responses: + "200": + description: Workflow instances retrieved successfully + content: + application/json: + schema: + $ref: "#/components/schemas/WorkflowInstanceListResponse" + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/ServerError" + + /workflow-instances/{instance_id}: + get: + tags: + - Workflow Instances Management + summary: Get workflow instance by ID + description: | + Retrieve a specific workflow instance by providing its unique ID. + + Scope required: ``internal_workflow_instance_view`` + + operationId: getWorkflowInstanceById + parameters: + - name: instance_id + in: path + required: true + schema: + type: string + responses: + "200": + description: Workflow instance retrieved successfully + content: + application/json: + schema: + $ref: "#/components/schemas/WorkflowInstanceResponse" + "404": + $ref: "#/components/responses/NotFound" + + delete: + tags: + - Workflow Instances Management + summary: Delete workflow instance by ID + description: | + Delete a workflow instance by providing the instance ID. + + Scope required: ``internal_workflow_instance_delete`` + + operationId: deleteWorkflowInstance + parameters: + - name: instance_id + in: path + required: true + schema: + type: string + responses: + "204": + description: Successfully deleted the workflow instance + "404": + $ref: "#/components/responses/NotFound" + + /workflow-instances/{instance_id}/abort: + post: + tags: + - Workflow Instances Management + summary: Abort a workflow instance by ID + description: | + Abort a workflow instance by providing the instance ID. + + Scope required: ``internal_workflow_instance_update`` + + operationId: abortWorkflowInstance + parameters: + - name: instance_id + in: path + required: true + schema: + type: string + responses: + "200": + description: Successfully aborted the workflow instance + content: + application/json: + schema: + $ref: "#/components/schemas/InstanceStatus" + "400": + $ref: "#/components/responses/InvalidInput" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/ServerError" + + + /workflow-engines: + get: + tags: + - Workflow Engines + summary: Retrieve all the available workflow engines. + description: | + Retrieve metadata information of all the workflow engines in the system. + + operationId: searchWorkFlowEngines + responses: + "200": + description: search results matching criteria + content: + "application/json": + schema: + type: array + items: + $ref: "#/components/schemas/WorkflowEngine" + "400": + $ref: "#/components/responses/InvalidInput" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/ServerError" + +components: + schemas: + WorkflowEngine: + type: object + required: + - profileName + properties: + profileName: + type: string + example: embedded_bps + description: A unique name for the workflow engine. + workerHostURL: + type: string + example: https://localhost:9443/services + description: URL of the workflow worker node. + managerHostURL: + type: string + example: https://localhost:9443/services + description: URL of the workflow manager node. + userName: + type: string + example: challengeQuestion1 + description: Username of the creator of the workflow engine. + + WorkflowListResponse: + type: object + properties: + totalResults: + type: integer + example: 10 + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + workflows: + type: array + items: + $ref: "#/components/schemas/WorkflowListItem" + + WorkflowListItem: + type: object + properties: + id: + type: string + example: "100" + description: "Unique id to represent a workflow" + name: + type: string + example: "User Role Approval" + description: "Display name of the workflow" + description: + type: string + example: "Workflow to approve user role related requests" + description: "Detailed description of the workflow" + engine: + type: string + example: "Simple Workflow Engine" + description: "Category in which the workflow is deployed" + template: + type: string + example: "MultiStepApprovalTemplate" + description: "Template defining the approval process for the workflow" + + WorkflowResponse: + type: object + properties: + id: + type: string + example: "100" + description: "Id of the workflow" + name: + type: string + example: "User Approval Workflow" + description: "Name of the created workflow" + description: + type: string + example: "Workflow to approve user role related requests" + description: "Description of the created workflow" + engine: + type: string + example: "Simple Workflow Engine" + description: "Name of the selected workflow engine" + notificationsForInitiator: + $ref: "#/components/schemas/InitiatorNotifications" + template: + $ref: "#/components/schemas/WorkflowTemplateBase" + + WorkflowRequest: + type: object + required: + - name + - engine + properties: + name: + type: string + example: "User Approval Workflow" + description: "Name of the created workflow" + description: + type: string + example: "Workflow to approve user role related requests" + description: "Description of the created workflow" + engine: + type: string + example: "Simple Workflow Engine" + description: "Name of the selected workflow engine" + notificationsForInitiator: + $ref: "#/components/schemas/InitiatorNotifications" + template: + type: object + allOf: + - $ref: "#/components/schemas/WorkflowTemplate" + required: [name] + + WorkflowTemplate: + type: object + properties: + name: + type: string + example: "MultiStepApprovalTemplate" + description: "Name of the workflow template" + notificationsForApprovers: + $ref: "#/components/schemas/ApproverNotifications" + steps: + type: array + minItems: 1 + items: + type: object + allOf: + - $ref: "#/components/schemas/WorkflowTemplateParameters" + required: [step] + + WorkflowTemplateParameters: + type: object + properties: + step: + type: integer + example: 1 + options: + type: array + minItems: 1 + items: + type: object + allOf: + - $ref: "#/components/schemas/OptionDetails" + required: [entity, values] + example: + [ + { "entity": "roles", "values": ["301", "302"] }, + { "entity": "users", "values": ["501", "502"] }, + ] + + WorkflowTemplateBase: + type: object + properties: + name: + type: string + example: "MultiStepApproval" + description: "Name of the workflow template" + notificationsForApprovers: + $ref: "#/components/schemas/ApproverNotifications" + steps: + type: array + minItems: 1 + items: + $ref: "#/components/schemas/WorkflowTemplateParametersBase" + + WorkflowTemplateParametersBase: + type: object + properties: + step: + type: integer + example: 1 + options: + type: array + minItems: 1 + items: + $ref: "#/components/schemas/OptionDetails" + example: + [ + { "entity": "roles", "values": ["900", "901"] }, + { "entity": "users", "values": ["300", "301"] }, + ] + + OptionDetails: + type: object + properties: + entity: + type: string + example: "roles" + values: + type: array + items: + type: string + example: "123" + description: "Identifier of the selected entity" + + InitiatorNotifications: + type: object + properties: + channels: + type: array + items: + type: string + example: ["email", "sms"] + description: "Notification channels to be used for initiator (e.g., email, sms)" + events: + type: array + items: + type: string + example: ["onApproval", "onRejection"] + description: "Events that trigger notifications for initiator (e.g., onApproval, onRejection)" + + ApproverNotifications: + type: object + properties: + channels: + type: array + items: + type: string + example: ["email", "sms"] + description: "Notification channels to be used for approvers (e.g., email, sms)" + events: + type: array + items: + type: string + example: ["onAssignment", "onRelease"] + description: "Events that trigger notifications for approvers (e.g., onAssignment, onRelease)" + + WorkflowAssociationListResponse: + type: object + properties: + totalResults: + type: integer + example: 10 + startIndex: + type: integer + example: 1 + count: + type: integer + example: 10 + workflowAssociations: + type: array + items: + $ref: "#/components/schemas/WorkflowAssociationListItem" + + WorkflowAssociationListItem: + type: object + properties: + id: + type: string + example: "500" + description: "Unique id to represent a workflow association" + associationName: + type: string + example: "User Registration Workflow Association" + description: "Name of the workflow association" + operation: + $ref: "#/components/schemas/Operation" + workflowName: + type: string + example: "User Approval Workflow" + description: "Assigned Workflow" + isEnabled: + type: boolean + example: true + description: "Association Status" + rule: + $ref: "#/components/schemas/ORRuleResponse" + + WorkflowAssociationResponse: + type: object + properties: + id: + type: string + example: "500" + description: "Unique id to represent a workflow association" + associationName: + type: string + example: "User Registration Workflow Association" + description: "Name of the workflow association" + operation: + $ref: "#/components/schemas/Operation" + workflowName: + type: string + example: "User Approval Workflow" + description: "Assigned Workflow" + isEnabled: + type: boolean + example: true + description: "Association Status" + rule: + $ref: "#/components/schemas/ORRuleResponse" + + WorkflowAssociationRequest: + type: object + required: + - associationName + - operation + - workflowId + properties: + associationName: + type: string + example: "User Registration Workflow Association" + description: "Name of the workflow association" + operation: + $ref: "#/components/schemas/Operation" + workflowId: + type: string + example: "100" + description: "Id of the assigned workflow" + isEnabled: + type: boolean + example: true + description: "Association Status" + default: true + rule: + $ref: "#/components/schemas/ORRule" + + WorkflowAssociationPatchRequest: + type: object + properties: + associationName: + type: string + example: "User Registration Workflow Association" + description: "Name of the workflow association" + operation: + $ref: "#/components/schemas/Operation" + workflowId: + type: string + example: "100" + description: "Id of the assigned workflow" + isEnabled: + type: boolean + example: true + description: "Association Status" + rule: + $ref: "#/components/schemas/ORRule" + + WorkflowInstanceListResponse: + type: object + properties: + totalResults: + type: integer + example: 10 + startIndex: + type: integer + example: 3 + count: + type: integer + example: 10 + instances: + type: array + items: + $ref: "#/components/schemas/WorkflowInstanceListItem" + + WorkflowInstanceListItem: + type: object + properties: + workflowInstanceId: + type: string + example: "500" + description: "Unique id to represent a workflow instance" + eventType: + $ref: "#/components/schemas/Operation" + requestInitiator: + type: string + createdAt: + type: string + updatedAt: + type: string + status: + $ref: "#/components/schemas/InstanceStatus" + + WorkflowInstanceResponse: + type: object + properties: + workflowInstanceId: + type: string + example: "500" + description: "Unique id to represent a workflow instance" + eventType: + $ref: "#/components/schemas/Operation" + createdAt: + type: string + requestInitiator: + type: string + updatedAt: + type: string + status: + $ref: "#/components/schemas/InstanceStatus" + requestParameters: + type: object + properties: + type: array + items: + $ref: "#/components/schemas/Property" + + Property: + type: object + required: + - key + - value + properties: + key: + type: string + example: "some_key" + value: + type: string + example: "some_value" + + InstanceStatus: + type: string + enum: [ALL_TASKS, PENDING, APPROVED, REJECTED, FAILED, DELETED, ABORTED] + + Operation: + type: string + enum: + - ADD_USER + - SELF_REGISTER_USER + - DELETE_USER + - UPDATE_ROLES_OF_USERS + - ADD_ROLE + - DELETE_ROLE + - UPDATE_ROLE_NAME + - UPDATE_USERS_OF_ROLES + - DELETE_USER_CLAIMS + - UPDATE_USER_CLAIMS + description: "Name of the user operation" + + Error: + required: + - code + - message + type: object + properties: + code: + type: string + example: some_error_code + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: Some Trace ID + ORRule: + type: object + description: Represents a rule configuration that combines multiple sub-rules with an OR condition. + If any of the sub-rules evaluate to true, the ORRule is considered satisfied. + properties: + condition: + type: string + description: The logical condition for combining the sub-rules. For ORRule, the value + must always be "OR". + enum: ["OR"] + rules: + type: array + items: + $ref: '#/components/schemas/ANDRule' + minItems: 1 + + ORRuleResponse: + type: object + description: Rule configured for the action. + properties: + condition: + type: string + enum: [ "OR" ] + rules: + type: array + items: + $ref: '#/components/schemas/ANDRuleResponse' + description: A list of sub-rules that are combined using the OR condition. Each sub-rule is an ANDRule. + minItems: 1 + + ANDRule: + type: object + description: A sub-rule that combines expression with AND condition. + required: + - condition + - expressions + properties: + condition: + type: string + enum: ["AND"] + description: The logical condition for combining the expressions. For ANDRule, the value must always be "AND". + expressions: + type: array + items: + $ref: '#/components/schemas/Expression' + minItems: 1 + description: A list of expressions that are combined using the AND condition. All expressions must evaluate to true for the ANDRule to pass. + + ANDRuleResponse: + type: object + description: Represents a rule configuration that combines multiple expressions with an AND condition. All expressions in the ANDRule must evaluate to true for the rule to be satisfied. + properties: + condition: + type: string + enum: [ "AND" ] + description: The logical condition for combining the expressions. For ANDRule, the value must always be "AND". + expressions: + type: array + items: + $ref: '#/components/schemas/ExpressionResponse' + minItems: 1 + description: A list of expressions that are combined using the AND condition. All expressions must evaluate to true for the ANDRule to pass. + + Expression: + type: object + description: Represents a single logical condition or comparison within a rule. An expression defines a field, and operator, and a value that is evaluated. + required: + - field + - operator + - value + properties: + field: + type: string + description: The field or attribute of the entity being evaluated (e.g.,application, role). + example: application + operator: + type: string + description: The comparison operator used to evaluate the field and value. Common operators include "equals", "contains", "startsWith", etc. + example: equals + value: + type: string + description: The value that the field is compared against based on the operator. + example: FinanceApp + + ExpressionResponse: + type: object + description: Expressions in the rule. + properties: + field: + type: string + example: application + operator: + type: string + example: equals + value: + type: string + example: myapp + + responses: + NotFound: + description: The specified resource is not found + content: + "application/json": + schema: + $ref: "#/components/schemas/Error" + Unauthorized: + description: Unauthorized + Forbidden: + description: Forbidden + ServerError: + description: Internal Server Error + content: + "application/json": + schema: + $ref: "#/components/schemas/Error" + InvalidInput: + description: Invalid input request + content: + "application/json": + schema: + $ref: "#/components/schemas/Error" + Conflict: + description: Item Already Exists + content: + "application/json": + schema: + $ref: "#/components/schemas/Error" + Deleted: + description: Item Deleted + Updated: + description: Item Updated + parameters: + workflowIdPathParam: + name: workflow-id + in: path + description: Workflow ID + required: true + schema: + type: string + associationIdPathParam: + name: association-id + in: path + description: Workflow Association ID + required: true + schema: + type: string + offsetQueryParam: + name: offset + in: query + description: Number of records to skip for pagination + schema: + type: integer + format: int32 + limitQueryParam: + name: limit + in: query + description: Maximum number of records to return + schema: + type: integer + format: int32 + filterQueryParam: + name: filter + in: query + description: Records, filtered by their name + schema: + type: string + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/authorize' + tokenUrl: 'https://api.asgardeo.io/t/{org-name}/oauth2/token' + scopes: + read: internal_workflow_view + write: internal_workflow_create + update: internal_workflow_update + delete: internal_workflow_delete \ No newline at end of file diff --git a/docusaurus-asgardeo/static/assets b/docusaurus-asgardeo/static/assets new file mode 120000 index 0000000000..a4d19f3b45 --- /dev/null +++ b/docusaurus-asgardeo/static/assets @@ -0,0 +1 @@ +../../en/asgardeo/docs/assets \ No newline at end of file