diff --git a/.gitignore b/.gitignore
index b402cf0e..a6448f02 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@ node
.factorypath
.project
.settings/
+.playwright-mcp/
\ No newline at end of file
diff --git a/README.md b/README.md
index 88fe993b..4e877762 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,32 @@ In addition to providing support for Identity Providers using OIDC and SAML, the

+## Repository structure
+
+This is a pnpm workspace monorepo. The frontend apps live under `apps/`, the Java Keycloak SPI extension lives under `ext/`, and the Maven build at the root packages everything into a deployable JAR.
+
+```
+idp-wizard/
+├── apps/
+│ ├── wizard-v1/ # Original PatternFly + webpack app (current production build)
+│ └── wizard-v2/ # New Vite + Tailwind + shadcn + TanStack Router app (in development)
+│ ├── docker/ # Dev Keycloak setup with pre-configured realm and client
+│ ├── public/ # Static assets (favicons, logos, provider images, wizard screenshots)
+│ ├── src/ # Application source
+│ └── wizards/ # Declarative JSON wizard definitions
+├── ext/ # Java Keycloak SPI extension
+├── pom.xml # Maven build — packages the active frontend into a Keycloak JAR
+└── pnpm-workspace.yaml
+```
+
+### wizard-v1
+
+The original implementation. Each identity provider has its own set of per-step React components built on PatternFly 4. This is the currently deployed version.
+
+### wizard-v2
+
+A rewrite in progress. Wizards are defined declaratively as JSON files (see `apps/wizard-v2/wizards/`) and rendered by a generic runtime engine, eliminating the need for per-provider component trees. Built with Vite, Tailwind CSS, shadcn/ui, TanStack Router, and oidc-spa for authentication. See [apps/wizard-v2/README.md](apps/wizard-v2/README.md) for full details.
+
## Quick start
The easiest way to get started is our [Docker image](https://quay.io/repository/phasetwo/phasetwo-keycloak?tab=info). Documentation and examples for using it are in the [phasetwo-containers](https://github.com/p2-inc/phasetwo-containers) repo. The most recent version of this extension is included.
@@ -34,7 +60,9 @@ There are some reasonable defaults used for the configuration, but the behavior
## Building and installing
-This uses the `frontend-maven-plugin` to build UI code and then packages it as a jar file that can be installed as an extension in Keycloak. Checkout this project and run `mvn package`, which will produce a jar in the `target/` directory. Place the jar in the `providers` dir of your Keycloak distribution.
+This uses the `frontend-maven-plugin` to build the active frontend app and packages it as a JAR that can be installed as a Keycloak extension. Run `mvn package` from the repo root, which produces a JAR in `target/`. Place it in the `providers/` directory of your Keycloak distribution.
+
+The `pom.xml` `workingDirectory` controls which app is built. It currently points at `apps/wizard-v1`. When wizard-v2 is ready for production this will be updated to `apps/wizard-v2`.
### Dependencies
@@ -78,47 +106,44 @@ Note: By submitting any code, documentation, or other materials submitted to thi
### Working with the code
-Run the latest version of the Phase Two enhanced Keycloak distribution:
+#### wizard-v1 (current)
+
+Run the Phase Two Keycloak distribution, create a realm, and in the `idp-wizard` client configuration update the redirect URI to `http://localhost:9090/*` and add `http://localhost:9090` to Web Origins. Download the client's `keycloak.json` and place it in `apps/wizard-v1/src/keycloak.json`.
+
+Using the wizard at a different relative path than `/auth`? Update the following:
+
+- `RELATIVE_PATH` within [routes.tsx](./apps/wizard-v1/src/app/routes.tsx)
+- `wizard.ftl` ([login](./ext/main/resources/theme/wizard/login/wizard.ftl), [templates](./ext/main/resources/theme-resources/templates/wizard.ftl)) ` stats.json",
+ "clean": "rimraf dist"
+ },
+ "dependencies": {
+ "@keycloak/keycloak-admin-client": "26.5.7",
+ "@patternfly/patternfly": "^4.224.5",
+ "@patternfly/react-core": "^4.278.1",
+ "@patternfly/react-icons": "^4.93.7",
+ "@patternfly/react-styles": "^4.92.8",
+ "@patternfly/react-table": "^4.113.7",
+ "@react-keycloak/web": "^3.4.0",
+ "@reduxjs/toolkit": "^1.9.7",
+ "axios": "^1.14.0",
+ "classnames": "^2.5.1",
+ "formik": "^2.4.9",
+ "keycloak-js": "^25.0.6",
+ "lodash": "^4.17.23",
+ "nanoid": "^3.3.11",
+ "nanoid-dictionary": "^4.3.0",
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2",
+ "react-hot-toast": "^2.6.0",
+ "react-redux": "^7.2.9",
+ "react-router-dom": "^6.30.3",
+ "react-use": "^17.6.0",
+ "redux-persist": "^6.0.0",
+ "sirv-cli": "^1.0.14",
+ "yup": "^0.32.11"
+ },
+ "devDependencies": {
+ "@types/enzyme": "^3.10.19",
+ "@types/jest": "^30.0.0",
+ "@types/victory": "^33.1.5",
+ "@typescript-eslint/eslint-plugin": "^4.33.0",
+ "@typescript-eslint/parser": "^4.33.0",
+ "@wojtekmaj/enzyme-adapter-react-17": "^0.6.7",
+ "astroturf": "^1.2.0",
+ "autoprefixer": "^10.4.27",
+ "copy-webpack-plugin": "^9.1.0",
+ "css-loader": "^5.2.7",
+ "css-minimizer-webpack-plugin": "^3.4.1",
+ "dotenv-webpack": "^7.1.1",
+ "enzyme": "^3.11.0",
+ "enzyme-adapter-react-16": "^1.15.8",
+ "enzyme-to-json": "^3.6.2",
+ "eslint": "^7.32.0",
+ "eslint-plugin-react": "^7.37.5",
+ "eslint-plugin-react-hooks": "^4.6.2",
+ "file-loader": "^6.2.0",
+ "html-webpack-plugin": "^5.6.6",
+ "imagemin": "^8.0.1",
+ "jest": "^30.3.0",
+ "jest-environment-jsdom": "^30.3.0",
+ "mini-css-extract-plugin": "^1.6.2",
+ "postcss": "^8.5.8",
+ "postcss-loader": "^6.2.1",
+ "postcss-nested": "^7.0.2",
+ "prettier": "^2.8.8",
+ "prop-types": "^15.8.1",
+ "raw-loader": "^4.0.2",
+ "react-axe": "^3.5.4",
+ "react-docgen-typescript-loader": "^3.7.2",
+ "regenerator-runtime": "^0.13.11",
+ "rimraf": "^3.0.2",
+ "style-loader": "^2.0.0",
+ "svg-url-loader": "^7.1.1",
+ "terser-webpack-plugin": "^5.4.0",
+ "ts-jest": "^29.4.9",
+ "ts-loader": "^9.5.4",
+ "tsconfig-paths-webpack-plugin": "^3.5.2",
+ "tslib": "^2.8.1",
+ "typescript": "^4.9.5",
+ "url-loader": "^4.1.1",
+ "webpack": "^5.105.4",
+ "webpack-bundle-analyzer": "^4.10.2",
+ "webpack-cli": "^6.0.1",
+ "webpack-dev-server": "^5.2.3",
+ "webpack-merge": "^5.10.0"
+ }
+}
diff --git a/postcss.config.js b/apps/wizard-v1/postcss.config.js
similarity index 100%
rename from postcss.config.js
rename to apps/wizard-v1/postcss.config.js
diff --git a/src/app/AppLayout/AppLayout.tsx b/apps/wizard-v1/src/app/AppLayout/AppLayout.tsx
similarity index 100%
rename from src/app/AppLayout/AppLayout.tsx
rename to apps/wizard-v1/src/app/AppLayout/AppLayout.tsx
diff --git a/src/app/NotFound/NotFound.tsx b/apps/wizard-v1/src/app/NotFound/NotFound.tsx
similarity index 100%
rename from src/app/NotFound/NotFound.tsx
rename to apps/wizard-v1/src/app/NotFound/NotFound.tsx
diff --git a/src/app/Settings/General/GeneralSettings.tsx b/apps/wizard-v1/src/app/Settings/General/GeneralSettings.tsx
similarity index 100%
rename from src/app/Settings/General/GeneralSettings.tsx
rename to apps/wizard-v1/src/app/Settings/General/GeneralSettings.tsx
diff --git a/src/app/Settings/Profile/ProfileSettings.tsx b/apps/wizard-v1/src/app/Settings/Profile/ProfileSettings.tsx
similarity index 100%
rename from src/app/Settings/Profile/ProfileSettings.tsx
rename to apps/wizard-v1/src/app/Settings/Profile/ProfileSettings.tsx
diff --git a/src/app/__snapshots__/app.test.tsx.snap b/apps/wizard-v1/src/app/__snapshots__/app.test.tsx.snap
similarity index 100%
rename from src/app/__snapshots__/app.test.tsx.snap
rename to apps/wizard-v1/src/app/__snapshots__/app.test.tsx.snap
diff --git a/src/app/components/AccessDenied/AccessDenied.tsx b/apps/wizard-v1/src/app/components/AccessDenied/AccessDenied.tsx
similarity index 100%
rename from src/app/components/AccessDenied/AccessDenied.tsx
rename to apps/wizard-v1/src/app/components/AccessDenied/AccessDenied.tsx
diff --git a/src/app/components/Dashboard/ActivityLog.tsx b/apps/wizard-v1/src/app/components/Dashboard/ActivityLog.tsx
similarity index 100%
rename from src/app/components/Dashboard/ActivityLog.tsx
rename to apps/wizard-v1/src/app/components/Dashboard/ActivityLog.tsx
diff --git a/src/app/components/Dashboard/ConnectionStatus.tsx b/apps/wizard-v1/src/app/components/Dashboard/ConnectionStatus.tsx
similarity index 100%
rename from src/app/components/Dashboard/ConnectionStatus.tsx
rename to apps/wizard-v1/src/app/components/Dashboard/ConnectionStatus.tsx
diff --git a/src/app/components/Dashboard/Dashboard.tsx b/apps/wizard-v1/src/app/components/Dashboard/Dashboard.tsx
similarity index 100%
rename from src/app/components/Dashboard/Dashboard.tsx
rename to apps/wizard-v1/src/app/components/Dashboard/Dashboard.tsx
diff --git a/src/app/components/Dashboard/DashboardSummary.tsx b/apps/wizard-v1/src/app/components/Dashboard/DashboardSummary.tsx
similarity index 100%
rename from src/app/components/Dashboard/DashboardSummary.tsx
rename to apps/wizard-v1/src/app/components/Dashboard/DashboardSummary.tsx
diff --git a/src/app/components/IdentityProviderWizard/IdentityProviderSelector/IdPProtocolSelector.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/IdentityProviderSelector/IdPProtocolSelector.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/IdentityProviderSelector/IdPProtocolSelector.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/IdentityProviderSelector/IdPProtocolSelector.tsx
diff --git a/src/app/components/IdentityProviderWizard/IdentityProviderSelector/IdentityProviderSelector.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/IdentityProviderSelector/IdentityProviderSelector.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/IdentityProviderSelector/IdentityProviderSelector.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/IdentityProviderSelector/IdentityProviderSelector.tsx
diff --git a/src/app/components/IdentityProviderWizard/IdentityProviderSelector/components/IdPButton.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/IdentityProviderSelector/components/IdPButton.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/IdentityProviderSelector/components/IdPButton.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/IdentityProviderSelector/components/IdPButton.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/ADFS/saml/steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/AWS/saml/steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/forms/client-credentials.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/forms/client-credentials.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/forms/client-credentials.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/forms/client-credentials.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/forms/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/forms/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/forms/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/forms/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/OIDC/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/shared/Steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/shared/Steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/shared/Steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/shared/Steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/shared/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/shared/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/shared/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Auth0/shared/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Cloudflare/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/CyberArk/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Duo/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/bind.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/bind.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/bind.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/bind.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/server-configuration.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/server-configuration.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/server-configuration.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/forms/server-configuration.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/LDAP/steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/client-credentials.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/client-credentials.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/client-credentials.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/client-credentials.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/config.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/config.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/config.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/config.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/forms/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/OIDC/steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/forms/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/forms/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/forms/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/forms/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/forms/metadata-config.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/forms/metadata-config.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/forms/metadata-config.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/forms/metadata-config.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/SAML/steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Generic/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/6.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/6.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/6.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/6.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/SAML/steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Google/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Google/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/JumpCloud/saml/steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/LastPass/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/MSFT_EntraID/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/bind.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/bind.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/bind.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/bind.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/groups.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/groups.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/groups.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/groups.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/server-configuration.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/server-configuration.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/server-configuration.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/forms/server-configuration.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/LDAP/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/6.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/6.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/6.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/6.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Okta/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/OneLogin/saml/steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Oracle/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/PingOne/saml/steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/2.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/2.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/2.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/2.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/forms/client-credentials.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/forms/client-credentials.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/forms/client-credentials.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/forms/client-credentials.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/forms/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/forms/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/forms/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/forms/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/OIDC/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/3.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/3.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/3.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/3.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/4.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/4.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/4.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/4.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/5.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/5.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/5.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/5.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/6.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/6.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/6.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/6.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/SAML/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/shared/Steps/ConnectedApp.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/shared/Steps/ConnectedApp.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/shared/Steps/ConnectedApp.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/shared/Steps/ConnectedApp.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/shared/Steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/shared/Steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/shared/Steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/Salesforce/shared/Steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/template/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/template/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/template/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/template/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/index.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/index.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/index.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/index.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/steps/1.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/steps/1.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/steps/1.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/steps/1.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/steps/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/steps/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/steps/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/Providers/template/protocol/steps/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/clipboard-copy.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/clipboard-copy.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/clipboard-copy.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/clipboard-copy.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/double-item-clipboard-copy.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/double-item-clipboard-copy.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/double-item-clipboard-copy.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/double-item-clipboard-copy.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/file-card.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/file-card.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/file-card.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/file-card.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/final-step-confirmation.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/final-step-confirmation.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/final-step-confirmation.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/final-step-confirmation.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/forms/file-text.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/forms/file-text.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/forms/file-text.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/forms/file-text.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/forms/file.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/forms/file.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/forms/file.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/forms/file.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/forms/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/forms/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/forms/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/forms/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/forms/url.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/forms/url.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/forms/url.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/forms/url.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/header.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/header.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/header.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/header.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/instruction.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/instruction.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/instruction.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/instruction.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/select.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/select.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/select.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/select.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/step.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/step.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/step.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/step.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/triple-item-clipboard-copy.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/triple-item-clipboard-copy.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/triple-item-clipboard-copy.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/triple-item-clipboard-copy.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/url-card.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/url-card.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/url-card.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/url-card.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/components/zoom-image.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/zoom-image.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/components/zoom-image.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/components/zoom-image.tsx
diff --git a/src/app/components/IdentityProviderWizard/Wizards/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/index.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/services/alias.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/services/alias.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/services/alias.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/services/alias.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/services/axios.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/services/axios.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/services/axios.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/services/axios.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/services/idps.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/services/idps.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/services/idps.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/services/idps.ts
diff --git a/src/app/components/IdentityProviderWizard/Wizards/services/index.ts b/apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/services/index.ts
similarity index 100%
rename from src/app/components/IdentityProviderWizard/Wizards/services/index.ts
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/Wizards/services/index.ts
diff --git a/src/app/components/IdentityProviderWizard/providers.tsx b/apps/wizard-v1/src/app/components/IdentityProviderWizard/providers.tsx
similarity index 100%
rename from src/app/components/IdentityProviderWizard/providers.tsx
rename to apps/wizard-v1/src/app/components/IdentityProviderWizard/providers.tsx
diff --git a/src/app/components/navigation/app-launcher.tsx b/apps/wizard-v1/src/app/components/navigation/app-launcher.tsx
similarity index 100%
rename from src/app/components/navigation/app-launcher.tsx
rename to apps/wizard-v1/src/app/components/navigation/app-launcher.tsx
diff --git a/src/app/components/navigation/index.ts b/apps/wizard-v1/src/app/components/navigation/index.ts
similarity index 100%
rename from src/app/components/navigation/index.ts
rename to apps/wizard-v1/src/app/components/navigation/index.ts
diff --git a/src/app/components/navigation/main-nav.tsx b/apps/wizard-v1/src/app/components/navigation/main-nav.tsx
similarity index 100%
rename from src/app/components/navigation/main-nav.tsx
rename to apps/wizard-v1/src/app/components/navigation/main-nav.tsx
diff --git a/src/app/components/navigation/org-picker.tsx b/apps/wizard-v1/src/app/components/navigation/org-picker.tsx
similarity index 100%
rename from src/app/components/navigation/org-picker.tsx
rename to apps/wizard-v1/src/app/components/navigation/org-picker.tsx
diff --git a/src/app/configurations/api-status.ts b/apps/wizard-v1/src/app/configurations/api-status.ts
similarity index 100%
rename from src/app/configurations/api-status.ts
rename to apps/wizard-v1/src/app/configurations/api-status.ts
diff --git a/src/app/configurations/identity-protocols.ts b/apps/wizard-v1/src/app/configurations/identity-protocols.ts
similarity index 100%
rename from src/app/configurations/identity-protocols.ts
rename to apps/wizard-v1/src/app/configurations/identity-protocols.ts
diff --git a/src/app/configurations/identity-providers.ts b/apps/wizard-v1/src/app/configurations/identity-providers.ts
similarity index 100%
rename from src/app/configurations/identity-providers.ts
rename to apps/wizard-v1/src/app/configurations/identity-providers.ts
diff --git a/src/app/configurations/index.ts b/apps/wizard-v1/src/app/configurations/index.ts
similarity index 100%
rename from src/app/configurations/index.ts
rename to apps/wizard-v1/src/app/configurations/index.ts
diff --git a/src/app/configurations/oidc-defaults.ts b/apps/wizard-v1/src/app/configurations/oidc-defaults.ts
similarity index 100%
rename from src/app/configurations/oidc-defaults.ts
rename to apps/wizard-v1/src/app/configurations/oidc-defaults.ts
diff --git a/src/app/configurations/saml-idp-defaults.ts b/apps/wizard-v1/src/app/configurations/saml-idp-defaults.ts
similarity index 100%
rename from src/app/configurations/saml-idp-defaults.ts
rename to apps/wizard-v1/src/app/configurations/saml-idp-defaults.ts
diff --git a/src/app/hooks/hooks.ts b/apps/wizard-v1/src/app/hooks/hooks.ts
similarity index 100%
rename from src/app/hooks/hooks.ts
rename to apps/wizard-v1/src/app/hooks/hooks.ts
diff --git a/src/app/hooks/index.ts b/apps/wizard-v1/src/app/hooks/index.ts
similarity index 100%
rename from src/app/hooks/index.ts
rename to apps/wizard-v1/src/app/hooks/index.ts
diff --git a/src/app/hooks/navigation.ts b/apps/wizard-v1/src/app/hooks/navigation.ts
similarity index 100%
rename from src/app/hooks/navigation.ts
rename to apps/wizard-v1/src/app/hooks/navigation.ts
diff --git a/src/app/hooks/useApi.ts b/apps/wizard-v1/src/app/hooks/useApi.ts
similarity index 100%
rename from src/app/hooks/useApi.ts
rename to apps/wizard-v1/src/app/hooks/useApi.ts
diff --git a/src/app/hooks/useCreateTestIdpLink.ts b/apps/wizard-v1/src/app/hooks/useCreateTestIdpLink.ts
similarity index 100%
rename from src/app/hooks/useCreateTestIdpLink.ts
rename to apps/wizard-v1/src/app/hooks/useCreateTestIdpLink.ts
diff --git a/src/app/hooks/useGenerateIdpDisplayName.ts b/apps/wizard-v1/src/app/hooks/useGenerateIdpDisplayName.ts
similarity index 100%
rename from src/app/hooks/useGenerateIdpDisplayName.ts
rename to apps/wizard-v1/src/app/hooks/useGenerateIdpDisplayName.ts
diff --git a/src/app/hooks/useHostname.ts b/apps/wizard-v1/src/app/hooks/useHostname.ts
similarity index 100%
rename from src/app/hooks/useHostname.ts
rename to apps/wizard-v1/src/app/hooks/useHostname.ts
diff --git a/src/app/hooks/useKeycloakAdminApi.ts b/apps/wizard-v1/src/app/hooks/useKeycloakAdminApi.ts
similarity index 100%
rename from src/app/hooks/useKeycloakAdminApi.ts
rename to apps/wizard-v1/src/app/hooks/useKeycloakAdminApi.ts
diff --git a/src/app/hooks/useOrganization.ts b/apps/wizard-v1/src/app/hooks/useOrganization.ts
similarity index 100%
rename from src/app/hooks/useOrganization.ts
rename to apps/wizard-v1/src/app/hooks/useOrganization.ts
diff --git a/src/app/hooks/useRoleAccess.ts b/apps/wizard-v1/src/app/hooks/useRoleAccess.ts
similarity index 100%
rename from src/app/hooks/useRoleAccess.ts
rename to apps/wizard-v1/src/app/hooks/useRoleAccess.ts
diff --git a/src/app/hooks/useTitle.ts b/apps/wizard-v1/src/app/hooks/useTitle.ts
similarity index 100%
rename from src/app/hooks/useTitle.ts
rename to apps/wizard-v1/src/app/hooks/useTitle.ts
diff --git a/src/app/images/adfs/index.ts b/apps/wizard-v1/src/app/images/adfs/index.ts
similarity index 100%
rename from src/app/images/adfs/index.ts
rename to apps/wizard-v1/src/app/images/adfs/index.ts
diff --git a/src/app/images/adfs/saml/adfs_saml_0.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_0.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_0.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_0.png
diff --git a/src/app/images/adfs/saml/adfs_saml_1.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_1.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_1.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_1.png
diff --git a/src/app/images/adfs/saml/adfs_saml_10.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_10.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_10.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_10.png
diff --git a/src/app/images/adfs/saml/adfs_saml_11.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_11.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_11.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_11.png
diff --git a/src/app/images/adfs/saml/adfs_saml_12.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_12.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_12.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_12.png
diff --git a/src/app/images/adfs/saml/adfs_saml_13.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_13.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_13.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_13.png
diff --git a/src/app/images/adfs/saml/adfs_saml_2.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_2.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_2.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_2.png
diff --git a/src/app/images/adfs/saml/adfs_saml_3.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_3.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_3.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_3.png
diff --git a/src/app/images/adfs/saml/adfs_saml_4.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_4.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_4.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_4.png
diff --git a/src/app/images/adfs/saml/adfs_saml_5.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_5.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_5.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_5.png
diff --git a/src/app/images/adfs/saml/adfs_saml_6.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_6.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_6.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_6.png
diff --git a/src/app/images/adfs/saml/adfs_saml_7.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_7.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_7.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_7.png
diff --git a/src/app/images/adfs/saml/adfs_saml_8.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_8.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_8.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_8.png
diff --git a/src/app/images/adfs/saml/adfs_saml_9.png b/apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_9.png
similarity index 100%
rename from src/app/images/adfs/saml/adfs_saml_9.png
rename to apps/wizard-v1/src/app/images/adfs/saml/adfs_saml_9.png
diff --git a/src/app/images/adfs/saml/index.ts b/apps/wizard-v1/src/app/images/adfs/saml/index.ts
similarity index 100%
rename from src/app/images/adfs/saml/index.ts
rename to apps/wizard-v1/src/app/images/adfs/saml/index.ts
diff --git a/src/app/images/auth0/COMMON/auth0-1.png b/apps/wizard-v1/src/app/images/auth0/COMMON/auth0-1.png
similarity index 100%
rename from src/app/images/auth0/COMMON/auth0-1.png
rename to apps/wizard-v1/src/app/images/auth0/COMMON/auth0-1.png
diff --git a/src/app/images/auth0/COMMON/auth0-2.png b/apps/wizard-v1/src/app/images/auth0/COMMON/auth0-2.png
similarity index 100%
rename from src/app/images/auth0/COMMON/auth0-2.png
rename to apps/wizard-v1/src/app/images/auth0/COMMON/auth0-2.png
diff --git a/src/app/images/auth0/OIDC/auth0-3.png b/apps/wizard-v1/src/app/images/auth0/OIDC/auth0-3.png
similarity index 100%
rename from src/app/images/auth0/OIDC/auth0-3.png
rename to apps/wizard-v1/src/app/images/auth0/OIDC/auth0-3.png
diff --git a/src/app/images/auth0/OIDC/auth0-4.png b/apps/wizard-v1/src/app/images/auth0/OIDC/auth0-4.png
similarity index 100%
rename from src/app/images/auth0/OIDC/auth0-4.png
rename to apps/wizard-v1/src/app/images/auth0/OIDC/auth0-4.png
diff --git a/src/app/images/auth0/SAML/auth0-3SAML.png b/apps/wizard-v1/src/app/images/auth0/SAML/auth0-3SAML.png
similarity index 100%
rename from src/app/images/auth0/SAML/auth0-3SAML.png
rename to apps/wizard-v1/src/app/images/auth0/SAML/auth0-3SAML.png
diff --git a/src/app/images/auth0/SAML/auth0-4SAML.png b/apps/wizard-v1/src/app/images/auth0/SAML/auth0-4SAML.png
similarity index 100%
rename from src/app/images/auth0/SAML/auth0-4SAML.png
rename to apps/wizard-v1/src/app/images/auth0/SAML/auth0-4SAML.png
diff --git a/src/app/images/auth0/SAML/auth0-5SAML.png b/apps/wizard-v1/src/app/images/auth0/SAML/auth0-5SAML.png
similarity index 100%
rename from src/app/images/auth0/SAML/auth0-5SAML.png
rename to apps/wizard-v1/src/app/images/auth0/SAML/auth0-5SAML.png
diff --git a/src/app/images/auth0/SAML/auth0-6SAML.png b/apps/wizard-v1/src/app/images/auth0/SAML/auth0-6SAML.png
similarity index 100%
rename from src/app/images/auth0/SAML/auth0-6SAML.png
rename to apps/wizard-v1/src/app/images/auth0/SAML/auth0-6SAML.png
diff --git a/src/app/images/auth0/auth0-logo.png b/apps/wizard-v1/src/app/images/auth0/auth0-logo.png
similarity index 100%
rename from src/app/images/auth0/auth0-logo.png
rename to apps/wizard-v1/src/app/images/auth0/auth0-logo.png
diff --git a/src/app/images/aws/aws-logo.svg b/apps/wizard-v1/src/app/images/aws/aws-logo.svg
similarity index 100%
rename from src/app/images/aws/aws-logo.svg
rename to apps/wizard-v1/src/app/images/aws/aws-logo.svg
diff --git a/src/app/images/aws/awssso_saml_1.png b/apps/wizard-v1/src/app/images/aws/awssso_saml_1.png
similarity index 100%
rename from src/app/images/aws/awssso_saml_1.png
rename to apps/wizard-v1/src/app/images/aws/awssso_saml_1.png
diff --git a/src/app/images/aws/awssso_saml_2.png b/apps/wizard-v1/src/app/images/aws/awssso_saml_2.png
similarity index 100%
rename from src/app/images/aws/awssso_saml_2.png
rename to apps/wizard-v1/src/app/images/aws/awssso_saml_2.png
diff --git a/src/app/images/aws/awssso_saml_3.png b/apps/wizard-v1/src/app/images/aws/awssso_saml_3.png
similarity index 100%
rename from src/app/images/aws/awssso_saml_3.png
rename to apps/wizard-v1/src/app/images/aws/awssso_saml_3.png
diff --git a/src/app/images/aws/awssso_saml_4.png b/apps/wizard-v1/src/app/images/aws/awssso_saml_4.png
similarity index 100%
rename from src/app/images/aws/awssso_saml_4.png
rename to apps/wizard-v1/src/app/images/aws/awssso_saml_4.png
diff --git a/src/app/images/aws/awssso_saml_5.png b/apps/wizard-v1/src/app/images/aws/awssso_saml_5.png
similarity index 100%
rename from src/app/images/aws/awssso_saml_5.png
rename to apps/wizard-v1/src/app/images/aws/awssso_saml_5.png
diff --git a/src/app/images/aws/awssso_saml_5a.png b/apps/wizard-v1/src/app/images/aws/awssso_saml_5a.png
similarity index 100%
rename from src/app/images/aws/awssso_saml_5a.png
rename to apps/wizard-v1/src/app/images/aws/awssso_saml_5a.png
diff --git a/src/app/images/aws/awssso_saml_6.png b/apps/wizard-v1/src/app/images/aws/awssso_saml_6.png
similarity index 100%
rename from src/app/images/aws/awssso_saml_6.png
rename to apps/wizard-v1/src/app/images/aws/awssso_saml_6.png
diff --git a/src/app/images/aws/awssso_saml_7.png b/apps/wizard-v1/src/app/images/aws/awssso_saml_7.png
similarity index 100%
rename from src/app/images/aws/awssso_saml_7.png
rename to apps/wizard-v1/src/app/images/aws/awssso_saml_7.png
diff --git a/src/app/images/aws/awssso_saml_8.png b/apps/wizard-v1/src/app/images/aws/awssso_saml_8.png
similarity index 100%
rename from src/app/images/aws/awssso_saml_8.png
rename to apps/wizard-v1/src/app/images/aws/awssso_saml_8.png
diff --git a/src/app/images/aws/index.ts b/apps/wizard-v1/src/app/images/aws/index.ts
similarity index 100%
rename from src/app/images/aws/index.ts
rename to apps/wizard-v1/src/app/images/aws/index.ts
diff --git a/src/app/images/cloudflare/cloudflare-large.svg b/apps/wizard-v1/src/app/images/cloudflare/cloudflare-large.svg
similarity index 100%
rename from src/app/images/cloudflare/cloudflare-large.svg
rename to apps/wizard-v1/src/app/images/cloudflare/cloudflare-large.svg
diff --git a/src/app/images/cloudflare/cloudflare.svg b/apps/wizard-v1/src/app/images/cloudflare/cloudflare.svg
similarity index 100%
rename from src/app/images/cloudflare/cloudflare.svg
rename to apps/wizard-v1/src/app/images/cloudflare/cloudflare.svg
diff --git a/src/app/images/cloudflare/saml/cloudflare_saml_0.png b/apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_0.png
similarity index 100%
rename from src/app/images/cloudflare/saml/cloudflare_saml_0.png
rename to apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_0.png
diff --git a/src/app/images/cloudflare/saml/cloudflare_saml_1.png b/apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_1.png
similarity index 100%
rename from src/app/images/cloudflare/saml/cloudflare_saml_1.png
rename to apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_1.png
diff --git a/src/app/images/cloudflare/saml/cloudflare_saml_2.png b/apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_2.png
similarity index 100%
rename from src/app/images/cloudflare/saml/cloudflare_saml_2.png
rename to apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_2.png
diff --git a/src/app/images/cloudflare/saml/cloudflare_saml_3.png b/apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_3.png
similarity index 100%
rename from src/app/images/cloudflare/saml/cloudflare_saml_3.png
rename to apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_3.png
diff --git a/src/app/images/cloudflare/saml/cloudflare_saml_4.png b/apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_4.png
similarity index 100%
rename from src/app/images/cloudflare/saml/cloudflare_saml_4.png
rename to apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_4.png
diff --git a/src/app/images/cloudflare/saml/cloudflare_saml_5.png b/apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_5.png
similarity index 100%
rename from src/app/images/cloudflare/saml/cloudflare_saml_5.png
rename to apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_5.png
diff --git a/src/app/images/cloudflare/saml/cloudflare_saml_6.png b/apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_6.png
similarity index 100%
rename from src/app/images/cloudflare/saml/cloudflare_saml_6.png
rename to apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_6.png
diff --git a/src/app/images/cloudflare/saml/cloudflare_saml_7.png b/apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_7.png
similarity index 100%
rename from src/app/images/cloudflare/saml/cloudflare_saml_7.png
rename to apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_7.png
diff --git a/src/app/images/cloudflare/saml/cloudflare_saml_8.png b/apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_8.png
similarity index 100%
rename from src/app/images/cloudflare/saml/cloudflare_saml_8.png
rename to apps/wizard-v1/src/app/images/cloudflare/saml/cloudflare_saml_8.png
diff --git a/src/app/images/cloudflare/saml/index.ts b/apps/wizard-v1/src/app/images/cloudflare/saml/index.ts
similarity index 100%
rename from src/app/images/cloudflare/saml/index.ts
rename to apps/wizard-v1/src/app/images/cloudflare/saml/index.ts
diff --git a/src/app/images/cyberark/SAML/cyberark_saml_0.png b/apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_0.png
similarity index 100%
rename from src/app/images/cyberark/SAML/cyberark_saml_0.png
rename to apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_0.png
diff --git a/src/app/images/cyberark/SAML/cyberark_saml_1.png b/apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_1.png
similarity index 100%
rename from src/app/images/cyberark/SAML/cyberark_saml_1.png
rename to apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_1.png
diff --git a/src/app/images/cyberark/SAML/cyberark_saml_2.png b/apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_2.png
similarity index 100%
rename from src/app/images/cyberark/SAML/cyberark_saml_2.png
rename to apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_2.png
diff --git a/src/app/images/cyberark/SAML/cyberark_saml_3.png b/apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_3.png
similarity index 100%
rename from src/app/images/cyberark/SAML/cyberark_saml_3.png
rename to apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_3.png
diff --git a/src/app/images/cyberark/SAML/cyberark_saml_4.png b/apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_4.png
similarity index 100%
rename from src/app/images/cyberark/SAML/cyberark_saml_4.png
rename to apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_4.png
diff --git a/src/app/images/cyberark/SAML/cyberark_saml_5.png b/apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_5.png
similarity index 100%
rename from src/app/images/cyberark/SAML/cyberark_saml_5.png
rename to apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_5.png
diff --git a/src/app/images/cyberark/SAML/cyberark_saml_6.png b/apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_6.png
similarity index 100%
rename from src/app/images/cyberark/SAML/cyberark_saml_6.png
rename to apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_6.png
diff --git a/src/app/images/cyberark/SAML/cyberark_saml_7.png b/apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_7.png
similarity index 100%
rename from src/app/images/cyberark/SAML/cyberark_saml_7.png
rename to apps/wizard-v1/src/app/images/cyberark/SAML/cyberark_saml_7.png
diff --git a/src/app/images/cyberark/SAML/index.ts b/apps/wizard-v1/src/app/images/cyberark/SAML/index.ts
similarity index 100%
rename from src/app/images/cyberark/SAML/index.ts
rename to apps/wizard-v1/src/app/images/cyberark/SAML/index.ts
diff --git a/src/app/images/duo/duo-large.svg b/apps/wizard-v1/src/app/images/duo/duo-large.svg
similarity index 100%
rename from src/app/images/duo/duo-large.svg
rename to apps/wizard-v1/src/app/images/duo/duo-large.svg
diff --git a/src/app/images/duo/duo.svg b/apps/wizard-v1/src/app/images/duo/duo.svg
similarity index 100%
rename from src/app/images/duo/duo.svg
rename to apps/wizard-v1/src/app/images/duo/duo.svg
diff --git a/src/app/images/duo/saml/duo_saml_0.png b/apps/wizard-v1/src/app/images/duo/saml/duo_saml_0.png
similarity index 100%
rename from src/app/images/duo/saml/duo_saml_0.png
rename to apps/wizard-v1/src/app/images/duo/saml/duo_saml_0.png
diff --git a/src/app/images/duo/saml/duo_saml_1.png b/apps/wizard-v1/src/app/images/duo/saml/duo_saml_1.png
similarity index 100%
rename from src/app/images/duo/saml/duo_saml_1.png
rename to apps/wizard-v1/src/app/images/duo/saml/duo_saml_1.png
diff --git a/src/app/images/duo/saml/duo_saml_2.png b/apps/wizard-v1/src/app/images/duo/saml/duo_saml_2.png
similarity index 100%
rename from src/app/images/duo/saml/duo_saml_2.png
rename to apps/wizard-v1/src/app/images/duo/saml/duo_saml_2.png
diff --git a/src/app/images/duo/saml/duo_saml_3.png b/apps/wizard-v1/src/app/images/duo/saml/duo_saml_3.png
similarity index 100%
rename from src/app/images/duo/saml/duo_saml_3.png
rename to apps/wizard-v1/src/app/images/duo/saml/duo_saml_3.png
diff --git a/src/app/images/duo/saml/duo_saml_4.png b/apps/wizard-v1/src/app/images/duo/saml/duo_saml_4.png
similarity index 100%
rename from src/app/images/duo/saml/duo_saml_4.png
rename to apps/wizard-v1/src/app/images/duo/saml/duo_saml_4.png
diff --git a/src/app/images/duo/saml/duo_saml_5.png b/apps/wizard-v1/src/app/images/duo/saml/duo_saml_5.png
similarity index 100%
rename from src/app/images/duo/saml/duo_saml_5.png
rename to apps/wizard-v1/src/app/images/duo/saml/duo_saml_5.png
diff --git a/src/app/images/duo/saml/index.ts b/apps/wizard-v1/src/app/images/duo/saml/index.ts
similarity index 100%
rename from src/app/images/duo/saml/index.ts
rename to apps/wizard-v1/src/app/images/duo/saml/index.ts
diff --git a/src/app/images/favicons/android-chrome-192x192.png b/apps/wizard-v1/src/app/images/favicons/android-chrome-192x192.png
similarity index 100%
rename from src/app/images/favicons/android-chrome-192x192.png
rename to apps/wizard-v1/src/app/images/favicons/android-chrome-192x192.png
diff --git a/src/app/images/favicons/android-chrome-512x512.png b/apps/wizard-v1/src/app/images/favicons/android-chrome-512x512.png
similarity index 100%
rename from src/app/images/favicons/android-chrome-512x512.png
rename to apps/wizard-v1/src/app/images/favicons/android-chrome-512x512.png
diff --git a/src/app/images/favicons/apple-touch-icon.png b/apps/wizard-v1/src/app/images/favicons/apple-touch-icon.png
similarity index 100%
rename from src/app/images/favicons/apple-touch-icon.png
rename to apps/wizard-v1/src/app/images/favicons/apple-touch-icon.png
diff --git a/src/app/images/favicons/browserconfig.xml b/apps/wizard-v1/src/app/images/favicons/browserconfig.xml
similarity index 100%
rename from src/app/images/favicons/browserconfig.xml
rename to apps/wizard-v1/src/app/images/favicons/browserconfig.xml
diff --git a/src/app/images/favicons/favicon-16x16.png b/apps/wizard-v1/src/app/images/favicons/favicon-16x16.png
similarity index 100%
rename from src/app/images/favicons/favicon-16x16.png
rename to apps/wizard-v1/src/app/images/favicons/favicon-16x16.png
diff --git a/src/app/images/favicons/favicon-32x32.png b/apps/wizard-v1/src/app/images/favicons/favicon-32x32.png
similarity index 100%
rename from src/app/images/favicons/favicon-32x32.png
rename to apps/wizard-v1/src/app/images/favicons/favicon-32x32.png
diff --git a/src/app/images/favicons/favicon.ico b/apps/wizard-v1/src/app/images/favicons/favicon.ico
similarity index 100%
rename from src/app/images/favicons/favicon.ico
rename to apps/wizard-v1/src/app/images/favicons/favicon.ico
diff --git a/src/app/images/favicons/mstile-144x144.png b/apps/wizard-v1/src/app/images/favicons/mstile-144x144.png
similarity index 100%
rename from src/app/images/favicons/mstile-144x144.png
rename to apps/wizard-v1/src/app/images/favicons/mstile-144x144.png
diff --git a/src/app/images/favicons/mstile-150x150.png b/apps/wizard-v1/src/app/images/favicons/mstile-150x150.png
similarity index 100%
rename from src/app/images/favicons/mstile-150x150.png
rename to apps/wizard-v1/src/app/images/favicons/mstile-150x150.png
diff --git a/src/app/images/favicons/mstile-310x150.png b/apps/wizard-v1/src/app/images/favicons/mstile-310x150.png
similarity index 100%
rename from src/app/images/favicons/mstile-310x150.png
rename to apps/wizard-v1/src/app/images/favicons/mstile-310x150.png
diff --git a/src/app/images/favicons/mstile-310x310.png b/apps/wizard-v1/src/app/images/favicons/mstile-310x310.png
similarity index 100%
rename from src/app/images/favicons/mstile-310x310.png
rename to apps/wizard-v1/src/app/images/favicons/mstile-310x310.png
diff --git a/src/app/images/favicons/mstile-70x70.png b/apps/wizard-v1/src/app/images/favicons/mstile-70x70.png
similarity index 100%
rename from src/app/images/favicons/mstile-70x70.png
rename to apps/wizard-v1/src/app/images/favicons/mstile-70x70.png
diff --git a/src/app/images/favicons/safari-pinned-tab.svg b/apps/wizard-v1/src/app/images/favicons/safari-pinned-tab.svg
similarity index 100%
rename from src/app/images/favicons/safari-pinned-tab.svg
rename to apps/wizard-v1/src/app/images/favicons/safari-pinned-tab.svg
diff --git a/src/app/images/favicons/site.webmanifest b/apps/wizard-v1/src/app/images/favicons/site.webmanifest
similarity index 100%
rename from src/app/images/favicons/site.webmanifest
rename to apps/wizard-v1/src/app/images/favicons/site.webmanifest
diff --git a/src/app/images/google/google_saml_1a.png b/apps/wizard-v1/src/app/images/google/google_saml_1a.png
similarity index 100%
rename from src/app/images/google/google_saml_1a.png
rename to apps/wizard-v1/src/app/images/google/google_saml_1a.png
diff --git a/src/app/images/google/google_saml_1b.png b/apps/wizard-v1/src/app/images/google/google_saml_1b.png
similarity index 100%
rename from src/app/images/google/google_saml_1b.png
rename to apps/wizard-v1/src/app/images/google/google_saml_1b.png
diff --git a/src/app/images/google/google_saml_2.png b/apps/wizard-v1/src/app/images/google/google_saml_2.png
similarity index 100%
rename from src/app/images/google/google_saml_2.png
rename to apps/wizard-v1/src/app/images/google/google_saml_2.png
diff --git a/src/app/images/google/google_saml_3.png b/apps/wizard-v1/src/app/images/google/google_saml_3.png
similarity index 100%
rename from src/app/images/google/google_saml_3.png
rename to apps/wizard-v1/src/app/images/google/google_saml_3.png
diff --git a/src/app/images/google/google_saml_4.png b/apps/wizard-v1/src/app/images/google/google_saml_4.png
similarity index 100%
rename from src/app/images/google/google_saml_4.png
rename to apps/wizard-v1/src/app/images/google/google_saml_4.png
diff --git a/src/app/images/google/google_saml_5.png b/apps/wizard-v1/src/app/images/google/google_saml_5.png
similarity index 100%
rename from src/app/images/google/google_saml_5.png
rename to apps/wizard-v1/src/app/images/google/google_saml_5.png
diff --git a/src/app/images/google/google_saml_6a.png b/apps/wizard-v1/src/app/images/google/google_saml_6a.png
similarity index 100%
rename from src/app/images/google/google_saml_6a.png
rename to apps/wizard-v1/src/app/images/google/google_saml_6a.png
diff --git a/src/app/images/google/google_saml_6b.png b/apps/wizard-v1/src/app/images/google/google_saml_6b.png
similarity index 100%
rename from src/app/images/google/google_saml_6b.png
rename to apps/wizard-v1/src/app/images/google/google_saml_6b.png
diff --git a/src/app/images/google/index.ts b/apps/wizard-v1/src/app/images/google/index.ts
similarity index 100%
rename from src/app/images/google/index.ts
rename to apps/wizard-v1/src/app/images/google/index.ts
diff --git a/src/app/images/jumpcloud/index.ts b/apps/wizard-v1/src/app/images/jumpcloud/index.ts
similarity index 100%
rename from src/app/images/jumpcloud/index.ts
rename to apps/wizard-v1/src/app/images/jumpcloud/index.ts
diff --git a/src/app/images/jumpcloud/jumpcloud-logo.svg b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud-logo.svg
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud-logo.svg
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud-logo.svg
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_1.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_1.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_1.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_1.png
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_10.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_10.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_10.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_10.png
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_2.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_2.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_2.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_2.png
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_3.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_3.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_3.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_3.png
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_4.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_4.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_4.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_4.png
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_5.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_5.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_5.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_5.png
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_6.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_6.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_6.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_6.png
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_7.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_7.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_7.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_7.png
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_8.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_8.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_8.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_8.png
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_9.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_9.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_9.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_9.png
diff --git a/src/app/images/jumpcloud/jumpcloud_saml_9a.png b/apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_9a.png
similarity index 100%
rename from src/app/images/jumpcloud/jumpcloud_saml_9a.png
rename to apps/wizard-v1/src/app/images/jumpcloud/jumpcloud_saml_9a.png
diff --git a/src/app/images/lastpass/index.ts b/apps/wizard-v1/src/app/images/lastpass/index.ts
similarity index 100%
rename from src/app/images/lastpass/index.ts
rename to apps/wizard-v1/src/app/images/lastpass/index.ts
diff --git a/src/app/images/lastpass/lastpass-logo.svg b/apps/wizard-v1/src/app/images/lastpass/lastpass-logo.svg
similarity index 100%
rename from src/app/images/lastpass/lastpass-logo.svg
rename to apps/wizard-v1/src/app/images/lastpass/lastpass-logo.svg
diff --git a/src/app/images/lastpass/lastpass_saml_0.png b/apps/wizard-v1/src/app/images/lastpass/lastpass_saml_0.png
similarity index 100%
rename from src/app/images/lastpass/lastpass_saml_0.png
rename to apps/wizard-v1/src/app/images/lastpass/lastpass_saml_0.png
diff --git a/src/app/images/lastpass/lastpass_saml_1.png b/apps/wizard-v1/src/app/images/lastpass/lastpass_saml_1.png
similarity index 100%
rename from src/app/images/lastpass/lastpass_saml_1.png
rename to apps/wizard-v1/src/app/images/lastpass/lastpass_saml_1.png
diff --git a/src/app/images/lastpass/lastpass_saml_2.png b/apps/wizard-v1/src/app/images/lastpass/lastpass_saml_2.png
similarity index 100%
rename from src/app/images/lastpass/lastpass_saml_2.png
rename to apps/wizard-v1/src/app/images/lastpass/lastpass_saml_2.png
diff --git a/src/app/images/lastpass/lastpass_saml_3.png b/apps/wizard-v1/src/app/images/lastpass/lastpass_saml_3.png
similarity index 100%
rename from src/app/images/lastpass/lastpass_saml_3.png
rename to apps/wizard-v1/src/app/images/lastpass/lastpass_saml_3.png
diff --git a/src/app/images/lastpass/lastpass_saml_4.png b/apps/wizard-v1/src/app/images/lastpass/lastpass_saml_4.png
similarity index 100%
rename from src/app/images/lastpass/lastpass_saml_4.png
rename to apps/wizard-v1/src/app/images/lastpass/lastpass_saml_4.png
diff --git a/src/app/images/lastpass/lastpass_saml_5.png b/apps/wizard-v1/src/app/images/lastpass/lastpass_saml_5.png
similarity index 100%
rename from src/app/images/lastpass/lastpass_saml_5.png
rename to apps/wizard-v1/src/app/images/lastpass/lastpass_saml_5.png
diff --git a/src/app/images/lastpass/lastpass_saml_6.png b/apps/wizard-v1/src/app/images/lastpass/lastpass_saml_6.png
similarity index 100%
rename from src/app/images/lastpass/lastpass_saml_6.png
rename to apps/wizard-v1/src/app/images/lastpass/lastpass_saml_6.png
diff --git a/src/app/images/lastpass/lastpass_saml_7.png b/apps/wizard-v1/src/app/images/lastpass/lastpass_saml_7.png
similarity index 100%
rename from src/app/images/lastpass/lastpass_saml_7.png
rename to apps/wizard-v1/src/app/images/lastpass/lastpass_saml_7.png
diff --git a/src/app/images/lastpass/lastpass_saml_8.png b/apps/wizard-v1/src/app/images/lastpass/lastpass_saml_8.png
similarity index 100%
rename from src/app/images/lastpass/lastpass_saml_8.png
rename to apps/wizard-v1/src/app/images/lastpass/lastpass_saml_8.png
diff --git a/src/app/images/msft_entra_id/saml/azure-1.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-1.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-1.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-1.png
diff --git a/src/app/images/msft_entra_id/saml/azure-10.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-10.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-10.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-10.png
diff --git a/src/app/images/msft_entra_id/saml/azure-11.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-11.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-11.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-11.png
diff --git a/src/app/images/msft_entra_id/saml/azure-12.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-12.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-12.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-12.png
diff --git a/src/app/images/msft_entra_id/saml/azure-1a.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-1a.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-1a.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-1a.png
diff --git a/src/app/images/msft_entra_id/saml/azure-2.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-2.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-2.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-2.png
diff --git a/src/app/images/msft_entra_id/saml/azure-3.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-3.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-3.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-3.png
diff --git a/src/app/images/msft_entra_id/saml/azure-3a.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-3a.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-3a.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-3a.png
diff --git a/src/app/images/msft_entra_id/saml/azure-4.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-4.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-4.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-4.png
diff --git a/src/app/images/msft_entra_id/saml/azure-5.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-5.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-5.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-5.png
diff --git a/src/app/images/msft_entra_id/saml/azure-5a.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-5a.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-5a.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-5a.png
diff --git a/src/app/images/msft_entra_id/saml/azure-6.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-6.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-6.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-6.png
diff --git a/src/app/images/msft_entra_id/saml/azure-7.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-7.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-7.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-7.png
diff --git a/src/app/images/msft_entra_id/saml/azure-8.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-8.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-8.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-8.png
diff --git a/src/app/images/msft_entra_id/saml/azure-9.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-9.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/azure-9.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/azure-9.png
diff --git a/src/app/images/msft_entra_id/saml/entraid-1.png b/apps/wizard-v1/src/app/images/msft_entra_id/saml/entraid-1.png
similarity index 100%
rename from src/app/images/msft_entra_id/saml/entraid-1.png
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/entraid-1.png
diff --git a/src/app/images/msft_entra_id/saml/index.ts b/apps/wizard-v1/src/app/images/msft_entra_id/saml/index.ts
similarity index 100%
rename from src/app/images/msft_entra_id/saml/index.ts
rename to apps/wizard-v1/src/app/images/msft_entra_id/saml/index.ts
diff --git a/src/app/images/oidc/openid-logo.svg b/apps/wizard-v1/src/app/images/oidc/openid-logo.svg
similarity index 100%
rename from src/app/images/oidc/openid-logo.svg
rename to apps/wizard-v1/src/app/images/oidc/openid-logo.svg
diff --git a/src/app/images/okta/okta-1.png b/apps/wizard-v1/src/app/images/okta/okta-1.png
similarity index 100%
rename from src/app/images/okta/okta-1.png
rename to apps/wizard-v1/src/app/images/okta/okta-1.png
diff --git a/src/app/images/okta/okta-2.png b/apps/wizard-v1/src/app/images/okta/okta-2.png
similarity index 100%
rename from src/app/images/okta/okta-2.png
rename to apps/wizard-v1/src/app/images/okta/okta-2.png
diff --git a/src/app/images/okta/okta-3.png b/apps/wizard-v1/src/app/images/okta/okta-3.png
similarity index 100%
rename from src/app/images/okta/okta-3.png
rename to apps/wizard-v1/src/app/images/okta/okta-3.png
diff --git a/src/app/images/okta/okta-logo.png b/apps/wizard-v1/src/app/images/okta/okta-logo.png
similarity index 100%
rename from src/app/images/okta/okta-logo.png
rename to apps/wizard-v1/src/app/images/okta/okta-logo.png
diff --git a/src/app/images/okta/saml/index.ts b/apps/wizard-v1/src/app/images/okta/saml/index.ts
similarity index 100%
rename from src/app/images/okta/saml/index.ts
rename to apps/wizard-v1/src/app/images/okta/saml/index.ts
diff --git a/src/app/images/okta/saml/okta_saml_1.png b/apps/wizard-v1/src/app/images/okta/saml/okta_saml_1.png
similarity index 100%
rename from src/app/images/okta/saml/okta_saml_1.png
rename to apps/wizard-v1/src/app/images/okta/saml/okta_saml_1.png
diff --git a/src/app/images/okta/saml/okta_saml_2.png b/apps/wizard-v1/src/app/images/okta/saml/okta_saml_2.png
similarity index 100%
rename from src/app/images/okta/saml/okta_saml_2.png
rename to apps/wizard-v1/src/app/images/okta/saml/okta_saml_2.png
diff --git a/src/app/images/okta/saml/okta_saml_3.png b/apps/wizard-v1/src/app/images/okta/saml/okta_saml_3.png
similarity index 100%
rename from src/app/images/okta/saml/okta_saml_3.png
rename to apps/wizard-v1/src/app/images/okta/saml/okta_saml_3.png
diff --git a/src/app/images/okta/saml/okta_saml_4.png b/apps/wizard-v1/src/app/images/okta/saml/okta_saml_4.png
similarity index 100%
rename from src/app/images/okta/saml/okta_saml_4.png
rename to apps/wizard-v1/src/app/images/okta/saml/okta_saml_4.png
diff --git a/src/app/images/okta/saml/okta_saml_5.png b/apps/wizard-v1/src/app/images/okta/saml/okta_saml_5.png
similarity index 100%
rename from src/app/images/okta/saml/okta_saml_5.png
rename to apps/wizard-v1/src/app/images/okta/saml/okta_saml_5.png
diff --git a/src/app/images/okta/saml/okta_saml_6.png b/apps/wizard-v1/src/app/images/okta/saml/okta_saml_6.png
similarity index 100%
rename from src/app/images/okta/saml/okta_saml_6.png
rename to apps/wizard-v1/src/app/images/okta/saml/okta_saml_6.png
diff --git a/src/app/images/okta/saml/okta_saml_7.png b/apps/wizard-v1/src/app/images/okta/saml/okta_saml_7.png
similarity index 100%
rename from src/app/images/okta/saml/okta_saml_7.png
rename to apps/wizard-v1/src/app/images/okta/saml/okta_saml_7.png
diff --git a/src/app/images/okta/saml/okta_saml_7a.png b/apps/wizard-v1/src/app/images/okta/saml/okta_saml_7a.png
similarity index 100%
rename from src/app/images/okta/saml/okta_saml_7a.png
rename to apps/wizard-v1/src/app/images/okta/saml/okta_saml_7a.png
diff --git a/src/app/images/okta/saml/okta_saml_8.png b/apps/wizard-v1/src/app/images/okta/saml/okta_saml_8.png
similarity index 100%
rename from src/app/images/okta/saml/okta_saml_8.png
rename to apps/wizard-v1/src/app/images/okta/saml/okta_saml_8.png
diff --git a/src/app/images/okta/saml/okta_saml_9.png b/apps/wizard-v1/src/app/images/okta/saml/okta_saml_9.png
similarity index 100%
rename from src/app/images/okta/saml/okta_saml_9.png
rename to apps/wizard-v1/src/app/images/okta/saml/okta_saml_9.png
diff --git a/src/app/images/onelogin/index.ts b/apps/wizard-v1/src/app/images/onelogin/index.ts
similarity index 100%
rename from src/app/images/onelogin/index.ts
rename to apps/wizard-v1/src/app/images/onelogin/index.ts
diff --git a/src/app/images/onelogin/onelogin-logo.svg b/apps/wizard-v1/src/app/images/onelogin/onelogin-logo.svg
similarity index 100%
rename from src/app/images/onelogin/onelogin-logo.svg
rename to apps/wizard-v1/src/app/images/onelogin/onelogin-logo.svg
diff --git a/src/app/images/onelogin/saml/index.ts b/apps/wizard-v1/src/app/images/onelogin/saml/index.ts
similarity index 100%
rename from src/app/images/onelogin/saml/index.ts
rename to apps/wizard-v1/src/app/images/onelogin/saml/index.ts
diff --git a/src/app/images/onelogin/saml/onelogin_saml_1.png b/apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_1.png
similarity index 100%
rename from src/app/images/onelogin/saml/onelogin_saml_1.png
rename to apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_1.png
diff --git a/src/app/images/onelogin/saml/onelogin_saml_2.png b/apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_2.png
similarity index 100%
rename from src/app/images/onelogin/saml/onelogin_saml_2.png
rename to apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_2.png
diff --git a/src/app/images/onelogin/saml/onelogin_saml_3.png b/apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_3.png
similarity index 100%
rename from src/app/images/onelogin/saml/onelogin_saml_3.png
rename to apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_3.png
diff --git a/src/app/images/onelogin/saml/onelogin_saml_4.png b/apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_4.png
similarity index 100%
rename from src/app/images/onelogin/saml/onelogin_saml_4.png
rename to apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_4.png
diff --git a/src/app/images/onelogin/saml/onelogin_saml_5.png b/apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_5.png
similarity index 100%
rename from src/app/images/onelogin/saml/onelogin_saml_5.png
rename to apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_5.png
diff --git a/src/app/images/onelogin/saml/onelogin_saml_5a.png b/apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_5a.png
similarity index 100%
rename from src/app/images/onelogin/saml/onelogin_saml_5a.png
rename to apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_5a.png
diff --git a/src/app/images/onelogin/saml/onelogin_saml_6a.png b/apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_6a.png
similarity index 100%
rename from src/app/images/onelogin/saml/onelogin_saml_6a.png
rename to apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_6a.png
diff --git a/src/app/images/onelogin/saml/onelogin_saml_7.png b/apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_7.png
similarity index 100%
rename from src/app/images/onelogin/saml/onelogin_saml_7.png
rename to apps/wizard-v1/src/app/images/onelogin/saml/onelogin_saml_7.png
diff --git a/src/app/images/oracle/SAML/index.ts b/apps/wizard-v1/src/app/images/oracle/SAML/index.ts
similarity index 100%
rename from src/app/images/oracle/SAML/index.ts
rename to apps/wizard-v1/src/app/images/oracle/SAML/index.ts
diff --git a/src/app/images/oracle/SAML/oracle_saml_0.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_0.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_0.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_0.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_1.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_1.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_1.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_1.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_10.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_10.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_10.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_10.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_11.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_11.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_11.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_11.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_2.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_2.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_2.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_2.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_3.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_3.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_3.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_3.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_4.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_4.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_4.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_4.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_5.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_5.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_5.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_5.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_6.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_6.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_6.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_6.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_7.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_7.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_7.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_7.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_8.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_8.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_8.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_8.png
diff --git a/src/app/images/oracle/SAML/oracle_saml_9.png b/apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_9.png
similarity index 100%
rename from src/app/images/oracle/SAML/oracle_saml_9.png
rename to apps/wizard-v1/src/app/images/oracle/SAML/oracle_saml_9.png
diff --git a/src/app/images/oracle/oracle-logo.png b/apps/wizard-v1/src/app/images/oracle/oracle-logo.png
similarity index 100%
rename from src/app/images/oracle/oracle-logo.png
rename to apps/wizard-v1/src/app/images/oracle/oracle-logo.png
diff --git a/src/app/images/phasetwo-logos/logo_phase_slash.svg b/apps/wizard-v1/src/app/images/phasetwo-logos/logo_phase_slash.svg
similarity index 100%
rename from src/app/images/phasetwo-logos/logo_phase_slash.svg
rename to apps/wizard-v1/src/app/images/phasetwo-logos/logo_phase_slash.svg
diff --git a/src/app/images/pingone/index.ts b/apps/wizard-v1/src/app/images/pingone/index.ts
similarity index 100%
rename from src/app/images/pingone/index.ts
rename to apps/wizard-v1/src/app/images/pingone/index.ts
diff --git a/src/app/images/pingone/pingone-logo.svg b/apps/wizard-v1/src/app/images/pingone/pingone-logo.svg
similarity index 100%
rename from src/app/images/pingone/pingone-logo.svg
rename to apps/wizard-v1/src/app/images/pingone/pingone-logo.svg
diff --git a/src/app/images/pingone/pingone_saml_1.png b/apps/wizard-v1/src/app/images/pingone/pingone_saml_1.png
similarity index 100%
rename from src/app/images/pingone/pingone_saml_1.png
rename to apps/wizard-v1/src/app/images/pingone/pingone_saml_1.png
diff --git a/src/app/images/pingone/pingone_saml_2.png b/apps/wizard-v1/src/app/images/pingone/pingone_saml_2.png
similarity index 100%
rename from src/app/images/pingone/pingone_saml_2.png
rename to apps/wizard-v1/src/app/images/pingone/pingone_saml_2.png
diff --git a/src/app/images/pingone/pingone_saml_3.png b/apps/wizard-v1/src/app/images/pingone/pingone_saml_3.png
similarity index 100%
rename from src/app/images/pingone/pingone_saml_3.png
rename to apps/wizard-v1/src/app/images/pingone/pingone_saml_3.png
diff --git a/src/app/images/pingone/pingone_saml_4.png b/apps/wizard-v1/src/app/images/pingone/pingone_saml_4.png
similarity index 100%
rename from src/app/images/pingone/pingone_saml_4.png
rename to apps/wizard-v1/src/app/images/pingone/pingone_saml_4.png
diff --git a/src/app/images/pingone/pingone_saml_5.png b/apps/wizard-v1/src/app/images/pingone/pingone_saml_5.png
similarity index 100%
rename from src/app/images/pingone/pingone_saml_5.png
rename to apps/wizard-v1/src/app/images/pingone/pingone_saml_5.png
diff --git a/src/app/images/pingone/pingone_saml_6.png b/apps/wizard-v1/src/app/images/pingone/pingone_saml_6.png
similarity index 100%
rename from src/app/images/pingone/pingone_saml_6.png
rename to apps/wizard-v1/src/app/images/pingone/pingone_saml_6.png
diff --git a/src/app/images/pingone/pingone_saml_7.png b/apps/wizard-v1/src/app/images/pingone/pingone_saml_7.png
similarity index 100%
rename from src/app/images/pingone/pingone_saml_7.png
rename to apps/wizard-v1/src/app/images/pingone/pingone_saml_7.png
diff --git a/src/app/images/pingone/pingone_saml_8.png b/apps/wizard-v1/src/app/images/pingone/pingone_saml_8.png
similarity index 100%
rename from src/app/images/pingone/pingone_saml_8.png
rename to apps/wizard-v1/src/app/images/pingone/pingone_saml_8.png
diff --git a/src/app/images/pingone/pingone_saml_9.png b/apps/wizard-v1/src/app/images/pingone/pingone_saml_9.png
similarity index 100%
rename from src/app/images/pingone/pingone_saml_9.png
rename to apps/wizard-v1/src/app/images/pingone/pingone_saml_9.png
diff --git a/src/app/images/provider-logos/active-directory.svg b/apps/wizard-v1/src/app/images/provider-logos/active-directory.svg
similarity index 100%
rename from src/app/images/provider-logos/active-directory.svg
rename to apps/wizard-v1/src/app/images/provider-logos/active-directory.svg
diff --git a/src/app/images/provider-logos/auth0_logo.png b/apps/wizard-v1/src/app/images/provider-logos/auth0_logo.png
similarity index 100%
rename from src/app/images/provider-logos/auth0_logo.png
rename to apps/wizard-v1/src/app/images/provider-logos/auth0_logo.png
diff --git a/src/app/images/provider-logos/aws.jpg b/apps/wizard-v1/src/app/images/provider-logos/aws.jpg
similarity index 100%
rename from src/app/images/provider-logos/aws.jpg
rename to apps/wizard-v1/src/app/images/provider-logos/aws.jpg
diff --git a/src/app/images/provider-logos/cyberark_logo.svg b/apps/wizard-v1/src/app/images/provider-logos/cyberark_logo.svg
similarity index 100%
rename from src/app/images/provider-logos/cyberark_logo.svg
rename to apps/wizard-v1/src/app/images/provider-logos/cyberark_logo.svg
diff --git a/src/app/images/provider-logos/google-workspace-logo.svg b/apps/wizard-v1/src/app/images/provider-logos/google-workspace-logo.svg
similarity index 100%
rename from src/app/images/provider-logos/google-workspace-logo.svg
rename to apps/wizard-v1/src/app/images/provider-logos/google-workspace-logo.svg
diff --git a/src/app/images/provider-logos/google_logo.svg b/apps/wizard-v1/src/app/images/provider-logos/google_logo.svg
similarity index 100%
rename from src/app/images/provider-logos/google_logo.svg
rename to apps/wizard-v1/src/app/images/provider-logos/google_logo.svg
diff --git a/src/app/images/provider-logos/jumpcloud_logo.svg b/apps/wizard-v1/src/app/images/provider-logos/jumpcloud_logo.svg
similarity index 100%
rename from src/app/images/provider-logos/jumpcloud_logo.svg
rename to apps/wizard-v1/src/app/images/provider-logos/jumpcloud_logo.svg
diff --git a/src/app/images/provider-logos/ldap_logo.svg b/apps/wizard-v1/src/app/images/provider-logos/ldap_logo.svg
similarity index 100%
rename from src/app/images/provider-logos/ldap_logo.svg
rename to apps/wizard-v1/src/app/images/provider-logos/ldap_logo.svg
diff --git a/src/app/images/provider-logos/msft_entraid.svg b/apps/wizard-v1/src/app/images/provider-logos/msft_entraid.svg
similarity index 100%
rename from src/app/images/provider-logos/msft_entraid.svg
rename to apps/wizard-v1/src/app/images/provider-logos/msft_entraid.svg
diff --git a/src/app/images/provider-logos/okta_logo.png b/apps/wizard-v1/src/app/images/provider-logos/okta_logo.png
similarity index 100%
rename from src/app/images/provider-logos/okta_logo.png
rename to apps/wizard-v1/src/app/images/provider-logos/okta_logo.png
diff --git a/src/app/images/provider-logos/onelogin_logo.png b/apps/wizard-v1/src/app/images/provider-logos/onelogin_logo.png
similarity index 100%
rename from src/app/images/provider-logos/onelogin_logo.png
rename to apps/wizard-v1/src/app/images/provider-logos/onelogin_logo.png
diff --git a/src/app/images/provider-logos/openid_logo.png b/apps/wizard-v1/src/app/images/provider-logos/openid_logo.png
similarity index 100%
rename from src/app/images/provider-logos/openid_logo.png
rename to apps/wizard-v1/src/app/images/provider-logos/openid_logo.png
diff --git a/src/app/images/provider-logos/ping_federate_logo.png b/apps/wizard-v1/src/app/images/provider-logos/ping_federate_logo.png
similarity index 100%
rename from src/app/images/provider-logos/ping_federate_logo.png
rename to apps/wizard-v1/src/app/images/provider-logos/ping_federate_logo.png
diff --git a/src/app/images/provider-logos/ping_one_logo.svg b/apps/wizard-v1/src/app/images/provider-logos/ping_one_logo.svg
similarity index 100%
rename from src/app/images/provider-logos/ping_one_logo.svg
rename to apps/wizard-v1/src/app/images/provider-logos/ping_one_logo.svg
diff --git a/src/app/images/provider-logos/saml_logo.svg b/apps/wizard-v1/src/app/images/provider-logos/saml_logo.svg
similarity index 100%
rename from src/app/images/provider-logos/saml_logo.svg
rename to apps/wizard-v1/src/app/images/provider-logos/saml_logo.svg
diff --git a/src/app/images/provider-logos/vmware_logo.svg b/apps/wizard-v1/src/app/images/provider-logos/vmware_logo.svg
similarity index 100%
rename from src/app/images/provider-logos/vmware_logo.svg
rename to apps/wizard-v1/src/app/images/provider-logos/vmware_logo.svg
diff --git a/src/app/images/salesforce/COMMON/salesforce-0.png b/apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-0.png
similarity index 100%
rename from src/app/images/salesforce/COMMON/salesforce-0.png
rename to apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-0.png
diff --git a/src/app/images/salesforce/COMMON/salesforce-1.png b/apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-1.png
similarity index 100%
rename from src/app/images/salesforce/COMMON/salesforce-1.png
rename to apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-1.png
diff --git a/src/app/images/salesforce/COMMON/salesforce-2.png b/apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-2.png
similarity index 100%
rename from src/app/images/salesforce/COMMON/salesforce-2.png
rename to apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-2.png
diff --git a/src/app/images/salesforce/COMMON/salesforce-3.png b/apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-3.png
similarity index 100%
rename from src/app/images/salesforce/COMMON/salesforce-3.png
rename to apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-3.png
diff --git a/src/app/images/salesforce/COMMON/salesforce-4.png b/apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-4.png
similarity index 100%
rename from src/app/images/salesforce/COMMON/salesforce-4.png
rename to apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-4.png
diff --git a/src/app/images/salesforce/COMMON/salesforce-5.png b/apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-5.png
similarity index 100%
rename from src/app/images/salesforce/COMMON/salesforce-5.png
rename to apps/wizard-v1/src/app/images/salesforce/COMMON/salesforce-5.png
diff --git a/src/app/images/salesforce/OIDC/salesforce_oidc_0.png b/apps/wizard-v1/src/app/images/salesforce/OIDC/salesforce_oidc_0.png
similarity index 100%
rename from src/app/images/salesforce/OIDC/salesforce_oidc_0.png
rename to apps/wizard-v1/src/app/images/salesforce/OIDC/salesforce_oidc_0.png
diff --git a/src/app/images/salesforce/OIDC/salesforce_oidc_1.png b/apps/wizard-v1/src/app/images/salesforce/OIDC/salesforce_oidc_1.png
similarity index 100%
rename from src/app/images/salesforce/OIDC/salesforce_oidc_1.png
rename to apps/wizard-v1/src/app/images/salesforce/OIDC/salesforce_oidc_1.png
diff --git a/src/app/images/salesforce/OIDC/salesforce_oidc_2.png b/apps/wizard-v1/src/app/images/salesforce/OIDC/salesforce_oidc_2.png
similarity index 100%
rename from src/app/images/salesforce/OIDC/salesforce_oidc_2.png
rename to apps/wizard-v1/src/app/images/salesforce/OIDC/salesforce_oidc_2.png
diff --git a/src/app/images/salesforce/OIDC/salesforce_oidc_3.png b/apps/wizard-v1/src/app/images/salesforce/OIDC/salesforce_oidc_3.png
similarity index 100%
rename from src/app/images/salesforce/OIDC/salesforce_oidc_3.png
rename to apps/wizard-v1/src/app/images/salesforce/OIDC/salesforce_oidc_3.png
diff --git a/src/app/images/salesforce/OIDC/salesforce_oidc_4.png b/apps/wizard-v1/src/app/images/salesforce/OIDC/salesforce_oidc_4.png
similarity index 100%
rename from src/app/images/salesforce/OIDC/salesforce_oidc_4.png
rename to apps/wizard-v1/src/app/images/salesforce/OIDC/salesforce_oidc_4.png
diff --git a/src/app/images/salesforce/SAML/salesforce_saml_0.png b/apps/wizard-v1/src/app/images/salesforce/SAML/salesforce_saml_0.png
similarity index 100%
rename from src/app/images/salesforce/SAML/salesforce_saml_0.png
rename to apps/wizard-v1/src/app/images/salesforce/SAML/salesforce_saml_0.png
diff --git a/src/app/images/salesforce/SAML/salesforce_saml_1.png b/apps/wizard-v1/src/app/images/salesforce/SAML/salesforce_saml_1.png
similarity index 100%
rename from src/app/images/salesforce/SAML/salesforce_saml_1.png
rename to apps/wizard-v1/src/app/images/salesforce/SAML/salesforce_saml_1.png
diff --git a/src/app/images/salesforce/SAML/salesforce_saml_2.png b/apps/wizard-v1/src/app/images/salesforce/SAML/salesforce_saml_2.png
similarity index 100%
rename from src/app/images/salesforce/SAML/salesforce_saml_2.png
rename to apps/wizard-v1/src/app/images/salesforce/SAML/salesforce_saml_2.png
diff --git a/src/app/images/salesforce/SAML/salesforce_saml_3.png b/apps/wizard-v1/src/app/images/salesforce/SAML/salesforce_saml_3.png
similarity index 100%
rename from src/app/images/salesforce/SAML/salesforce_saml_3.png
rename to apps/wizard-v1/src/app/images/salesforce/SAML/salesforce_saml_3.png
diff --git a/src/app/images/salesforce/SAML/salesforce_saml_4.png b/apps/wizard-v1/src/app/images/salesforce/SAML/salesforce_saml_4.png
similarity index 100%
rename from src/app/images/salesforce/SAML/salesforce_saml_4.png
rename to apps/wizard-v1/src/app/images/salesforce/SAML/salesforce_saml_4.png
diff --git a/src/app/images/salesforce/salesforce-logo.png b/apps/wizard-v1/src/app/images/salesforce/salesforce-logo.png
similarity index 100%
rename from src/app/images/salesforce/salesforce-logo.png
rename to apps/wizard-v1/src/app/images/salesforce/salesforce-logo.png
diff --git a/src/app/index.tsx b/apps/wizard-v1/src/app/index.tsx
similarity index 100%
rename from src/app/index.tsx
rename to apps/wizard-v1/src/app/index.tsx
diff --git a/src/app/routes.tsx b/apps/wizard-v1/src/app/routes.tsx
similarity index 100%
rename from src/app/routes.tsx
rename to apps/wizard-v1/src/app/routes.tsx
diff --git a/src/app/services/DashboardData.ts b/apps/wizard-v1/src/app/services/DashboardData.ts
similarity index 100%
rename from src/app/services/DashboardData.ts
rename to apps/wizard-v1/src/app/services/DashboardData.ts
diff --git a/src/app/services/app-settings.ts b/apps/wizard-v1/src/app/services/app-settings.ts
similarity index 100%
rename from src/app/services/app-settings.ts
rename to apps/wizard-v1/src/app/services/app-settings.ts
diff --git a/src/app/services/feature-flags/flags-service.ts b/apps/wizard-v1/src/app/services/feature-flags/flags-service.ts
similarity index 100%
rename from src/app/services/feature-flags/flags-service.ts
rename to apps/wizard-v1/src/app/services/feature-flags/flags-service.ts
diff --git a/src/app/services/feature-flags/index.ts b/apps/wizard-v1/src/app/services/feature-flags/index.ts
similarity index 100%
rename from src/app/services/feature-flags/index.ts
rename to apps/wizard-v1/src/app/services/feature-flags/index.ts
diff --git a/src/app/services/index.ts b/apps/wizard-v1/src/app/services/index.ts
similarity index 100%
rename from src/app/services/index.ts
rename to apps/wizard-v1/src/app/services/index.ts
diff --git a/src/app/store/index.ts b/apps/wizard-v1/src/app/store/index.ts
similarity index 100%
rename from src/app/store/index.ts
rename to apps/wizard-v1/src/app/store/index.ts
diff --git a/src/app/store/store.ts b/apps/wizard-v1/src/app/store/store.ts
similarity index 100%
rename from src/app/store/store.ts
rename to apps/wizard-v1/src/app/store/store.ts
diff --git a/src/app/styles/app.css b/apps/wizard-v1/src/app/styles/app.css
similarity index 100%
rename from src/app/styles/app.css
rename to apps/wizard-v1/src/app/styles/app.css
diff --git a/src/app/styles/index.css b/apps/wizard-v1/src/app/styles/index.css
similarity index 100%
rename from src/app/styles/index.css
rename to apps/wizard-v1/src/app/styles/index.css
diff --git a/src/app/utils/Loading.tsx b/apps/wizard-v1/src/app/utils/Loading.tsx
similarity index 100%
rename from src/app/utils/Loading.tsx
rename to apps/wizard-v1/src/app/utils/Loading.tsx
diff --git a/src/app/utils/generate-id.ts b/apps/wizard-v1/src/app/utils/generate-id.ts
similarity index 100%
rename from src/app/utils/generate-id.ts
rename to apps/wizard-v1/src/app/utils/generate-id.ts
diff --git a/src/app/utils/utils.ts b/apps/wizard-v1/src/app/utils/utils.ts
similarity index 100%
rename from src/app/utils/utils.ts
rename to apps/wizard-v1/src/app/utils/utils.ts
diff --git a/src/index.html b/apps/wizard-v1/src/index.html
similarity index 100%
rename from src/index.html
rename to apps/wizard-v1/src/index.html
diff --git a/src/index.tsx b/apps/wizard-v1/src/index.tsx
similarity index 100%
rename from src/index.tsx
rename to apps/wizard-v1/src/index.tsx
diff --git a/src/keycloak.json b/apps/wizard-v1/src/keycloak.json
similarity index 60%
rename from src/keycloak.json
rename to apps/wizard-v1/src/keycloak.json
index a0e8211f..ade82997 100644
--- a/src/keycloak.json
+++ b/apps/wizard-v1/src/keycloak.json
@@ -1,6 +1,6 @@
{
- "realm": "cloud",
- "auth-server-url": "https://app.phasetwo.io/auth",
+ "realm": "master",
+ "auth-server-url": "http://localhost:8080/auth",
"ssl-required": "external",
"resource": "idp-wizard",
"public-client": true,
diff --git a/src/keycloak.ts b/apps/wizard-v1/src/keycloak.ts
similarity index 100%
rename from src/keycloak.ts
rename to apps/wizard-v1/src/keycloak.ts
diff --git a/src/silent-check-sso.html b/apps/wizard-v1/src/silent-check-sso.html
similarity index 100%
rename from src/silent-check-sso.html
rename to apps/wizard-v1/src/silent-check-sso.html
diff --git a/src/site.webmanifest b/apps/wizard-v1/src/site.webmanifest
similarity index 100%
rename from src/site.webmanifest
rename to apps/wizard-v1/src/site.webmanifest
diff --git a/src/typings.d.ts b/apps/wizard-v1/src/typings.d.ts
similarity index 100%
rename from src/typings.d.ts
rename to apps/wizard-v1/src/typings.d.ts
diff --git a/stylePaths.js b/apps/wizard-v1/stylePaths.js
similarity index 100%
rename from stylePaths.js
rename to apps/wizard-v1/stylePaths.js
diff --git a/test-setup.js b/apps/wizard-v1/test-setup.js
similarity index 100%
rename from test-setup.js
rename to apps/wizard-v1/test-setup.js
diff --git a/tsconfig.json b/apps/wizard-v1/tsconfig.json
similarity index 100%
rename from tsconfig.json
rename to apps/wizard-v1/tsconfig.json
diff --git a/webpack.common.js b/apps/wizard-v1/webpack.common.js
similarity index 100%
rename from webpack.common.js
rename to apps/wizard-v1/webpack.common.js
diff --git a/webpack.dev.js b/apps/wizard-v1/webpack.dev.js
similarity index 100%
rename from webpack.dev.js
rename to apps/wizard-v1/webpack.dev.js
diff --git a/webpack.prod.js b/apps/wizard-v1/webpack.prod.js
similarity index 100%
rename from webpack.prod.js
rename to apps/wizard-v1/webpack.prod.js
diff --git a/apps/wizard-v2/.env.local.sample b/apps/wizard-v2/.env.local.sample
new file mode 100644
index 00000000..51545283
--- /dev/null
+++ b/apps/wizard-v2/.env.local.sample
@@ -0,0 +1,22 @@
+# Copy this to .env.local
+
+# --- Mock mode (no Keycloak required) ---
+# Set to "true" to bypass Keycloak entirely during development.
+VITE_OIDC_USE_MOCK=false
+
+# --- Real Keycloak (docker/docker-compose.yml) ---
+# These values match the realm-export.json dev setup out of the box.
+# Run: cd docker && docker compose up
+VITE_OIDC_ISSUER_URI=http://localhost:8080/auth/realms/wizard
+VITE_OIDC_CLIENT_ID=wizard-v2-dev
+
+# Enable verbose oidc-spa logs
+VITE_OIDC_SPA_DEBUG=false
+
+# --- Wizard leave-confirmation guard ---
+# When "true", suppresses the "Leave this wizard?" prompt that normally fires
+# when navigating away from an in-progress wizard. Useful for e2e tests and
+# staging environments where the prompt gets in the way. The guard is also
+# disabled automatically in `vite dev` (import.meta.env.DEV) regardless of
+# this setting.
+VITE_WIZARD_DISABLE_LEAVE_GUARD=false
diff --git a/apps/wizard-v2/.gitignore b/apps/wizard-v2/.gitignore
new file mode 100644
index 00000000..324ef75f
--- /dev/null
+++ b/apps/wizard-v2/.gitignore
@@ -0,0 +1,29 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Playwright
+/playwright-report/
+/test-results/
+e2e/.auth/*.json
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/apps/wizard-v2/AGENTS.md b/apps/wizard-v2/AGENTS.md
new file mode 100644
index 00000000..e9efc4d9
--- /dev/null
+++ b/apps/wizard-v2/AGENTS.md
@@ -0,0 +1,444 @@
+# wizard-v2 — Agent Context
+
+This file is the authoritative context document for AI agents working on wizard-v2. Read it before making changes. It covers architecture decisions, key patterns, current state, and what comes next.
+
+---
+
+## What this project is
+
+wizard-v2 is a rewrite of the Phase Two IDP (Identity Provider) Wizard — a Keycloak extension that guides administrators through connecting an external identity provider (Okta, Entra ID, Google, etc.) to a Keycloak realm.
+
+**The core goal:** replace per-provider React component trees (wizard-v1) with a declarative JSON-driven model. Each wizard is a JSON file. A generic runtime engine reads the JSON and renders the wizard. Adding a new provider = writing a new JSON file, not writing new components.
+
+**Deployment context:** wizard-v2 is a Vite SPA bundled into a Keycloak JAR via Maven's `frontend-maven-plugin`. When deployed, it runs inside Keycloak at a URL like `https://keycloak.example.com/realms/{realm}/wizard/`. The root `pom.xml` controls which app gets built into the JAR (`workingDirectory` in the Maven config — currently pointing at `apps/wizard-v1`; switch to `apps/wizard-v2` when ready).
+
+---
+
+## Monorepo structure
+
+```
+idp-wizard/ ← Maven project root
+├── pom.xml ← Maven build; workingDirectory selects which app builds
+├── pnpm-workspace.yaml ← pnpm workspace: apps/*
+├── apps/
+│ ├── wizard-v1/ ← PatternFly + webpack + Redux (production)
+│ └── wizard-v2/ ← Vite + shadcn + Tailwind (in development)
+└── README.md
+```
+
+All work described in this file is inside `apps/wizard-v2/`.
+
+---
+
+## Stack
+
+| Layer | Choice | Why |
+| --------- | ----------------------------------- | ---------------------------------------------------------- |
+| Build | Vite 8 | Fast, modern, ESM-native |
+| UI | React 19 + shadcn/ui (new-york) | Component library matching Phase Two dashboard-v2 |
+| Styling | Tailwind CSS v4 | CSS-first, no separate config file; OKLCH color tokens |
+| Routing | TanStack Router (file-based) | Full type-safe routing with `validateSearch`, `beforeLoad` |
+| Auth | oidc-spa v10 | OIDC against Keycloak; `withAutoLogin()`, no token schema |
+| API types | openapi-typescript + openapi-fetch | Typed clients from OpenAPI specs, no Redux needed |
+| State | useReducer (local to wizard runner) | Lightweight; no Redux, no global store |
+| Testing | Playwright | E2E, Page Object Model |
+
+---
+
+## File structure
+
+```
+apps/wizard-v2/
+├── docker/
+│ ├── docker-compose.yml # Dev Keycloak (Phase Two image, pre-configured)
+│ └── realm-export.json # Auto-imported: realm "wizard", client "wizard-v2-dev", test user
+├── e2e/
+│ ├── fixtures/test.ts # Extended Playwright fixture with typed page objects
+│ ├── pages/
+│ │ ├── ProviderSelectorPage.ts # Page object: landing page
+│ │ └── WizardPage.ts # Page object: wizard + protocol picker
+│ └── provider-selector.spec.ts # Smoke tests (navigation, search, help dialog)
+├── openapi-codegen/
+│ └── gen.ts # Fetches both OpenAPI specs and generates src/api/types/
+├── public/
+│ ├── favicons/ # Browser favicon assets
+│ ├── phasetwo-logos/ # Phase Two brand SVGs (logo_phase_slash.svg is default)
+│ ├── provider-logos/ # Per-provider logos for the selector UI
+│ └── wizards/ # Step screenshots: /wizards/{provider}/saml/step1.png etc.
+├── src/
+│ ├── api/
+│ │ ├── clients.ts # createOrgsClient() + createAdminClient() — typed, auth-injecting
+│ │ └── types/
+│ │ ├── orgs.d.ts # Generated: Phase Two Orgs API (org-scoped IDPs)
+│ │ └── admin.d.ts # Generated: Keycloak Admin API (realm-wide IDPs)
+│ ├── components/ui/ # shadcn/ui components (button, dialog, input, …)
+│ ├── context/
+│ │ └── WizardContext.tsx # WizardContextValue, WizardState, WizardAction, wizardReducer
+│ ├── data/
+│ │ └── providers.ts # Provider registry: id, name, logo, protocols[]
+│ ├── hooks/
+│ │ ├── useWizardConfig.ts # Fetches {issuerUri}/wizard/config.json (logoUrl, appName, apiMode…)
+│ │ └── useWizardApi.ts # Derives API context from env + orgId + config
+│ ├── lib/
+│ │ ├── alias.ts # getOrCreateAlias() + clearAlias() — sessionStorage
+│ │ └── utils.ts # cn() helper (clsx + tailwind-merge)
+│ ├── routes/
+│ │ ├── __root.tsx # Root: OidcInitializationGate + devtools
+│ │ ├── _authenticated.tsx # Layout: home button (hidden on index)
+│ │ ├── _authenticated.index.tsx # Provider selector (/)
+│ │ ├── _authenticated.wizard.$providerId.tsx # Protocol picker
+│ │ └── _authenticated.wizard.$providerId.$protocol.tsx # Wizard runner ← main work area
+│ ├── index.css # Tailwind v4 + Phase Two OKLCH color tokens
+│ ├── main.tsx # RouterProvider entry point
+│ └── oidc.ts # oidc-spa: useOidc, fetchWithAuth, OidcInitializationGate
+├── wizards/
+│ ├── saml/
+│ │ └── saml.json # Generic SAML wizard (id="saml") ← canonical schema reference
+│ ├── openid/
+│ │ └── oidc.json # Generic OpenID wizard (id="openid") — not yet written
+│ ├── ldap/
+│ │ └── ldap.json # Generic LDAP wizard (id="ldap") — not yet written
+│ └── {providerId}/
+│ └── {protocol}.json # e.g. okta/saml.json, entraid/saml.json — not yet written
+├── .env.local.sample # Environment variable template
+├── components.json # shadcn/ui config
+├── playwright.config.ts # Playwright E2E config (mock OIDC, auto-starts Vite)
+└── AGENTS.md # ← this file
+```
+
+---
+
+## Environment
+
+```
+VITE_OIDC_USE_MOCK=true # Skip Keycloak entirely (UI-only dev)
+VITE_OIDC_ISSUER_URI=http://localhost:8180/realms/wizard
+VITE_OIDC_CLIENT_ID=wizard-v2-dev
+VITE_OIDC_SPA_DEBUG=false
+```
+
+Parse `VITE_OIDC_ISSUER_URI` to get `serverUrl` and `realm` — the regex in `useWizardApi.ts` handles both `/auth/realms/` (legacy) and `/realms/` (modern) Keycloak paths.
+
+Dev Keycloak: `cd docker && docker compose up`
+Test user: `wizard` / `password` with `realm-admin` role.
+
+---
+
+## Routing
+
+TanStack Router file-based routing. The flat file naming convention uses dots for path segments:
+
+| File | Route |
+| ------------------------------------------------- | ------------------------------------------ |
+| `_authenticated.tsx` | Layout wrapper (no path segment, pathless) |
+| `_authenticated.index.tsx` | `/` |
+| `_authenticated.wizard.$providerId.tsx` | `/wizard/:providerId` |
+| `_authenticated.wizard.$providerId.$protocol.tsx` | `/wizard/:providerId/:protocol` |
+
+**Critical gotcha — parent `beforeLoad` runs for child routes.** `$protocol` is a child of `$providerId` in the route tree. So the `$providerId` route's `beforeLoad` runs when navigating to `/wizard/adfs/saml`. Do not add redirects in `$providerId`'s `beforeLoad` that could target child routes — this causes infinite redirect loops. The `$providerId` route's `beforeLoad` only validates that the provider exists.
+
+**Search params** (`?org_id=...`) are declared via `validateSearch: z.object({ org_id: z.string().optional() })` on each route that needs them (index, `$providerId`, `$protocol`). The `org_id` is passed forward through navigation calls so it persists across the full wizard flow.
+
+---
+
+## Organization context
+
+When the wizard is launched from a Phase Two organization (e.g., from the dashboard), `?org_id=abc123` is appended to the URL.
+
+- **`org_id` present → `apiMode: "cloud"`** → uses Phase Two Orgs API at `/{realm}/orgs/{orgId}/idps/...`
+- **`org_id` absent → `apiMode: "onprem"`** → uses Keycloak Admin API at `/admin/realms/{realm}/identity-provider/...`
+
+The `apiMode` can also be set via the realm config (`config.apiMode` from `useWizardConfig`), but `org_id` in the URL always takes precedence.
+
+Both endpoint sets are fully typed via the generated OpenAPI clients.
+
+---
+
+## API clients
+
+Two typed clients are available on `WizardContext`:
+
+```ts
+const { orgsClient, adminClient, activeClient, realm, orgId } =
+ useWizardContext();
+
+// Cloud (org-scoped) — Phase Two Orgs API
+const { data, error } = await orgsClient.POST("/{realm}/orgs/{orgId}/idps", {
+ params: { path: { realm, orgId: orgId! } },
+ body: { alias, providerId: "saml", hideOnLogin: true, config: metadata },
+});
+
+// Onprem (realm-wide) — Keycloak Admin API
+const { data, error } = await adminClient.POST(
+ "/admin/realms/{realm}/identity-provider/instances",
+ {
+ params: { path: { realm } },
+ body: { alias, providerId: "saml", hideOnLogin: true, config: metadata },
+ },
+);
+```
+
+Types are generated from the OpenAPI specs. Regenerate with `pnpm gen-api` when upstream specs change. The generated files (`src/api/types/orgs.d.ts`, `admin.d.ts`) are committed.
+
+Key endpoints:
+
+| Action | Cloud path | Onprem path |
+| ----------------- | ------------------------------------------------- | ------------------------------------------------------------------------ |
+| Validate metadata | `POST /{realm}/orgs/{orgId}/idps/import-config` | `POST /admin/realms/{realm}/identity-provider/import-config` |
+| Create IDP | `POST /{realm}/orgs/{orgId}/idps` | `POST /admin/realms/{realm}/identity-provider/instances` |
+| Add mapper | `POST /{realm}/orgs/{orgId}/idps/{alias}/mappers` | `POST /admin/realms/{realm}/identity-provider/instances/{alias}/mappers` |
+
+---
+
+## Wizard JSON schema (`wizards/generic/saml.json`)
+
+This is the canonical reference. All wizard JSON files follow this schema.
+
+### Top-level shape
+
+```jsonc
+{
+ "schemaVersion": "1.0",
+ "id": "generic-saml",
+ "providerId": "saml", // matches Provider.id in providers.ts
+ "protocol": "saml", // "saml" | "oidc" | "ldap"
+ "title": "Generic SAML",
+
+ "alias": {
+ "prefix": "generic-saml", // prefix for generated alias: "{prefix}-{6chars}"
+ "sessionKey": "p2_saml_saml" // sessionStorage key — unique per provider+protocol
+ },
+
+ "idpConfig": { // merged into the IDP creation request
+ "providerId": "saml",
+ "hideOnLogin": true,
+ "defaults": { ... } // merged into metadata before sending to Keycloak
+ },
+
+ "steps": [ ... ],
+ "forms": { ... },
+ "actions": { ... }
+}
+```
+
+### Steps
+
+Each step has:
+
+- `id` (number) — 1-indexed, sequential
+- `title` (string)
+- `type` (optional) — omit for normal steps; `"confirm"` for the final step
+- `enableNextWhen` (optional) — expression string: e.g. `"state.metadataValidated"`
+- `blocks` — array of UI blocks
+
+Block types:
+
+- `text` — `{ type: "text", content: "..." }`
+- `copy` — copyable value: `{ type: "copy", label: "ACS URL", value: "{{api.ssoUrl}}", hint: "..." }`
+- `formGroup` — renders a tabbed/exclusive set of forms: `{ type: "formGroup", id: "metadataInput", exclusive: true, forms: ["metadataUrl", "metadataFile", "metadataManual"] }`
+- `attributeTable` — two-column mapping display
+- `confirm` — final step confirmation button + result display
+
+### Template variables available in blocks and actions
+
+| Variable | Resolves to |
+| ----------------------- | ----------------------------------------------------- |
+| `{{api.entityId}}` | `{serverUrl}/realms/{realm}` |
+| `{{api.ssoUrl}}` | `{serverUrl}/realms/{realm}/broker/{alias}/endpoint` |
+| `{{api.samlMetadata}}` | `{serverUrl}/realms/{realm}/protocol/saml/descriptor` |
+| `{{api.adminLinkSaml}}` | Keycloak admin console link for the SAML IDP |
+| `{{api.adminLinkOidc}}` | Keycloak admin console link for the OIDC IDP |
+| `{{alias}}` | The generated alias for this wizard session |
+| `{{state.metadata}}` | The validated IDP config object from `import-config` |
+| `{{form.fieldId}}` | A field value from the currently active form |
+| `{{item.*}}` | Current item in a `foreach` action iteration |
+
+### Forms
+
+Each form in the `forms` dictionary has:
+
+- `title`, `description`
+- `fields` — array of `{ id, type, label, required, placeholder?, accept?, ... }`
+ - Field types: `text`, `url`, `file`
+- `submit` — `{ label: "Validate URL", action: "actionKey" }`
+
+### Actions
+
+Each action in the `actions` dictionary:
+
+```jsonc
+{
+ "endpoint": "importConfig", // named slot; runner resolves to actual URL from context
+ "method": "POST",
+ "contentType": "json", // "json" or "multipart"
+ "body": { ... }, // template vars resolved at call time
+ "foreach": [ ... ], // optional: iterate body over each item (used for mappers)
+ "onSuccess": {
+ "mergeIntoMetadata": "{{response}}", // merge response into state.metadata
+ "dispatch": ["METADATA_VALIDATED"], // fire reducer actions
+ "then": ["addSamlMappers", "clearAlias"] // chain follow-up actions
+ },
+ "messages": {
+ "success": "...",
+ "error": "..."
+ }
+}
+```
+
+Named endpoint slots (`endpoint` key):
+
+- `importConfig` — validates metadata; returns raw IDP config object
+- `createIdp` — creates the identity provider
+- `addMappers` — adds attribute mapper to an existing IDP
+
+Special action types (no `endpoint`):
+
+- `{ "type": "clearAlias" }` — removes alias from sessionStorage
+
+---
+
+## Wizard state (useReducer)
+
+State lives in `WizardContext` and is managed by `wizardReducer` in `src/context/WizardContext.tsx`.
+
+```ts
+interface WizardState {
+ alias: string; // stable for the session
+ currentStep: number; // the step currently displayed
+ stepIdReached: number; // furthest step reached (controls canJumpTo)
+ metadata: Record | null; // from import-config response
+ metadataValidated: boolean;
+ submitting: boolean;
+ submitted: boolean;
+ error: string | null;
+ result: string | null;
+ idpTestLink: string | null;
+}
+
+type WizardAction =
+ | { type: "ADVANCE_STEP"; toStep: number }
+ | { type: "SET_METADATA"; metadata: Record }
+ | { type: "METADATA_VALIDATED" }
+ | { type: "SUBMIT_START" }
+ | { type: "SUBMIT_SUCCESS"; result: string; idpTestLink?: string }
+ | { type: "SUBMIT_ERROR"; error: string }
+ | { type: "CLEAR_ERROR" };
+```
+
+---
+
+## Alias lifecycle
+
+Aliases give each wizard session a unique Keycloak IDP alias (e.g. `generic-saml-a1b2c3`). This prevents collisions when a user abandons a wizard and re-enters.
+
+- Generated on wizard entry via `getOrCreateAlias(sessionKey, prefix)` in `src/lib/alias.ts`
+- Stored in `sessionStorage` — survives page refresh within the same tab, auto-cleared on tab close
+- Cleared explicitly by the `clearAlias` action after successful IDP creation
+
+Session key format: `p2_{providerId}_{protocol}` — e.g. `p2_saml_saml`, `p2_okta_saml`.
+
+---
+
+## Wizard config (realm attributes)
+
+`useWizardConfig()` fetches `{issuerUri}/wizard/config.json` on load. This endpoint is served by the Keycloak extension and contains realm-level settings:
+
+```ts
+interface WizardConfig {
+ appName: string | null; // displayed above the provider selector card
+ logoUrl: string | null; // displayed above the provider selector card
+ displayName: string;
+ apiMode: "cloud" | "onprem" | "";
+ emailAsUsername: boolean; // affects SAML attribute mapper creation
+ enableDashboard: boolean;
+ enableLdap: boolean;
+ enableGroupMapping: boolean;
+ trustEmail: boolean; // passed to IDP creation payload
+}
+```
+
+If the endpoint is unreachable (local dev without the extension), all values fall back to safe defaults. The logo falls back to `/phasetwo-logos/logo_phase_slash.svg`.
+
+---
+
+## Provider selector (index route)
+
+- Centered card (`max-w-sm`, `rounded-xl`, `shadow-md`) on a flex-centered page
+- Phase Two slash logo + optional `appName` above the card (from `useWizardConfig`)
+- Search input with Fuse.js fuzzy matching (threshold 0.4, key: `name`)
+- Scrollable list (`max-h-72`, ~6 items visible at once)
+- Two groups: **Providers** (specific) → divider → **Generic** (saml/oidc/ldap)
+- Protocol badges: `saml`=blue, `oidc`=emerald, `ldap`=amber
+- "Not sure where to start?" link below the card → Dialog with step-by-step instructions
+- Single-protocol providers navigate directly to `/wizard/$providerId/$protocol`
+- Multi-protocol providers navigate to `/wizard/$providerId` (protocol picker)
+- `org_id` search param is forwarded through all navigation calls
+
+---
+
+## v1 → v2 patterns reference
+
+| v1 pattern | v2 equivalent |
+| --------------------------------------------------------- | ------------------------------------------------------------ |
+| Redux store + `state.settings.currentOrg` | `?org_id` URL search param |
+| Redux `state.settings.apiMode` | Derived in `useWizardApi` from `org_id` + config |
+| Keycloak JS adapter (`keycloak.token`) | `oidc-spa` `getOidc().getAccessToken()` |
+| `Axios` interceptor with Bearer token | `openapi-fetch` middleware (same pattern) |
+| `getAlias()` in `localStorage` | `getOrCreateAlias()` in `sessionStorage` |
+| `CreateIdp()` / `SamlAttributeMapper()` utility functions | `orgsClient.POST(...)` / `adminClient.POST(...)` typed calls |
+| Per-provider React component trees | Single `WizardRunner` + JSON wizard definition |
+| RTK Query hooks for feature flags | `useWizardConfig()` hook |
+| `usePrompt` for leave warning | Not yet implemented in v2 |
+| `useCreateTestIdpLink` | Not yet implemented in v2 |
+
+---
+
+## What is built
+
+- [x] Vite + React + Tailwind v4 + shadcn/ui project
+- [x] pnpm workspace monorepo (v1 and v2 side by side)
+- [x] TanStack Router file-based routing
+- [x] oidc-spa authentication (mock mode + real Keycloak)
+- [x] Dev Keycloak via Docker Compose (Phase Two image, auto-imported realm)
+- [x] Provider selector UI (fuzzy search, protocol badges, grouped list, help dialog)
+- [x] Protocol picker route
+- [x] Org context (`org_id` search param, apiMode switching)
+- [x] WizardContext with useReducer state
+- [x] Alias management (sessionStorage)
+- [x] useWizardApi — derives all API context from env + org_id + config
+- [x] Typed API clients (openapi-fetch + generated types from Phase Two + Keycloak OpenAPI specs)
+- [x] Wizard JSON schema (defined and documented, `wizards/generic/saml.json`)
+- [x] Playwright E2E scaffold (Page Object Model, mock OIDC, smoke tests)
+- [x] Home/back button in layout when inside a wizard
+
+## What is not yet built
+
+- [ ] **Wizard runner** — the component that reads a wizard JSON file and renders steps, forms, and blocks. This is the main remaining work.
+- [ ] **Action executor** — the runtime that resolves template variables and executes `actions` from the JSON (makes API calls, dispatches reducer actions, chains follow-up actions)
+- [ ] **Block renderers** — React components for each block type: `text`, `copy`, `formGroup`, `attributeTable`, `confirm`
+- [ ] **Form renderer** — renders form fields from the JSON `forms` dictionary, handles validation and submission
+- [ ] **Step navigation UI** — sidebar/stepper nav, next/back buttons, `enableNextWhen` gating
+- [ ] **Company-specific wizard JSON files** — `wizards/okta/saml.json`, `wizards/entraid/saml.json`, etc.
+- [ ] **OIDC wizard JSON** — `wizards/generic/oidc.json` (different flow: discovery URL + client credentials)
+- [ ] **LDAP wizard JSON** — `wizards/generic/ldap.json` (different API: LDAP component, not IDP)
+- [ ] **Leave-wizard confirmation prompt** (v1 used `usePrompt`)
+- [ ] **IDP test link** (post-creation link to test the IDP login, v1 used `useCreateTestIdpLink`)
+- [ ] **`emailAsUsername` + `usernameMapperImport` flag handling** in the mapper action
+
+---
+
+## Key decisions and rationale
+
+**No Redux in v2.** The dashboard-v2 uses RTK Query because it has complex server state with caching needs. The wizard is a linear flow — `useReducer` is sufficient and keeps the dependency footprint small.
+
+**`openapi-fetch` over hand-written URLs.** Eliminates a category of bugs (wrong path, wrong body shape) and auto-updates when specs change. The same OpenAPI specs used by dashboard-v2.
+
+**`sessionStorage` for alias.** v1 used `localStorage` which could leave stale aliases across browser sessions. `sessionStorage` scopes to the tab, so a new session always starts fresh.
+
+**JSON schema drives the wizard, not code.** The `actions` block in the JSON declares what API calls each step makes. The runner interprets this — the JSON author doesn't write API code. This is the core architectural bet of v2.
+
+**`org_id` in the URL, not a cookie or context.** Makes the wizard linkable from an org context (dashboard can link directly to the wizard with the org pre-scoped), and the URL is the single source of truth.
+
+**oidc-spa without `withExpectedDecodedIdTokenShape`.** Keycloak token schemas vary by realm configuration and Phase Two extensions. Skipping schema validation avoids runtime errors on unpredictable token fields. Add schema validation back only if specific fields are actively required and reliably present.
+
+**`$providerId` route does NOT redirect to `$protocol`.** This was originally in the `beforeLoad` for convenience (auto-skip the protocol picker for single-protocol providers). It was removed because `$protocol` is a child route of `$providerId` in the TanStack Router tree — the parent `beforeLoad` runs on child navigation too, causing an infinite redirect loop. The index page handles the single-protocol shortcut instead.
diff --git a/apps/wizard-v2/README.md b/apps/wizard-v2/README.md
new file mode 100644
index 00000000..7c8e1e2c
--- /dev/null
+++ b/apps/wizard-v2/README.md
@@ -0,0 +1,449 @@
+# wizard-v2
+
+A rewrite of the Phase Two IDP Wizard. Wizards are defined declaratively as JSON files and rendered by a generic runtime engine — no per-provider component trees. This replaces wizard-v1 once complete.
+
+## Stack
+
+- **Vite** — build tooling
+- **React 19** — UI
+- **Tailwind CSS v4** — styling
+- **shadcn/ui** (new-york style) — component library
+- **TanStack Router** — file-based routing with full type safety
+- **oidc-spa** — OIDC authentication against Keycloak
+- **openapi-fetch** — typed HTTP clients generated from OpenAPI specs
+
+## Project structure
+
+```
+wizard-v2/
+├── docker/
+│ ├── docker-compose.yml # Dev Keycloak (Phase Two image, pre-configured)
+│ └── realm-export.json # Auto-imported on first start: realm, client, test user
+├── e2e/
+│ ├── .auth/ # Saved login state (gitignored); .gitkeep tracks the dir
+│ ├── external-providers/
+│ │ ├── Auth0Page.ts # POM for Auth0 Dashboard
+│ │ ├── OktaPage.ts # POM for Okta Admin Console
+│ │ └── external-provider.spec.ts
+│ ├── fixtures/
+│ │ ├── test.ts # Playwright fixture with typed page objects
+│ │ └── test-saml-metadata.xml # Minimal SAML metadata for file upload tests
+│ ├── pages/
+│ │ ├── KeycloakLoginPage.ts
+│ │ ├── ProviderSelectorPage.ts
+│ │ └── WizardPage.ts
+│ ├── auth.setup.ts # OIDC login setup — saves storage state
+│ ├── global-setup.ts # Creates orgs + assigns users (integration mode)
+│ ├── organizations.spec.ts # Org management + org-scoped wizard tests
+│ ├── provider-selector.spec.ts
+│ └── wizard-completion.spec.ts # Full flow tests for all 21 wizards
+├── openapi-codegen/
+│ └── gen.ts # Generates typed API clients from OpenAPI specs
+├── public/
+│ ├── favicons/ # Favicon assets
+│ ├── phasetwo-logos/ # Phase Two brand assets
+│ ├── provider-logos/ # Per-provider logos for the selector UI
+│ └── wizards/ # Step screenshots, one folder per provider
+├── src/
+│ ├── api/
+│ │ ├── clients.ts # createOrgsClient / createAdminClient (openapi-fetch)
+│ │ └── types/
+│ │ ├── orgs.d.ts # Generated types — Phase Two Orgs API
+│ │ └── admin.d.ts # Generated types — Keycloak Admin API
+│ ├── components/
+│ │ ├── ui/ # shadcn/ui components
+│ │ └── wizard/
+│ │ ├── types.ts # TypeScript types for wizard JSON schema
+│ │ ├── resolveTemplate.ts # {{token}} template resolver
+│ │ ├── executeAction.ts # Action executor (HTTP calls, alias cleanup)
+│ │ ├── WizardRunner.tsx # Loads JSON, renders steps + navigation
+│ │ └── WizardStep.tsx # Renders individual step blocks
+│ ├── context/
+│ │ └── WizardContext.tsx # State, reducer, and React context
+│ ├── data/
+│ │ └── providers.ts # Provider registry (id, name, logo, protocols)
+│ ├── hooks/
+│ │ ├── useWizardApi.ts # Resolves API clients, endpoints, apiMode
+│ │ └── useWizardConfig.ts # Fetches realm config.json (logoUrl, appName…)
+│ ├── lib/
+│ │ ├── alias.ts # sessionStorage alias helpers
+│ │ └── utils.ts # cn() helper (clsx + tailwind-merge)
+│ ├── routes/
+│ │ ├── __root.tsx # Root — OidcInitializationGate
+│ │ ├── _authenticated.tsx # Layout — home button header
+│ │ ├── _authenticated.index.tsx # Provider selector (/)
+│ │ ├── _authenticated.wizard.$providerId.tsx # Layout wrapper — Outlet only
+│ │ ├── _authenticated.wizard.$providerId.index.tsx # Protocol picker
+│ │ └── _authenticated.wizard.$providerId.$protocol.tsx # Wizard page
+│ ├── index.css # Tailwind + Phase Two color scheme (OKLCH tokens)
+│ ├── main.tsx # TanStack RouterProvider entry point
+│ └── oidc.ts # oidc-spa setup: useOidc, fetchWithAuth, OidcInitializationGate
+├── wizards/
+│ ├── saml/
+│ │ └── saml.json # Generic SAML wizard definition
+│ └── /
+│ └── .json # Provider-specific wizard definitions
+├── .env.local.sample # Environment variable template
+├── playwright.config.ts # Playwright E2E config
+└── components.json # shadcn/ui config
+```
+
+## Architecture
+
+Wizards are JSON files in `wizards/`. Each file describes a complete wizard — steps, UI blocks, forms, actions, and API calls — without any bespoke React components. A runtime engine reads the JSON and renders the wizard generically.
+
+This means adding a new identity provider requires only a new JSON file, not a new component tree.
+
+### Wizard JSON schema
+
+Wizard files live at `wizards/{providerId}/{protocol}.json`. The runtime loads the file for the active provider and protocol. If no provider-specific file exists, the wizard shows a "not yet available" message — there is no generic fallback.
+
+Each wizard JSON has four top-level keys:
+
+| Key | Description |
+| --------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `steps` | Ordered list of wizard steps, each with an `id`, `title`, optional `enableNextWhen` expression, and a list of `blocks` |
+| `forms` | Named form definitions (fields, validation) rendered by `FormGroup` blocks |
+| `actions` | Named action definitions (HTTP calls, alias cleanup) invoked on form submit or confirm |
+| `alias` | Alias configuration — `sessionKey` for sessionStorage, `prefix` for generated alias strings |
+
+Template tokens in JSON values (`{{api.entityId}}`, `{{form.fieldId}}`, `{{state.metadata}}`, `{{alias}}`, `{{item.*}}`) are resolved at runtime from the wizard context.
+
+## API clients
+
+The wizard uses two typed HTTP clients generated from OpenAPI specs — one for the Phase Two Orgs API (cloud/organization mode) and one for the Keycloak Admin API (on-premises/realm-wide mode). Both are created in `src/api/clients.ts` using [openapi-fetch](https://openapi-ts.dev/openapi-fetch/).
+
+### Regenerating types
+
+```bash
+npx tsx openapi-codegen/gen.ts
+```
+
+This fetches the latest specs and writes:
+
+- `src/api/types/orgs.d.ts` — Phase Two Orgs API types
+- `src/api/types/admin.d.ts` — Keycloak Admin API types
+
+### Cloud vs. on-premises mode
+
+The wizard operates in one of two API modes depending on how it is launched:
+
+| Mode | Trigger | API used | Endpoint pattern |
+| ---------- | ----------------------------- | ------------------ | --------------------------------------------- |
+| **cloud** | `?org_id=` present in URL | Phase Two Orgs API | `/{realm}/orgs/{orgId}/idps/...` |
+| **onprem** | No `org_id` param | Keycloak Admin API | `/admin/realms/{realm}/identity-provider/...` |
+
+`useWizardApi` (in `src/hooks/useWizardApi.ts`) inspects the `org_id` search param to set `apiMode` and resolves the correct endpoint URLs and typed client for each mode. The wizard JSON actions reference named endpoint slots (`importConfig`, `createIdp`, `addMappers`) rather than raw URLs — these are resolved to the correct mode-specific URLs at runtime.
+
+### Endpoint reference
+
+| Slot | Cloud URL | On-prem URL |
+| -------------- | ------------------------------------------------- | ------------------------------------------------------------------------ |
+| `importConfig` | `POST /{realm}/orgs/{orgId}/idps/import-config` | `POST /admin/realms/{realm}/identity-provider/import-config` |
+| `createIdp` | `POST /{realm}/orgs/{orgId}/idps` | `POST /admin/realms/{realm}/identity-provider/instances` |
+| `addMappers` | `POST /{realm}/orgs/{orgId}/idps/{alias}/mappers` | `POST /admin/realms/{realm}/identity-provider/instances/{alias}/mappers` |
+
+### Realm and server URL
+
+Both are parsed from `VITE_OIDC_ISSUER_URI` at startup. The parser handles both legacy Keycloak paths (`/auth/realms/`) and modern paths (`/realms/`).
+
+### Realm config
+
+`useWizardConfig` fetches `{issuerUri}/wizard/config.json` and exposes optional realm-level overrides:
+
+| Key | Description |
+| ----------------- | ----------------------------------------------------------------------------- |
+| `logoUrl` | Replaces the Phase Two slash logo on the provider selector and wizard sidebar |
+| `logoUrlLight` | Optional theme-specific override used when the UI is in light mode |
+| `logoUrlDark` | Optional theme-specific override used when the UI is in dark mode |
+| `appName` | Shown above the provider search card |
+| `apiMode` | Override the auto-detected mode (`"cloud"` or `"onprem"`) |
+| `emailAsUsername` | Adds an email→username mapper when creating the IDP |
+
+If the file is missing or the fetch fails, defaults are used silently.
+
+#### Logo resolution
+
+Logos cascade through three levels (first match wins):
+
+1. **Theme-specific override** — `logoUrlDark` in dark mode, `logoUrlLight` in light mode
+2. **Single tenant override** — `logoUrl` (used for both themes)
+3. **Phase Two fallback** — `/phasetwo-logos/{light|dark}/logo_phase_slash.svg`, served from `public/`
+
+Set `logoUrlLight` / `logoUrlDark` only if your brand logo doesn't render well across both backgrounds. Tenants that don't care about dark mode can keep using `logoUrl` alone — it's still honored.
+
+## IDP alias
+
+Each wizard session generates a unique IDP alias (e.g. `saml-saml-a1b2c3`) stored in `sessionStorage`. The alias is:
+
+- Stable for the duration of the browser tab/session
+- Used as the IDP identifier in all API calls during the wizard
+- Cleared from `sessionStorage` on successful wizard completion (via the `clearAlias` action)
+- Scoped per provider+protocol pair so multiple concurrent wizard sessions don't collide
+
+## Local development
+
+### 1. Environment
+
+Copy the env sample. The defaults match the local Docker Keycloak setup:
+
+```bash
+cp .env.local.sample .env.local
+```
+
+| Variable | Default | Description |
+| ---------------------- | ------------------------------------------ | ---------------------------- |
+| `VITE_OIDC_ISSUER_URI` | `http://localhost:8080/auth/realms/wizard` | Keycloak realm URL |
+| `VITE_OIDC_CLIENT_ID` | `wizard-v2-dev` | Keycloak client ID |
+| `VITE_OIDC_SPA_DEBUG` | `false` | Enable verbose oidc-spa logs |
+
+### 2. Start Keycloak
+
+```bash
+cd docker
+docker compose up
+```
+
+On first run, Keycloak auto-imports `realm-export.json` which creates:
+
+- **Realm:** `wizard`
+- **Client:** `wizard-v2-dev` (public, redirect URI: `http://localhost:5173/*`)
+- **Test user:** see below
+
+Keycloak data persists in a named Docker volume between restarts.
+
+> If the volume already exists from a previous run with bad state, recreate it cleanly:
+>
+> ```bash
+> docker compose down -v && docker compose up
+> ```
+
+#### Dev test users
+
+| Username | Password | Email | Roles |
+| ------------ | ---------- | ------------------------ | ------------- |
+| `wizard` | `password` | `wizard@example.com` | `realm-admin` |
+| `org-admin` | `password` | `org-admin@example.com` | — |
+| `org-member` | `password` | `org-member@example.com` | — |
+
+`wizard` has full `realm-admin` permissions, which the wizard requires to create identity providers via the Keycloak Admin API. `org-admin` and `org-member` are plain users used by integration tests; `global-setup.ts` assigns them to test organizations at runtime.
+
+#### SCIM
+
+Enable SCIM on the Organizations > Gear icon > Select SCIM checkbox.
+
+More SCIM details: https://github.com/p2-inc/keycloak-orgs/blob/main/docs/scim.md
+
+### 3. Start the dev server
+
+```bash
+pnpm dev
+```
+
+The app runs at `http://localhost:5173`. Log in with `wizard` / `password`.
+
+To test organization (cloud) mode, append `?org_id=` to the URL. The debug strip in dev mode shows the resolved `apiMode`, `orgId`, `realm`, alias, and endpoint URLs.
+
+### Mock mode
+
+To work on UI without a running Keycloak instance, set `VITE_OIDC_USE_MOCK=true` in `.env.local`. oidc-spa returns a mock authenticated user and all auth flows are bypassed.
+
+## Adding shadcn components
+
+```bash
+pnpm dlx shadcn@latest add button
+```
+
+Components are added to `src/components/ui/` and automatically use the Phase Two color scheme defined in `src/index.css`.
+
+## Static assets
+
+Assets in `public/` are served at the root path with no imports required.
+
+| Path | Usage |
+| ---------------------- | -------------------------------------------------- |
+| `/favicons/` | Browser favicon assets |
+| `/phasetwo-logos/` | Phase Two brand SVGs |
+| `/provider-logos/` | Provider logos used in the selector UI |
+| `/wizards//` | Step screenshots referenced from wizard JSON files |
+
+Example reference in a wizard JSON: `"/wizards/okta/saml/step1.png"`
+
+## Testing
+
+E2E tests use [Playwright](https://playwright.dev/) and the Page Object Model pattern. There are two test modes — a fast mock mode for everyday development and a full integration mode that drives a real Keycloak server.
+
+### Intent
+
+The test suite is designed to verify the wizard at every layer:
+
+- **UI and navigation** — does the step sequencing work? Are copy blocks, forms, and attribute tables rendered correctly? Does search and help work on the provider selector?
+- **Wizard completion** — can each provider's wizard flow be driven from start to finish, including form submission and final IDP creation? This covers all 21 wizard files.
+- **API routing** — does the wizard call the right endpoints (org-scoped vs. realm-wide) depending on how it was launched?
+- **Organization context** — does the `?org_id=` launch mode work correctly? Are org memberships, roles, and API routes all correct?
+- **External provider loop** _(optional)_ — can the browser automate the external provider setup (Auth0, Okta) and feed the resulting credentials directly into the wizard, end-to-end?
+
+### Running tests
+
+```bash
+# Fast mock tests — no Keycloak required
+pnpm test:e2e
+
+# Interactive Playwright UI
+pnpm test:e2e:ui
+
+# View the last HTML report
+pnpm test:e2e:report
+
+# Integration tests — requires Keycloak running (see below)
+pnpm test:integration
+
+# External provider tests — requires provider credentials in env (see below)
+pnpm test:external
+```
+
+### Test modes
+
+#### Mock mode (default)
+
+The Vite dev server runs with `VITE_OIDC_USE_MOCK=true` — oidc-spa returns a mock authenticated user and no real Keycloak is needed. Keycloak API calls (import-config, create IDP, add mappers, LDAP test) are intercepted with Playwright's `page.route()` so the full wizard UI flow can be exercised without any server.
+
+The `VITE_OIDC_ISSUER_URI` is still set so the wizard runner can resolve API URLs correctly — even though the calls are intercepted before they reach any real server.
+
+#### Integration mode (`PLAYWRIGHT_INTEGRATION=true`)
+
+Requires Keycloak to be running:
+
+```bash
+cd docker && docker compose up -d
+```
+
+The Playwright run has three phases:
+
+1. **`auth:setup` project** — opens a browser, follows the OIDC redirect to Keycloak, logs in as `wizard`/`password`, and saves the browser storage state to `e2e/.auth/admin.json`. Subsequent test contexts load this state instead of re-authenticating.
+2. **`global-setup.ts`** — runs once before the test suite. Uses the Keycloak admin API to create two test organizations (`test-org-alpha`, `test-org-beta`) and assign the `org-admin` and `org-member` test users to them. Org IDs are exposed via `process.env` so tests can reference them without hardcoding.
+3. **Test projects** — run with the saved auth state and real API endpoints.
+
+### Test structure
+
+```
+e2e/
+├── .auth/
+│ └── admin.json # Saved browser state for integration tests (gitignored)
+├── external-providers/
+│ ├── Auth0Page.ts # POM for Auth0 Dashboard (manage.auth0.com)
+│ ├── OktaPage.ts # POM for Okta Admin Console
+│ └── external-provider.spec.ts # Full-loop tests: configure provider, complete wizard
+├── fixtures/
+│ ├── test.ts # Extended Playwright fixture with typed page objects
+│ └── test-saml-metadata.xml # Minimal SAML IdP metadata for file upload tests
+├── pages/
+│ ├── KeycloakLoginPage.ts # POM for Keycloak login screen (theme-agnostic)
+│ ├── ProviderSelectorPage.ts # POM for the provider selector landing page
+│ └── WizardPage.ts # POM for wizard runner — step nav, forms, confirmation
+├── auth.setup.ts # Playwright setup project: OIDC login, save storage state
+├── global-setup.ts # Pre-suite setup: create orgs, assign users via Orgs API
+├── organizations.spec.ts # Organization membership, ?org_id routing, org-scoped completion
+├── provider-selector.spec.ts # Smoke tests: provider list, search, help dialog, navigation
+└── wizard-completion.spec.ts # Full flow tests for SAML, OIDC, and LDAP wizards
+```
+
+### Spec files
+
+#### `provider-selector.spec.ts`
+
+Smoke tests for the landing page and navigation. Runs in mock mode. Covers:
+
+- Provider list renders, fuzzy search works, clearing search restores grouped view
+- Help dialog opens and closes
+- Single-protocol providers navigate directly to the wizard; multi-protocol providers navigate to the protocol picker
+- Home link returns to the provider selector
+
+#### `wizard-completion.spec.ts`
+
+Full wizard flow tests. Runs in mock mode with API interception. Covers:
+
+- **Auth0 SAML** — file upload flow: upload test metadata XML, validate, advance through attribute mapping and user access steps, confirm IDP creation
+- **Auth0 OIDC** — credentials flow: fill domain, client ID, and secret, verify against the discovery endpoint, configure redirect URI, confirm
+- **Okta LDAP** — connection flow: fill LDAP host and base DN, test connection, fill bind credentials, test authentication, confirm user federation creation
+- **All 21 providers** — parametrized "loads without error" tests that navigate to every wizard and assert that at least one step renders. This ensures no wizard JSON has a syntax or schema error.
+
+Back-navigation and `enableNextWhen` gating (Next disabled until validation passes) are also tested.
+
+#### `organizations.spec.ts`
+
+Integration-mode tests (requires Keycloak). Covers:
+
+- Test organizations and memberships created by `global-setup.ts` exist and are correct
+- Navigating to `/?org_id=` passes the org ID through to the wizard URL
+- Wizard launched with `?org_id=` routes API calls through org-scoped endpoints rather than admin endpoints
+- Org admin can complete a full SAML wizard for their organization
+
+#### `external-providers/external-provider.spec.ts`
+
+Full end-to-end tests that drive an external identity provider's admin UI and then complete the corresponding wizard. These are **skipped by default** — they run only when the relevant credential environment variables are set.
+
+Each test follows the same pattern:
+
+1. Open the provider's dashboard and create an application or integration
+2. Configure it with the SP values (ACS URL, Entity ID) read from the wizard
+3. Copy the resulting metadata URL or credentials
+4. Return to the wizard and complete it using those values
+5. Assert successful IDP creation
+
+| Test | Variables required |
+| -------------------- | ----------------------------------------------- |
+| Auth0 OIDC full loop | `AUTH0_DOMAIN`, `AUTH0_EMAIL`, `AUTH0_PASSWORD` |
+| Auth0 SAML full loop | `AUTH0_DOMAIN`, `AUTH0_EMAIL`, `AUTH0_PASSWORD` |
+| Okta SAML full loop | `OKTA_DOMAIN`, `OKTA_EMAIL`, `OKTA_PASSWORD` |
+
+> These tests create real applications in your provider accounts. Clean them up manually afterward.
+
+### Dev test users
+
+The `wizard` realm is pre-seeded with three test users (created from `docker/realm-export.json`):
+
+| Username | Password | Role | Purpose |
+| ------------ | ---------- | ------------- | ---------------------------------------------------------------------------------- |
+| `wizard` | `password` | `realm-admin` | Main admin — can call any Keycloak admin API. Used by `auth:setup` and most tests. |
+| `org-admin` | `password` | — | Org-level admin. Assigned as admin of `test-org-alpha` by `global-setup.ts`. |
+| `org-member` | `password` | — | Regular org member. Assigned as member of `test-org-alpha` by `global-setup.ts`. |
+
+### Keycloak admin theme
+
+Both the `wizard` realm and the `master` realm are configured to use the `phasetwo.v2` admin theme. This is set via:
+
+- `adminTheme: "phasetwo.v2"` in `docker/realm-export.json` for the wizard realm
+- `docker/master-realm-export.json` (a minimal export mounted alongside the wizard realm) for the master realm — Keycloak merges it into the existing master realm on startup
+
+### CI
+
+In CI (`CI=true`), the web server is always started fresh, tests are retried up to 2 times, and the reporter uses GitHub annotations. Integration tests are not run in CI by default — set `PLAYWRIGHT_INTEGRATION=true` and ensure a Keycloak service is available to enable them.
+
+## Building
+
+```bash
+pnpm build
+```
+
+Output goes to `dist/`. When wizard-v2 is ready for production, the root `pom.xml` `workingDirectory` will be updated to `apps/wizard-v2` and `mvn package` will bundle it into the Keycloak JAR.
+
+## Migration check
+
+- Existing provider setup is displayed
+- Ability to change organizations if you are not in organization mode (as in if you were sent a link generated for a specific org, you can only view that org)
+
+## Wizard Review
+
+- AWS: complete
+- Microsoft Entra ID: complete
+- ADFS: complete
+- Oracle: complete
+- Salesforce (SAML): complete
+- JumpCloud: complete
+- Okta (SAML): complete
+- Cloudflare: complete
+- LastPass: complete
+- OneLogin: complete
+- CyberArk: complete
+- Google Workspace (SAML): complete
diff --git a/apps/wizard-v2/components.json b/apps/wizard-v2/components.json
new file mode 100644
index 00000000..8bfc737f
--- /dev/null
+++ b/apps/wizard-v2/components.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema.json",
+ "style": "new-york",
+ "rsc": false,
+ "tsx": true,
+ "tailwind": {
+ "config": "",
+ "css": "src/index.css",
+ "baseColor": "zinc",
+ "cssVariables": true,
+ "prefix": ""
+ },
+ "aliases": {
+ "components": "@/components",
+ "utils": "@/lib/utils",
+ "ui": "@/components/ui",
+ "lib": "@/lib",
+ "hooks": "@/hooks"
+ },
+ "iconLibrary": "lucide"
+}
diff --git a/apps/wizard-v2/docker/docker-compose.yml b/apps/wizard-v2/docker/docker-compose.yml
new file mode 100644
index 00000000..7c9bf0a8
--- /dev/null
+++ b/apps/wizard-v2/docker/docker-compose.yml
@@ -0,0 +1,26 @@
+services:
+ keycloak:
+ image: quay.io/phasetwo/phasetwo-keycloak:26.6.2.1780081975
+ environment:
+ KEYCLOAK_ADMIN: admin
+ KEYCLOAK_ADMIN_PASSWORD: admin
+ KC_HTTP_RELATIVE_PATH: /auth
+ KC_HTTP_CORS_ALLOWED_ORIGINS: "http://localhost:5173"
+ KC_HTTP_CORS_ALLOWED_METHODS: "GET,POST,PUT,DELETE,OPTIONS"
+ KC_HTTP_CORS_ALLOWED_HEADERS: "Authorization,Content-Type"
+ command:
+ - start-dev
+ - --http-enabled=true
+ - --hostname-strict=false
+ - --import-realm
+ - --spi-email-template-provider=freemarker-plus-mustache
+ - --spi-email-template-freemarker-plus-mustache-enabled=true
+ - --spi-theme-cache-themes=false
+ ports:
+ - "8080:8080"
+ volumes:
+ - ./realm-export.json:/opt/keycloak/data/import/realm-export.json
+ - keycloak_data:/opt/keycloak/data
+
+volumes:
+ keycloak_data:
diff --git a/apps/wizard-v2/docker/realm-export.json b/apps/wizard-v2/docker/realm-export.json
new file mode 100644
index 00000000..fbcc39db
--- /dev/null
+++ b/apps/wizard-v2/docker/realm-export.json
@@ -0,0 +1,84 @@
+{
+ "realm": "wizard",
+ "enabled": true,
+ "displayName": "IDP Wizard Dev",
+ "adminTheme": "phasetwo.v2",
+ "attributes": {
+ "_providerConfig.wizard.apiMode": "onprem",
+ "_providerConfig.wizard.emailAsUsername": "false",
+ "_providerConfig.wizard.enableDashboard": "true",
+ "_providerConfig.wizard.enableDirectorySync": "true",
+ "_providerConfig.wizard.enableIdentityProvider": "true",
+ "_providerConfig.wizard.logoUrl": "",
+ "_providerConfig.wizard.trustEmail": "false"
+ },
+ "clients": [
+ {
+ "clientId": "wizard-v2-dev",
+ "name": "IDP Wizard v2 Dev",
+ "enabled": true,
+ "publicClient": true,
+ "standardFlowEnabled": true,
+ "directAccessGrantsEnabled": true,
+ "redirectUris": [
+ "http://localhost:5173/*"
+ ],
+ "webOrigins": [
+ "+"
+ ],
+ "attributes": {}
+ }
+ ],
+ "users": [
+ {
+ "username": "wizard",
+ "email": "wizard@example.com",
+ "firstName": "Wizard",
+ "lastName": "Admin",
+ "enabled": true,
+ "emailVerified": true,
+ "credentials": [
+ {
+ "type": "password",
+ "value": "password",
+ "temporary": false
+ }
+ ],
+ "clientRoles": {
+ "realm-management": [
+ "realm-admin"
+ ]
+ }
+ },
+ {
+ "username": "org-admin",
+ "email": "org-admin@example.com",
+ "firstName": "Org",
+ "lastName": "Admin",
+ "enabled": true,
+ "emailVerified": true,
+ "credentials": [
+ {
+ "type": "password",
+ "value": "password",
+ "temporary": false
+ }
+ ]
+ },
+ {
+ "username": "org-member",
+ "email": "org-member@example.com",
+ "firstName": "Org",
+ "lastName": "Member",
+ "enabled": true,
+ "emailVerified": true,
+ "credentials": [
+ {
+ "type": "password",
+ "value": "password",
+ "temporary": false
+ }
+ ]
+ }
+ ]
+}
diff --git a/apps/wizard-v2/e2e/.auth/.gitkeep b/apps/wizard-v2/e2e/.auth/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/wizard-v2/e2e/auth.setup.ts b/apps/wizard-v2/e2e/auth.setup.ts
new file mode 100644
index 00000000..0d427a12
--- /dev/null
+++ b/apps/wizard-v2/e2e/auth.setup.ts
@@ -0,0 +1,45 @@
+import { test as setup, expect } from "@playwright/test";
+import path from "path";
+
+/**
+ * Authentication setup for integration tests.
+ *
+ * Navigates to the app, follows the OIDC redirect to Keycloak, logs in as the
+ * realm-admin wizard user, then saves the storage state (cookies + localStorage
+ * + sessionStorage) so that integration test projects can reuse the session
+ * without re-authenticating on every test.
+ *
+ * Run as part of the `auth:setup` Playwright project (see playwright.config.ts).
+ * Only executed when PLAYWRIGHT_INTEGRATION=true.
+ *
+ * Prerequisites:
+ * cd docker && docker compose up -d
+ * Wait for Keycloak to be healthy at http://localhost:8080/auth/realms/wizard
+ */
+
+const AUTH_STATE_PATH = path.join("e2e", ".auth", "admin.json");
+
+setup("authenticate as realm admin", async ({ page }) => {
+ // Navigate to the app — oidc-spa withAutoLogin() will redirect to Keycloak
+ await page.goto("/");
+
+ // Wait for Keycloak login page
+ await page.waitForURL(/localhost:8080/, { timeout: 15_000 });
+
+ await expect(
+ page.locator("input[name='username'], #username"),
+ "Keycloak login page should be visible"
+ ).toBeVisible({ timeout: 10_000 });
+
+ await page.locator("input[name='username'], #username").fill("wizard");
+ await page.locator("input[name='password'], #password").fill("password");
+ await page.locator("[type='submit'], #kc-login").click();
+
+ // Wait for redirect back to the app
+ await page.waitForURL("http://localhost:5173/**", { timeout: 15_000 });
+
+ // Brief pause so oidc-spa can finish the token exchange and write to storage
+ await page.waitForTimeout(1_000);
+
+ await page.context().storageState({ path: AUTH_STATE_PATH });
+});
diff --git a/apps/wizard-v2/e2e/external-providers/Auth0Page.ts b/apps/wizard-v2/e2e/external-providers/Auth0Page.ts
new file mode 100644
index 00000000..69d1cf53
--- /dev/null
+++ b/apps/wizard-v2/e2e/external-providers/Auth0Page.ts
@@ -0,0 +1,127 @@
+import { type Page } from "@playwright/test";
+
+/**
+ * Page object for the Auth0 Dashboard (manage.auth0.com).
+ *
+ * Used in external-provider tests that drive Auth0 setup as part of a full
+ * end-to-end wizard test. This automates the steps described in the wizard's
+ * "Create a SAML Application" and "Create an Application" steps.
+ *
+ * Required environment variables:
+ * AUTH0_DOMAIN e.g. your-tenant.auth0.com
+ * AUTH0_EMAIL dashboard login email
+ * AUTH0_PASSWORD dashboard login password
+ *
+ * NOTE: Auth0 dashboard UI changes frequently. If selectors break, check
+ * manage.auth0.com and update the locators below.
+ */
+export class Auth0Page {
+ readonly page: Page;
+ readonly baseUrl: string;
+
+ constructor(page: Page, _domain?: string) {
+ this.page = page;
+ // Auth0 dashboard is always at manage.auth0.com (not the tenant domain)
+ this.baseUrl = "https://manage.auth0.com";
+ }
+
+ // ── Authentication ────────────────────────────────────────────────────────
+
+ async login(email?: string, password?: string) {
+ const e = email ?? process.env["AUTH0_EMAIL"];
+ const p = password ?? process.env["AUTH0_PASSWORD"];
+ if (!e || !p) {
+ throw new Error(
+ "AUTH0_EMAIL and AUTH0_PASSWORD environment variables are required"
+ );
+ }
+
+ await this.page.goto(`${this.baseUrl}/`);
+ await this.page.getByLabel(/email/i).fill(e);
+ await this.page.getByRole("button", { name: /continue/i }).click();
+ await this.page.getByLabel(/password/i).fill(p);
+ await this.page.getByRole("button", { name: /log in|continue/i }).click();
+ await this.page.waitForURL(`${this.baseUrl}/dashboard/**`, {
+ timeout: 20_000,
+ });
+ }
+
+ // ── Application management ────────────────────────────────────────────────
+
+ async goToApplications() {
+ await this.page.goto(`${this.baseUrl}/dashboard/applications`);
+ }
+
+ async createRegularWebApp(name: string): Promise {
+ await this.goToApplications();
+ await this.page.getByRole("button", { name: /create application/i }).click();
+ await this.page.getByLabel(/name/i).fill(name);
+ await this.page
+ .getByRole("radio", { name: /regular web applications/i })
+ .click();
+ await this.page.getByRole("button", { name: /create/i }).click();
+ await this.page.waitForURL(/\/applications\//, { timeout: 10_000 });
+ }
+
+ async createSamlApp(name: string): Promise {
+ await this.goToApplications();
+ await this.page.getByRole("button", { name: /create application/i }).click();
+ await this.page.getByLabel(/name/i).fill(name);
+ // Any app type can have SAML — choose Regular Web App
+ await this.page
+ .getByRole("radio", { name: /regular web applications/i })
+ .click();
+ await this.page.getByRole("button", { name: /create/i }).click();
+ await this.page.waitForURL(/\/applications\//, { timeout: 10_000 });
+ // Enable SAML2 Web App addon
+ await this.page.getByRole("tab", { name: /addons/i }).click();
+ await this.page.getByRole("button", { name: /saml2 web app/i }).click();
+ }
+
+ /** On the SAML2 addon settings modal, enter the ACS URL and Entity ID. */
+ async configureSamlAddon(acsUrl: string, entityId: string): Promise {
+ await this.page.getByLabel(/application callback url/i).fill(acsUrl);
+ await this.page
+ .getByLabel(/audience|entity id/i)
+ .fill(entityId);
+ await this.page.getByRole("button", { name: /enable|save/i }).click();
+ }
+
+ /**
+ * Returns the SAML metadata download URL for the current application.
+ * Must be called after navigating to an application's Addons > SAML2 tab.
+ */
+ samlMetadataUrl(domain: string, clientId: string): string {
+ return `https://${domain}/samlp/metadata/${clientId}`;
+ }
+
+ // ── OIDC credentials ─────────────────────────────────────────────────────
+
+ /**
+ * Returns the Client ID and Client Secret from the current application page.
+ * Assumes you are already on the application's Settings tab.
+ */
+ async getOidcCredentials(): Promise<{ clientId: string; clientSecret: string }> {
+ const clientIdLocator = this.page.getByLabel(/client id/i).first();
+ const clientSecretReveal = this.page.getByRole("button", {
+ name: /reveal client secret/i,
+ });
+
+ await clientSecretReveal.click().catch(() => {});
+ const clientSecretLocator = this.page.getByLabel(/client secret/i).first();
+
+ return {
+ clientId: (await clientIdLocator.inputValue()) ?? "",
+ clientSecret: (await clientSecretLocator.inputValue()) ?? "",
+ };
+ }
+
+ /** Add a URL to the Allowed Callback URLs list. */
+ async addCallbackUrl(url: string): Promise {
+ const input = this.page.getByLabel(/allowed callback urls/i);
+ const current = await input.inputValue();
+ const updated = current ? `${current},${url}` : url;
+ await input.fill(updated);
+ await this.page.getByRole("button", { name: /save changes/i }).click();
+ }
+}
diff --git a/apps/wizard-v2/e2e/external-providers/OktaPage.ts b/apps/wizard-v2/e2e/external-providers/OktaPage.ts
new file mode 100644
index 00000000..25d39eea
--- /dev/null
+++ b/apps/wizard-v2/e2e/external-providers/OktaPage.ts
@@ -0,0 +1,118 @@
+import { type Page } from "@playwright/test";
+
+/**
+ * Page object for the Okta Admin Console (your-org.okta.com/admin).
+ *
+ * Used in external-provider tests that automate Okta setup steps described by
+ * the okta/saml.json and okta/ldap.json wizards.
+ *
+ * Required environment variables:
+ * OKTA_DOMAIN e.g. your-org.okta.com
+ * OKTA_EMAIL admin login email
+ * OKTA_PASSWORD admin login password
+ *
+ * NOTE: Okta's admin console uses React and Lit and the UI changes between
+ * versions. If selectors break, inspect the console at /admin and update.
+ */
+export class OktaPage {
+ readonly page: Page;
+ readonly adminBase: string;
+
+ constructor(page: Page, domain?: string) {
+ this.page = page;
+ const d = domain ?? process.env["OKTA_DOMAIN"] ?? "your-org.okta.com";
+ this.adminBase = `https://${d}/admin`;
+ }
+
+ // ── Authentication ────────────────────────────────────────────────────────
+
+ async login(email?: string, password?: string) {
+ const e = email ?? process.env["OKTA_EMAIL"];
+ const p = password ?? process.env["OKTA_PASSWORD"];
+ if (!e || !p) {
+ throw new Error(
+ "OKTA_EMAIL and OKTA_PASSWORD environment variables are required"
+ );
+ }
+
+ await this.page.goto(`${this.adminBase}/`);
+ await this.page.getByLabel(/username/i).fill(e);
+ await this.page.getByRole("button", { name: /next/i }).click();
+ await this.page.getByLabel(/password/i).fill(p);
+ await this.page.getByRole("button", { name: /sign in|verify/i }).click();
+ await this.page.waitForURL(/\/admin\/dashboard/, { timeout: 20_000 });
+ }
+
+ // ── SAML App management ───────────────────────────────────────────────────
+
+ async goToApplications() {
+ await this.page.goto(`${this.adminBase}/apps/active`);
+ }
+
+ /** Create a new SAML 2.0 application. Returns when on the app config page. */
+ async createSamlApp(name: string): Promise {
+ await this.goToApplications();
+ await this.page
+ .getByRole("button", { name: /create app integration/i })
+ .click();
+ await this.page.getByLabel(/saml 2\.0/i).click();
+ await this.page.getByRole("button", { name: /next/i }).click();
+ await this.page.getByLabel(/app name/i).fill(name);
+ await this.page.getByRole("button", { name: /next/i }).click();
+ }
+
+ /** Configure SAML settings (on step 2 of app creation). */
+ async configureSamlSettings(acsUrl: string, entityId: string): Promise {
+ await this.page.getByLabel(/single sign.?on url/i).fill(acsUrl);
+ await this.page.getByLabel(/audience uri|sp entity id/i).fill(entityId);
+ await this.page.getByRole("button", { name: /next/i }).click();
+ await this.page.getByRole("button", { name: /finish/i }).click();
+ }
+
+ /**
+ * Returns the metadata URL for the current SAML app.
+ * Must be called from the app's "Sign On" tab after creation.
+ */
+ async getMetadataUrl(): Promise {
+ await this.page.getByRole("tab", { name: /sign on/i }).click();
+ const link = this.page.getByRole("link", { name: /identity provider metadata/i });
+ const href = await link.getAttribute("href");
+ return href ?? "";
+ }
+
+ // ── LDAP Interface ────────────────────────────────────────────────────────
+
+ async goToDirectoryIntegrations() {
+ await this.page.goto(`${this.adminBase}/directory/ldap-integration`);
+ }
+
+ /**
+ * Enables the LDAP interface if not already enabled.
+ * Returns the LDAP host and base DN for use in the wizard.
+ */
+ async enableLdapInterface(): Promise<{ host: string; baseDn: string }> {
+ await this.goToDirectoryIntegrations();
+
+ const enableBtn = this.page.getByRole("button", { name: /enable/i });
+ if (await enableBtn.isVisible().catch(() => false)) {
+ await enableBtn.click();
+ }
+
+ // Read the LDAP host and base DN from the settings page
+ const hostEl = this.page.getByLabel(/ldap host/i).or(
+ this.page.locator("[data-testid='ldap-host']")
+ );
+ const baseDnEl = this.page.getByLabel(/base dn/i).or(
+ this.page.locator("[data-testid='base-dn']")
+ );
+
+ const host = (await hostEl.inputValue().catch(() => "")) ||
+ (await hostEl.textContent().catch(() => "")) ||
+ "";
+ const baseDn = (await baseDnEl.inputValue().catch(() => "")) ||
+ (await baseDnEl.textContent().catch(() => "")) ||
+ "";
+
+ return { host: host.trim(), baseDn: baseDn.trim() };
+ }
+}
diff --git a/apps/wizard-v2/e2e/external-providers/external-provider.spec.ts b/apps/wizard-v2/e2e/external-providers/external-provider.spec.ts
new file mode 100644
index 00000000..d7c7a5de
--- /dev/null
+++ b/apps/wizard-v2/e2e/external-providers/external-provider.spec.ts
@@ -0,0 +1,252 @@
+import { test, expect } from "../fixtures/test";
+import { Auth0Page } from "./Auth0Page";
+import { OktaPage } from "./OktaPage";
+
+/**
+ * External provider end-to-end tests.
+ *
+ * These tests drive the full setup loop: configure the external provider (Auth0,
+ * Okta) in its own admin UI, then complete the wizard in our app using the
+ * values produced by the provider.
+ *
+ * !! THESE TESTS REQUIRE REAL CREDENTIALS AND LIVE PROVIDER ACCOUNTS !!
+ *
+ * Environment variables required (set in .env.local or CI secrets):
+ *
+ * Auth0:
+ * AUTH0_DOMAIN your-tenant.auth0.com
+ * AUTH0_EMAIL dashboard login email
+ * AUTH0_PASSWORD dashboard login password
+ *
+ * Okta:
+ * OKTA_DOMAIN your-org.okta.com
+ * OKTA_EMAIL admin email
+ * OKTA_PASSWORD admin password
+ *
+ * Running:
+ * PLAYWRIGHT_INTEGRATION=true AUTH0_EMAIL=... AUTH0_PASSWORD=... AUTH0_DOMAIN=...
+ * pnpm test:e2e --project=chromium e2e/external-providers/
+ *
+ * CAUTION: These tests create real applications and IDPs in your provider
+ * accounts. Clean up manually afterward, or add afterAll teardown below.
+ */
+
+const hasAuth0Creds =
+ !!process.env["AUTH0_EMAIL"] &&
+ !!process.env["AUTH0_PASSWORD"] &&
+ !!process.env["AUTH0_DOMAIN"];
+
+const hasOktaCreds =
+ !!process.env["OKTA_EMAIL"] &&
+ !!process.env["OKTA_PASSWORD"] &&
+ !!process.env["OKTA_DOMAIN"];
+
+// ── Auth0 OIDC ───────────────────────────────────────────────────────────────
+
+test.describe("Auth0 OIDC — full loop", () => {
+ test.skip(!hasAuth0Creds, "AUTH0_* env vars not set");
+
+ /**
+ * Flow:
+ * 1. Log into Auth0 dashboard, create a Regular Web App
+ * 2. Copy the Client ID, Client Secret, and domain
+ * 3. Open the wizard (/wizard/auth0/oidc)
+ * 4. Fill in domain + credentials → verify
+ * 5. Add the redirect URI back in Auth0
+ * 6. Complete the wizard
+ */
+ test("creates Auth0 OIDC IDP from real credentials", async ({ page, wizard }) => {
+ const auth0 = new Auth0Page(page);
+ const appName = `playwright-test-${Date.now()}`;
+
+ // Step A: Set up in Auth0
+ await auth0.login();
+ await auth0.createRegularWebApp(appName);
+ const { clientId, clientSecret } = await auth0.getOidcCredentials();
+ const domain = process.env["AUTH0_DOMAIN"]!;
+ expect(clientId).toBeTruthy();
+ expect(clientSecret).toBeTruthy();
+
+ // Step B: Complete wizard
+ // Mock IDP creation so we don't actually write to Keycloak in this test
+ await page.route("**/identity-provider/instances", (route) =>
+ route.fulfill({ status: 201, json: { id: "test-idp" } })
+ );
+ await page.goto("/wizard/auth0/oidc");
+ await wizard.waitForStep(/Create an Application/i);
+ await wizard.clickNext();
+
+ await wizard.waitForStep(/Domain & Credentials/i);
+ await wizard.fillTextField(/Auth0 Domain/i, domain);
+ await wizard.fillTextField(/Client ID/i, clientId);
+ await wizard.fillTextField(/Client Secret/i, clientSecret);
+ await wizard.submitForm(/Verify & Save/i);
+ await expect(page.getByText(/verified/i)).toBeVisible({ timeout: 10_000 });
+ await wizard.clickNext();
+
+ // Step C: Copy redirect URI and add it back in Auth0
+ await wizard.waitForStep(/Configure Redirect URI/i);
+ const redirectUriEl = page.locator("[data-copy-value]").first();
+ const redirectUri = (await redirectUriEl.getAttribute("data-copy-value")) ?? "";
+ if (redirectUri) {
+ // Open Auth0 in a second page to avoid losing wizard state
+ const auth0Page2 = await page.context().newPage();
+ const auth02 = new Auth0Page(auth0Page2);
+ await auth02.addCallbackUrl(redirectUri);
+ await auth0Page2.close();
+ }
+ await wizard.clickNext();
+
+ // Step D: Confirm
+ await wizard.waitForStep(/Confirmation/i);
+ await wizard.confirm(/Create.*Identity Provider/i);
+ await wizard.waitForSuccess();
+ });
+});
+
+// ── Auth0 SAML ───────────────────────────────────────────────────────────────
+
+test.describe("Auth0 SAML — full loop", () => {
+ test.skip(!hasAuth0Creds, "AUTH0_* env vars not set");
+
+ /**
+ * Flow:
+ * 1. Log into Auth0 dashboard, create a SAML app with ACS URL + Entity ID
+ * 2. Download the metadata file
+ * 3. Upload it in the wizard
+ * 4. Complete the wizard
+ */
+ test("creates Auth0 SAML IDP from real metadata", async ({ page, wizard }) => {
+ const auth0 = new Auth0Page(page);
+ const appName = `playwright-saml-${Date.now()}`;
+
+ // Step A: Get SP values from wizard (we need ACS URL and Entity ID first)
+ // Navigate to step 1 to read the copy blocks
+ await page.route("**/identity-provider/import-config", (route) =>
+ route.fulfill({ json: {} })
+ );
+ await page.route("**/identity-provider/instances", (route) =>
+ route.fulfill({ status: 201, json: { id: "test-idp" } })
+ );
+
+ await page.goto("/wizard/auth0/saml");
+ await wizard.waitForStep(/Create a SAML Application/i);
+
+ // Read the ACS URL and Entity ID from the wizard
+ const acsUrl =
+ (await page.locator("[data-copy-label='ACS URL']").textContent()) ?? "";
+ const entityId =
+ (await page.locator("[data-copy-label='Entity ID']").textContent()) ?? "";
+
+ // Step B: Create app in Auth0 and configure SAML with these values
+ await auth0.login();
+ await auth0.createSamlApp(appName);
+ await auth0.configureSamlAddon(acsUrl.trim(), entityId.trim());
+
+ // Auth0 metadata download URL — use page.goto to download
+ const domain = process.env["AUTH0_DOMAIN"]!;
+ const metadataRes = await page.goto(
+ `https://${domain}/samlp/metadata/${appName}`
+ );
+ const metadataXml = await metadataRes?.text();
+ expect(metadataXml).toContain("EntityDescriptor");
+
+ // Write metadata to a temp file for upload
+ const { writeFileSync } = await import("fs");
+ const { tmpdir } = await import("os");
+ const { join } = await import("path");
+ const tmpFile = join(tmpdir(), `auth0-metadata-${Date.now()}.xml`);
+ writeFileSync(tmpFile, metadataXml ?? "");
+
+ // Step C: Return to wizard and complete
+ await page.goto("/wizard/auth0/saml");
+ await wizard.waitForStep(/Create a SAML Application/i);
+ await wizard.clickNext();
+
+ await wizard.waitForStep(/Upload Identity Provider Metadata/i);
+ await wizard.uploadFile(/Metadata File/i, tmpFile);
+ await wizard.submitForm(/Validate File/i);
+ await wizard.clickNext();
+
+ await wizard.waitForStep(/Configure Attribute Mapping/i);
+ await wizard.clickNext();
+ await wizard.waitForStep(/Configure User Access/i);
+ await wizard.clickNext();
+ await wizard.waitForStep(/Confirmation/i);
+ await wizard.confirm(/Create SAML Identity Provider/i);
+ await wizard.waitForSuccess();
+ });
+});
+
+// ── Okta SAML ────────────────────────────────────────────────────────────────
+
+test.describe("Okta SAML — full loop", () => {
+ test.skip(!hasOktaCreds, "OKTA_* env vars not set");
+
+ test("creates Okta SAML IDP from real metadata URL", async ({
+ page,
+ wizard,
+ }) => {
+ const okta = new OktaPage(page);
+ const appName = `playwright-saml-${Date.now()}`;
+
+ // Mock final IDP creation in Keycloak
+ await page.route("**/identity-provider/import-config", (route) =>
+ route.fulfill({ json: { entityId: "https://test" } })
+ );
+ await page.route("**/identity-provider/instances", (route) =>
+ route.fulfill({ status: 201, json: { id: "test-idp" } })
+ );
+
+ // Get SP values from wizard step 1
+ await page.goto("/wizard/okta/saml");
+ await wizard.waitForStep(/.+/);
+ const acsUrl =
+ (await page.locator("[data-copy-label='ACS URL']").textContent())?.trim() ?? "";
+ const entityId =
+ (await page.locator("[data-copy-label='Entity ID']").textContent())?.trim() ?? "";
+
+ // Set up app in Okta
+ await okta.login();
+ await okta.createSamlApp(appName);
+ await okta.configureSamlSettings(acsUrl, entityId);
+ const metadataUrl = await okta.getMetadataUrl();
+ expect(metadataUrl).toContain("metadata");
+
+ // Return to wizard — use metadata URL input if available, otherwise file
+ await page.goto("/wizard/okta/saml");
+ await wizard.waitForStep(/.+/);
+ await wizard.clickNext();
+
+ // Try to use URL input first
+ const urlInput = page.getByLabel(/metadata url/i);
+ if (await urlInput.isVisible().catch(() => false)) {
+ await urlInput.fill(metadataUrl);
+ await wizard.submitForm(/validate url/i);
+ } else {
+ // Fall back to file upload — download metadata first
+ const metaRes = await page.request.get(metadataUrl);
+ const xml = await metaRes.text();
+ const { writeFileSync } = await import("fs");
+ const { tmpdir } = await import("os");
+ const { join } = await import("path");
+ const tmp = join(tmpdir(), `okta-metadata-${Date.now()}.xml`);
+ writeFileSync(tmp, xml);
+ await wizard.uploadFile(/metadata/i, tmp);
+ await wizard.submitForm(/validate/i);
+ }
+
+ await wizard.clickNext();
+ // Navigate remaining steps to confirmation
+ for (let i = 0; i < 3; i++) {
+ const done = await page
+ .getByRole("button", { name: /Create.*Identity Provider/i })
+ .isVisible()
+ .catch(() => false);
+ if (done) break;
+ await wizard.clickNext().catch(() => {});
+ }
+ await wizard.confirm(/Create.*Identity Provider/i);
+ await wizard.waitForSuccess();
+ });
+});
diff --git a/apps/wizard-v2/e2e/fixtures/test-saml-metadata.xml b/apps/wizard-v2/e2e/fixtures/test-saml-metadata.xml
new file mode 100644
index 00000000..6b232d61
--- /dev/null
+++ b/apps/wizard-v2/e2e/fixtures/test-saml-metadata.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ MIIDuTCCAqGgAwIBAgIUG0ly/uVWaiPYldLsLTaf2gZNvicwDQYJKoZIhvcNAQEL
+BQAwbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM
+DU1vdW50YWluIFZpZXcxETAPBgNVBAoMCFRlc3QgSWRQMR0wGwYDVQQDDBR0ZXN0
+LWlkcC5leGFtcGxlLmNvbTAeFw0yNjA0MTQwNDMxMDJaFw0zNjA0MTEwNDMxMDJa
+MGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1N
+b3VudGFpbiBWaWV3MREwDwYDVQQKDAhUZXN0IElkUDEdMBsGA1UEAwwUdGVzdC1p
+ZHAuZXhhbXBsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0
+47wu35l99IEN343NpOfrIQxSgrrt2HAcTgnnBLWpem0ZAFkQvbpf4D8c80xjxNPu
+I5zpL1D0PKzV6Sy3JTSts7GlMRvClD4U36ryi3EwRTTvyk++5jFTHL7aHyGn0kCr
+b8ieczvTNE4EbYQUTGOemECDXsewqsRJYXJ8cQ9vCAyYCVeXCk8/snmVF7g+VKSN
+tjiDJU47I92jyHLtAYb5oOTqT53EsYOIxgGtXsPwoM+TfcLTr7Rhx/Rx/foD6THn
+NK0yA1AqfT9sy+AaNi4lJUZ2szQAbD2e/gUrrKlF6WidXKctLAF/S5soSK57BbZ5
+ir9n0pD/L3T84YOG0itdAgMBAAGjUzBRMB0GA1UdDgQWBBRQ4B/iMjQ17oVoWM9v
+5EQ7f30WkzAfBgNVHSMEGDAWgBRQ4B/iMjQ17oVoWM9v5EQ7f30WkzAPBgNVHRMB
+Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAZJmHCcSWd01SVdrpel2xkIGOZ
+xfqJD4vZ0VDL7z3iyBMUTOkFlmQhiVxdrn+lLrSlb0iui+RouAKskvcOmJTjYfPL
+IXFdtRqx3bCgoTxhcw97nSqQJivZpYN5VhGg2OQxITI7sxYwAnVYljBjYEHXHwHr
+gPFcurveB+P00/VZgojYCpGofW7encmO6JSj5JCU3I7obgYzAuU4P6yC8qIEz60w
+qzT8SzyQU1tytZe+114kN5lMKPqITThf/60eNoxkzMV+zk6gtz+Y2nIJzA3BMXJ4
+GB2XP9o5WHs9+Nk115YSTD/iNT6oyiHKiKxbUJA9U5Yk0+1xyya81p+1ltty
+
+
+
+ urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
+
+
+
+
diff --git a/apps/wizard-v2/e2e/fixtures/test.ts b/apps/wizard-v2/e2e/fixtures/test.ts
new file mode 100644
index 00000000..d9af18b6
--- /dev/null
+++ b/apps/wizard-v2/e2e/fixtures/test.ts
@@ -0,0 +1,95 @@
+import { test as base } from "@playwright/test";
+import { ProviderSelectorPage } from "../pages/ProviderSelectorPage";
+import { WizardPage } from "../pages/WizardPage";
+import { KeycloakLoginPage } from "../pages/KeycloakLoginPage";
+
+/**
+ * Extended test fixture that provides typed page object models.
+ *
+ * Fixtures:
+ * providerSelector — landing page (provider list, search, help dialog)
+ * wizard — wizard runner + protocol picker
+ * keycloakLogin — Keycloak login page (integration tests only)
+ * kcToken — real Keycloak access token via direct grant (requires KC running)
+ * withRealKcAuth — intercepts KC admin API requests and injects a real token;
+ * lets the request through to the real Keycloak instead of mocking.
+ * Use this in tests that need real API responses.
+ */
+
+const KC_BASE = process.env.KC_BASE_URL ?? "http://localhost:8080/auth";
+const KC_REALM = "wizard";
+const KC_CLIENT_ID = process.env.VITE_OIDC_CLIENT_ID ?? "wizard-v2-dev";
+const KC_USERNAME = process.env.KC_WIZARD_USER ?? "wizard";
+const KC_PASSWORD = process.env.KC_WIZARD_PASS ?? "password";
+
+/** Fetch a real Keycloak access token for the wizard user via direct grant. */
+async function fetchKcToken(): Promise {
+ const res = await fetch(
+ `${KC_BASE}/realms/${KC_REALM}/protocol/openid-connect/token`,
+ {
+ method: "POST",
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ body: new URLSearchParams({
+ grant_type: "password",
+ client_id: KC_CLIENT_ID,
+ username: KC_USERNAME,
+ password: KC_PASSWORD,
+ }),
+ }
+ );
+ if (!res.ok) {
+ throw new Error(
+ `Failed to fetch Keycloak token: ${res.status} ${await res.text()}`
+ );
+ }
+ const { access_token } = (await res.json()) as { access_token: string };
+ return access_token;
+}
+
+type Fixtures = {
+ providerSelector: ProviderSelectorPage;
+ wizard: WizardPage;
+ keycloakLogin: KeycloakLoginPage;
+ /** Real KC access token obtained via direct grant. Requires Keycloak to be running. */
+ kcToken: string;
+ /**
+ * Installs a route handler that intercepts Keycloak admin API calls and
+ * replaces the Authorization header with a real token, then forwards the
+ * request to Keycloak. Use this instead of page.route() response mocks when
+ * you want real API responses.
+ */
+ withRealKcAuth: void;
+};
+
+export const test = base.extend({
+ providerSelector: async ({ page }, use) => {
+ await use(new ProviderSelectorPage(page));
+ },
+ wizard: async ({ page }, use) => {
+ await use(new WizardPage(page));
+ },
+ keycloakLogin: async ({ page }, use) => {
+ await use(new KeycloakLoginPage(page));
+ },
+
+ kcToken: async ({}, use) => {
+ const token = await fetchKcToken();
+ await use(token);
+ },
+
+ withRealKcAuth: async ({ page, kcToken }, use) => {
+ // Intercept all requests to the Keycloak admin API and replace the
+ // Authorization header with the real token, then continue to the real server.
+ await page.route(`${KC_BASE}/admin/**`, async (route) => {
+ await route.continue({
+ headers: {
+ ...route.request().headers(),
+ Authorization: `Bearer ${kcToken}`,
+ },
+ });
+ });
+ await use();
+ },
+});
+
+export { expect } from "@playwright/test";
diff --git a/apps/wizard-v2/e2e/global-setup.ts b/apps/wizard-v2/e2e/global-setup.ts
new file mode 100644
index 00000000..1abd5bef
--- /dev/null
+++ b/apps/wizard-v2/e2e/global-setup.ts
@@ -0,0 +1,195 @@
+import type { FullConfig } from "@playwright/test";
+
+/**
+ * Global setup — runs once before all integration tests (after auth:setup).
+ *
+ * Creates test organizations in the wizard realm via the Phase Two Orgs API and
+ * assigns test users to them. These organizations are used by the organizations
+ * spec and by wizard-completion tests that test the org-scoped (cloud) flow.
+ *
+ * Organizations created:
+ * - test-org-alpha → org-admin as admin, org-member as member
+ * - test-org-beta → no members (used for isolation tests)
+ *
+ * The org IDs are written to process.env so tests can reference them without
+ * hardcoding. Playwright passes env through to workers automatically.
+ *
+ * Only runs when PLAYWRIGHT_INTEGRATION=true (see playwright.config.ts).
+ */
+
+const KC_BASE = process.env.KC_BASE_URL ?? "http://localhost:8080/auth";
+const REALM = "wizard";
+const ADMIN_USER = process.env.KC_ADMIN_USER ?? "admin";
+const ADMIN_PASS = process.env.KC_ADMIN_PASS ?? "admin";
+
+async function getAdminToken(): Promise {
+ const res = await fetch(
+ `${KC_BASE}/realms/master/protocol/openid-connect/token`,
+ {
+ method: "POST",
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ body: new URLSearchParams({
+ client_id: "admin-cli",
+ username: ADMIN_USER,
+ password: ADMIN_PASS,
+ grant_type: "password",
+ }),
+ }
+ );
+ if (!res.ok) {
+ throw new Error(`Failed to get admin token: ${res.status} ${await res.text()}`);
+ }
+ const json = (await res.json()) as { access_token: string };
+ return json.access_token;
+}
+
+async function getUserId(token: string, username: string): Promise {
+ const res = await fetch(
+ `${KC_BASE}/admin/realms/${REALM}/users?username=${encodeURIComponent(username)}&exact=true`,
+ { headers: { Authorization: `Bearer ${token}` } }
+ );
+ if (!res.ok) return null;
+ const users = (await res.json()) as Array<{ id: string; username: string }>;
+ return users[0]?.id ?? null;
+}
+
+async function createOrg(
+ token: string,
+ name: string,
+ displayName: string
+): Promise {
+ // Check if org already exists
+ const listRes = await fetch(
+ `${KC_BASE}/realms/${REALM}/orgs?search=${encodeURIComponent(name)}`,
+ { headers: { Authorization: `Bearer ${token}` } }
+ );
+ if (listRes.ok) {
+ const existing = (await listRes.json()) as Array<{ id: string; name: string }>;
+ const match = existing.find((o) => o.name === name);
+ if (match) {
+ console.log(`[global-setup] org "${name}" already exists (${match.id})`);
+ return match.id;
+ }
+ }
+
+ const res = await fetch(`${KC_BASE}/realms/${REALM}/orgs`, {
+ method: "POST",
+ headers: {
+ Authorization: `Bearer ${token}`,
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({ name, displayName }),
+ });
+
+ if (!res.ok) {
+ console.warn(`[global-setup] failed to create org "${name}": ${res.status} ${await res.text()}`);
+ return null;
+ }
+
+ // Phase Two returns the created org in the Location header or body
+ const location = res.headers.get("location");
+ if (location) {
+ const id = location.split("/").pop() ?? null;
+ console.log(`[global-setup] created org "${name}" → ${id}`);
+ return id;
+ }
+
+ // Fallback: re-fetch to get the id
+ const refetch = await fetch(
+ `${KC_BASE}/realms/${REALM}/orgs?search=${encodeURIComponent(name)}`,
+ { headers: { Authorization: `Bearer ${token}` } }
+ );
+ if (refetch.ok) {
+ const orgs = (await refetch.json()) as Array<{ id: string; name: string }>;
+ return orgs.find((o) => o.name === name)?.id ?? null;
+ }
+ return null;
+}
+
+async function addOrgMember(token: string, orgId: string, userId: string) {
+ const res = await fetch(
+ `${KC_BASE}/realms/${REALM}/orgs/${orgId}/members/${userId}`,
+ {
+ method: "PUT",
+ headers: { Authorization: `Bearer ${token}` },
+ }
+ );
+ if (!res.ok && res.status !== 409) {
+ console.warn(
+ `[global-setup] failed to add member ${userId} to org ${orgId}: ${res.status}`
+ );
+ }
+}
+
+async function grantOrgRole(
+ token: string,
+ orgId: string,
+ userId: string,
+ roleName: string
+) {
+ // Get the org role id
+ const rolesRes = await fetch(
+ `${KC_BASE}/realms/${REALM}/orgs/${orgId}/roles`,
+ { headers: { Authorization: `Bearer ${token}` } }
+ );
+ if (!rolesRes.ok) return;
+
+ const roles = (await rolesRes.json()) as Array<{ id: string; name: string }>;
+ const role = roles.find((r) => r.name === roleName);
+ if (!role) return;
+
+ await fetch(
+ `${KC_BASE}/realms/${REALM}/orgs/${orgId}/members/${userId}/roles`,
+ {
+ method: "POST",
+ headers: {
+ Authorization: `Bearer ${token}`,
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify([{ id: role.id, name: role.name }]),
+ }
+ );
+}
+
+export default async function globalSetup(_config: FullConfig) {
+ console.log("[global-setup] starting organization setup...");
+
+ const token = await getAdminToken();
+
+ const [orgAdminId, orgMemberId] = await Promise.all([
+ getUserId(token, "org-admin"),
+ getUserId(token, "org-member"),
+ ]);
+
+ if (!orgAdminId) {
+ console.warn("[global-setup] org-admin user not found — skipping org setup");
+ return;
+ }
+
+ // Create test organizations
+ const [alphaId, betaId] = await Promise.all([
+ createOrg(token, "test-org-alpha", "Alpha Test Organization"),
+ createOrg(token, "test-org-beta", "Beta Test Organization"),
+ ]);
+
+ if (alphaId) {
+ // Assign org-admin as member + admin of alpha org
+ await addOrgMember(token, alphaId, orgAdminId);
+ await grantOrgRole(token, alphaId, orgAdminId, "admin");
+
+ if (orgMemberId) {
+ await addOrgMember(token, alphaId, orgMemberId);
+ }
+
+ // Expose org IDs to tests via env
+ process.env.TEST_ORG_ALPHA_ID = alphaId;
+ console.log(`[global-setup] test-org-alpha ready: ${alphaId}`);
+ }
+
+ if (betaId) {
+ process.env.TEST_ORG_BETA_ID = betaId;
+ console.log(`[global-setup] test-org-beta ready: ${betaId}`);
+ }
+
+ console.log("[global-setup] done");
+}
diff --git a/apps/wizard-v2/e2e/organizations.spec.ts b/apps/wizard-v2/e2e/organizations.spec.ts
new file mode 100644
index 00000000..46b243d0
--- /dev/null
+++ b/apps/wizard-v2/e2e/organizations.spec.ts
@@ -0,0 +1,188 @@
+import path from "path";
+import { fileURLToPath } from "url";
+import { test, expect } from "./fixtures/test";
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
+/**
+ * Organization tests — integration mode only.
+ *
+ * These tests require a running Keycloak instance with the Phase Two extension.
+ * Run with: PLAYWRIGHT_INTEGRATION=true pnpm test:e2e
+ *
+ * The test organizations (test-org-alpha, test-org-beta) are created by
+ * e2e/global-setup.ts before this suite runs. Their IDs are available as
+ * process.env.TEST_ORG_ALPHA_ID and TEST_ORG_BETA_ID.
+ *
+ * Covered scenarios:
+ * - Wizard launches with ?org_id= param (cloud/org-scoped mode)
+ * - Org-scoped API endpoints are used instead of admin API
+ * - Org admin can complete a wizard for their organization
+ */
+
+const KC_BASE = process.env.KC_BASE_URL ?? "http://localhost:8180/auth";
+const REALM = "wizard";
+
+// ── Helpers ──────────────────────────────────────────────────────────────────
+
+async function getToken(username: string, password: string): Promise {
+ const res = await fetch(
+ `${KC_BASE}/realms/${REALM}/protocol/openid-connect/token`,
+ {
+ method: "POST",
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ body: new URLSearchParams({
+ client_id: "wizard-v2-dev",
+ username,
+ password,
+ grant_type: "password",
+ }),
+ },
+ );
+ if (!res.ok) {
+ throw new Error(`Failed to get token for ${username}: ${res.status}`);
+ }
+ const json = (await res.json()) as { access_token: string };
+ return json.access_token;
+}
+
+// ── Organization listing ──────────────────────────────────────────────────────
+
+test.describe("organization listing", () => {
+ test("test organizations exist in the realm", async () => {
+ const token = await getToken("wizard", "password");
+ const res = await fetch(`${KC_BASE}/realms/${REALM}/orgs`, {
+ headers: { Authorization: `Bearer ${token}` },
+ });
+ expect(res.ok).toBe(true);
+
+ const orgs = (await res.json()) as Array<{ name: string }>;
+ const names = orgs.map((o) => o.name);
+ expect(names).toContain("test-org-alpha");
+ expect(names).toContain("test-org-beta");
+ });
+
+ test("org-admin is a member of test-org-alpha", async () => {
+ const adminToken = await getToken("wizard", "password");
+ const orgId = process.env.TEST_ORG_ALPHA_ID;
+ expect(orgId).toBeTruthy();
+
+ const res = await fetch(
+ `${KC_BASE}/realms/${REALM}/orgs/${orgId}/members`,
+ { headers: { Authorization: `Bearer ${adminToken}` } },
+ );
+ expect(res.ok).toBe(true);
+
+ const members = (await res.json()) as Array<{ username: string }>;
+ expect(members.map((m) => m.username)).toContain("org-admin");
+ });
+});
+
+// ── Wizard in org context ────────────────────────────────────────────────────
+
+test.describe("wizard with org context", () => {
+ test("wizard URL with ?org_id renders in cloud mode", async ({ page }) => {
+ const orgId = process.env.TEST_ORG_ALPHA_ID ?? "unknown";
+ await page.goto(`/?org_id=${orgId}`);
+
+ // Provider selector should be visible and pass the org_id forward
+ await expect(page.getByPlaceholder("Search providers...")).toBeVisible();
+
+ // Navigate to a wizard — org_id should be forwarded
+ await page.getByRole("button", { name: /ADFS/i }).click();
+ await expect(page).toHaveURL(new RegExp(`org_id=${orgId}`));
+ });
+
+ test("wizard uses orgs API endpoints in cloud mode", async ({ page }) => {
+ const orgId = process.env.TEST_ORG_ALPHA_ID ?? "unknown";
+
+ // Intercept to verify the org-scoped endpoint is called
+ const orgApiCalls: string[] = [];
+ await page.route(`**/${REALM}/orgs/**`, (route) => {
+ orgApiCalls.push(route.request().url());
+ route.fulfill({ json: {} });
+ });
+ await page.route("**/identity-provider/import-config", (route) =>
+ route.fulfill({
+ json: {
+ entityId: "https://test-idp.example.com",
+ singleSignOnServiceUrl: "https://test-idp.example.com/sso/saml",
+ },
+ }),
+ );
+ await page.route("**/identity-provider/instances", (route) =>
+ route.fulfill({ status: 201, json: { id: "mock-id" } }),
+ );
+
+ await page.goto(`/wizard/adfs/saml?org_id=${orgId}`);
+ await page.waitForURL(`/wizard/adfs/saml?org_id=${orgId}`);
+
+ // The page should display org context — the wizard runner uses orgsClient
+ // when org_id is present; verify via URL param persistence
+ expect(page.url()).toContain(`org_id=${orgId}`);
+ });
+});
+
+// ── Org-scoped wizard completion ──────────────────────────────────────────────
+
+test.describe("org-scoped SAML wizard completion", () => {
+ test("org admin can complete the ADFS SAML wizard for their org", async ({
+ page,
+ wizard,
+ }) => {
+ const orgId = process.env.TEST_ORG_ALPHA_ID ?? "unknown";
+
+ // Mock org-scoped API endpoints
+ await page.route(`**/${REALM}/orgs/${orgId}/idps/import-config`, (route) =>
+ route.fulfill({ json: { entityId: "https://test-idp.example.com" } }),
+ );
+ await page.route(`**/${REALM}/orgs/${orgId}/idps`, (route) =>
+ route.fulfill({ status: 201, json: { id: "mock-idp" } }),
+ );
+ await page.route(`**/${REALM}/orgs/${orgId}/idps/*/mappers`, (route) =>
+ route.fulfill({ status: 201, json: {} }),
+ );
+ // Also mock the onprem fallback
+ await page.route("**/identity-provider/import-config", (route) =>
+ route.fulfill({ json: { entityId: "https://test-idp.example.com" } }),
+ );
+ await page.route("**/identity-provider/instances", (route) =>
+ route.fulfill({ status: 201, json: { id: "mock-idp" } }),
+ );
+ await page.route("**/identity-provider/instances/*/mappers", (route) =>
+ route.fulfill({ status: 201, json: {} }),
+ );
+
+ await page.goto(`/wizard/adfs/saml?org_id=${orgId}`);
+ await wizard.waitForStep(/.+/);
+
+ // ADFS SAML Step 1 — copy blocks
+ await wizard.clickNext();
+
+ // ADFS SAML Step 2 — metadata upload
+ const metadataFile = path.join(
+ __dirname,
+ "fixtures",
+ "test-saml-metadata.xml",
+ );
+ await wizard.uploadFile(/Metadata/i, metadataFile);
+ await wizard.submitForm(/Validate/i);
+ await wizard.clickNext();
+
+ // Remaining steps — skip to confirmation
+ // (ADFS wizard may have varying step counts — advance until confirm step)
+ let attempts = 0;
+ while (attempts < 5) {
+ const isConfirm = await page
+ .getByRole("button", { name: /Create.*Identity Provider/i })
+ .isVisible()
+ .catch(() => false);
+ if (isConfirm) break;
+ await wizard.clickNext().catch(() => {});
+ attempts++;
+ }
+
+ await wizard.confirm(/Create.*Identity Provider/i);
+ await wizard.waitForSuccess();
+ });
+});
diff --git a/apps/wizard-v2/e2e/pages/KeycloakLoginPage.ts b/apps/wizard-v2/e2e/pages/KeycloakLoginPage.ts
new file mode 100644
index 00000000..561bc3fc
--- /dev/null
+++ b/apps/wizard-v2/e2e/pages/KeycloakLoginPage.ts
@@ -0,0 +1,32 @@
+import { type Page } from "@playwright/test";
+
+/**
+ * Page object for the Keycloak login screen.
+ *
+ * Works with both the default Keycloak theme and Phase Two's phasetwo.v2 theme.
+ * Uses attribute selectors (name=) rather than IDs so it survives theme changes.
+ */
+export class KeycloakLoginPage {
+ readonly page: Page;
+
+ constructor(page: Page) {
+ this.page = page;
+ }
+
+ /** Wait until the Keycloak login page is visible. */
+ async waitForReady() {
+ await this.page.waitForURL(/localhost:8080/, { timeout: 15_000 });
+ await this.page
+ .locator("input[name='username'], #username")
+ .waitFor({ timeout: 10_000 });
+ }
+
+ async login(username: string, password: string) {
+ await this.waitForReady();
+ await this.page.locator("input[name='username'], #username").fill(username);
+ await this.page.locator("input[name='password'], #password").fill(password);
+ await this.page.locator("[type='submit'], #kc-login").click();
+ // Wait for redirect back to the app
+ await this.page.waitForURL("http://localhost:5173/**", { timeout: 15_000 });
+ }
+}
diff --git a/apps/wizard-v2/e2e/pages/ProviderSelectorPage.ts b/apps/wizard-v2/e2e/pages/ProviderSelectorPage.ts
new file mode 100644
index 00000000..756a67a3
--- /dev/null
+++ b/apps/wizard-v2/e2e/pages/ProviderSelectorPage.ts
@@ -0,0 +1,41 @@
+import { type Page, type Locator } from "@playwright/test";
+
+/**
+ * Page object model for the provider selector (index route).
+ * Encapsulates all selectors and interactions for the landing page.
+ */
+export class ProviderSelectorPage {
+ readonly page: Page;
+ readonly searchInput: Locator;
+ readonly providerList: Locator;
+ readonly helpTrigger: Locator;
+ readonly helpDialog: Locator;
+
+ constructor(page: Page) {
+ this.page = page;
+ this.searchInput = page.getByPlaceholder("Search providers...");
+ this.providerList = page.getByRole("main");
+ this.helpTrigger = page.getByRole("button", { name: /where to start/i });
+ this.helpDialog = page.getByRole("dialog");
+ }
+
+ async goto() {
+ await this.page.goto("/");
+ }
+
+ async search(query: string) {
+ await this.searchInput.fill(query);
+ }
+
+ async clearSearch() {
+ await this.searchInput.clear();
+ }
+
+ async selectProvider(name: string) {
+ await this.page.getByRole("button", { name }).click();
+ }
+
+ async openHelp() {
+ await this.helpTrigger.click();
+ }
+}
diff --git a/apps/wizard-v2/e2e/pages/WizardPage.ts b/apps/wizard-v2/e2e/pages/WizardPage.ts
new file mode 100644
index 00000000..6a4b193a
--- /dev/null
+++ b/apps/wizard-v2/e2e/pages/WizardPage.ts
@@ -0,0 +1,101 @@
+import { type Page, type Locator, expect } from "@playwright/test";
+
+/**
+ * Page object model for wizard runner and protocol picker views.
+ *
+ * Covers:
+ * - Protocol picker (multi-protocol providers)
+ * - Wizard runner — step navigation, form interactions, confirmation
+ */
+export class WizardPage {
+ readonly page: Page;
+ readonly homeLink: Locator;
+
+ // Step navigation
+ readonly nextButton: Locator;
+ readonly backButton: Locator;
+ readonly stepIndicator: Locator;
+
+ constructor(page: Page) {
+ this.page = page;
+ this.homeLink = page.getByRole("link", { name: "Providers" });
+ this.nextButton = page.getByRole("button", { name: /continue/i });
+ this.backButton = page.getByRole("button", { name: /back/i });
+ this.stepIndicator = page.locator("[data-step-indicator]");
+ }
+
+ async goHome() {
+ await this.homeLink.click();
+ }
+
+ /** Returns the current URL pathname. */
+ pathname() {
+ return new URL(this.page.url()).pathname;
+ }
+
+ // ── Protocol picker ─────────────────────────────────────────────────────
+
+ /** Select a protocol from the protocol picker page. */
+ async selectProtocol(protocol: "saml" | "oidc" | "ldap") {
+ await this.page.getByRole("button", { name: new RegExp(protocol, "i") }).click();
+ }
+
+ // ── Step navigation ──────────────────────────────────────────────────────
+
+ async clickNext() {
+ await this.nextButton.click();
+ }
+
+ async clickBack() {
+ await this.backButton.click();
+ }
+
+ /** Wait for the wizard to display a specific step (by step title text). */
+ async waitForStep(titleText: string | RegExp) {
+ await expect(
+ this.page.getByRole("heading", { name: titleText })
+ ).toBeVisible({ timeout: 5_000 });
+ }
+
+ // ── Copy blocks ──────────────────────────────────────────────────────────
+
+ /** Returns the visible text of a copy block by its label. */
+ async getCopyBlockValue(label: string): Promise {
+ const block = this.page.locator(`[data-copy-label="${label}"]`);
+ return (await block.textContent()) ?? "";
+ }
+
+ // ── Forms ────────────────────────────────────────────────────────────────
+
+ async fillTextField(fieldLabel: string | RegExp, value: string) {
+ await this.page.getByLabel(fieldLabel).fill(value);
+ }
+
+ async uploadFile(_fieldLabel: string | RegExp, filePath: string) {
+ await this.page.locator('input[type="file"]').setInputFiles(filePath);
+ }
+
+ /** Click the submit button inside a form by its label text. */
+ async submitForm(buttonLabel: string | RegExp) {
+ await this.page.getByRole("button", { name: buttonLabel }).click();
+ }
+
+ // ── Confirmation step ────────────────────────────────────────────────────
+
+ /** Click the final "Create …" action button on the confirmation step. */
+ async confirm(buttonLabel: string | RegExp = /create/i) {
+ await this.page.getByRole("button", { name: buttonLabel }).click();
+ }
+
+ /** Wait for the success message after IDP/federation creation. */
+ async waitForSuccess(messagePattern?: string | RegExp) {
+ const pattern = messagePattern ?? /created successfully/i;
+ await expect(this.page.getByText(pattern)).toBeVisible({ timeout: 10_000 });
+ }
+
+ /** Wait for an error message to appear. */
+ async waitForError(messagePattern?: string | RegExp) {
+ const pattern = messagePattern ?? /error/i;
+ await expect(this.page.getByText(pattern)).toBeVisible({ timeout: 5_000 });
+ }
+}
diff --git a/apps/wizard-v2/e2e/provider-selector.spec.ts b/apps/wizard-v2/e2e/provider-selector.spec.ts
new file mode 100644
index 00000000..1fcd380d
--- /dev/null
+++ b/apps/wizard-v2/e2e/provider-selector.spec.ts
@@ -0,0 +1,70 @@
+import { test, expect } from "./fixtures/test";
+
+/**
+ * Provider selector smoke tests.
+ * These cover navigation and UI state only — no wizard step logic yet.
+ * Expand once the wizard configuration format is settled.
+ */
+
+test.describe("provider selector", () => {
+ test.beforeEach(async ({ providerSelector }) => {
+ await providerSelector.goto();
+ });
+
+ test("renders the provider list", async ({ providerSelector }) => {
+ await expect(providerSelector.searchInput).toBeVisible();
+ // Placeholder — assert specific providers once list is stable
+ });
+
+ test("search filters the provider list", async ({ providerSelector }) => {
+ await providerSelector.search("okta");
+ await expect(providerSelector.page.getByRole("button", { name: /okta/i })).toBeVisible();
+ });
+
+ test("clearing search restores grouped view", async ({ providerSelector }) => {
+ await providerSelector.search("okta");
+ await providerSelector.clearSearch();
+ await expect(providerSelector.page.getByText("Providers")).toBeVisible();
+ const genericHeading = providerSelector.page.getByText("Generic", { exact: true });
+ await genericHeading.scrollIntoViewIfNeeded();
+ await expect(genericHeading).toBeVisible();
+ });
+
+ test("help dialog opens and closes", async ({ providerSelector }) => {
+ await providerSelector.openHelp();
+ await expect(providerSelector.helpDialog).toBeVisible();
+ await providerSelector.page.keyboard.press("Escape");
+ await expect(providerSelector.helpDialog).not.toBeVisible();
+ });
+});
+
+test.describe("provider navigation", () => {
+ test.beforeEach(async ({ providerSelector }) => {
+ await providerSelector.goto();
+ });
+
+ test("single-protocol provider navigates directly to wizard", async ({
+ providerSelector,
+ wizard,
+ }) => {
+ await providerSelector.selectProvider("ADFS");
+ await expect(providerSelector.page).toHaveURL(/\/wizard\/adfs\/saml/);
+ await expect(wizard.homeLink).toBeVisible();
+ });
+
+ test("multi-protocol provider navigates to protocol picker", async ({
+ providerSelector,
+ }) => {
+ await providerSelector.selectProvider("Okta");
+ await expect(providerSelector.page).toHaveURL(/\/wizard\/okta$/);
+ });
+
+ test("home link returns to provider selector", async ({
+ providerSelector,
+ wizard,
+ }) => {
+ await providerSelector.selectProvider("ADFS");
+ await wizard.goHome();
+ await expect(providerSelector.page).toHaveURL("/");
+ });
+});
diff --git a/apps/wizard-v2/e2e/wizard-completion.spec.ts b/apps/wizard-v2/e2e/wizard-completion.spec.ts
new file mode 100644
index 00000000..c2569b60
--- /dev/null
+++ b/apps/wizard-v2/e2e/wizard-completion.spec.ts
@@ -0,0 +1,281 @@
+import path from "path";
+import { fileURLToPath } from "url";
+import { test, expect } from "./fixtures/test";
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
+/**
+ * Wizard completion tests.
+ *
+ * Tests the full UI flow for each wizard protocol (SAML/OIDC/LDAP) from the
+ * provider selector through to the final "created successfully" confirmation.
+ *
+ * These run in mock OIDC mode (no real Keycloak login required) but the Vite
+ * server is started with VITE_OIDC_ISSUER_URI so the wizard runner can resolve
+ * API URLs. All Keycloak API calls are intercepted with page.route() so the
+ * tests are hermetic and fast.
+ *
+ * Mocked endpoints:
+ * POST .../identity-provider/import-config -> validateMetadata
+ * POST .../identity-provider/instances -> createIdp
+ * POST .../identity-provider/instances/{id}/mappers -> addMappers
+ * POST .../components -> createComponent (LDAP)
+ * POST .../testLDAPConnection -> testLdapConnection
+ */
+
+const SAML_METADATA_FILE = path.join(
+ __dirname,
+ "fixtures",
+ "test-saml-metadata.xml"
+);
+
+// Mock response bodies
+const MOCK_SAML_IMPORT_CONFIG = {
+ entityId: "https://test-idp.example.com",
+ singleSignOnServiceUrl: "https://test-idp.example.com/sso/saml",
+ singleSignOnServiceBinding:
+ "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST",
+ nameIDPolicyFormat:
+ "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified",
+ signingCertificate: "MIIBkTCB+wIJAJ==",
+};
+
+const MOCK_OIDC_IMPORT_CONFIG = {
+ issuer: "https://test.auth0.com/",
+ authorizationUrl: "https://test.auth0.com/authorize",
+ tokenUrl: "https://test.auth0.com/oauth/token",
+ userInfoUrl: "https://test.auth0.com/userinfo",
+ jwksUrl: "https://test.auth0.com/.well-known/jwks.json",
+};
+
+const MOCK_IDP_CREATED = { id: "mock-idp-id", alias: "test-alias" };
+const MOCK_MAPPER_CREATED = { id: "mock-mapper-id" };
+const MOCK_COMPONENT_CREATED = { id: "mock-component-id" };
+const MOCK_LDAP_CONNECTION_OK = { result: "Success" };
+
+// ── SAML wizard ─────────────────────────────────────────────────────────────
+
+test.describe("SAML wizard — Auth0", () => {
+ test.beforeEach(async ({ page }) => {
+ // Intercept Keycloak admin API calls
+ await page.route("**/identity-provider/import-config", (route) =>
+ route.fulfill({ json: MOCK_SAML_IMPORT_CONFIG })
+ );
+ await page.route("**/identity-provider/instances", (route) =>
+ route.fulfill({ status: 201, json: MOCK_IDP_CREATED })
+ );
+ await page.route("**/identity-provider/instances/*/mappers", (route) =>
+ route.fulfill({ status: 201, json: MOCK_MAPPER_CREATED })
+ );
+ });
+
+ test("completes the full SAML flow", async ({ page, wizard }) => {
+ await page.goto("/wizard/auth0/saml");
+
+ // Step 1 — Create SAML Application (copy blocks, no user input needed)
+ await wizard.waitForStep(/Create a SAML Application/i);
+ await expect(page.getByText(/ACS URL/i)).toBeVisible();
+ await expect(page.getByText("Entity ID", { exact: true })).toBeVisible();
+ await wizard.clickNext();
+
+ // Step 2 — Upload Identity Provider Metadata
+ await wizard.waitForStep(/Upload Identity Provider Metadata/i);
+ await wizard.uploadFile(/Metadata File/i, SAML_METADATA_FILE);
+ await wizard.submitForm(/Validate File/i);
+ await expect(wizard.nextButton).toBeEnabled({ timeout: 5_000 });
+ await wizard.clickNext();
+
+ // Step 3 — Configure Attribute Mapping (display-only)
+ await wizard.waitForStep(/Configure Attribute Mapping/i);
+ await expect(page.getByText(/username/i)).toBeVisible();
+ await wizard.clickNext();
+
+ // Step 4 — Configure User Access (display-only)
+ await wizard.waitForStep(/Configure User Access/i);
+ await wizard.clickNext();
+
+ // Step 5 — Confirmation
+ await wizard.waitForStep(/Confirmation/i);
+ await wizard.confirm(/Create SAML Identity Provider/i);
+ await wizard.waitForSuccess(/SAML Identity Provider created successfully/i);
+ });
+
+ test("back navigation returns to previous step", async ({ page, wizard }) => {
+ await page.goto("/wizard/auth0/saml");
+ await wizard.waitForStep(/Create a SAML Application/i);
+ await wizard.clickNext();
+ await wizard.waitForStep(/Upload Identity Provider Metadata/i);
+ await wizard.clickBack();
+ await wizard.waitForStep(/Create a SAML Application/i);
+ });
+
+ test("next is disabled until metadata is validated", async ({
+ page,
+ wizard,
+ }) => {
+ await page.goto("/wizard/auth0/saml");
+ await wizard.clickNext();
+ await wizard.waitForStep(/Upload Identity Provider Metadata/i);
+ // Next should be disabled or absent before validation
+ await expect(wizard.nextButton).toBeDisabled();
+ });
+});
+
+// ── OIDC wizard ─────────────────────────────────────────────────────────────
+
+test.describe("OIDC wizard — Auth0", () => {
+ test.beforeEach(async ({ page }) => {
+ await page.route("**/identity-provider/import-config", (route) =>
+ route.fulfill({ json: MOCK_OIDC_IMPORT_CONFIG })
+ );
+ await page.route("**/identity-provider/instances", (route) =>
+ route.fulfill({ status: 201, json: MOCK_IDP_CREATED })
+ );
+ });
+
+ test("completes the full OIDC flow", async ({ page, wizard }) => {
+ await page.goto("/wizard/auth0/oidc");
+
+ // Step 1 — Create Application (informational)
+ await wizard.waitForStep(/Create an Application/i);
+ await wizard.clickNext();
+
+ // Step 2 — Domain & Credentials
+ await wizard.waitForStep(/Domain & Credentials/i);
+ await wizard.fillTextField(/Auth0 Domain/i, "test.auth0.com");
+ await wizard.fillTextField(/Client ID/i, "mock-client-id");
+ await wizard.fillTextField(/Client Secret/i, "mock-client-secret");
+ await wizard.submitForm(/Verify & Save/i);
+ await expect(wizard.nextButton).toBeEnabled({ timeout: 5_000 });
+ await wizard.clickNext();
+
+ // Step 3 — Configure Redirect URI (copy block)
+ await wizard.waitForStep(/Configure Redirect URI/i);
+ await expect(page.getByText(/Redirect URI/i)).toBeVisible();
+ await wizard.clickNext();
+
+ // Step 4 — Confirmation
+ await wizard.waitForStep(/Confirmation/i);
+ await wizard.confirm(/Create.*Identity Provider/i);
+ await wizard.waitForSuccess(/Identity Provider created successfully/i);
+ });
+});
+
+// ── LDAP wizard ─────────────────────────────────────────────────────────────
+
+test.describe("LDAP wizard — Okta", () => {
+ test.beforeEach(async ({ page }) => {
+ await page.route("**/testLDAPConnection", (route) =>
+ route.fulfill({ json: MOCK_LDAP_CONNECTION_OK })
+ );
+ await page.route("**/components", (route) =>
+ route.fulfill({ status: 201, json: MOCK_COMPONENT_CREATED })
+ );
+ });
+
+ test("completes the full LDAP flow", async ({ page, wizard }) => {
+ await page.goto("/wizard/okta/ldap");
+
+ // Step 1 — LDAP Server Config + connection test
+ await wizard.waitForStep(/Enable LDAP Interface/i);
+ await wizard.fillTextField(/LDAP Host/i, "test-org.ldap.okta.com");
+ await wizard.fillTextField(/SSL Port/i, "636");
+ await wizard.fillTextField(/Base DN/i, "dc=test-org,dc=okta,dc=com");
+ await wizard.fillTextField(/Users DN/i, "ou=users,dc=test-org,dc=okta,dc=com");
+ await wizard.submitForm(/Test Connection/i);
+ await expect(wizard.nextButton).toBeEnabled({ timeout: 5_000 });
+ await wizard.clickNext();
+
+ // Step 2 — Bind Credentials + auth test
+ await wizard.waitForStep(/LDAP Authentication/i);
+ await wizard.fillTextField(/Bind DN/i, "uid=admin,dc=test-org,dc=okta,dc=com");
+ await wizard.fillTextField(/Bind Password/i, "mock-password");
+ await wizard.submitForm(/Test Authentication/i);
+ await expect(wizard.nextButton).toBeEnabled({ timeout: 5_000 });
+ await wizard.clickNext();
+
+ // Step 3 — Confirmation
+ await wizard.waitForStep(/Confirmation/i);
+ await wizard.confirm(/Create LDAP User Federation/i);
+ await wizard.waitForSuccess(/LDAP User Federation created successfully/i);
+ });
+});
+
+// ── Generic SAML wizard ──────────────────────────────────────────────────────
+
+test.describe("Generic SAML wizard", () => {
+ test.beforeEach(async ({ page }) => {
+ await page.route("**/identity-provider/import-config", (route) =>
+ route.fulfill({ json: MOCK_SAML_IMPORT_CONFIG })
+ );
+ await page.route("**/identity-provider/instances", (route) =>
+ route.fulfill({ status: 201, json: MOCK_IDP_CREATED })
+ );
+ await page.route("**/identity-provider/instances/*/mappers", (route) =>
+ route.fulfill({ status: 201, json: MOCK_MAPPER_CREATED })
+ );
+ });
+
+ test("navigates to generic SAML from provider selector", async ({
+ providerSelector,
+ wizard,
+ page,
+ }) => {
+ await providerSelector.goto();
+ await providerSelector.selectProvider("Generic SAML");
+ await expect(page).toHaveURL(/\/wizard\/saml\/saml/);
+ await wizard.waitForStep(/.+/); // any step title = wizard rendered
+ });
+});
+
+// ── Provider selector -> wizard navigation ───────────────────────────────────
+
+test.describe("all providers load their wizards", () => {
+ const singleProtocolProviders: Array<{ id: string; protocol: string }> = [
+ { id: "adfs", protocol: "saml" },
+ { id: "aws", protocol: "saml" },
+ { id: "cloudflare", protocol: "saml" },
+ { id: "cyberark", protocol: "saml" },
+ { id: "duo", protocol: "saml" },
+ { id: "google", protocol: "saml" },
+ { id: "jumpcloud", protocol: "saml" },
+ { id: "lastpass", protocol: "saml" },
+ { id: "entraid", protocol: "saml" },
+ { id: "onelogin", protocol: "saml" },
+ { id: "oracle", protocol: "saml" },
+ { id: "pingone", protocol: "saml" },
+ { id: "saml", protocol: "saml" },
+ { id: "openid", protocol: "oidc" },
+ { id: "ldap", protocol: "ldap" },
+ ];
+
+ for (const { id, protocol } of singleProtocolProviders) {
+ test(`${id}/${protocol} wizard loads without error`, async ({
+ page,
+ wizard,
+ }) => {
+ await page.goto(`/wizard/${id}/${protocol}`);
+ // The wizard runner should render a heading — any step title is enough
+ await wizard.waitForStep(/.+/);
+ // No uncaught errors (Playwright fails on uncaught exceptions by default)
+ });
+ }
+
+ const multiProtocolProviders = [
+ { id: "auth0", protocols: ["saml", "oidc"] },
+ { id: "okta", protocols: ["saml", "ldap"] },
+ { id: "salesforce", protocols: ["saml", "oidc"] },
+ ];
+
+ for (const { id, protocols } of multiProtocolProviders) {
+ for (const protocol of protocols) {
+ test(`${id}/${protocol} wizard loads without error`, async ({
+ page,
+ wizard,
+ }) => {
+ await page.goto(`/wizard/${id}/${protocol}`);
+ await wizard.waitForStep(/.+/);
+ });
+ }
+ }
+});
diff --git a/apps/wizard-v2/eslint.config.js b/apps/wizard-v2/eslint.config.js
new file mode 100644
index 00000000..5e6b472f
--- /dev/null
+++ b/apps/wizard-v2/eslint.config.js
@@ -0,0 +1,23 @@
+import js from '@eslint/js'
+import globals from 'globals'
+import reactHooks from 'eslint-plugin-react-hooks'
+import reactRefresh from 'eslint-plugin-react-refresh'
+import tseslint from 'typescript-eslint'
+import { defineConfig, globalIgnores } from 'eslint/config'
+
+export default defineConfig([
+ globalIgnores(['dist']),
+ {
+ files: ['**/*.{ts,tsx}'],
+ extends: [
+ js.configs.recommended,
+ tseslint.configs.recommended,
+ reactHooks.configs.flat.recommended,
+ reactRefresh.configs.vite,
+ ],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ },
+])
diff --git a/apps/wizard-v2/index.html b/apps/wizard-v2/index.html
new file mode 100644
index 00000000..49ebeede
--- /dev/null
+++ b/apps/wizard-v2/index.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+ Identity Provider Wizard
+
+
+
+
+
+
+
diff --git a/apps/wizard-v2/openapi-codegen/gen.ts b/apps/wizard-v2/openapi-codegen/gen.ts
new file mode 100644
index 00000000..63aaedc0
--- /dev/null
+++ b/apps/wizard-v2/openapi-codegen/gen.ts
@@ -0,0 +1,42 @@
+/**
+ * Generates TypeScript types from OpenAPI specs into src/api/types/.
+ * Run with: pnpm gen-api
+ *
+ * Two specs:
+ * - Phase Two Orgs API → types/orgs.d.ts (org-scoped IDP endpoints)
+ * - Keycloak Admin API → types/admin.d.ts (realm-wide IDP endpoints)
+ */
+import { resolve, dirname } from "node:path";
+import { fileURLToPath } from "node:url";
+import { exec } from "node:child_process";
+import { promisify } from "node:util";
+
+const run = promisify(exec);
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+const outDir = resolve(__dirname, "../src/api/types");
+
+const specs = [
+ {
+ name: "orgs",
+ url: "https://raw.githubusercontent.com/p2-inc/phasetwo-docs/main/openapi.yaml",
+ out: `${outDir}/orgs.d.ts`,
+ },
+ {
+ name: "admin",
+ url: "https://www.keycloak.org/docs-api/latest/rest-api/openapi.json",
+ out: `${outDir}/admin.d.ts`,
+ },
+];
+
+for (const spec of specs) {
+ console.log(`Generating ${spec.name} types from ${spec.url}...`);
+ const { stdout, stderr } = await run(
+ `npx openapi-typescript "${spec.url}" -o "${spec.out}"`,
+ );
+ if (stdout) console.log(stdout);
+ if (stderr && !stderr.includes("ExperimentalWarning")) console.error(stderr);
+ console.log(` ✓ ${spec.out}`);
+}
+
+console.log("Done.");
diff --git a/apps/wizard-v2/package.json b/apps/wizard-v2/package.json
new file mode 100644
index 00000000..e4c834a4
--- /dev/null
+++ b/apps/wizard-v2/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "wizard-v2",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc -b && vite build",
+ "lint": "eslint .",
+ "preview": "vite preview",
+ "gen-api": "tsx openapi-codegen/gen.ts",
+ "test:e2e": "playwright test",
+ "test:e2e:ui": "playwright test --ui",
+ "test:e2e:report": "playwright show-report",
+ "test:integration": "PLAYWRIGHT_INTEGRATION=true playwright test",
+ "test:integration:ui": "PLAYWRIGHT_INTEGRATION=true playwright test --ui",
+ "test:external": "PLAYWRIGHT_INTEGRATION=true playwright test e2e/external-providers/",
+ "capture:aws:saml": "tsx wizards/aws/playwright/saml-capture.ts",
+ "docker:up": "docker compose -f docker/docker-compose.yml up -d && until curl -sf http://localhost:8080/auth/realms/wizard > /dev/null; do sleep 2; done && open http://localhost:8080/auth/admin/master/console/#/wizard",
+ "docker:down": "docker compose -f docker/docker-compose.yml down",
+ "docker:logs": "docker compose -f docker/docker-compose.yml logs -f",
+ "docker:restart": "docker compose -f docker/docker-compose.yml restart",
+ "docker:reset": "docker compose -f docker/docker-compose.yml down -v"
+ },
+ "dependencies": {
+ "@tailwindcss/vite": "^4.2.2",
+ "@tanstack/react-router": "^1.170.4",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
+ "fuse.js": "^7.3.0",
+ "lucide-react": "^1.8.0",
+ "oidc-spa": "^10.2.1",
+ "openapi-fetch": "^0.17.0",
+ "radix-ui": "^1.4.3",
+ "react": "^19.2.4",
+ "react-dom": "^19.2.4",
+ "tailwind-merge": "^3.5.0",
+ "tailwindcss": "^4.2.2",
+ "tw-animate-css": "^1.4.0",
+ "zod": "^4.3.6"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.39.4",
+ "@playwright/test": "^1.59.1",
+ "@tanstack/router-devtools": "^1.167.0",
+ "@tanstack/router-plugin": "^1.168.6",
+ "@types/node": "^24.12.2",
+ "@types/react": "^19.2.14",
+ "@types/react-dom": "^19.2.3",
+ "@vitejs/plugin-react": "^6.0.1",
+ "eslint": "^9.39.4",
+ "eslint-plugin-react-hooks": "^7.0.1",
+ "eslint-plugin-react-refresh": "^0.5.2",
+ "globals": "^17.4.0",
+ "openapi-typescript": "^7.13.0",
+ "tsx": "^4.21.0",
+ "typescript": "~6.0.2",
+ "typescript-eslint": "^8.58.0",
+ "vite": "^8.0.4",
+ "vite-tsconfig-paths": "^6.1.1"
+ }
+}
diff --git a/apps/wizard-v2/playwright.config.ts b/apps/wizard-v2/playwright.config.ts
new file mode 100644
index 00000000..4d1a8a48
--- /dev/null
+++ b/apps/wizard-v2/playwright.config.ts
@@ -0,0 +1,81 @@
+import { defineConfig, devices } from "@playwright/test";
+
+/**
+ * Playwright configuration for wizard-v2 E2E tests.
+ *
+ * TWO MODES:
+ *
+ * Default (mock):
+ * pnpm test:e2e
+ * Runs against Vite with OIDC in mock mode — no Keycloak required.
+ * Covers: provider-selector smoke tests, wizard-completion flow tests (API mocked via page.route).
+ *
+ * Integration (real Keycloak):
+ * PLAYWRIGHT_INTEGRATION=true pnpm test:e2e
+ * Requires: `cd docker && docker compose up -d` before running.
+ * Runs auth:setup first (browser OIDC login → saves storageState).
+ * Then runs global-setup.ts (creates test organizations via Phase Two API).
+ * Covers: organization management tests + all mock tests with real auth.
+ */
+
+const isIntegration = !!process.env.PLAYWRIGHT_INTEGRATION;
+
+const KC_BASE = process.env.KC_BASE_URL ?? "http://localhost:8080/auth";
+const ISSUER_URI = `${KC_BASE}/realms/wizard`;
+
+export default defineConfig({
+ testDir: "./e2e",
+ fullyParallel: !isIntegration,
+ forbidOnly: !!process.env.CI,
+ retries: process.env.CI ? 2 : 0,
+ workers: process.env.CI ? 1 : undefined,
+ reporter: process.env.CI ? "github" : "html",
+
+ globalSetup: isIntegration ? "./e2e/global-setup.ts" : undefined,
+
+ use: {
+ baseURL: "http://localhost:5173",
+ trace: "on-first-retry",
+ screenshot: "only-on-failure",
+ },
+
+ projects: [
+ // ── Auth setup (integration only) ─────────────────────────────────────
+ ...(isIntegration
+ ? [
+ {
+ name: "auth:setup",
+ testMatch: /auth\.setup\.ts/,
+ use: { ...devices["Desktop Chrome"] },
+ },
+ ]
+ : []),
+
+ // ── Mock tests (always run) ────────────────────────────────────────────
+ // provider-selector smoke tests + wizard-completion tests (API mocked)
+ {
+ name: "chromium",
+ testIgnore: isIntegration
+ ? [/auth\.setup\.ts/]
+ : [/auth\.setup\.ts/, /organizations\.spec\.ts/],
+ use: {
+ ...devices["Desktop Chrome"],
+ ...(isIntegration
+ ? { storageState: "e2e/.auth/admin.json" }
+ : {}),
+ },
+ dependencies: isIntegration ? ["auth:setup"] : [],
+ },
+ ],
+
+ webServer: {
+ // Always pass ISSUER_URI so wizard runner resolves API URLs correctly,
+ // even in mock mode where the API calls are intercepted by page.route().
+ command: isIntegration
+ ? `VITE_OIDC_ISSUER_URI=${ISSUER_URI} VITE_OIDC_CLIENT_ID=wizard-v2-dev pnpm dev`
+ : `VITE_OIDC_USE_MOCK=true VITE_OIDC_ISSUER_URI=${ISSUER_URI} pnpm dev`,
+ url: "http://localhost:5173",
+ reuseExistingServer: !process.env.CI,
+ timeout: 30_000,
+ },
+});
diff --git a/apps/wizard-v2/public/favicons/android-chrome-192x192.png b/apps/wizard-v2/public/favicons/android-chrome-192x192.png
new file mode 100644
index 00000000..62aec268
Binary files /dev/null and b/apps/wizard-v2/public/favicons/android-chrome-192x192.png differ
diff --git a/apps/wizard-v2/public/favicons/android-chrome-512x512.png b/apps/wizard-v2/public/favicons/android-chrome-512x512.png
new file mode 100644
index 00000000..6aa20c42
Binary files /dev/null and b/apps/wizard-v2/public/favicons/android-chrome-512x512.png differ
diff --git a/apps/wizard-v2/public/favicons/apple-touch-icon.png b/apps/wizard-v2/public/favicons/apple-touch-icon.png
new file mode 100644
index 00000000..583eba2a
Binary files /dev/null and b/apps/wizard-v2/public/favicons/apple-touch-icon.png differ
diff --git a/apps/wizard-v2/public/favicons/browserconfig.xml b/apps/wizard-v2/public/favicons/browserconfig.xml
new file mode 100644
index 00000000..b3930d0f
--- /dev/null
+++ b/apps/wizard-v2/public/favicons/browserconfig.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ #da532c
+
+
+
diff --git a/apps/wizard-v2/public/favicons/favicon-16x16.png b/apps/wizard-v2/public/favicons/favicon-16x16.png
new file mode 100644
index 00000000..5588fb8d
Binary files /dev/null and b/apps/wizard-v2/public/favicons/favicon-16x16.png differ
diff --git a/apps/wizard-v2/public/favicons/favicon-32x32.png b/apps/wizard-v2/public/favicons/favicon-32x32.png
new file mode 100644
index 00000000..9411676c
Binary files /dev/null and b/apps/wizard-v2/public/favicons/favicon-32x32.png differ
diff --git a/apps/wizard-v2/public/favicons/favicon.ico b/apps/wizard-v2/public/favicons/favicon.ico
new file mode 100644
index 00000000..43e9b19a
Binary files /dev/null and b/apps/wizard-v2/public/favicons/favicon.ico differ
diff --git a/apps/wizard-v2/public/favicons/mstile-144x144.png b/apps/wizard-v2/public/favicons/mstile-144x144.png
new file mode 100644
index 00000000..92e66f5d
Binary files /dev/null and b/apps/wizard-v2/public/favicons/mstile-144x144.png differ
diff --git a/apps/wizard-v2/public/favicons/mstile-150x150.png b/apps/wizard-v2/public/favicons/mstile-150x150.png
new file mode 100644
index 00000000..ed784783
Binary files /dev/null and b/apps/wizard-v2/public/favicons/mstile-150x150.png differ
diff --git a/apps/wizard-v2/public/favicons/mstile-310x150.png b/apps/wizard-v2/public/favicons/mstile-310x150.png
new file mode 100644
index 00000000..c8ec2dd4
Binary files /dev/null and b/apps/wizard-v2/public/favicons/mstile-310x150.png differ
diff --git a/apps/wizard-v2/public/favicons/mstile-310x310.png b/apps/wizard-v2/public/favicons/mstile-310x310.png
new file mode 100644
index 00000000..0e207fc0
Binary files /dev/null and b/apps/wizard-v2/public/favicons/mstile-310x310.png differ
diff --git a/apps/wizard-v2/public/favicons/mstile-70x70.png b/apps/wizard-v2/public/favicons/mstile-70x70.png
new file mode 100644
index 00000000..f9b798a3
Binary files /dev/null and b/apps/wizard-v2/public/favicons/mstile-70x70.png differ
diff --git a/apps/wizard-v2/public/favicons/safari-pinned-tab.svg b/apps/wizard-v2/public/favicons/safari-pinned-tab.svg
new file mode 100644
index 00000000..4ef5bee6
--- /dev/null
+++ b/apps/wizard-v2/public/favicons/safari-pinned-tab.svg
@@ -0,0 +1,40 @@
+
+
+
diff --git a/apps/wizard-v2/public/favicons/site.webmanifest b/apps/wizard-v2/public/favicons/site.webmanifest
new file mode 100644
index 00000000..b20abb7c
--- /dev/null
+++ b/apps/wizard-v2/public/favicons/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "",
+ "short_name": "",
+ "icons": [
+ {
+ "src": "/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
diff --git a/apps/wizard-v2/public/phasetwo-logos/dark/logo_phase_slash.svg b/apps/wizard-v2/public/phasetwo-logos/dark/logo_phase_slash.svg
new file mode 100644
index 00000000..8a789aee
--- /dev/null
+++ b/apps/wizard-v2/public/phasetwo-logos/dark/logo_phase_slash.svg
@@ -0,0 +1,16 @@
+
diff --git a/apps/wizard-v2/public/phasetwo-logos/light/logo_phase_slash.svg b/apps/wizard-v2/public/phasetwo-logos/light/logo_phase_slash.svg
new file mode 100644
index 00000000..76f7536e
--- /dev/null
+++ b/apps/wizard-v2/public/phasetwo-logos/light/logo_phase_slash.svg
@@ -0,0 +1,35 @@
+
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/phasetwo-logos/phasetwo_logo_icon.svg b/apps/wizard-v2/public/phasetwo-logos/phasetwo_logo_icon.svg
new file mode 100644
index 00000000..a1e510de
--- /dev/null
+++ b/apps/wizard-v2/public/phasetwo-logos/phasetwo_logo_icon.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/access-people-hr.svg b/apps/wizard-v2/public/provider-logos/dark/access-people-hr.svg
new file mode 100644
index 00000000..3017aa91
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/access-people-hr.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/active-directory.svg b/apps/wizard-v2/public/provider-logos/dark/active-directory.svg
new file mode 100644
index 00000000..f795aecc
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/active-directory.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/adp.svg b/apps/wizard-v2/public/provider-logos/dark/adp.svg
new file mode 100644
index 00000000..e7f93784
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/adp.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/apple.svg b/apps/wizard-v2/public/provider-logos/dark/apple.svg
new file mode 100644
index 00000000..db0e790e
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/apple.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/auth0.svg b/apps/wizard-v2/public/provider-logos/dark/auth0.svg
new file mode 100644
index 00000000..b28ce750
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/auth0.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/aws.svg b/apps/wizard-v2/public/provider-logos/dark/aws.svg
new file mode 100644
index 00000000..aa1ded1c
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/aws.svg
@@ -0,0 +1,38 @@
+
+
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/azure.svg b/apps/wizard-v2/public/provider-logos/dark/azure.svg
new file mode 100644
index 00000000..d8b06aeb
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/azure.svg
@@ -0,0 +1,23 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/bamboo-hr.svg b/apps/wizard-v2/public/provider-logos/dark/bamboo-hr.svg
new file mode 100644
index 00000000..6bf9713b
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/bamboo-hr.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/bitbucket.svg b/apps/wizard-v2/public/provider-logos/dark/bitbucket.svg
new file mode 100644
index 00000000..b8282707
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/bitbucket.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/breathe-hr.svg b/apps/wizard-v2/public/provider-logos/dark/breathe-hr.svg
new file mode 100644
index 00000000..8c9eb5ac
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/breathe-hr.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/cas.svg b/apps/wizard-v2/public/provider-logos/dark/cas.svg
new file mode 100644
index 00000000..92a6d972
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/cas.svg
@@ -0,0 +1,9 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/cezanne-hr.svg b/apps/wizard-v2/public/provider-logos/dark/cezanne-hr.svg
new file mode 100644
index 00000000..ed13ccfa
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/cezanne-hr.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/classlink.svg b/apps/wizard-v2/public/provider-logos/dark/classlink.svg
new file mode 100644
index 00000000..0db1efd4
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/classlink.svg
@@ -0,0 +1,5 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/clever.svg b/apps/wizard-v2/public/provider-logos/dark/clever.svg
new file mode 100644
index 00000000..3e623bb7
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/clever.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/cloudflare.svg b/apps/wizard-v2/public/provider-logos/dark/cloudflare.svg
new file mode 100644
index 00000000..92626d33
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/cloudflare.svg
@@ -0,0 +1,11 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/cyberark.svg b/apps/wizard-v2/public/provider-logos/dark/cyberark.svg
new file mode 100644
index 00000000..7c1b7e9b
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/cyberark.svg
@@ -0,0 +1,8 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/datadog.svg b/apps/wizard-v2/public/provider-logos/dark/datadog.svg
new file mode 100644
index 00000000..9e6c8ca8
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/datadog.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/discord.svg b/apps/wizard-v2/public/provider-logos/dark/discord.svg
new file mode 100644
index 00000000..7b46a27e
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/discord.svg
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/provider-logos/dark/duo.svg b/apps/wizard-v2/public/provider-logos/dark/duo.svg
new file mode 100644
index 00000000..b214a65b
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/duo.svg
@@ -0,0 +1,5 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/firebase.svg b/apps/wizard-v2/public/provider-logos/dark/firebase.svg
new file mode 100644
index 00000000..397680bf
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/firebase.svg
@@ -0,0 +1,16 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/fourth.svg b/apps/wizard-v2/public/provider-logos/dark/fourth.svg
new file mode 100644
index 00000000..067d93e2
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/fourth.svg
@@ -0,0 +1,7 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/generic-oidc.svg b/apps/wizard-v2/public/provider-logos/dark/generic-oidc.svg
new file mode 100644
index 00000000..afba082a
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/generic-oidc.svg
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/provider-logos/dark/github.svg b/apps/wizard-v2/public/provider-logos/dark/github.svg
new file mode 100644
index 00000000..2f91bdd5
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/github.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/gitlab.svg b/apps/wizard-v2/public/provider-logos/dark/gitlab.svg
new file mode 100644
index 00000000..47967c2c
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/gitlab.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/godaddy.svg b/apps/wizard-v2/public/provider-logos/dark/godaddy.svg
new file mode 100644
index 00000000..7dff35fc
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/godaddy.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/google-cloud.svg b/apps/wizard-v2/public/provider-logos/dark/google-cloud.svg
new file mode 100644
index 00000000..7dc106bc
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/google-cloud.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/google.svg b/apps/wizard-v2/public/provider-logos/dark/google.svg
new file mode 100644
index 00000000..568878f9
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/google.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/hibob.svg b/apps/wizard-v2/public/provider-logos/dark/hibob.svg
new file mode 100644
index 00000000..f356d012
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/hibob.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/intuit.svg b/apps/wizard-v2/public/provider-logos/dark/intuit.svg
new file mode 100644
index 00000000..f20ec6e4
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/intuit.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/jumpcloud.svg b/apps/wizard-v2/public/provider-logos/dark/jumpcloud.svg
new file mode 100644
index 00000000..a8a5adb1
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/jumpcloud.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/keycloak.svg b/apps/wizard-v2/public/provider-logos/dark/keycloak.svg
new file mode 100644
index 00000000..ae4e995b
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/keycloak.svg
@@ -0,0 +1,38 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/lastpass.svg b/apps/wizard-v2/public/provider-logos/dark/lastpass.svg
new file mode 100644
index 00000000..a3998c8d
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/lastpass.svg
@@ -0,0 +1,7 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/ldap.svg b/apps/wizard-v2/public/provider-logos/dark/ldap.svg
new file mode 100644
index 00000000..c905b4de
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/ldap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/provider-logos/dark/linkedin.svg b/apps/wizard-v2/public/provider-logos/dark/linkedin.svg
new file mode 100644
index 00000000..8ccee140
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/linkedin.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/login-gov.svg b/apps/wizard-v2/public/provider-logos/dark/login-gov.svg
new file mode 100644
index 00000000..408ae984
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/login-gov.svg
@@ -0,0 +1,5 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/microsoft.svg b/apps/wizard-v2/public/provider-logos/dark/microsoft.svg
new file mode 100644
index 00000000..0fa72c89
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/microsoft.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/miniorange.svg b/apps/wizard-v2/public/provider-logos/dark/miniorange.svg
new file mode 100644
index 00000000..2a4bbb60
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/miniorange.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/net-iq.svg b/apps/wizard-v2/public/provider-logos/dark/net-iq.svg
new file mode 100644
index 00000000..8f34e988
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/net-iq.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/okta.svg b/apps/wizard-v2/public/provider-logos/dark/okta.svg
new file mode 100644
index 00000000..358a959c
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/okta.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/onelogin.svg b/apps/wizard-v2/public/provider-logos/dark/onelogin.svg
new file mode 100644
index 00000000..e5687ce3
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/onelogin.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/oracle.svg b/apps/wizard-v2/public/provider-logos/dark/oracle.svg
new file mode 100644
index 00000000..67ffcd0e
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/oracle.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/personio.svg b/apps/wizard-v2/public/provider-logos/dark/personio.svg
new file mode 100644
index 00000000..43198207
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/personio.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/ping-identity.svg b/apps/wizard-v2/public/provider-logos/dark/ping-identity.svg
new file mode 100644
index 00000000..21d66857
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/ping-identity.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/react-native-expo.svg b/apps/wizard-v2/public/provider-logos/dark/react-native-expo.svg
new file mode 100644
index 00000000..e66b2d6c
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/react-native-expo.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/rippling.svg b/apps/wizard-v2/public/provider-logos/dark/rippling.svg
new file mode 100644
index 00000000..ec3d1326
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/rippling.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/sailpoint.svg b/apps/wizard-v2/public/provider-logos/dark/sailpoint.svg
new file mode 100644
index 00000000..b3075ae0
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/sailpoint.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/salesforce.svg b/apps/wizard-v2/public/provider-logos/dark/salesforce.svg
new file mode 100644
index 00000000..ca752255
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/salesforce.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/saml.svg b/apps/wizard-v2/public/provider-logos/dark/saml.svg
new file mode 100644
index 00000000..31e567b3
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/saml.svg
@@ -0,0 +1,18 @@
+
+
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/provider-logos/dark/shibboleth.svg b/apps/wizard-v2/public/provider-logos/dark/shibboleth.svg
new file mode 100644
index 00000000..45a7a8a9
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/shibboleth.svg
@@ -0,0 +1,533 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/simple-saml-php.svg b/apps/wizard-v2/public/provider-logos/dark/simple-saml-php.svg
new file mode 100644
index 00000000..5b69e05b
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/simple-saml-php.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/slack.svg b/apps/wizard-v2/public/provider-logos/dark/slack.svg
new file mode 100644
index 00000000..6e45608d
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/slack.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/splunk.svg b/apps/wizard-v2/public/provider-logos/dark/splunk.svg
new file mode 100644
index 00000000..cb6ea694
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/splunk.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/supabase.svg b/apps/wizard-v2/public/provider-logos/dark/supabase.svg
new file mode 100644
index 00000000..e754ea81
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/supabase.svg
@@ -0,0 +1,15 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/vercel.svg b/apps/wizard-v2/public/provider-logos/dark/vercel.svg
new file mode 100644
index 00000000..d2e2f65e
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/vercel.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/provider-logos/dark/vmware.svg b/apps/wizard-v2/public/provider-logos/dark/vmware.svg
new file mode 100644
index 00000000..e1bc4744
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/vmware.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/workday.svg b/apps/wizard-v2/public/provider-logos/dark/workday.svg
new file mode 100644
index 00000000..9448ea04
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/workday.svg
@@ -0,0 +1,5 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/dark/xero.svg b/apps/wizard-v2/public/provider-logos/dark/xero.svg
new file mode 100644
index 00000000..c6c7930b
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/dark/xero.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/access-people-hr.svg b/apps/wizard-v2/public/provider-logos/light/access-people-hr.svg
new file mode 100644
index 00000000..3017aa91
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/access-people-hr.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/active-directory.svg b/apps/wizard-v2/public/provider-logos/light/active-directory.svg
new file mode 100644
index 00000000..51c329f0
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/active-directory.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/adp.svg b/apps/wizard-v2/public/provider-logos/light/adp.svg
new file mode 100644
index 00000000..4b3b3b99
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/adp.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/apple.svg b/apps/wizard-v2/public/provider-logos/light/apple.svg
new file mode 100644
index 00000000..061ac22f
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/apple.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/auth0.svg b/apps/wizard-v2/public/provider-logos/light/auth0.svg
new file mode 100644
index 00000000..f1b96424
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/auth0.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/aws.svg b/apps/wizard-v2/public/provider-logos/light/aws.svg
new file mode 100644
index 00000000..4715937f
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/aws.svg
@@ -0,0 +1,38 @@
+
+
+
diff --git a/apps/wizard-v2/public/provider-logos/light/azure.svg b/apps/wizard-v2/public/provider-logos/light/azure.svg
new file mode 100644
index 00000000..692d9893
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/azure.svg
@@ -0,0 +1,23 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/bamboo-hr.svg b/apps/wizard-v2/public/provider-logos/light/bamboo-hr.svg
new file mode 100644
index 00000000..6bf9713b
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/bamboo-hr.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/bitbucket.svg b/apps/wizard-v2/public/provider-logos/light/bitbucket.svg
new file mode 100644
index 00000000..714c6ff5
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/bitbucket.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/breathe-hr.svg b/apps/wizard-v2/public/provider-logos/light/breathe-hr.svg
new file mode 100644
index 00000000..6ba2b819
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/breathe-hr.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/cas.svg b/apps/wizard-v2/public/provider-logos/light/cas.svg
new file mode 100644
index 00000000..5e427bb6
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/cas.svg
@@ -0,0 +1,9 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/cezanne-hr.svg b/apps/wizard-v2/public/provider-logos/light/cezanne-hr.svg
new file mode 100644
index 00000000..d45e5157
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/cezanne-hr.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/classlink.svg b/apps/wizard-v2/public/provider-logos/light/classlink.svg
new file mode 100644
index 00000000..0487ccdf
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/classlink.svg
@@ -0,0 +1,5 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/clever.svg b/apps/wizard-v2/public/provider-logos/light/clever.svg
new file mode 100644
index 00000000..7c4bc56d
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/clever.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/cloudflare.svg b/apps/wizard-v2/public/provider-logos/light/cloudflare.svg
new file mode 100644
index 00000000..b6694025
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/cloudflare.svg
@@ -0,0 +1,11 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/cyberark.svg b/apps/wizard-v2/public/provider-logos/light/cyberark.svg
new file mode 100644
index 00000000..f586874a
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/cyberark.svg
@@ -0,0 +1,8 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/datadog.svg b/apps/wizard-v2/public/provider-logos/light/datadog.svg
new file mode 100644
index 00000000..355ee0db
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/datadog.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/discord.svg b/apps/wizard-v2/public/provider-logos/light/discord.svg
new file mode 100644
index 00000000..fbce9f25
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/discord.svg
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/provider-logos/light/duo.svg b/apps/wizard-v2/public/provider-logos/light/duo.svg
new file mode 100644
index 00000000..b214a65b
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/duo.svg
@@ -0,0 +1,5 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/firebase.svg b/apps/wizard-v2/public/provider-logos/light/firebase.svg
new file mode 100644
index 00000000..2da09ff4
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/firebase.svg
@@ -0,0 +1,16 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/fourth.svg b/apps/wizard-v2/public/provider-logos/light/fourth.svg
new file mode 100644
index 00000000..8f44d7c4
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/fourth.svg
@@ -0,0 +1,7 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/generic-oidc.svg b/apps/wizard-v2/public/provider-logos/light/generic-oidc.svg
new file mode 100644
index 00000000..1efee1f6
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/generic-oidc.svg
@@ -0,0 +1,5 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/github.svg b/apps/wizard-v2/public/provider-logos/light/github.svg
new file mode 100644
index 00000000..0607d489
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/github.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/gitlab.svg b/apps/wizard-v2/public/provider-logos/light/gitlab.svg
new file mode 100644
index 00000000..47967c2c
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/gitlab.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/godaddy.svg b/apps/wizard-v2/public/provider-logos/light/godaddy.svg
new file mode 100644
index 00000000..7dff35fc
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/godaddy.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/google-cloud.svg b/apps/wizard-v2/public/provider-logos/light/google-cloud.svg
new file mode 100644
index 00000000..1e7c75b7
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/google-cloud.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/google.svg b/apps/wizard-v2/public/provider-logos/light/google.svg
new file mode 100644
index 00000000..b1d2db55
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/google.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/hibob.svg b/apps/wizard-v2/public/provider-logos/light/hibob.svg
new file mode 100644
index 00000000..94809725
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/hibob.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/intuit.svg b/apps/wizard-v2/public/provider-logos/light/intuit.svg
new file mode 100644
index 00000000..4caa8d3a
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/intuit.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/jumpcloud.svg b/apps/wizard-v2/public/provider-logos/light/jumpcloud.svg
new file mode 100644
index 00000000..d409a748
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/jumpcloud.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/keycloak.svg b/apps/wizard-v2/public/provider-logos/light/keycloak.svg
new file mode 100644
index 00000000..c0c53ef9
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/keycloak.svg
@@ -0,0 +1,38 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/lastpass.svg b/apps/wizard-v2/public/provider-logos/light/lastpass.svg
new file mode 100644
index 00000000..a3998c8d
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/lastpass.svg
@@ -0,0 +1,7 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/ldap.svg b/apps/wizard-v2/public/provider-logos/light/ldap.svg
new file mode 100644
index 00000000..d8f16ae3
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/ldap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/provider-logos/light/linkedin.svg b/apps/wizard-v2/public/provider-logos/light/linkedin.svg
new file mode 100644
index 00000000..330b32ca
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/linkedin.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/login-gov.svg b/apps/wizard-v2/public/provider-logos/light/login-gov.svg
new file mode 100644
index 00000000..5d816f2d
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/login-gov.svg
@@ -0,0 +1,5 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/microsoft.svg b/apps/wizard-v2/public/provider-logos/light/microsoft.svg
new file mode 100644
index 00000000..ef8650c6
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/microsoft.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/miniorange.svg b/apps/wizard-v2/public/provider-logos/light/miniorange.svg
new file mode 100644
index 00000000..2dd8f210
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/miniorange.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/net-iq.svg b/apps/wizard-v2/public/provider-logos/light/net-iq.svg
new file mode 100644
index 00000000..2d0a97c3
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/net-iq.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/okta.svg b/apps/wizard-v2/public/provider-logos/light/okta.svg
new file mode 100644
index 00000000..6249303a
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/okta.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/onelogin.svg b/apps/wizard-v2/public/provider-logos/light/onelogin.svg
new file mode 100644
index 00000000..2103997e
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/onelogin.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/oracle.svg b/apps/wizard-v2/public/provider-logos/light/oracle.svg
new file mode 100644
index 00000000..b6c0e0ef
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/oracle.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/personio.svg b/apps/wizard-v2/public/provider-logos/light/personio.svg
new file mode 100644
index 00000000..a946424c
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/personio.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/ping-identity.svg b/apps/wizard-v2/public/provider-logos/light/ping-identity.svg
new file mode 100644
index 00000000..21d66857
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/ping-identity.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/react-native-expo.svg b/apps/wizard-v2/public/provider-logos/light/react-native-expo.svg
new file mode 100644
index 00000000..3bc1e92b
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/react-native-expo.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/rippling.svg b/apps/wizard-v2/public/provider-logos/light/rippling.svg
new file mode 100644
index 00000000..e6f5b64f
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/rippling.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/sailpoint.svg b/apps/wizard-v2/public/provider-logos/light/sailpoint.svg
new file mode 100644
index 00000000..e78ac9c2
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/sailpoint.svg
@@ -0,0 +1,13 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/salesforce.svg b/apps/wizard-v2/public/provider-logos/light/salesforce.svg
new file mode 100644
index 00000000..f9f8edbc
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/salesforce.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/saml.svg b/apps/wizard-v2/public/provider-logos/light/saml.svg
new file mode 100644
index 00000000..313a6e0e
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/saml.svg
@@ -0,0 +1,18 @@
+
+
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/provider-logos/light/shibboleth.svg b/apps/wizard-v2/public/provider-logos/light/shibboleth.svg
new file mode 100644
index 00000000..9ea719a7
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/shibboleth.svg
@@ -0,0 +1,533 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/simple-saml-php.svg b/apps/wizard-v2/public/provider-logos/light/simple-saml-php.svg
new file mode 100644
index 00000000..5bf4e117
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/simple-saml-php.svg
@@ -0,0 +1,4 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/slack.svg b/apps/wizard-v2/public/provider-logos/light/slack.svg
new file mode 100644
index 00000000..5297dea9
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/slack.svg
@@ -0,0 +1,6 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/splunk.svg b/apps/wizard-v2/public/provider-logos/light/splunk.svg
new file mode 100644
index 00000000..8365b58d
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/splunk.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/supabase.svg b/apps/wizard-v2/public/provider-logos/light/supabase.svg
new file mode 100644
index 00000000..ea836286
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/supabase.svg
@@ -0,0 +1,15 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/vercel.svg b/apps/wizard-v2/public/provider-logos/light/vercel.svg
new file mode 100644
index 00000000..69fe4c11
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/vercel.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/provider-logos/light/vmware.svg b/apps/wizard-v2/public/provider-logos/light/vmware.svg
new file mode 100644
index 00000000..268959a7
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/vmware.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/workday.svg b/apps/wizard-v2/public/provider-logos/light/workday.svg
new file mode 100644
index 00000000..3b9c1a48
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/workday.svg
@@ -0,0 +1,5 @@
+
diff --git a/apps/wizard-v2/public/provider-logos/light/xero.svg b/apps/wizard-v2/public/provider-logos/light/xero.svg
new file mode 100644
index 00000000..f94741bc
--- /dev/null
+++ b/apps/wizard-v2/public/provider-logos/light/xero.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/wizard-v2/public/wizards/adfs/index.ts b/apps/wizard-v2/public/wizards/adfs/index.ts
new file mode 100644
index 00000000..466fc73c
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/adfs/index.ts
@@ -0,0 +1 @@
+export * from "./saml";
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_0.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_0.png
new file mode 100644
index 00000000..13bd2568
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_0.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_1.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_1.png
new file mode 100644
index 00000000..21d2478a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_10.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_10.png
new file mode 100644
index 00000000..27555cca
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_10.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_11.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_11.png
new file mode 100644
index 00000000..942500bb
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_11.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_12.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_12.png
new file mode 100644
index 00000000..79386570
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_12.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_13.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_13.png
new file mode 100644
index 00000000..31e4e35b
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_13.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_2.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_2.png
new file mode 100644
index 00000000..ab4972ff
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_3.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_3.png
new file mode 100644
index 00000000..79f059e3
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_4.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_4.png
new file mode 100644
index 00000000..1692a3ef
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_5.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_5.png
new file mode 100644
index 00000000..245c83ab
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_6.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_6.png
new file mode 100644
index 00000000..7c00ae99
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_6.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_7.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_7.png
new file mode 100644
index 00000000..5550ee33
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_7.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_8.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_8.png
new file mode 100644
index 00000000..fac3fe31
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_8.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_9.png b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_9.png
new file mode 100644
index 00000000..905567dc
Binary files /dev/null and b/apps/wizard-v2/public/wizards/adfs/saml/adfs_saml_9.png differ
diff --git a/apps/wizard-v2/public/wizards/adfs/saml/index.ts b/apps/wizard-v2/public/wizards/adfs/saml/index.ts
new file mode 100644
index 00000000..d9f8e4da
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/adfs/saml/index.ts
@@ -0,0 +1,31 @@
+import ADFS_SAML_0 from "./adfs_saml_0.png";
+import ADFS_SAML_1 from "./adfs_saml_1.png";
+import ADFS_SAML_2 from "./adfs_saml_2.png";
+import ADFS_SAML_3 from "./adfs_saml_3.png";
+import ADFS_SAML_4 from "./adfs_saml_4.png";
+import ADFS_SAML_5 from "./adfs_saml_5.png";
+import ADFS_SAML_6 from "./adfs_saml_6.png";
+import ADFS_SAML_7 from "./adfs_saml_7.png";
+import ADFS_SAML_8 from "./adfs_saml_8.png";
+import ADFS_SAML_9 from "./adfs_saml_9.png";
+import ADFS_SAML_10 from "./adfs_saml_10.png";
+import ADFS_SAML_11 from "./adfs_saml_11.png";
+import ADFS_SAML_12 from "./adfs_saml_12.png";
+import ADFS_SAML_13 from "./adfs_saml_13.png";
+
+export {
+ ADFS_SAML_0,
+ ADFS_SAML_1,
+ ADFS_SAML_2,
+ ADFS_SAML_3,
+ ADFS_SAML_4,
+ ADFS_SAML_5,
+ ADFS_SAML_6,
+ ADFS_SAML_7,
+ ADFS_SAML_8,
+ ADFS_SAML_9,
+ ADFS_SAML_10,
+ ADFS_SAML_11,
+ ADFS_SAML_12,
+ ADFS_SAML_13,
+};
diff --git a/apps/wizard-v2/public/wizards/auth0/COMMON/auth0-1.png b/apps/wizard-v2/public/wizards/auth0/COMMON/auth0-1.png
new file mode 100644
index 00000000..7a494397
Binary files /dev/null and b/apps/wizard-v2/public/wizards/auth0/COMMON/auth0-1.png differ
diff --git a/apps/wizard-v2/public/wizards/auth0/COMMON/auth0-2.png b/apps/wizard-v2/public/wizards/auth0/COMMON/auth0-2.png
new file mode 100644
index 00000000..d2c13341
Binary files /dev/null and b/apps/wizard-v2/public/wizards/auth0/COMMON/auth0-2.png differ
diff --git a/apps/wizard-v2/public/wizards/auth0/OIDC/auth0-3.png b/apps/wizard-v2/public/wizards/auth0/OIDC/auth0-3.png
new file mode 100644
index 00000000..0f24c972
Binary files /dev/null and b/apps/wizard-v2/public/wizards/auth0/OIDC/auth0-3.png differ
diff --git a/apps/wizard-v2/public/wizards/auth0/OIDC/auth0-4.png b/apps/wizard-v2/public/wizards/auth0/OIDC/auth0-4.png
new file mode 100644
index 00000000..96da031b
Binary files /dev/null and b/apps/wizard-v2/public/wizards/auth0/OIDC/auth0-4.png differ
diff --git a/apps/wizard-v2/public/wizards/auth0/SAML/auth0-3SAML.png b/apps/wizard-v2/public/wizards/auth0/SAML/auth0-3SAML.png
new file mode 100644
index 00000000..08fa47df
Binary files /dev/null and b/apps/wizard-v2/public/wizards/auth0/SAML/auth0-3SAML.png differ
diff --git a/apps/wizard-v2/public/wizards/auth0/SAML/auth0-4SAML.png b/apps/wizard-v2/public/wizards/auth0/SAML/auth0-4SAML.png
new file mode 100644
index 00000000..b91cceb3
Binary files /dev/null and b/apps/wizard-v2/public/wizards/auth0/SAML/auth0-4SAML.png differ
diff --git a/apps/wizard-v2/public/wizards/auth0/SAML/auth0-5SAML.png b/apps/wizard-v2/public/wizards/auth0/SAML/auth0-5SAML.png
new file mode 100644
index 00000000..20e6dd84
Binary files /dev/null and b/apps/wizard-v2/public/wizards/auth0/SAML/auth0-5SAML.png differ
diff --git a/apps/wizard-v2/public/wizards/auth0/SAML/auth0-6SAML.png b/apps/wizard-v2/public/wizards/auth0/SAML/auth0-6SAML.png
new file mode 100644
index 00000000..41a7b2b4
Binary files /dev/null and b/apps/wizard-v2/public/wizards/auth0/SAML/auth0-6SAML.png differ
diff --git a/apps/wizard-v2/public/wizards/auth0/auth0-logo.png b/apps/wizard-v2/public/wizards/auth0/auth0-logo.png
new file mode 100644
index 00000000..63c69d3b
Binary files /dev/null and b/apps/wizard-v2/public/wizards/auth0/auth0-logo.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/aws-logo.svg b/apps/wizard-v2/public/wizards/aws/aws-logo.svg
new file mode 100644
index 00000000..50b1fc00
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/aws/aws-logo.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/wizards/aws/index.ts b/apps/wizard-v2/public/wizards/aws/index.ts
new file mode 100644
index 00000000..9a2e6b4c
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/aws/index.ts
@@ -0,0 +1,23 @@
+import AWS_LOGO from "./aws-logo.svg";
+import AWS_SSO_SAML_1 from "./awssso_saml_1.png";
+import AWS_SSO_SAML_2 from "./awssso_saml_2.png";
+import AWS_SSO_SAML_3 from "./awssso_saml_3.png";
+import AWS_SSO_SAML_4 from "./awssso_saml_4.png";
+import AWS_SSO_SAML_5_A from "./awssso_saml_5a.png";
+import AWS_SSO_SAML_5 from "./awssso_saml_5.png";
+import AWS_SSO_SAML_6 from "./awssso_saml_6.png";
+import AWS_SSO_SAML_7 from "./awssso_saml_7.png";
+import AWS_SSO_SAML_8 from "./awssso_saml_8.png";
+
+export {
+ AWS_LOGO,
+ AWS_SSO_SAML_1,
+ AWS_SSO_SAML_2,
+ AWS_SSO_SAML_3,
+ AWS_SSO_SAML_4,
+ AWS_SSO_SAML_5,
+ AWS_SSO_SAML_5_A,
+ AWS_SSO_SAML_6,
+ AWS_SSO_SAML_7,
+ AWS_SSO_SAML_8,
+};
diff --git a/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-1.png b/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-1.png
new file mode 100644
index 00000000..50ef622c
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-1.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-2.png b/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-2.png
new file mode 100644
index 00000000..94442e81
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-2.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-3.png b/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-3.png
new file mode 100644
index 00000000..8d4840a4
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-3.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-4.png b/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-4.png
new file mode 100644
index 00000000..06cb7957
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-4.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-5.png b/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-5.png
new file mode 100644
index 00000000..bb0c324b
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/add-applications-step-5.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/saml/add-attributes-step-1.png b/apps/wizard-v2/public/wizards/aws/saml/add-attributes-step-1.png
new file mode 100644
index 00000000..e7e206cb
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/add-attributes-step-1.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/saml/add-attributes-step-2.png b/apps/wizard-v2/public/wizards/aws/saml/add-attributes-step-2.png
new file mode 100644
index 00000000..6049a159
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/add-attributes-step-2.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-1.png b/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-1.png
new file mode 100644
index 00000000..866462b8
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-1.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-2.png b/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-2.png
new file mode 100644
index 00000000..c9a89fee
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-2.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-3.png b/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-3.png
new file mode 100644
index 00000000..445babe8
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-3.png differ
diff --git a/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-4.png b/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-4.png
new file mode 100644
index 00000000..678f8b83
Binary files /dev/null and b/apps/wizard-v2/public/wizards/aws/saml/assign-users-step-4.png differ
diff --git a/apps/wizard-v2/public/wizards/cloudflare/cloudflare-large.svg b/apps/wizard-v2/public/wizards/cloudflare/cloudflare-large.svg
new file mode 100644
index 00000000..76559f1d
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/cloudflare/cloudflare-large.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/wizards/cloudflare/cloudflare.svg b/apps/wizard-v2/public/wizards/cloudflare/cloudflare.svg
new file mode 100644
index 00000000..0f8d74e0
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/cloudflare/cloudflare.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_0.png b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_0.png
new file mode 100644
index 00000000..58c1fc81
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_0.png differ
diff --git a/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_1.png b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_1.png
new file mode 100644
index 00000000..90827212
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_2.png b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_2.png
new file mode 100644
index 00000000..f4efdbea
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_3.png b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_3.png
new file mode 100644
index 00000000..84bda252
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_4.png b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_4.png
new file mode 100644
index 00000000..da769be5
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_5.png b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_5.png
new file mode 100644
index 00000000..c2c437d1
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_6.png b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_6.png
new file mode 100644
index 00000000..8471ca0e
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_6.png differ
diff --git a/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_7.png b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_7.png
new file mode 100644
index 00000000..fcbffc38
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_7.png differ
diff --git a/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_8.png b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_8.png
new file mode 100644
index 00000000..149d426d
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cloudflare/saml/cloudflare_saml_8.png differ
diff --git a/apps/wizard-v2/public/wizards/cloudflare/saml/index.ts b/apps/wizard-v2/public/wizards/cloudflare/saml/index.ts
new file mode 100644
index 00000000..420c3580
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/cloudflare/saml/index.ts
@@ -0,0 +1,21 @@
+import CloudflareSaml0 from "./cloudflare_saml_0.png";
+import CloudflareSaml1 from "./cloudflare_saml_1.png";
+import CloudflareSaml2 from "./cloudflare_saml_2.png";
+import CloudflareSaml3 from "./cloudflare_saml_3.png";
+import CloudflareSaml4 from "./cloudflare_saml_4.png";
+import CloudflareSaml5 from "./cloudflare_saml_5.png";
+import CloudflareSaml6 from "./cloudflare_saml_6.png";
+import CloudflareSaml7 from "./cloudflare_saml_7.png";
+import CloudflareSaml8 from "./cloudflare_saml_8.png";
+
+export {
+ CloudflareSaml0,
+ CloudflareSaml1,
+ CloudflareSaml2,
+ CloudflareSaml3,
+ CloudflareSaml4,
+ CloudflareSaml5,
+ CloudflareSaml6,
+ CloudflareSaml7,
+ CloudflareSaml8,
+};
diff --git a/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_0.png b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_0.png
new file mode 100644
index 00000000..25bbf139
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_0.png differ
diff --git a/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_1.png b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_1.png
new file mode 100644
index 00000000..d5dbff31
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_2.png b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_2.png
new file mode 100644
index 00000000..6014a272
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_3.png b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_3.png
new file mode 100644
index 00000000..78baf7d6
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_4.png b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_4.png
new file mode 100644
index 00000000..9a91fa4d
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_5.png b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_5.png
new file mode 100644
index 00000000..1aed592e
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_6.png b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_6.png
new file mode 100644
index 00000000..b11c7b96
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_6.png differ
diff --git a/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_7.png b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_7.png
new file mode 100644
index 00000000..17133f9f
Binary files /dev/null and b/apps/wizard-v2/public/wizards/cyberark/SAML/cyberark_saml_7.png differ
diff --git a/apps/wizard-v2/public/wizards/cyberark/SAML/index.ts b/apps/wizard-v2/public/wizards/cyberark/SAML/index.ts
new file mode 100644
index 00000000..6d8768a9
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/cyberark/SAML/index.ts
@@ -0,0 +1,19 @@
+import CyberArkSaml0 from './cyberark_saml_0.png';
+import CyberArkSaml1 from './cyberark_saml_1.png';
+import CyberArkSaml2 from './cyberark_saml_2.png';
+import CyberArkSaml3 from './cyberark_saml_3.png';
+import CyberArkSaml4 from './cyberark_saml_4.png';
+import CyberArkSaml5 from './cyberark_saml_5.png';
+import CyberArkSaml6 from './cyberark_saml_6.png';
+import CyberArkSaml7 from './cyberark_saml_7.png';
+
+export {
+ CyberArkSaml0,
+ CyberArkSaml1,
+ CyberArkSaml2,
+ CyberArkSaml3,
+ CyberArkSaml4,
+ CyberArkSaml5,
+ CyberArkSaml6,
+ CyberArkSaml7,
+};
diff --git a/apps/wizard-v2/public/wizards/duo/duo-large.svg b/apps/wizard-v2/public/wizards/duo/duo-large.svg
new file mode 100644
index 00000000..6eb3be2a
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/duo/duo-large.svg
@@ -0,0 +1,55 @@
+
+
diff --git a/apps/wizard-v2/public/wizards/duo/duo.svg b/apps/wizard-v2/public/wizards/duo/duo.svg
new file mode 100644
index 00000000..78cdf85a
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/duo/duo.svg
@@ -0,0 +1,16 @@
+
diff --git a/apps/wizard-v2/public/wizards/duo/saml/duo_saml_0.png b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_0.png
new file mode 100644
index 00000000..36db8ffd
Binary files /dev/null and b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_0.png differ
diff --git a/apps/wizard-v2/public/wizards/duo/saml/duo_saml_1.png b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_1.png
new file mode 100644
index 00000000..9ae374b2
Binary files /dev/null and b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/duo/saml/duo_saml_2.png b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_2.png
new file mode 100644
index 00000000..f8aa3d82
Binary files /dev/null and b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/duo/saml/duo_saml_3.png b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_3.png
new file mode 100644
index 00000000..a3ed32d4
Binary files /dev/null and b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/duo/saml/duo_saml_4.png b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_4.png
new file mode 100644
index 00000000..9bc81175
Binary files /dev/null and b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/duo/saml/duo_saml_5.png b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_5.png
new file mode 100644
index 00000000..213fa014
Binary files /dev/null and b/apps/wizard-v2/public/wizards/duo/saml/duo_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/duo/saml/index.ts b/apps/wizard-v2/public/wizards/duo/saml/index.ts
new file mode 100644
index 00000000..0c2256c5
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/duo/saml/index.ts
@@ -0,0 +1,8 @@
+import DuoSaml0 from "./duo_saml_0.png";
+import DuoSaml1 from "./duo_saml_1.png";
+import DuoSaml2 from "./duo_saml_2.png";
+import DuoSaml3 from "./duo_saml_3.png";
+import DuoSaml4 from "./duo_saml_4.png";
+import DuoSaml5 from "./duo_saml_5.png";
+
+export { DuoSaml0, DuoSaml1, DuoSaml2, DuoSaml3, DuoSaml4, DuoSaml5 };
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_1.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_1.avif
new file mode 100644
index 00000000..bf6c86d9
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_1.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_10.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_10.avif
new file mode 100644
index 00000000..4721138c
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_10.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_11.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_11.avif
new file mode 100644
index 00000000..ac5479d1
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_11.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_12.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_12.avif
new file mode 100644
index 00000000..cb1b86cf
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_12.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_13.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_13.avif
new file mode 100644
index 00000000..ce26eeb4
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_13.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_14.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_14.avif
new file mode 100644
index 00000000..3446a1b6
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_14.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_15.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_15.avif
new file mode 100644
index 00000000..16f0c4c5
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_15.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_16.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_16.avif
new file mode 100644
index 00000000..9652f17e
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_16.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_17.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_17.avif
new file mode 100644
index 00000000..a1303fbc
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_17.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_18.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_18.avif
new file mode 100644
index 00000000..7b0f5f9b
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_18.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_2.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_2.avif
new file mode 100644
index 00000000..15b141dd
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_2.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_3.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_3.avif
new file mode 100644
index 00000000..b34072a9
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_3.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_4.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_4.avif
new file mode 100644
index 00000000..f41899ef
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_4.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_5.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_5.avif
new file mode 100644
index 00000000..21b5c524
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_5.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_6.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_6.avif
new file mode 100644
index 00000000..4b58cd18
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_6.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_7.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_7.avif
new file mode 100644
index 00000000..30358d50
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_7.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_8.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_8.avif
new file mode 100644
index 00000000..cb436f5f
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_8.avif differ
diff --git a/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_9.avif b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_9.avif
new file mode 100644
index 00000000..efcd2213
Binary files /dev/null and b/apps/wizard-v2/public/wizards/entraid/scim/entraid_scim_9.avif differ
diff --git a/apps/wizard-v2/public/wizards/google/google_saml_1a.png b/apps/wizard-v2/public/wizards/google/google_saml_1a.png
new file mode 100644
index 00000000..028acb09
Binary files /dev/null and b/apps/wizard-v2/public/wizards/google/google_saml_1a.png differ
diff --git a/apps/wizard-v2/public/wizards/google/google_saml_1b.png b/apps/wizard-v2/public/wizards/google/google_saml_1b.png
new file mode 100644
index 00000000..9e574bf5
Binary files /dev/null and b/apps/wizard-v2/public/wizards/google/google_saml_1b.png differ
diff --git a/apps/wizard-v2/public/wizards/google/google_saml_2.png b/apps/wizard-v2/public/wizards/google/google_saml_2.png
new file mode 100644
index 00000000..bf44df27
Binary files /dev/null and b/apps/wizard-v2/public/wizards/google/google_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/google/google_saml_3.png b/apps/wizard-v2/public/wizards/google/google_saml_3.png
new file mode 100644
index 00000000..8121865f
Binary files /dev/null and b/apps/wizard-v2/public/wizards/google/google_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/google/google_saml_4.png b/apps/wizard-v2/public/wizards/google/google_saml_4.png
new file mode 100644
index 00000000..a0cee8ef
Binary files /dev/null and b/apps/wizard-v2/public/wizards/google/google_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/google/google_saml_5.png b/apps/wizard-v2/public/wizards/google/google_saml_5.png
new file mode 100644
index 00000000..ef55cf83
Binary files /dev/null and b/apps/wizard-v2/public/wizards/google/google_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/google/google_saml_6a.png b/apps/wizard-v2/public/wizards/google/google_saml_6a.png
new file mode 100644
index 00000000..44a63221
Binary files /dev/null and b/apps/wizard-v2/public/wizards/google/google_saml_6a.png differ
diff --git a/apps/wizard-v2/public/wizards/google/google_saml_6b.png b/apps/wizard-v2/public/wizards/google/google_saml_6b.png
new file mode 100644
index 00000000..b320bdb6
Binary files /dev/null and b/apps/wizard-v2/public/wizards/google/google_saml_6b.png differ
diff --git a/apps/wizard-v2/public/wizards/google/index.ts b/apps/wizard-v2/public/wizards/google/index.ts
new file mode 100644
index 00000000..7b712d62
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/google/index.ts
@@ -0,0 +1,19 @@
+import GoogleSaml1A from "./google_saml_1a.png";
+import GoogleSaml1B from "./google_saml_1b.png";
+import GoogleSaml2 from "./google_saml_2.png";
+import GoogleSaml3 from "./google_saml_3.png";
+import GoogleSaml4 from "./google_saml_4.png";
+import GoogleSaml5 from "./google_saml_5.png";
+import GoogleSaml6A from "./google_saml_6a.png";
+import GoogleSaml6B from "./google_saml_6b.png";
+
+export {
+ GoogleSaml1A,
+ GoogleSaml1B,
+ GoogleSaml2,
+ GoogleSaml3,
+ GoogleSaml4,
+ GoogleSaml5,
+ GoogleSaml6A,
+ GoogleSaml6B,
+};
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/index.ts b/apps/wizard-v2/public/wizards/jumpcloud/index.ts
new file mode 100644
index 00000000..03cece28
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/jumpcloud/index.ts
@@ -0,0 +1,27 @@
+import JumpCloud_SAML_1 from "./jumpcloud_saml_1.png";
+import JumpCloud_SAML_2 from "./jumpcloud_saml_2.png";
+import JumpCloud_SAML_3 from "./jumpcloud_saml_3.png";
+import JumpCloud_SAML_4 from "./jumpcloud_saml_4.png";
+import JumpCloud_SAML_5 from "./jumpcloud_saml_5.png";
+import JumpCloud_SAML_6 from "./jumpcloud_saml_6.png";
+import JumpCloud_SAML_7 from "./jumpcloud_saml_7.png";
+import JumpCloud_SAML_8 from "./jumpcloud_saml_8.png";
+import JumpCloud_SAML_9 from "./jumpcloud_saml_9.png";
+import JumpCloud_SAML_9a from "./jumpcloud_saml_9a.png";
+import JumpCloud_SAML_10 from "./jumpcloud_saml_10.png";
+import JumpCloudLogo from "./jumpcloud-logo.svg";
+
+export {
+ JumpCloud_SAML_1,
+ JumpCloud_SAML_2,
+ JumpCloud_SAML_3,
+ JumpCloud_SAML_4,
+ JumpCloud_SAML_5,
+ JumpCloud_SAML_6,
+ JumpCloud_SAML_7,
+ JumpCloud_SAML_8,
+ JumpCloud_SAML_9,
+ JumpCloud_SAML_9a,
+ JumpCloud_SAML_10,
+ JumpCloudLogo,
+};
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud-logo.svg b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud-logo.svg
new file mode 100644
index 00000000..c146726e
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_1.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_1.png
new file mode 100644
index 00000000..b47cff1c
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_10.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_10.png
new file mode 100644
index 00000000..cdbd5c01
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_10.png differ
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_2.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_2.png
new file mode 100644
index 00000000..c617518e
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_3.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_3.png
new file mode 100644
index 00000000..c44d2078
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_4.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_4.png
new file mode 100644
index 00000000..1e6be8cf
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_5.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_5.png
new file mode 100644
index 00000000..34eae688
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_6.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_6.png
new file mode 100644
index 00000000..2a11325f
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_6.png differ
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_7.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_7.png
new file mode 100644
index 00000000..cc35cfa8
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_7.png differ
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_8.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_8.png
new file mode 100644
index 00000000..f2590be8
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_8.png differ
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_9.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_9.png
new file mode 100644
index 00000000..9fd99c6a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_9.png differ
diff --git a/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_9a.png b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_9a.png
new file mode 100644
index 00000000..f14c94f2
Binary files /dev/null and b/apps/wizard-v2/public/wizards/jumpcloud/jumpcloud_saml_9a.png differ
diff --git a/apps/wizard-v2/public/wizards/lastpass/index.ts b/apps/wizard-v2/public/wizards/lastpass/index.ts
new file mode 100644
index 00000000..e55107de
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/lastpass/index.ts
@@ -0,0 +1,21 @@
+import LastPassSaml0 from './lastpass_saml_0.png';
+import LastPassSaml1 from './lastpass_saml_1.png';
+import LastPassSaml2 from './lastpass_saml_2.png';
+import LastPassSaml3 from './lastpass_saml_3.png';
+import LastPassSaml4 from './lastpass_saml_4.png';
+import LastPassSaml5 from './lastpass_saml_5.png';
+import LastPassSaml6 from './lastpass_saml_6.png';
+import LastPassSaml7 from './lastpass_saml_7.png';
+import LastPassSaml8 from './lastpass_saml_8.png';
+
+export {
+ LastPassSaml0,
+ LastPassSaml1,
+ LastPassSaml2,
+ LastPassSaml3,
+ LastPassSaml4,
+ LastPassSaml5,
+ LastPassSaml6,
+ LastPassSaml7,
+ LastPassSaml8,
+};
diff --git a/apps/wizard-v2/public/wizards/lastpass/lastpass-logo.svg b/apps/wizard-v2/public/wizards/lastpass/lastpass-logo.svg
new file mode 100644
index 00000000..a97f347c
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/lastpass/lastpass-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_0.png b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_0.png
new file mode 100644
index 00000000..fa15735b
Binary files /dev/null and b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_0.png differ
diff --git a/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_1.png b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_1.png
new file mode 100644
index 00000000..776cba5a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_2.png b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_2.png
new file mode 100644
index 00000000..03587170
Binary files /dev/null and b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_3.png b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_3.png
new file mode 100644
index 00000000..6dd5c69e
Binary files /dev/null and b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_4.png b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_4.png
new file mode 100644
index 00000000..f3e0b03a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_5.png b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_5.png
new file mode 100644
index 00000000..9fb8f6ea
Binary files /dev/null and b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_6.png b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_6.png
new file mode 100644
index 00000000..48305341
Binary files /dev/null and b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_6.png differ
diff --git a/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_7.png b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_7.png
new file mode 100644
index 00000000..018b781a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_7.png differ
diff --git a/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_8.png b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_8.png
new file mode 100644
index 00000000..fe12f20e
Binary files /dev/null and b/apps/wizard-v2/public/wizards/lastpass/lastpass_saml_8.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-1.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-1.png
new file mode 100644
index 00000000..5f0540b6
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-1.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-10.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-10.png
new file mode 100644
index 00000000..1bc2266a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-10.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-11.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-11.png
new file mode 100644
index 00000000..b7b1ce59
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-11.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-12.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-12.png
new file mode 100644
index 00000000..9c6e7546
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-12.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-1a.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-1a.png
new file mode 100644
index 00000000..744d058f
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-1a.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-2.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-2.png
new file mode 100644
index 00000000..77daf2a5
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-2.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-3.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-3.png
new file mode 100644
index 00000000..d03b3c76
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-3.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-3a.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-3a.png
new file mode 100644
index 00000000..e18a677d
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-3a.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-4.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-4.png
new file mode 100644
index 00000000..60e98f3a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-4.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-5.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-5.png
new file mode 100644
index 00000000..2f311587
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-5.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-5a.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-5a.png
new file mode 100644
index 00000000..4446541c
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-5a.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-6.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-6.png
new file mode 100644
index 00000000..6ba27fc2
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-6.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-7.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-7.png
new file mode 100644
index 00000000..f40991fb
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-7.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-8.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-8.png
new file mode 100644
index 00000000..6359a0e3
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-8.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-9.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-9.png
new file mode 100644
index 00000000..14da4175
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/azure-9.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/entraid-1.png b/apps/wizard-v2/public/wizards/msft_entra_id/saml/entraid-1.png
new file mode 100644
index 00000000..90764c25
Binary files /dev/null and b/apps/wizard-v2/public/wizards/msft_entra_id/saml/entraid-1.png differ
diff --git a/apps/wizard-v2/public/wizards/msft_entra_id/saml/index.ts b/apps/wizard-v2/public/wizards/msft_entra_id/saml/index.ts
new file mode 100644
index 00000000..1aa24c3f
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/msft_entra_id/saml/index.ts
@@ -0,0 +1,35 @@
+import AzureSaml1 from "./azure-1.png";
+import AzureSaml1a from "./azure-1a.png";
+import AzureSaml2 from "./azure-2.png";
+import AzureSaml3 from "./azure-3.png";
+import AzureSaml3a from "./azure-3a.png";
+import AzureSaml4 from "./azure-4.png";
+import AzureSaml5 from "./azure-5.png";
+import AzureSaml5a from "./azure-5a.png";
+import AzureSaml6 from "./azure-6.png";
+import AzureSaml7 from "./azure-7.png";
+import AzureSaml8 from "./azure-8.png";
+import AzureSaml9 from "./azure-9.png";
+import AzureSaml10 from "./azure-10.png";
+import AzureSaml11 from "./azure-11.png";
+import AzureSaml12 from "./azure-12.png";
+import EntraId1 from "./entraid-1.png";
+
+export {
+ AzureSaml1,
+ AzureSaml1a,
+ AzureSaml2,
+ AzureSaml3,
+ AzureSaml3a,
+ AzureSaml4,
+ AzureSaml5,
+ AzureSaml5a,
+ AzureSaml6,
+ AzureSaml7,
+ AzureSaml8,
+ AzureSaml9,
+ AzureSaml10,
+ AzureSaml11,
+ AzureSaml12,
+ EntraId1,
+};
diff --git a/apps/wizard-v2/public/wizards/oidc/openid-logo.svg b/apps/wizard-v2/public/wizards/oidc/openid-logo.svg
new file mode 100644
index 00000000..397ee180
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/oidc/openid-logo.svg
@@ -0,0 +1,15 @@
+
diff --git a/apps/wizard-v2/public/wizards/okta/okta-1.png b/apps/wizard-v2/public/wizards/okta/okta-1.png
new file mode 100644
index 00000000..c8afc76a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/okta-1.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/okta-2.png b/apps/wizard-v2/public/wizards/okta/okta-2.png
new file mode 100644
index 00000000..991277a2
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/okta-2.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/okta-3.png b/apps/wizard-v2/public/wizards/okta/okta-3.png
new file mode 100644
index 00000000..eff48694
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/okta-3.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/okta-logo.png b/apps/wizard-v2/public/wizards/okta/okta-logo.png
new file mode 100644
index 00000000..d1b55a5f
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/okta-logo.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/saml/index.ts b/apps/wizard-v2/public/wizards/okta/saml/index.ts
new file mode 100644
index 00000000..029a94d3
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/okta/saml/index.ts
@@ -0,0 +1,23 @@
+import OktaSaml1 from "./okta_saml_1.png";
+import OktaSaml2 from "./okta_saml_2.png";
+import OktaSaml3 from "./okta_saml_3.png";
+import OktaSaml4 from "./okta_saml_4.png";
+import OktaSaml5 from "./okta_saml_5.png";
+import OktaSaml6 from "./okta_saml_6.png";
+import OktaSaml7 from "./okta_saml_7.png";
+import OktaSaml7A from "./okta_saml_7a.png";
+import OktaSaml8 from "./okta_saml_8.png";
+import OktaSaml9 from "./okta_saml_9.png";
+
+export {
+ OktaSaml1,
+ OktaSaml2,
+ OktaSaml3,
+ OktaSaml4,
+ OktaSaml5,
+ OktaSaml6,
+ OktaSaml7,
+ OktaSaml7A,
+ OktaSaml8,
+ OktaSaml9,
+};
diff --git a/apps/wizard-v2/public/wizards/okta/saml/okta_saml_1.png b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_1.png
new file mode 100644
index 00000000..0f964737
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/saml/okta_saml_2.png b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_2.png
new file mode 100644
index 00000000..4062a7c2
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/saml/okta_saml_3.png b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_3.png
new file mode 100644
index 00000000..441f43a3
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/saml/okta_saml_4.png b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_4.png
new file mode 100644
index 00000000..479f4bc9
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/saml/okta_saml_5.png b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_5.png
new file mode 100644
index 00000000..9d4a8376
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/saml/okta_saml_6.png b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_6.png
new file mode 100644
index 00000000..aadb07b2
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_6.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/saml/okta_saml_7.png b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_7.png
new file mode 100644
index 00000000..d7cac55d
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_7.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/saml/okta_saml_7a.png b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_7a.png
new file mode 100644
index 00000000..99021784
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_7a.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/saml/okta_saml_8.png b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_8.png
new file mode 100644
index 00000000..70bc2746
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_8.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/saml/okta_saml_9.png b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_9.png
new file mode 100644
index 00000000..cf4c4d27
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/saml/okta_saml_9.png differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_1.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_1.avif
new file mode 100644
index 00000000..52c9f8fe
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_1.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_10.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_10.avif
new file mode 100644
index 00000000..ff2d05a2
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_10.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_11.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_11.avif
new file mode 100644
index 00000000..288eedc9
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_11.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_12.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_12.avif
new file mode 100644
index 00000000..2b0fcb6d
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_12.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_13.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_13.avif
new file mode 100644
index 00000000..4b4af92c
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_13.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_14.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_14.avif
new file mode 100644
index 00000000..6f67aaf6
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_14.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_15.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_15.avif
new file mode 100644
index 00000000..858a19b4
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_15.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_2.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_2.avif
new file mode 100644
index 00000000..c093175a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_2.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_3.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_3.avif
new file mode 100644
index 00000000..5f9e0b5d
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_3.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_4.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_4.avif
new file mode 100644
index 00000000..ef01c96d
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_4.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_5.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_5.avif
new file mode 100644
index 00000000..e803d2cb
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_5.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_6.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_6.avif
new file mode 100644
index 00000000..89a8cfef
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_6.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_7.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_7.avif
new file mode 100644
index 00000000..2b1d381c
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_7.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_8.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_8.avif
new file mode 100644
index 00000000..2e3edf64
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_8.avif differ
diff --git a/apps/wizard-v2/public/wizards/okta/scim/okta_scim_9.avif b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_9.avif
new file mode 100644
index 00000000..d98130f6
Binary files /dev/null and b/apps/wizard-v2/public/wizards/okta/scim/okta_scim_9.avif differ
diff --git a/apps/wizard-v2/public/wizards/onelogin/index.ts b/apps/wizard-v2/public/wizards/onelogin/index.ts
new file mode 100644
index 00000000..be6f0cb4
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/onelogin/index.ts
@@ -0,0 +1,4 @@
+import OneLoginLogo from "./onelogin-logo.svg";
+export * from "./saml";
+
+export { OneLoginLogo };
diff --git a/apps/wizard-v2/public/wizards/onelogin/onelogin-logo.svg b/apps/wizard-v2/public/wizards/onelogin/onelogin-logo.svg
new file mode 100644
index 00000000..f722189f
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/onelogin/onelogin-logo.svg
@@ -0,0 +1,23 @@
+
+
+
diff --git a/apps/wizard-v2/public/wizards/onelogin/saml/index.ts b/apps/wizard-v2/public/wizards/onelogin/saml/index.ts
new file mode 100644
index 00000000..36706bbf
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/onelogin/saml/index.ts
@@ -0,0 +1,19 @@
+import OneLogin_SAML_1 from "./onelogin_saml_1.png";
+import OneLogin_SAML_2 from "./onelogin_saml_2.png";
+import OneLogin_SAML_3 from "./onelogin_saml_3.png";
+import OneLogin_SAML_4 from "./onelogin_saml_4.png";
+import OneLogin_SAML_5 from "./onelogin_saml_5.png";
+import OneLogin_SAML_5A from "./onelogin_saml_5a.png";
+import OneLogin_SAML_6A from "./onelogin_saml_6a.png";
+import OneLogin_SAML_7 from "./onelogin_saml_7.png"
+
+export {
+ OneLogin_SAML_1,
+ OneLogin_SAML_2,
+ OneLogin_SAML_3,
+ OneLogin_SAML_4,
+ OneLogin_SAML_5,
+ OneLogin_SAML_5A,
+ OneLogin_SAML_6A,
+ OneLogin_SAML_7,
+};
diff --git a/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_1.png b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_1.png
new file mode 100644
index 00000000..31e4e8fd
Binary files /dev/null and b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_2.png b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_2.png
new file mode 100644
index 00000000..671d3608
Binary files /dev/null and b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_3.png b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_3.png
new file mode 100644
index 00000000..3b822590
Binary files /dev/null and b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_4.png b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_4.png
new file mode 100644
index 00000000..4daa1687
Binary files /dev/null and b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_5.png b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_5.png
new file mode 100644
index 00000000..8cab9491
Binary files /dev/null and b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_5a.png b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_5a.png
new file mode 100644
index 00000000..70f5e114
Binary files /dev/null and b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_5a.png differ
diff --git a/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_6a.png b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_6a.png
new file mode 100644
index 00000000..d796378b
Binary files /dev/null and b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_6a.png differ
diff --git a/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_7.png b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_7.png
new file mode 100644
index 00000000..48a7b398
Binary files /dev/null and b/apps/wizard-v2/public/wizards/onelogin/saml/onelogin_saml_7.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/index.ts b/apps/wizard-v2/public/wizards/oracle/SAML/index.ts
new file mode 100644
index 00000000..06d45155
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/oracle/SAML/index.ts
@@ -0,0 +1,27 @@
+import OracleSaml0 from './oracle_saml_0.png';
+import OracleSaml1 from './oracle_saml_1.png';
+import OracleSaml2 from './oracle_saml_2.png';
+import OracleSaml3 from './oracle_saml_3.png';
+import OracleSaml4 from './oracle_saml_4.png';
+import OracleSaml5 from './oracle_saml_5.png';
+import OracleSaml6 from './oracle_saml_6.png';
+import OracleSaml7 from './oracle_saml_7.png';
+import OracleSaml8 from './oracle_saml_8.png';
+import OracleSaml9 from './oracle_saml_9.png';
+import OracleSaml10 from './oracle_saml_10.png';
+import OracleSaml11 from './oracle_saml_11.png';
+
+export {
+ OracleSaml0,
+ OracleSaml1,
+ OracleSaml2,
+ OracleSaml3,
+ OracleSaml4,
+ OracleSaml5,
+ OracleSaml6,
+ OracleSaml7,
+ OracleSaml8,
+ OracleSaml9,
+ OracleSaml10,
+ OracleSaml11,
+};
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_0.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_0.png
new file mode 100644
index 00000000..5de50fa7
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_0.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_1.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_1.png
new file mode 100644
index 00000000..539e0bde
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_10.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_10.png
new file mode 100644
index 00000000..e3b54f5b
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_10.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_11.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_11.png
new file mode 100644
index 00000000..6e71b6ea
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_11.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_2.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_2.png
new file mode 100644
index 00000000..961a21f9
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_3.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_3.png
new file mode 100644
index 00000000..7cd32078
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_4.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_4.png
new file mode 100644
index 00000000..6116fadb
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_5.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_5.png
new file mode 100644
index 00000000..73b3c6c5
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_6.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_6.png
new file mode 100644
index 00000000..855f3905
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_6.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_7.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_7.png
new file mode 100644
index 00000000..6a328970
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_7.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_8.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_8.png
new file mode 100644
index 00000000..58024d68
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_8.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_9.png b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_9.png
new file mode 100644
index 00000000..556eef72
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/SAML/oracle_saml_9.png differ
diff --git a/apps/wizard-v2/public/wizards/oracle/oracle-logo.png b/apps/wizard-v2/public/wizards/oracle/oracle-logo.png
new file mode 100644
index 00000000..84d0ff22
Binary files /dev/null and b/apps/wizard-v2/public/wizards/oracle/oracle-logo.png differ
diff --git a/apps/wizard-v2/public/wizards/pingone/index.ts b/apps/wizard-v2/public/wizards/pingone/index.ts
new file mode 100644
index 00000000..bc67675d
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/pingone/index.ts
@@ -0,0 +1,23 @@
+import PINGONE_LOGO from "./pingone-logo.svg";
+import PINGONE_SAML_1 from "./pingone_saml_1.png";
+import PINGONE_SAML_2 from "./pingone_saml_2.png";
+import PINGONE_SAML_3 from "./pingone_saml_3.png";
+import PINGONE_SAML_4 from "./pingone_saml_4.png";
+import PINGONE_SAML_5 from "./pingone_saml_5.png";
+import PINGONE_SAML_6 from "./pingone_saml_6.png";
+import PINGONE_SAML_7 from "./pingone_saml_7.png";
+import PINGONE_SAML_8 from "./pingone_saml_8.png";
+import PINGONE_SAML_9 from "./pingone_saml_9.png";
+
+export {
+ PINGONE_LOGO,
+ PINGONE_SAML_1,
+ PINGONE_SAML_2,
+ PINGONE_SAML_3,
+ PINGONE_SAML_4,
+ PINGONE_SAML_5,
+ PINGONE_SAML_6,
+ PINGONE_SAML_7,
+ PINGONE_SAML_8,
+ PINGONE_SAML_9,
+};
diff --git a/apps/wizard-v2/public/wizards/pingone/pingone-logo.svg b/apps/wizard-v2/public/wizards/pingone/pingone-logo.svg
new file mode 100644
index 00000000..2d333467
--- /dev/null
+++ b/apps/wizard-v2/public/wizards/pingone/pingone-logo.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/wizard-v2/public/wizards/pingone/pingone_saml_1.png b/apps/wizard-v2/public/wizards/pingone/pingone_saml_1.png
new file mode 100644
index 00000000..99bbf569
Binary files /dev/null and b/apps/wizard-v2/public/wizards/pingone/pingone_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/pingone/pingone_saml_2.png b/apps/wizard-v2/public/wizards/pingone/pingone_saml_2.png
new file mode 100644
index 00000000..1460096c
Binary files /dev/null and b/apps/wizard-v2/public/wizards/pingone/pingone_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/pingone/pingone_saml_3.png b/apps/wizard-v2/public/wizards/pingone/pingone_saml_3.png
new file mode 100644
index 00000000..a06b7313
Binary files /dev/null and b/apps/wizard-v2/public/wizards/pingone/pingone_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/pingone/pingone_saml_4.png b/apps/wizard-v2/public/wizards/pingone/pingone_saml_4.png
new file mode 100644
index 00000000..0e5a6063
Binary files /dev/null and b/apps/wizard-v2/public/wizards/pingone/pingone_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/pingone/pingone_saml_5.png b/apps/wizard-v2/public/wizards/pingone/pingone_saml_5.png
new file mode 100644
index 00000000..4be63e2d
Binary files /dev/null and b/apps/wizard-v2/public/wizards/pingone/pingone_saml_5.png differ
diff --git a/apps/wizard-v2/public/wizards/pingone/pingone_saml_6.png b/apps/wizard-v2/public/wizards/pingone/pingone_saml_6.png
new file mode 100644
index 00000000..1c455e49
Binary files /dev/null and b/apps/wizard-v2/public/wizards/pingone/pingone_saml_6.png differ
diff --git a/apps/wizard-v2/public/wizards/pingone/pingone_saml_7.png b/apps/wizard-v2/public/wizards/pingone/pingone_saml_7.png
new file mode 100644
index 00000000..4632c02f
Binary files /dev/null and b/apps/wizard-v2/public/wizards/pingone/pingone_saml_7.png differ
diff --git a/apps/wizard-v2/public/wizards/pingone/pingone_saml_8.png b/apps/wizard-v2/public/wizards/pingone/pingone_saml_8.png
new file mode 100644
index 00000000..201af884
Binary files /dev/null and b/apps/wizard-v2/public/wizards/pingone/pingone_saml_8.png differ
diff --git a/apps/wizard-v2/public/wizards/pingone/pingone_saml_9.png b/apps/wizard-v2/public/wizards/pingone/pingone_saml_9.png
new file mode 100644
index 00000000..ac968662
Binary files /dev/null and b/apps/wizard-v2/public/wizards/pingone/pingone_saml_9.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-0.png b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-0.png
new file mode 100644
index 00000000..ebb4e82a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-0.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-1.png b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-1.png
new file mode 100644
index 00000000..6b6534ad
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-1.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-2.png b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-2.png
new file mode 100644
index 00000000..3394f7cb
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-2.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-3.png b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-3.png
new file mode 100644
index 00000000..b72eca4a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-3.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-4.png b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-4.png
new file mode 100644
index 00000000..b070ac49
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-4.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-5.png b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-5.png
new file mode 100644
index 00000000..1752ad3e
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/COMMON/salesforce-5.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_0.png b/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_0.png
new file mode 100644
index 00000000..42023239
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_0.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_1.png b/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_1.png
new file mode 100644
index 00000000..36aacd83
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_1.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_2.png b/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_2.png
new file mode 100644
index 00000000..2586a480
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_2.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_3.png b/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_3.png
new file mode 100644
index 00000000..d8a115cc
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_3.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_4.png b/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_4.png
new file mode 100644
index 00000000..b0e28b21
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/OIDC/salesforce_oidc_4.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_0.png b/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_0.png
new file mode 100644
index 00000000..c22f2f23
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_0.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_1.png b/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_1.png
new file mode 100644
index 00000000..f5c98f55
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_1.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_2.png b/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_2.png
new file mode 100644
index 00000000..22e8cc6a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_2.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_3.png b/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_3.png
new file mode 100644
index 00000000..85b3f610
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_3.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_4.png b/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_4.png
new file mode 100644
index 00000000..fa1e731a
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/SAML/salesforce_saml_4.png differ
diff --git a/apps/wizard-v2/public/wizards/salesforce/salesforce-logo.png b/apps/wizard-v2/public/wizards/salesforce/salesforce-logo.png
new file mode 100644
index 00000000..6b0c1b19
Binary files /dev/null and b/apps/wizard-v2/public/wizards/salesforce/salesforce-logo.png differ
diff --git a/apps/wizard-v2/src/api/clients.ts b/apps/wizard-v2/src/api/clients.ts
new file mode 100644
index 00000000..cc9cc453
--- /dev/null
+++ b/apps/wizard-v2/src/api/clients.ts
@@ -0,0 +1,53 @@
+/**
+ * Typed API clients for wizard-v2.
+ *
+ * Two clients are available — which one is used depends on apiMode:
+ *
+ * cloud → orgsClient — Phase Two Orgs API, org-scoped IDP endpoints
+ * Base: {serverUrl} (paths: /{realm}/orgs/{orgId}/...)
+ *
+ * onprem → adminClient — Keycloak Admin API, realm-wide IDP endpoints
+ * Base: {serverUrl} (paths: /admin/realms/{realm}/...)
+ *
+ * Both clients automatically attach a Bearer token via the oidc-spa helper.
+ * Types are generated from the OpenAPI specs — run `pnpm gen-api` to refresh.
+ */
+import createClient, { type Middleware } from "openapi-fetch";
+import type { paths as OrgsPaths } from "./types/orgs.d.ts";
+import type { paths as AdminPaths } from "./types/admin.d.ts";
+import { getOidc } from "@/oidc";
+
+/** Middleware that injects the OIDC Bearer token into every request. */
+const authMiddleware: Middleware = {
+ async onRequest({ request }) {
+ const oidc = await getOidc();
+ if (oidc.isUserLoggedIn) {
+ const token = await oidc.getAccessToken();
+ request.headers.set("Authorization", `Bearer ${token}`);
+ }
+ return request;
+ },
+};
+
+/**
+ * Phase Two Orgs API client — use in cloud (org-scoped) mode.
+ * Paths match /{realm}/orgs/{orgId}/idps/...
+ */
+export function createOrgsClient(serverUrl: string) {
+ const client = createClient({ baseUrl: serverUrl });
+ client.use(authMiddleware);
+ return client;
+}
+
+/**
+ * Keycloak Admin API client — use in onprem (realm-wide) mode.
+ * Paths match /admin/realms/{realm}/identity-provider/...
+ */
+export function createAdminClient(serverUrl: string) {
+ const client = createClient({ baseUrl: serverUrl });
+ client.use(authMiddleware);
+ return client;
+}
+
+export type OrgsClient = ReturnType;
+export type AdminClient = ReturnType;
diff --git a/apps/wizard-v2/src/api/types/admin.d.ts b/apps/wizard-v2/src/api/types/admin.d.ts
new file mode 100644
index 00000000..4c10d625
--- /dev/null
+++ b/apps/wizard-v2/src/api/types/admin.d.ts
@@ -0,0 +1,20116 @@
+/**
+ * This file was auto-generated by openapi-typescript.
+ * Do not make direct changes to the file.
+ */
+
+export interface paths {
+ "/admin/realms": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /** Get accessible realms Returns a list of accessible realms. The list is filtered based on what realms the caller is allowed to view. */
+ get: {
+ parameters: {
+ query?: {
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RealmRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /**
+ * Import a realm. Imports a realm from a full representation of that realm.
+ * @description Realm name must be unique.
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": string;
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get the top-level representation of the realm It will not include nested information like User and Client representations. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RealmRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /**
+ * Update the top-level information of the realm Any user, roles or client information in the representation will be ignored.
+ * @description This will only update top-level attributes of the realm.
+ */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RealmRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete the realm */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/admin-events": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get admin events Returns all admin events, or filters events based on URL query parameters listed here */
+ get: {
+ parameters: {
+ query?: {
+ authClient?: string;
+ authIpAddress?: string;
+ authRealm?: string;
+ /** @description user id */
+ authUser?: string;
+ /** @description From (inclusive) date (yyyy-MM-dd) or time in Epoch timestamp millis (number of milliseconds since January 1, 1970, 00:00:00 GMT) */
+ dateFrom?: string;
+ /** @description To (inclusive) date (yyyy-MM-dd) or time in Epoch timestamp millis (number of milliseconds since January 1, 1970, 00:00:00 GMT) */
+ dateTo?: string;
+ /** @description The direction to sort events by (asc or desc) */
+ direction?: string;
+ first?: number;
+ /** @description Maximum results size (defaults to 100) */
+ max?: number;
+ operationTypes?: string[];
+ resourcePath?: string;
+ resourceTypes?: string[];
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AdminEventRepresentation"][];
+ };
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ /** Delete all admin events */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/attack-detection/brute-force/users": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ post?: never;
+ /** Clear any user login failures for all users This can release temporary disabled users */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/attack-detection/brute-force/users/{userId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get status of a username in brute force detection */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ userId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: unknown;
+ };
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ /** Clear any user login failures for the user This can release temporary disabled user */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ userId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/authenticator-providers": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get authenticator providers Returns a stream of authenticator providers. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: unknown;
+ }[];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/client-authenticator-providers": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get client authenticator providers Returns a stream of client authenticator providers. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: unknown;
+ }[];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/config": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Create new authenticator configuration
+ * @deprecated
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["AuthenticatorConfigRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/config-description/{providerId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get authenticator provider's configuration description */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ providerId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AuthenticatorConfigInfoRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/config/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get authenticator configuration */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Configuration id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AuthenticatorConfigRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update authenticator configuration */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Configuration id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["AuthenticatorConfigRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete authenticator configuration */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Configuration id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/executions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Add new authentication execution */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["AuthenticationExecutionRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/executions/{executionId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get Single Execution */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ executionId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AuthenticationExecutionRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ /** Delete execution */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Execution id */
+ executionId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/executions/{executionId}/config": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Update execution with new configuration */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Execution id */
+ executionId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["AuthenticatorConfigRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/executions/{executionId}/config/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get execution's configuration
+ * @deprecated
+ */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Execution id */
+ executionId: string;
+ /** @description Configuration id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AuthenticatorConfigRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/executions/{executionId}/lower-priority": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Lower execution's priority */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Execution id */
+ executionId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/executions/{executionId}/raise-priority": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Raise execution's priority */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Execution id */
+ executionId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/flows": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get authentication flows Returns a stream of authentication flows. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AuthenticationFlowRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Create a new authentication flow */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["AuthenticationFlowRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/flows/{flowAlias}/copy": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Copy existing authentication flow under a new name The new name is given as 'newName' attribute of the passed JSON object */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description name of the existing authentication flow */
+ flowAlias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": {
+ [key: string]: string;
+ };
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/flows/{flowAlias}/executions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get authentication executions for a flow */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Flow alias */
+ flowAlias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AuthenticationExecutionInfoRepresentation"][];
+ };
+ };
+ };
+ };
+ /** Update authentication executions of a Flow */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Flow alias */
+ flowAlias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["AuthenticationExecutionInfoRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/flows/{flowAlias}/executions/execution": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Add new authentication execution to a flow */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of parent flow */
+ flowAlias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": {
+ [key: string]: unknown;
+ };
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/flows/{flowAlias}/executions/flow": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Add new flow with new execution to existing flow */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of parent authentication flow */
+ flowAlias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": {
+ [key: string]: unknown;
+ };
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/flows/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get authentication flow for id */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Flow id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AuthenticationFlowRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update an authentication flow */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["AuthenticationFlowRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete an authentication flow */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Flow id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/form-action-providers": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get form action providers Returns a stream of form action providers. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: unknown;
+ }[];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/form-providers": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get form providers Returns a stream of form providers. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: unknown;
+ }[];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/per-client-config-description": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get configuration descriptions for all clients */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: components["schemas"]["ConfigPropertyRepresentation"][];
+ };
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/register-required-action": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Register a new required actions */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": {
+ [key: string]: string;
+ };
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/required-actions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get required actions Returns a stream of required actions. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RequiredActionProviderRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/required-actions/{alias}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get required action for alias */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of required action */
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RequiredActionProviderRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update required action */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of required action */
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RequiredActionProviderRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete required action */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of required action */
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/required-actions/{alias}/config": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get RequiredAction configuration */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of required action */
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RequiredActionConfigRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update RequiredAction configuration */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of required action */
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RequiredActionConfigRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete RequiredAction configuration */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of required action */
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/required-actions/{alias}/config-description": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get RequiredAction provider configuration description */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of required action */
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RequiredActionConfigInfoRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/required-actions/{alias}/lower-priority": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Lower required action's priority */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of required action */
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/required-actions/{alias}/raise-priority": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Raise required action's priority */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Alias of required action */
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/authentication/unregistered-required-actions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get unregistered required actions Returns a stream of unregistered required actions. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: string;
+ }[];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-description-converter": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Base path for importing clients under this realm. */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": string;
+ "application/xml": string;
+ "text/plain": string;
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-policies/policies": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ "include-global-policies"?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientPoliciesRepresentation"];
+ };
+ };
+ };
+ };
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ClientPoliciesRepresentation"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-policies/profiles": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ "include-global-profiles"?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientProfilesRepresentation"];
+ };
+ };
+ };
+ };
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ClientProfilesRepresentation"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-registration-policy/providers": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Base path for retrieve providers with the configProperties properly filled */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ComponentTypeRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get client scopes belonging to the realm Returns a list of client scopes belonging to the realm */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Create a new client scope Client Scope’s name must be unique! */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get representation of the client scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Update the client scope */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete the client scope */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/protocol-mappers/add-models": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Create multiple mappers */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/protocol-mappers/models": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get mappers */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Create a mapper */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/protocol-mappers/models/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get mapper by id */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update the mapper */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete the mapper */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/protocol-mappers/protocol/{protocol}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get mappers by name for a specific protocol */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ protocol: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/scope-mappings": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get all scope mappings for the client
+ * @deprecated
+ */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["MappingsRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/scope-mappings/clients/{client}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ /** Get the roles associated with a client's scope Returns roles for the client. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Add client-level roles to the client's scope */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Remove client-level roles from the client's scope. */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/scope-mappings/clients/{client}/available": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ /** The available client-level roles Returns the roles for the client that can be associated with the client's scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/scope-mappings/clients/{client}/composite": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ /** Get effective client roles Returns the roles for the client that are associated with the client's scope. */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return roles with their attributes */
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/scope-mappings/realm": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level roles associated with the client's scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Add a set of realm-level roles to the client's scope */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Remove a set of realm-level roles from the client's scope */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/scope-mappings/realm/available": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level roles that are available to attach to this client's scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-scopes/{client-scope-id}/scope-mappings/realm/composite": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get effective realm-level roles associated with the client’s scope What this does is recurse any composite roles associated with the client’s scope and adds the roles to this lists.
+ * @description The method is really to show a comprehensive total view of realm-level roles associated with the client.
+ */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return roles with their attributes */
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-session-stats": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get client session stats Returns a JSON map.
+ * @description The key is the client id, the value is the number of sessions that currently are active with that client. Only clients that actually have a session associated with them will be in this map.
+ */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: string;
+ }[];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get client scopes belonging to the realm Returns a list of client scopes belonging to the realm */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Create a new client scope Client Scope’s name must be unique! */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get representation of the client scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Update the client scope */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete the client scope */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/protocol-mappers/add-models": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Create multiple mappers */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/protocol-mappers/models": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get mappers */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Create a mapper */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/protocol-mappers/models/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get mapper by id */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update the mapper */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete the mapper */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/protocol-mappers/protocol/{protocol}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get mappers by name for a specific protocol */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ protocol: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/scope-mappings": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get all scope mappings for the client
+ * @deprecated
+ */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["MappingsRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/scope-mappings/clients/{client}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ /** Get the roles associated with a client's scope Returns roles for the client. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Add client-level roles to the client's scope */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Remove client-level roles from the client's scope. */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/scope-mappings/clients/{client}/available": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ /** The available client-level roles Returns the roles for the client that can be associated with the client's scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/scope-mappings/clients/{client}/composite": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ /** Get effective client roles Returns the roles for the client that are associated with the client's scope. */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return roles with their attributes */
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/scope-mappings/realm": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level roles associated with the client's scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Add a set of realm-level roles to the client's scope */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Remove a set of realm-level roles from the client's scope */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/scope-mappings/realm/available": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level roles that are available to attach to this client's scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-templates/{client-scope-id}/scope-mappings/realm/composite": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get effective realm-level roles associated with the client’s scope What this does is recurse any composite roles associated with the client’s scope and adds the roles to this lists.
+ * @description The method is really to show a comprehensive total view of realm-level roles associated with the client.
+ */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return roles with their attributes */
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "client-scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/client-types": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /**
+ * List all client types available in the current realm
+ * @description This endpoint returns a list of both global and realm level client types and the attributes they set
+ */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientTypesRepresentation"];
+ };
+ };
+ };
+ };
+ /**
+ * Update a client type
+ * @description This endpoint allows you to update a realm level client type
+ */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ClientTypesRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get clients belonging to the realm.
+ * @description If a client can’t be retrieved from the storage due to a problem with the underlying storage, it is silently removed from the returned list. This ensures that concurrent modifications to the list don’t prevent callers from retrieving this list.
+ */
+ get: {
+ parameters: {
+ query?: {
+ /** @description filter by clientId */
+ clientId?: string;
+ /** @description the first result */
+ first?: number;
+ /** @description the max results to return */
+ max?: number;
+ q?: string;
+ /** @description whether this is a search query or a getClientById query */
+ search?: boolean;
+ /** @description filter clients that cannot be viewed in full by admin */
+ viewableOnly?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Create a new client Client’s client_id must be unique! */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ClientRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients-initial-access": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientInitialAccessPresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Create a new initial access token. */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ClientInitialAccessCreatePresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientInitialAccessCreatePresentation"];
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients-initial-access/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get representation of the client */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update the client */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ClientRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete the client */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ResourceServerRepresentation"];
+ };
+ };
+ };
+ };
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ResourceServerRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/import": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ResourceServerRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/permission": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ fields?: string;
+ first?: number;
+ max?: number;
+ name?: string;
+ owner?: string;
+ permission?: boolean;
+ policyId?: string;
+ resource?: string;
+ resourceType?: string;
+ scope?: string;
+ type?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AbstractPolicyRepresentation"][];
+ };
+ };
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": string;
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/permission/evaluate": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["PolicyEvaluationRequest"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["PolicyEvaluationResponse"];
+ };
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/permission/providers": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["PolicyProviderRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/permission/search": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ fields?: string;
+ name?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AbstractPolicyRepresentation"];
+ };
+ };
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/policy": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ fields?: string;
+ first?: number;
+ max?: number;
+ name?: string;
+ owner?: string;
+ permission?: boolean;
+ policyId?: string;
+ resource?: string;
+ resourceType?: string;
+ scope?: string;
+ type?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AbstractPolicyRepresentation"][];
+ };
+ };
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": string;
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/policy/evaluate": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["PolicyEvaluationRequest"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["PolicyEvaluationResponse"];
+ };
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/policy/providers": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["PolicyProviderRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/policy/search": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ fields?: string;
+ name?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AbstractPolicyRepresentation"];
+ };
+ };
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/resource": {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ResourceRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post: {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ResourceRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ResourceRepresentation"];
+ };
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/resource/search": {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ResourceRepresentation"];
+ };
+ };
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/resource/{resource-id}": {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "resource-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ResourceRepresentation"];
+ };
+ };
+ /** @description Not found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put: {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "resource-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ResourceRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "resource-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/resource/{resource-id}/attributes": {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "resource-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/resource/{resource-id}/permissions": {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "resource-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["PolicyRepresentation"][];
+ };
+ };
+ /** @description Not found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/resource/{resource-id}/scopes": {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ _id?: string;
+ deep?: boolean;
+ exactName?: boolean;
+ first?: number;
+ matchingUri?: boolean;
+ max?: number;
+ name?: string;
+ owner?: string;
+ scope?: string;
+ type?: string;
+ uri?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "resource-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ScopeRepresentation"][];
+ };
+ };
+ /** @description Not found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/scope": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ first?: number;
+ max?: number;
+ name?: string;
+ scopeId?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ScopeRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ScopeRepresentation"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/scope/search": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ name?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ScopeRepresentation"][];
+ };
+ };
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/scope/{scope-id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ScopeRepresentation"];
+ };
+ };
+ /** @description Not found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ScopeRepresentation"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/scope/{scope-id}/permissions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["PolicyRepresentation"][];
+ };
+ };
+ /** @description Not found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/scope/{scope-id}/resources": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "scope-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ResourceRepresentation"][];
+ };
+ };
+ /** @description Not found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/settings": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ResourceServerRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/certificates/{attr}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ /** Get key info */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["CertificateRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/certificates/{attr}/download": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Get a keystore file for the client, containing private key and public certificate */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["KeyStoreConfig"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/octet-stream": string;
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/certificates/{attr}/generate": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Generate a new certificate with new key pair */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["CertificateRepresentation"];
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/certificates/{attr}/generate-and-download": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Generate a new keypair and certificate, and get the private key file
+ *
+ * Generates a keypair and certificate and serves the private key in a specified keystore format.
+ * Only generated public certificate is saved in Keycloak DB - the private key is not.
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["KeyStoreConfig"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/octet-stream": string;
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/certificates/{attr}/upload": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Upload certificate and eventually private key */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["CertificateRepresentation"];
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/certificates/{attr}/upload-certificate": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Upload only certificate, not private key */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ attr: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["CertificateRepresentation"];
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/client-secret": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get the client secret */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["CredentialRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Generate a new secret for the client */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["CredentialRepresentation"];
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/client-secret/rotated": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get the rotated client secret */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["CredentialRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ /** Invalidate the rotated secret for the client */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/default-client-scopes": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get default client scopes. Only name and ids are returned. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/default-client-scopes/{clientScopeId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ clientScopeId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ clientScopeId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/evaluate-scopes/generate-example-access-token": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Create JSON with payload of example access token */
+ get: {
+ parameters: {
+ query?: {
+ audience?: string;
+ scope?: string;
+ userId?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AccessToken"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/evaluate-scopes/generate-example-id-token": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Create JSON with payload of example id token */
+ get: {
+ parameters: {
+ query?: {
+ audience?: string;
+ scope?: string;
+ userId?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["IDToken"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/evaluate-scopes/generate-example-userinfo": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Create JSON with payload of example user info */
+ get: {
+ parameters: {
+ query?: {
+ scope?: string;
+ userId?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": Record;
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/evaluate-scopes/protocol-mappers": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Return list of all protocol mappers, which will be used when generating tokens issued for particular client.
+ * @description This means protocol mappers assigned to this client directly and protocol mappers assigned to all client scopes of this client.
+ */
+ get: {
+ parameters: {
+ query?: {
+ scope?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperEvaluationRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/evaluate-scopes/scope-mappings/{roleContainerId}/granted": {
+ parameters: {
+ query?: {
+ scope?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description either realm name OR client UUID */
+ roleContainerId: string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get effective scope mapping of all roles of particular role container, which this client is defacto allowed to have in the accessToken issued for him.
+ * @description This contains scope mappings, which this client has directly, as well as scope mappings, which are granted to all client scopes, which are linked with this client.
+ */
+ get: {
+ parameters: {
+ query?: {
+ scope?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description either realm name OR client UUID */
+ roleContainerId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/evaluate-scopes/scope-mappings/{roleContainerId}/not-granted": {
+ parameters: {
+ query?: {
+ scope?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description either realm name OR client UUID */
+ roleContainerId: string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get roles, which this client doesn't have scope for and can't have them in the accessToken issued for him.
+ * @description Defacto all the other roles of particular role container, which are not in {@link #getGrantedScopeMappings()}
+ */
+ get: {
+ parameters: {
+ query?: {
+ scope?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description either realm name OR client UUID */
+ roleContainerId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/installation/providers/{providerId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ providerId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/management/permissions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Return object stating whether client Authorization permissions have been initialized or not and a reference */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ };
+ };
+ /** Return object stating whether client Authorization permissions have been initialized or not and a reference */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/nodes": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Register a cluster node with the client Manually register cluster node to this client - usually it’s not needed to call this directly as adapter should handle by sending registration request to Keycloak */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": {
+ [key: string]: string;
+ };
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/nodes/{node}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ post?: never;
+ /** Unregister a cluster node from the client */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ node: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/offline-session-count": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get application offline session count Returns a number of offline user sessions associated with this client { "count": number } */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: number;
+ };
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/offline-sessions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get offline sessions for client Returns a list of offline user sessions associated with this client */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Paging offset */
+ first?: number;
+ /** @description Maximum results size (defaults to 100) */
+ max?: number;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["UserSessionRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/optional-client-scopes": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get optional client scopes. Only name and ids are returned. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/optional-client-scopes/{clientScopeId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ clientScopeId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ clientScopeId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/protocol-mappers/add-models": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Create multiple mappers */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/protocol-mappers/models": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get mappers */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Create a mapper */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/protocol-mappers/models/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get mapper by id */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update the mapper */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete the mapper */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/protocol-mappers/protocol/{protocol}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get mappers by name for a specific protocol */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ protocol: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ProtocolMapperRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/push-revocation": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Push the client's revocation policy to its admin URL If the client has an admin URL, push revocation policy to it. */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GlobalRequestResult"];
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/registration-access-token": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Generate a new registration access token for the client */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientRepresentation"];
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/roles": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get all roles for the realm or client */
+ get: {
+ parameters: {
+ query?: {
+ briefRepresentation?: boolean;
+ first?: number;
+ max?: number;
+ search?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Create a new role for the realm or client */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/roles/{role-name}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get a role by name */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Update a role by name */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete a role by name */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/roles/{role-name}/composites": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get composites of the role */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Add a composite to the role */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Remove roles from the role's composite */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/roles/{role-name}/composites/clients/{targetClientUuid}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get client-level roles for the client that are in the role's composite */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ targetClientUuid: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/roles/{role-name}/composites/realm": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level roles of the role's composite */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/roles/{role-name}/groups": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Returns a stream of groups that have the specified role name */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return a full representation of the {@code GroupRepresentation} objects. */
+ briefRepresentation?: boolean;
+ /** @description first result to return. Ignored if negative or {@code null}. */
+ first?: number;
+ /** @description maximum number of results to return. Ignored if negative or {@code null}. */
+ max?: number;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description the role name. */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["UserRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/roles/{role-name}/management/permissions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Return object stating whether role Authorization permissions have been initialized or not and a reference */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Return object stating whether role Authorization permissions have been initialized or not and a reference */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/roles/{role-name}/users": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Returns a stream of users that have the specified role name. */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Boolean which defines whether brief representations are returned (default: false) */
+ briefRepresentation?: boolean;
+ /** @description first result to return. Ignored if negative or {@code null}. */
+ first?: number;
+ /** @description maximum number of results to return. Ignored if negative or {@code null}. */
+ max?: number;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ /** @description the role name. */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["UserRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/scope-mappings": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get all scope mappings for the client
+ * @deprecated
+ */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["MappingsRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/scope-mappings/clients/{client}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ /** Get the roles associated with a client's scope Returns roles for the client. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Add client-level roles to the client's scope */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Remove client-level roles from the client's scope. */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/scope-mappings/clients/{client}/available": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ /** The available client-level roles Returns the roles for the client that can be associated with the client's scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/scope-mappings/clients/{client}/composite": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ /** Get effective client roles Returns the roles for the client that are associated with the client's scope. */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return roles with their attributes */
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ client: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/scope-mappings/realm": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level roles associated with the client's scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Add a set of realm-level roles to the client's scope */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Remove a set of realm-level roles from the client's scope */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/scope-mappings/realm/available": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level roles that are available to attach to this client's scope */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/scope-mappings/realm/composite": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get effective realm-level roles associated with the client’s scope What this does is recurse any composite roles associated with the client’s scope and adds the roles to this lists.
+ * @description The method is really to show a comprehensive total view of realm-level roles associated with the client.
+ */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return roles with their attributes */
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/service-account-user": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get a user dedicated to the service account */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["UserRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/session-count": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get application session count Returns a number of user sessions associated with this client { "count": number } */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: number;
+ };
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/test-nodes-available": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Test if registered cluster nodes are available Tests availability by sending 'ping' request to all cluster nodes. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GlobalRequestResult"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/clients/{client-uuid}/user-sessions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ /** Get user sessions for client Returns a list of user sessions associated with this client */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Paging offset */
+ first?: number;
+ /** @description Maximum results size (defaults to 100) */
+ max?: number;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of client (not client-id!) */
+ "client-uuid": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["UserSessionRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/components": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ name?: string;
+ parent?: string;
+ providerId?: string;
+ type?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ComponentRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ComponentRepresentation"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/components/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ComponentRepresentation"];
+ };
+ };
+ };
+ };
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ComponentRepresentation"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/components/{id}/sub-component-types": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** List of subcomponent types that are available to configure for a particular parent component. */
+ get: {
+ parameters: {
+ query?: {
+ type?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ComponentTypeRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/credential-registrators": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": string[];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/default-default-client-scopes": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get realm default client scopes. Only name and ids are returned. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/default-default-client-scopes/{clientScopeId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ clientScopeId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ clientScopeId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/default-groups": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get group hierarchy. Only name and ids are returned. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/default-groups/{groupId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ groupId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ groupId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/default-optional-client-scopes": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get realm optional client scopes. Only name and ids are returned. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ClientScopeRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/default-optional-client-scopes/{clientScopeId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ clientScopeId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ clientScopeId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/events": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get events Returns all events, or filters them based on URL query parameters listed here */
+ get: {
+ parameters: {
+ query?: {
+ /** @description App or oauth client name */
+ client?: string;
+ /** @description From (inclusive) date (yyyy-MM-dd) or time in Epoch timestamp millis (number of milliseconds since January 1, 1970, 00:00:00 GMT) */
+ dateFrom?: string;
+ /** @description To (inclusive) date (yyyy-MM-dd) or time in Epoch timestamp millis (number of milliseconds since January 1, 1970, 00:00:00 GMT) */
+ dateTo?: string;
+ /** @description The direction to sort events by (asc or desc) */
+ direction?: string;
+ /** @description Paging offset */
+ first?: number;
+ /** @description IP Address */
+ ipAddress?: string;
+ /** @description Maximum results size (defaults to 100) */
+ max?: number;
+ /** @description The types of events to return */
+ type?: string[];
+ /** @description User id */
+ user?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["EventRepresentation"][];
+ };
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ /** Delete all events */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/events/config": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get the events provider configuration Returns JSON object with events provider configuration */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RealmEventsConfigRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** @description Update the events provider Change the events provider and/or its configuration */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RealmEventsConfigRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/group-by-path/{path}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ path: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get group hierarchy. Only `name` and `id` are returned. `subGroups` are only returned when using the `search` or `q` parameter. If none of these parameters is provided, the top-level groups are returned without `subGroups` being filled. */
+ get: {
+ parameters: {
+ query?: {
+ briefRepresentation?: boolean;
+ exact?: boolean;
+ first?: number;
+ max?: number;
+ populateHierarchy?: boolean;
+ q?: string;
+ search?: string;
+ /** @description Boolean which defines whether to return the count of subgroups for each group (default: true */
+ subGroupsCount?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /**
+ * create or add a top level realm groupSet or create child.
+ * @description This will update the group and set the parent if it exists. Create it and set the parent if the group doesn’t exist.
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/count": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Returns the groups counts. */
+ get: {
+ parameters: {
+ query?: {
+ search?: string;
+ top?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: number;
+ };
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update group, ignores subgroups. */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}/children": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ /** Return a paginated list of subgroups that have a parent group corresponding to the group on the URL */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Boolean which defines whether brief groups representations are returned or not (default: false) */
+ briefRepresentation?: boolean;
+ /** @description Boolean which defines whether the params "search" must match exactly or not */
+ exact?: boolean;
+ /** @description The position of the first result to be returned (pagination offset). */
+ first?: number;
+ /** @description The maximum number of results that are to be returned. Defaults to 10 */
+ max?: number;
+ /** @description A String representing either an exact group name or a partial name, defaults to prefix search. */
+ search?: string;
+ /** @description Boolean which defines whether to return the count of subgroups for each subgroup of this group (default: true) */
+ subGroupsCount?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /**
+ * Set or create child.
+ * @description This will just set the parent if it exists. Create it and set the parent if the group doesn’t exist.
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}/management/permissions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ /** Return object stating whether client Authorization permissions have been initialized or not and a reference */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ };
+ };
+ /** Return object stating whether client Authorization permissions have been initialized or not and a reference */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}/members": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get users Returns a stream of users, filtered according to query parameters */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Only return basic information (only guaranteed to return id, username, created, first and last name, email, enabled state, email verification state, federation link, and access. Note that it means that namely user attributes, required actions, and not before are not returned.) */
+ briefRepresentation?: boolean;
+ /** @description Pagination offset */
+ first?: number;
+ /** @description Maximum results size (defaults to 100) */
+ max?: number;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["UserRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}/role-mappings": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get role mappings */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["MappingsRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}/role-mappings/clients/{client-id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ /** @description client id (not clientId!) */
+ "client-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get client-level role mappings for the user or group, and the app */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ /** @description client id (not clientId!) */
+ "client-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Add client-level roles to the user or group role mapping */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ /** @description client id (not clientId!) */
+ "client-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Delete client-level roles from user or group role mapping */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ /** @description client id (not clientId!) */
+ "client-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}/role-mappings/clients/{client-id}/available": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ /** @description client id (not clientId!) */
+ "client-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get available client-level roles that can be mapped to the user or group */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ /** @description client id (not clientId!) */
+ "client-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}/role-mappings/clients/{client-id}/composite": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ /** @description client id (not clientId!) */
+ "client-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get effective client-level role mappings This recurses any composite roles */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return roles with their attributes */
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ /** @description client id (not clientId!) */
+ "client-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}/role-mappings/realm": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level role mappings */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Add realm-level role mappings to the user */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Delete realm-level role mappings */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}/role-mappings/realm/available": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level roles that can be mapped */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/groups/{group-id}/role-mappings/realm/composite": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get effective realm-level role mappings This will recurse all composite roles to get the result. */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return roles with their attributes */
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/import-config": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Import identity provider from JSON body
+ * @description Import identity provider from uploaded JSON file
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": {
+ [key: string]: unknown;
+ };
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: string;
+ };
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/instances": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** List identity providers */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Boolean which defines whether brief representations are returned (default: false) */
+ briefRepresentation?: boolean;
+ /** @description Filter by identity providers capability */
+ capability?: string;
+ /** @description Pagination offset */
+ first?: number;
+ /** @description Maximum results size (defaults to 100) */
+ max?: number;
+ /** @description Boolean which defines if only realm-level IDPs (not associated with orgs) should be returned (default: false) */
+ realmOnly?: boolean;
+ /** @description Filter specific providers by name. Search can be prefix (name*), contains (*name*) or exact ("name"). Default prefixed. */
+ search?: string;
+ /** @description Filter by identity providers type */
+ type?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["IdentityProviderRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Create a new identity provider */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["IdentityProviderRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/instances/{alias}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ /** Get the identity provider */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["IdentityProviderRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update the identity provider */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["IdentityProviderRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete the identity provider */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/instances/{alias}/export": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ /** Export public broker configuration for identity provider */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Format to use */
+ format?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/instances/{alias}/management/permissions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ /** Return object stating whether client Authorization permissions have been initialized or not and a reference */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ };
+ };
+ /** Return object stating whether client Authorization permissions have been initialized or not and a reference */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/instances/{alias}/mapper-types": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ /** Get mapper types for identity provider */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "*/*": {
+ [key: string]: components["schemas"]["IdentityProviderMapperTypeRepresentation"];
+ };
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/instances/{alias}/mappers": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ /** Get mappers for identity provider */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["IdentityProviderMapperRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /** Add a mapper to identity provider */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["IdentityProviderMapperRepresentation"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/instances/{alias}/mappers/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ /** Get mapper by id for the identity provider */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["IdentityProviderMapperRepresentation"];
+ };
+ };
+ };
+ };
+ /** Update a mapper for the identity provider */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["IdentityProviderMapperRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete a mapper for the identity provider */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ /** @description Mapper id */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/instances/{alias}/reload-keys": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ /** Reaload keys for the identity provider if the provider supports it, "true" is returned if reload was performed, "false" if not. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": boolean;
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/providers/{provider_id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get the identity provider factory for that provider id */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description The provider id to get the factory */
+ provider_id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": Record;
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/identity-provider/upload-certificate": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Uploads a certificate, prepares the jwks or public key associated, and returns the certificate representation. */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["CertificateRepresentation"];
+ };
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/keys": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["KeysMetadataRepresentation"];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/localization": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": string[];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/localization/{locale}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ /** @deprecated */
+ useRealmDefaultLocaleFallback?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ locale: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ [key: string]: string;
+ };
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Import localization from uploaded JSON file */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ locale: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": {
+ [key: string]: string;
+ };
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ locale: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/localization/{locale}/{key}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ key: string;
+ locale: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "text/plain": string;
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ key: string;
+ locale: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "text/plain": string;
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ key: string;
+ locale: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/logout-all": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Removes all user sessions.
+ * @description Any client that has an admin url will also be told to invalidate any sessions they have.
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GlobalRequestResult"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Returns a paginated list of organizations filtered according to the specified parameters */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return the full representation. Otherwise, only the basic fields are returned. */
+ briefRepresentation?: boolean;
+ /** @description Boolean which defines whether the param 'search' must match exactly or not */
+ exact?: boolean;
+ /** @description The position of the first result to be processed (pagination offset) */
+ first?: number;
+ /** @description The maximum number of results to be returned - defaults to 10 */
+ max?: number;
+ /** @description A query to search for custom attributes, in the format 'key1:value2 key2:value2' */
+ q?: string;
+ /** @description A String representing either an organization name or domain */
+ search?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["OrganizationRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Creates a new organization */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["OrganizationRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/count": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Returns the organizations counts. */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Boolean which defines whether the param 'search' must match exactly or not */
+ exact?: boolean;
+ /** @description A query to search for custom attributes, in the format 'key1:value2 key2:value2' */
+ q?: string;
+ /** @description A String representing either an organization name or domain */
+ search?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": number;
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/members/{member-id}/organizations": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Returns the organizations associated with the user that has the specified id */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return the full representation. Otherwise, only the basic fields are returned. */
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "member-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["OrganizationRepresentation"][];
+ };
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /** Returns the organization representation */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["OrganizationRepresentation"];
+ };
+ };
+ };
+ };
+ /** Updates the organization */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["OrganizationRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Deletes the organization */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/groups": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get organization groups
+ * @description Returns organization groups. When `search` parameter is provided, groups are searched by name. When `q` parameter is provided, groups are searched by attributes. If neither parameter is provided, top-level groups are returned.
+ */
+ get: {
+ parameters: {
+ query?: {
+ briefRepresentation?: boolean;
+ exact?: boolean;
+ first?: number;
+ max?: number;
+ populateHierarchy?: boolean;
+ q?: string;
+ search?: string;
+ subGroupsCount?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /**
+ * Creates a new top-level group or moves an existing group to top-level
+ * @description Creates a new top-level group in the organization. If the group representation includes an ID, moves the existing organization group to be a top-level group. If no ID is provided, creates a new top-level group.
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description No Content - Group moved to top-level */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found - Group does not exist */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/groups/group-by-path/{path}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get organization group by path
+ * @description Returns the organization group with the specified path
+ */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Whether to return the count of subgroups (default: false) */
+ subGroupsCount?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ path: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/groups/{group-id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get organization group representation */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Whether to return the count of subgroups (default: false) */
+ subGroupsCount?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"];
+ };
+ };
+ };
+ };
+ /**
+ * Update organization group
+ * @description Updates the organization group's name, description, and attributes. Subgroups are not affected.
+ */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /**
+ * Delete the organization group
+ * @description Deletes the organization group and all its subgroups
+ */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/groups/{group-id}/children": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get subgroups of this organization group
+ * @description Returns a paginated stream of subgroups that belong to this organization group
+ */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Boolean which defines whether the params "search" must match exactly or not */
+ exact?: boolean;
+ /** @description The position of the first result to be returned (pagination offset). */
+ first?: number;
+ /** @description The maximum number of results that are to be returned. Defaults to 10 */
+ max?: number;
+ /** @description A String representing either an exact group name or a partial name */
+ search?: string;
+ /** @description Whether to return the count of subgroups (default: false) */
+ subGroupsCount?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /**
+ * Create or move a subgroup
+ * @description Creates a new subgroup under this organization group. If the group representation includes an ID, moves the existing group to be a child of this group. If no ID is provided, creates a new subgroup.
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/groups/{group-id}/members": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get members of this organization group
+ * @description Returns a paginated list of organization members that belong to this group
+ */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Only return basic information (only guaranteed to return id, username, created, first and last name, email, enabled state, email verification state, federation link, and access. Note that it means that namely user attributes, required actions, and not before are not returned.) */
+ briefRepresentation?: boolean;
+ /** @description Pagination offset */
+ first?: number;
+ /** @description Maximum results size (defaults to 100) */
+ max?: number;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["MemberRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/groups/{group-id}/members/{userId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ /**
+ * Add a user to this organization group
+ * @description Adds an organization member to this group. The user must be a member of the organization.
+ */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ userId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request - User is not a member of the organization */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found - User does not exist */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict - User is already a member of the group */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /**
+ * Remove a user from this organization group
+ * @description Removes a user from this organization group. The user remains a member of the organization.
+ */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "group-id": string;
+ userId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found - User does not exist */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/identity-providers": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /** Returns all identity providers associated with the organization */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["IdentityProviderRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /**
+ * Adds the identity provider with the specified id to the organization
+ * @description Adds, or associates, an existing identity provider with the organization. If no identity provider is found, or if it is already associated with the organization, an error response is returned
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /** @description Payload should contain only id or alias of the identity provider to be associated with the organization (id or alias with or without quotes). Surrounding whitespace characters will be trimmed. */
+ requestBody: {
+ content: {
+ "application/json": string;
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/identity-providers/{alias}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Returns the identity provider associated with the organization that has the specified alias
+ * @description Searches for an identity provider with the given alias. If one is found and is associated with the organization, it is returned. Otherwise, an error response with status NOT_FOUND is returned
+ */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["IdentityProviderRepresentation"];
+ };
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ /**
+ * Removes the identity provider with the specified alias from the organization
+ * @description Breaks the association between the identity provider and the organization. The provider itself is not deleted. If no provider is found, or if it is not currently associated with the org, an error response is returned
+ */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/identity-providers/{alias}/groups": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Returns organization groups for the identity provider
+ * @description Returns organization groups that can be used in identity provider mappers. Only returns groups if the identity provider is associated with the organization.
+ */
+ get: {
+ parameters: {
+ query?: {
+ /** @description If true, return brief representation; otherwise return full representation */
+ briefRepresentation?: boolean;
+ /** @description If true, perform exact match on the search parameter */
+ exact?: boolean;
+ /** @description The position of the first result (pagination offset) */
+ first?: number;
+ /** @description The maximum number of results to return */
+ max?: number;
+ /** @description A query to search for group attributes, in the format 'key1:value1 key2:value2' */
+ q?: string;
+ /** @description A string to search for in group names */
+ search?: string;
+ /** @description If true, include subgroups count in the response */
+ subGroupsCount?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ /** @description The alias of the identity provider */
+ alias: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"][];
+ };
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/invitations": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get invitations for the organization */
+ get: {
+ parameters: {
+ query?: {
+ email?: string;
+ first?: number;
+ firstName?: string;
+ lastName?: string;
+ max?: number;
+ search?: string;
+ status?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description Success */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["OrganizationInvitationRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/invitations/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /** Get invitation by ID */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description Success */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["OrganizationInvitationRepresentation"];
+ };
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ /** Delete an invitation */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/invitations/{id}/resend": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Resend an invitation */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/members": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /** Returns a paginated list of organization members filtered according to the specified parameters */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Boolean which defines whether the param 'search' must match exactly or not */
+ exact?: boolean;
+ /** @description The position of the first result to be processed (pagination offset) */
+ first?: number;
+ /** @description The maximum number of results to be returned. Defaults to 10 */
+ max?: number;
+ /** @description The membership type */
+ membershipType?: string;
+ /** @description A String representing either a member's username, e-mail, first name, or last name. */
+ search?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["MemberRepresentation"][];
+ };
+ };
+ };
+ };
+ put?: never;
+ /**
+ * Adds the user with the specified id as a member of the organization
+ * @description Adds, or associates, an existing user with the organization. If no user is found, or if it is already associated with the organization, an error response is returned
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /** @description Payload should contain only id of the user to be added to the organization (UUID with or without quotes). Surrounding whitespace characters will be trimmed. */
+ requestBody: {
+ content: {
+ "application/json": string;
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/members/count": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /** Returns number of members in the organization. */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": number;
+ };
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/members/invite-existing-user": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Invites an existing user to the organization, using the specified user id */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/x-www-form-urlencoded": {
+ id?: string;
+ };
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/members/invite-user": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Invites an existing user or sends a registration link to a new user, based on the provided e-mail address.
+ * @description If the user with the given e-mail address exists, it sends an invitation link, otherwise it sends a registration link.
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/x-www-form-urlencoded": {
+ email?: string;
+ firstName?: string;
+ lastName?: string;
+ };
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/members/{member-id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Returns the member of the organization with the specified id
+ * @description Searches for auser with the given id. If one is found, and is currently a member of the organization, returns it. Otherwise,an error response with status NOT_FOUND is returned
+ */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "member-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["MemberRepresentation"];
+ };
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ /**
+ * Removes the user with the specified id from the organization
+ * @description Breaks the association between the user and organization. The user itself is deleted in case the membership is managed, otherwise the user is not deleted. If no user is found, or if they are not a member of the organization, an error response is returned
+ */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "member-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/members/{member-id}/groups": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Returns the organization group memberships for a member with the specified id
+ * @description Searches for auser with the given id. If one is found, and is currently a member of the organization, returns the groups from the organizationwhere the user is member of. Otherwise, an error response with status NOT_FOUND is returned
+ */
+ get: {
+ parameters: {
+ query?: {
+ briefRepresentation?: boolean;
+ first?: number;
+ max?: number;
+ search?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "member-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GroupRepresentation"][];
+ };
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/organizations/{org-id}/members/{member-id}/organizations": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ };
+ cookie?: never;
+ };
+ /** Returns the organizations associated with the user that has the specified id */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return the full representation. Otherwise, only the basic fields are returned. */
+ briefRepresentation?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "org-id": string;
+ "member-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["OrganizationRepresentation"][];
+ };
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/partial-export": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Partial export of existing realm into a JSON file. */
+ post: {
+ parameters: {
+ query?: {
+ exportClients?: boolean;
+ exportGroupsAndRoles?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RealmRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/partialImport": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Partial import from a JSON file to an existing realm. */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": string;
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": Record;
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/push-revocation": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Push the realm's revocation policy to any client that has an admin url associated with it. */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["GlobalRequestResult"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get all roles for the realm or client */
+ get: {
+ parameters: {
+ query?: {
+ briefRepresentation?: boolean;
+ first?: number;
+ max?: number;
+ search?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Create a new role for the realm or client */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles-by-id/{role-id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get a specific role's representation */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of role */
+ "role-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Update the role */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of role */
+ "role-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete the role */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description id of role */
+ "role-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles-by-id/{role-id}/composites": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get role's children Returns a set of role's children provided the role is a composite. */
+ get: {
+ parameters: {
+ query?: {
+ first?: number;
+ max?: number;
+ search?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "role-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Make the role a composite role by associating some child roles */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "role-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Remove a set of roles from the role's composite */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description Role id */
+ "role-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles-by-id/{role-id}/composites/clients/{clientUuid}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get client-level roles for the client that are in the role's composite */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ clientUuid: string;
+ "role-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles-by-id/{role-id}/composites/realm": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level roles that are in the role's composite */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "role-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles-by-id/{role-id}/management/permissions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Return object stating whether role Authorization permissions have been initialized or not and a reference */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "role-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Return object stating whether role Authorization permissions have been initialized or not and a reference */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "role-id": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles/{role-name}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get a role by name */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Update a role by name */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ /** Delete a role by name */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles/{role-name}/composites": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get composites of the role */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Add a composite to the role */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Remove roles from the role's composite */
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles/{role-name}/composites/clients/{targetClientUuid}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get client-level roles for the client that are in the role's composite */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ targetClientUuid: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles/{role-name}/composites/realm": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Get realm-level roles of the role's composite */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description role's name (not id!) */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["RoleRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles/{role-name}/groups": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Returns a stream of groups that have the specified role name */
+ get: {
+ parameters: {
+ query?: {
+ /** @description if false, return a full representation of the {@code GroupRepresentation} objects. */
+ briefRepresentation?: boolean;
+ /** @description first result to return. Ignored if negative or {@code null}. */
+ first?: number;
+ /** @description maximum number of results to return. Ignored if negative or {@code null}. */
+ max?: number;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description the role name. */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["UserRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles/{role-name}/management/permissions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Return object stating whether role Authorization permissions have been initialized or not and a reference */
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ /** Return object stating whether role Authorization permissions have been initialized or not and a reference */
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/roles/{role-name}/users": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /** Returns a stream of users that have the specified role name. */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Boolean which defines whether brief representations are returned (default: false) */
+ briefRepresentation?: boolean;
+ /** @description first result to return. Ignored if negative or {@code null}. */
+ first?: number;
+ /** @description maximum number of results to return. Ignored if negative or {@code null}. */
+ max?: number;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ /** @description the role name. */
+ "role-name": string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["UserRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/sessions/{session}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ post?: never;
+ /**
+ * Remove a specific user session.
+ * @description Any client that has an admin url will also be told to invalidate this particular session.
+ */
+ delete: {
+ parameters: {
+ query?: {
+ isOffline?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ session: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Not Found */
+ 404: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/testSMTPConnection": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Test SMTP connection with current logged in user
+ * @deprecated
+ */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": {
+ [key: string]: string;
+ };
+ "application/x-www-form-urlencoded": {
+ config?: string;
+ };
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/users": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Get users Returns a stream of users, filtered according to query parameters.
+ * @description Returns a stream of users. Note that the 'credentials' field in the returned UserRepresentation objects is typically not populated for performance reasons. If specific credential metadata is required, use the dedicated 'GET /admin/realms/{realm}/users/{user-id}/credentials' endpoint.
+ */
+ get: {
+ parameters: {
+ query?: {
+ /** @description Boolean which defines whether brief representations are returned (default: false) */
+ briefRepresentation?: boolean;
+ /** @description Only return users created after (inclusive) the given date, in ISO-8601 format (yyyy-MM-dd) or epoch milliseconds */
+ createdAfter?: string;
+ /** @description Only return users created before (inclusive) the given date, in ISO-8601 format (yyyy-MM-dd) or epoch milliseconds */
+ createdBefore?: string;
+ /** @description A String contained in email, or the complete email, if param "exact" is true */
+ email?: string;
+ /** @description whether the email has been verified */
+ emailVerified?: boolean;
+ /** @description Boolean representing if user is enabled or not */
+ enabled?: boolean;
+ /** @description Boolean which defines whether the params "last", "first", "email" and "username" must match exactly */
+ exact?: boolean;
+ /** @description Pagination offset */
+ first?: number;
+ /** @description A String contained in firstName, or the complete firstName, if param "exact" is true */
+ firstName?: string;
+ /** @description The alias of an Identity Provider linked to the user */
+ idpAlias?: string;
+ /** @description The userId at an Identity Provider linked to the user */
+ idpUserId?: string;
+ /** @description A String contained in lastName, or the complete lastName, if param "exact" is true */
+ lastName?: string;
+ /** @description Maximum results size (defaults to 100) */
+ max?: number;
+ /** @description A query to search for custom attributes, in the format 'key1:value2 key2:value2' */
+ q?: string;
+ /** @description A String contained in username, first or last name, or email. Default search behavior is prefix-based (e.g., foo or foo*). Use *foo* for infix search and "foo" for exact search. */
+ search?: string;
+ /** @description A String contained in username, or the complete username, if param "exact" is true */
+ username?: string;
+ };
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["UserRepresentation"][];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put?: never;
+ /** Create a new user Username must be unique. */
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["UserRepresentation"];
+ };
+ };
+ responses: {
+ /** @description Created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Bad Request */
+ 400: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Conflict */
+ 409: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Internal Server Error */
+ 500: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/users-management-permissions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["ManagementPermissionReference"];
+ };
+ };
+ /** @description Forbidden */
+ 403: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/admin/realms/{realm}/users/count": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description realm name (not id!) */
+ realm: string;
+ };
+ cookie?: never;
+ };
+ /**
+ * Returns the number of users that match the given criteria.
+ * @description It can be called in three different ways. 1. Don’t specify any criteria and pass {@code null}. The number of all users within that realm will be returned.
2. If {@code search} is specified other criteria such as {@code last} will be ignored even though you set them. The {@code search} string will be matched against the first and last name, the username and the email of a user.
+ SCIM provisioning is configured per organization. Launch this wizard
+ from an organization context — the upstream IdP needs to push users
+ and groups into a specific org.
+
+
+ Choose an organization
+
+
+ );
+}
diff --git a/apps/wizard-v2/src/routes/_authenticated.wizard.$providerId.index.tsx b/apps/wizard-v2/src/routes/_authenticated.wizard.$providerId.index.tsx
new file mode 100644
index 00000000..b7812eed
--- /dev/null
+++ b/apps/wizard-v2/src/routes/_authenticated.wizard.$providerId.index.tsx
@@ -0,0 +1,85 @@
+import { createFileRoute, useNavigate } from "@tanstack/react-router";
+import { z } from "zod";
+import { allProviders, type Protocol } from "@/data/providers";
+import { useProviderLogo } from "@/hooks/useProviderLogo";
+
+const searchSchema = z.object({
+ org_id: z.string().optional(),
+});
+
+export const Route = createFileRoute("/_authenticated/wizard/$providerId/")({
+ validateSearch: searchSchema,
+ component: ProtocolPicker,
+});
+
+const protocolLabels: Record = {
+ saml: {
+ label: "SAML",
+ description: "Security Assertion Markup Language — XML-based federation standard.",
+ },
+ oidc: {
+ label: "OIDC",
+ description: "OpenID Connect — OAuth 2.0 identity layer, JSON-based, commonly used for modern apps.",
+ },
+ ldap: {
+ label: "LDAP",
+ description: "Lightweight Directory Access Protocol — directory sync and authentication.",
+ },
+ oauth: {
+ label: "OAuth / Social Login",
+ description: "OAuth 2.0 social identity provider — simplified setup for common platforms.",
+ },
+ scim: {
+ label: "SCIM Provisioning",
+ description: "SCIM 2.0 inbound user and group provisioning — push directory changes from your IdP into Keycloak.",
+ },
+};
+
+function ProtocolPicker() {
+ const { providerId } = Route.useParams();
+ const { org_id: orgId } = Route.useSearch();
+ const navigate = useNavigate();
+ const provider = allProviders.find((p) => p.id === providerId)!;
+ const logo = useProviderLogo(provider.logo);
+
+ return (
+