mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 14:37:34 +00:00
chore: 🚀 Migrate monorepo from Yarn to pnpm + Turbo integration + Configuration cleanup (#10165)
This PR modernizes the ZITADEL monorepo build system by migrating from Yarn to pnpm, introducing Turbo for improved build orchestration, and cleaning up configuration inconsistencies across all apps and packages. ### 🎯 Key Improvements #### 📦 **Package Manager Migration (Yarn → pnpm)** - **Performance**: Faster installs with pnpm's efficient symlink-based node_modules structure - **Disk space**: Significant reduction in disk usage through content-addressable storage - **Lockfile**: More reliable dependency resolution with pnpm-lock.yaml - **Workspace support**: Better monorepo dependency management #### ⚡ **Turbo Integration** - **Build orchestration**: Dependency-aware task execution across the monorepo - **Intelligent caching**: Dramatically faster builds on CI/CD and local development - **Parallel execution**: Optimal task scheduling based on dependency graphs - **Vercel optimization**: Enhanced build performance and caching on Vercel deployments #### 🧹 **Configuration Cleanup & Unification** - **Removed config packages**: Eliminated `@zitadel/*-config` packages and inlined configurations - **Simplified dependencies**: Reduced complexity in package.json files across all apps - **Consistent tooling**: Unified prettier, ESLint, and TypeScript configurations - **Standalone support**: Improved prepare-standalone.js script for subtree deployments ### 📋 Detailed Changes #### **🔧 Build System & Dependencies** - ✅ Updated all package.json scripts to use `pnpm` instead of `yarn` - ✅ Replaced `yarn.lock` with pnpm-lock.yaml and regenerated dependencies - ✅ Added Turbo configuration (turbo.json) to root and individual packages - ✅ Configured proper dependency chains: `@zitadel/proto#generate` → `@zitadel/client#build` → `console#build` - ✅ Added missing `@bufbuild/protobuf` dependency to console app for TypeScript compilation #### **🚀 CI/CD & Workflows** - ✅ Updated all GitHub Actions workflows to use `pnpm/action-setup@v4` - ✅ Migrated build processes to use Turbo with directory-based filters (`--filter=./console`) - ✅ **New**: Added `docs.yml` workflow for building documentation locally (helpful for contributors without Vercel access) - ✅ Fixed dependency resolution issues in lint workflows - ✅ Ensured proto generation always runs before builds and linting #### **📚 Documentation & Proto Generation** - ✅ **Robust plugin management**: Enhanced plugin-download.sh with retry logic and error handling - ✅ **Vercel compatibility**: Fixed protoc-gen-connect-openapi plugin availability in Vercel builds - ✅ **API docs generation**: Resolved Docusaurus build errors with OpenAPI plugin configuration - ✅ **Type safety**: Improved TypeScript type extraction patterns in Angular components #### **🛠️ Developer Experience** - ✅ Updated all README files to reference pnpm commands - ✅ Improved Makefile targets to use Turbo for consistent builds - ✅ Enhanced standalone build process for login app subtree deployments - ✅ Added debug utilities for troubleshooting build issues #### **🗂️ File Structure & Cleanup** - ✅ Removed obsolete configuration packages and their references - ✅ Cleaned up Docker files to remove non-existent package copies - ✅ Updated workspace references and import paths - ✅ Streamlined turbo.json configurations across all packages ### 🎉 Benefits 1. **⚡ Faster Builds**: Turbo's caching and parallel execution significantly reduce build times 2. **🔄 Better Caching**: Improved cache hits on Vercel and CI/CD environments 3. **🛠️ Simplified Maintenance**: Unified tooling and configuration management 4. **📈 Developer Productivity**: Faster local development with optimized dependency resolution 5. **🚀 Enhanced CI/CD**: More reliable and faster automated builds and deployments 6. **📖 Better Documentation**: Comprehensive build documentation and troubleshooting guides ### 🧪 Testing - ✅ All apps build successfully with new pnpm + Turbo setup - ✅ Proto generation works correctly across console, login, and docs - ✅ GitHub Actions workflows pass with new configuration - ✅ Vercel deployments work with enhanced plugin management - ✅ Local development workflow verified and documented This migration sets a solid foundation for future development while maintaining backward compatibility and improving the overall developer experience. --------- Co-authored-by: Elio Bischof <elio@zitadel.com>
This commit is contained in:
3
docs/.gitignore
vendored
3
docs/.gitignore
vendored
@@ -24,7 +24,6 @@ docs/apis/resources
|
||||
package-lock.json
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
.vercel
|
||||
/protoc-gen-connect-openapi*
|
||||
|
@@ -2,45 +2,84 @@
|
||||
|
||||
This website is built using [Docusaurus 2](https://v2.docusaurus.io/), a modern static website generator.
|
||||
|
||||
The documentation is part of the ZITADEL monorepo and uses **pnpm** and **Turbo** for development and build processes.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# From the repository root
|
||||
pnpm install
|
||||
|
||||
# Start development server (with Turbo)
|
||||
pnpm turbo dev --filter=zitadel-docs
|
||||
|
||||
# Or start directly from docs directory
|
||||
cd docs && pnpm start
|
||||
```
|
||||
|
||||
The site will be available at http://localhost:3000
|
||||
|
||||
## Available Scripts
|
||||
|
||||
All scripts can be run from the repository root using Turbo:
|
||||
|
||||
```bash
|
||||
# Development server with live reload
|
||||
pnpm turbo dev --filter=zitadel-docs
|
||||
|
||||
# Build for production
|
||||
pnpm turbo build --filter=zitadel-docs
|
||||
|
||||
# Generate API documentation and configuration docs
|
||||
pnpm turbo generate --filter=zitadel-docs
|
||||
|
||||
# Lint and fix code
|
||||
pnpm turbo lint --filter=zitadel-docs
|
||||
|
||||
# Serve production build locally
|
||||
cd docs && pnpm serve
|
||||
```
|
||||
|
||||
## Add new Sites to existing Topics
|
||||
|
||||
To add a new site to the already existing structure simply save the `md` file into the corresponding folder and append the sites id int the file `sidebars.js`.
|
||||
|
||||
If you are introducing new APIs (gRPC), you need to add a new entry to `docusaurus.config.js` under the `plugins` section.
|
||||
|
||||
## Installation
|
||||
## Build Process
|
||||
|
||||
Install dependencies with
|
||||
|
||||
```
|
||||
yarn install
|
||||
```
|
||||
|
||||
then run
|
||||
|
||||
```
|
||||
yarn generate
|
||||
```
|
||||
The documentation build process automatically:
|
||||
|
||||
1. **Downloads required protoc plugins** - Ensures `protoc-gen-connect-openapi` is available
|
||||
2. **Generates gRPC documentation** - Creates API docs from proto files
|
||||
3. **Generates API documentation** - Creates OpenAPI specification docs
|
||||
4. **Copies configuration files** - Includes configuration examples
|
||||
5. **Builds the Docusaurus site** - Generates the final static site
|
||||
|
||||
## Local Development
|
||||
|
||||
Start a local development server with
|
||||
### Standard Development
|
||||
|
||||
```
|
||||
yarn start
|
||||
```bash
|
||||
# Install dependencies
|
||||
pnpm install
|
||||
|
||||
# Start development server
|
||||
pnpm start
|
||||
```
|
||||
|
||||
When working on the API docs, run a local development server with
|
||||
### API Documentation Development
|
||||
|
||||
```
|
||||
yarn start:api
|
||||
When working on the API docs, run a local development server with:
|
||||
|
||||
```bash
|
||||
pnpm start:api
|
||||
```
|
||||
|
||||
## Container Image
|
||||
|
||||
If you just want to start docusaurus locally without installing node you can fallback to our container image.
|
||||
Execute the following commands from the repository root to build and start a local version of ZITADEL
|
||||
Execute the following commands from the repository root to build and start a local version of ZITADEL
|
||||
|
||||
```shell
|
||||
docker build -f docs/Dockerfile . -t zitadel-docs
|
||||
|
@@ -264,7 +264,7 @@ module.exports = {
|
||||
outputDir: "docs/apis/resources/auth",
|
||||
sidebarOptions: {
|
||||
groupPathsBy: "tag",
|
||||
categoryLinkSource: "tag",
|
||||
categoryLinkSource: "auto",
|
||||
},
|
||||
},
|
||||
mgmt: {
|
||||
@@ -272,7 +272,7 @@ module.exports = {
|
||||
outputDir: "docs/apis/resources/mgmt",
|
||||
sidebarOptions: {
|
||||
groupPathsBy: "tag",
|
||||
categoryLinkSource: "tag",
|
||||
categoryLinkSource: "auto",
|
||||
},
|
||||
},
|
||||
admin: {
|
||||
@@ -280,7 +280,7 @@ module.exports = {
|
||||
outputDir: "docs/apis/resources/admin",
|
||||
sidebarOptions: {
|
||||
groupPathsBy: "tag",
|
||||
categoryLinkSource: "tag",
|
||||
categoryLinkSource: "auto",
|
||||
},
|
||||
},
|
||||
system: {
|
||||
@@ -288,7 +288,7 @@ module.exports = {
|
||||
outputDir: "docs/apis/resources/system",
|
||||
sidebarOptions: {
|
||||
groupPathsBy: "tag",
|
||||
categoryLinkSource: "tag",
|
||||
categoryLinkSource: "auto",
|
||||
},
|
||||
},
|
||||
user_v2: {
|
||||
|
@@ -4,20 +4,23 @@
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
"dev": "docusaurus start",
|
||||
"start": "docusaurus start",
|
||||
"start:api": "yarn run generate && docusaurus start",
|
||||
"build": "yarn run generate && docusaurus build",
|
||||
"start:api": "pnpm run generate && docusaurus start",
|
||||
"build": "pnpm run ensure-plugins && pnpm run generate && docusaurus build",
|
||||
"swizzle": "docusaurus swizzle",
|
||||
"deploy": "docusaurus deploy",
|
||||
"clear": "docusaurus clear",
|
||||
"serve": "docusaurus serve",
|
||||
"write-translations": "docusaurus write-translations",
|
||||
"write-heading-ids": "docusaurus write-heading-ids",
|
||||
"generate": "yarn run generate:grpc && yarn run generate:apidocs && yarn run generate:configdocs",
|
||||
"generate:grpc": "buf generate ../proto",
|
||||
"ensure-plugins": "if [ ! -f \"protoc-gen-connect-openapi/protoc-gen-connect-openapi\" ]; then sh ./plugin-download.sh; fi",
|
||||
"debug-plugins": "echo \"PWD: $(pwd)\" && echo \"Plugin file exists: $(test -f protoc-gen-connect-openapi/protoc-gen-connect-openapi && echo 'yes' || echo 'no')\" && echo \"Plugin executable: $(test -x protoc-gen-connect-openapi/protoc-gen-connect-openapi && echo 'yes' || echo 'no')\" && ls -la protoc-gen-connect-openapi/ || echo 'Plugin directory not found'",
|
||||
"generate": "pnpm run generate:grpc && pnpm run generate:apidocs && pnpm run generate:configdocs",
|
||||
"generate:grpc": "pnpm run ensure-plugins && buf generate ../proto",
|
||||
"generate:apidocs": "docusaurus gen-api-docs all",
|
||||
"generate:configdocs": "cp -r ../cmd/defaults.yaml ./docs/self-hosting/manage/configure/ && cp -r ../cmd/setup/steps.yaml ./docs/self-hosting/manage/configure/",
|
||||
"generate:re-gen": "yarn generate:clean-all && yarn generate",
|
||||
"generate:re-gen": "yarn generate:clean-all && pnpm generate",
|
||||
"generate:clean-all": "docusaurus clean-api-docs all",
|
||||
"postinstall": "sh ./plugin-download.sh"
|
||||
},
|
||||
@@ -64,5 +67,5 @@
|
||||
"@docusaurus/types": "^3.8.1",
|
||||
"tailwindcss": "^3.2.4"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
||||
"packageManager": "pnpm@9.1.2+sha256.19c17528f9ca20bd442e4ca42f00f1b9808a9cb419383cd04ba32ef19322aba7"
|
||||
}
|
||||
|
@@ -1,8 +1,28 @@
|
||||
echo $(uname -m)
|
||||
mkdir protoc-gen-connect-openapi
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "Downloading protoc-gen-connect-openapi plugin..."
|
||||
echo "Architecture: $(uname -m)"
|
||||
echo "OS: $(uname)"
|
||||
|
||||
# Create directory if it doesn't exist
|
||||
mkdir -p protoc-gen-connect-openapi
|
||||
cd ./protoc-gen-connect-openapi/
|
||||
|
||||
# Skip download if plugin already exists and is executable
|
||||
if [ -f "protoc-gen-connect-openapi" ] && [ -x "protoc-gen-connect-openapi" ]; then
|
||||
echo "Plugin already exists and is executable"
|
||||
./protoc-gen-connect-openapi --version || echo "Plugin version check failed, but file exists"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Clean up any partial downloads
|
||||
rm -f protoc-gen-connect-openapi.tar.gz protoc-gen-connect-openapi
|
||||
|
||||
# Determine download URL based on OS and architecture
|
||||
if [ "$(uname)" = "Darwin" ]; then
|
||||
curl -L -o protoc-gen-connect-openapi.tar.gz https://github.com/sudorandom/protoc-gen-connect-openapi/releases/download/v0.18.0/protoc-gen-connect-openapi_0.18.0_darwin_all.tar.gz
|
||||
echo "Downloading for Darwin..."
|
||||
URL="https://github.com/sudorandom/protoc-gen-connect-openapi/releases/download/v0.18.0/protoc-gen-connect-openapi_0.18.0_darwin_all.tar.gz"
|
||||
else
|
||||
ARCH=$(uname -m)
|
||||
case $ARCH in
|
||||
@@ -17,6 +37,34 @@ else
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
curl -L -o protoc-gen-connect-openapi.tar.gz https://github.com/sudorandom/protoc-gen-connect-openapi/releases/download/v0.18.0/protoc-gen-connect-openapi_0.18.0_linux_${ARCH}.tar.gz
|
||||
echo "Downloading for Linux ${ARCH}..."
|
||||
URL="https://github.com/sudorandom/protoc-gen-connect-openapi/releases/download/v0.18.0/protoc-gen-connect-openapi_0.18.0_linux_${ARCH}.tar.gz"
|
||||
fi
|
||||
tar -xvf protoc-gen-connect-openapi.tar.gz
|
||||
|
||||
# Download with retries
|
||||
echo "Downloading from: $URL"
|
||||
curl -L -o protoc-gen-connect-openapi.tar.gz "$URL" || {
|
||||
echo "Download failed, trying with different curl options..."
|
||||
curl -L --fail --retry 3 --retry-delay 1 -o protoc-gen-connect-openapi.tar.gz "$URL"
|
||||
}
|
||||
|
||||
echo "Extracting plugin..."
|
||||
tar -xzf protoc-gen-connect-openapi.tar.gz
|
||||
|
||||
# Verify extraction
|
||||
if [ ! -f "protoc-gen-connect-openapi" ]; then
|
||||
echo "ERROR: Plugin binary not found after extraction"
|
||||
ls -la
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Make sure the plugin is executable
|
||||
chmod +x protoc-gen-connect-openapi
|
||||
|
||||
# Verify plugin works
|
||||
echo "Plugin installed successfully"
|
||||
ls -la protoc-gen-connect-openapi
|
||||
./protoc-gen-connect-openapi --version || echo "Plugin version check failed, but installation completed"
|
||||
|
||||
# Clean up
|
||||
rm -f protoc-gen-connect-openapi.tar.gz
|
45
docs/turbo.json
Normal file
45
docs/turbo.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"$schema": "https://turbo.build/schema.json",
|
||||
"extends": ["//"],
|
||||
"tasks": {
|
||||
"generate": {
|
||||
"dependsOn": ["^generate"],
|
||||
"outputs": ["docs/api/**", "docs/self-hosting/manage/configure/*.yaml"],
|
||||
"cache": true
|
||||
},
|
||||
"generate:grpc": {
|
||||
"dependsOn": ["^generate"],
|
||||
"outputs": ["docs/api/**"],
|
||||
"cache": true
|
||||
},
|
||||
"generate:apidocs": {
|
||||
"dependsOn": ["generate:grpc"],
|
||||
"outputs": ["docs/api/**"],
|
||||
"cache": true
|
||||
},
|
||||
"generate:configdocs": {
|
||||
"outputs": ["docs/self-hosting/manage/configure/*.yaml"],
|
||||
"cache": true
|
||||
},
|
||||
"build": {
|
||||
"dependsOn": ["generate"],
|
||||
"outputs": ["build/**"],
|
||||
"cache": true
|
||||
},
|
||||
"dev": {
|
||||
"dependsOn": ["generate"],
|
||||
"cache": false,
|
||||
"persistent": true
|
||||
},
|
||||
"start": {
|
||||
"dependsOn": ["generate"],
|
||||
"cache": false,
|
||||
"persistent": true
|
||||
},
|
||||
"start:api": {
|
||||
"dependsOn": ["generate"],
|
||||
"cache": false,
|
||||
"persistent": true
|
||||
}
|
||||
}
|
||||
}
|
283
docs/vercel.json
283
docs/vercel.json
@@ -1,64 +1,223 @@
|
||||
{
|
||||
"github": {
|
||||
"enabled": true
|
||||
},
|
||||
"cleanUrls": true,
|
||||
"rewrites": [
|
||||
{
|
||||
"source": "/docs/proxy/js/script.js",
|
||||
"destination": "https://plausible.io/js/script.tagged-events.pageview-props.outbound-links.js"
|
||||
},
|
||||
{
|
||||
"source": "/docs/proxy/api/event",
|
||||
"destination": "https://plausible.io/api/event"
|
||||
},
|
||||
{
|
||||
"source": "/docs/:match*",
|
||||
"destination": "/:match*"
|
||||
}
|
||||
],
|
||||
"redirects": [
|
||||
{ "source": "/", "destination": "/docs" },
|
||||
{ "source": "/docs/category/apis/:slug*", "destination": "/docs/apis/:slug*", "permanent": true },
|
||||
{ "source": "/docs/apis/mgmt/:slug*", "destination": "/docs/apis/resources/mgmt/:slug*", "permanent": true },
|
||||
{ "source": "/docs/apis/auth/:slug*", "destination": "/docs/apis/resources/auth/:slug*", "permanent": true },
|
||||
{ "source": "/docs/apis/system/:slug*", "destination": "/docs/apis/resources/system/:slug*", "permanent": true },
|
||||
{ "source": "/docs/apis/admin/:slug*", "destination": "/docs/apis/resources/admin/:slug*", "permanent": true },
|
||||
{ "source": "/docs/apis/actionsv2/introduction", "destination": "/docs/apis/actions/v2/usage", "permanent": true },
|
||||
{ "source": "/docs/apis/actionsv2/execution-local", "destination": "/docs/apis/actions/v2/testing-locally", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/human-users", "destination": "/docs/guides/integrate/login", "permanent": true },
|
||||
{ "source": "/docs/guides/solution-scenarios/device-authorization", "destination": "/docs/guides/integrate/login/oidc/device-authorization", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/oauth-recommended-flows", "destination": "/docs/guides/integrate/login/oidc/oauth-recommended-flows", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login-users", "destination": "/docs/guides/integrate/login/oidc/login-users", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/logout", "destination": "/docs/guides/integrate/login/oidc/logout", "permanent": true },
|
||||
{ "source": "/docs/guides/solution-scenarios/onboarding", "destination": "/docs/guides/integrate/onboarding", "permanent": true },
|
||||
{ "source": "/docs/guides/solution-scenarios/onboarding/b2b", "destination": "/docs/guides/integrate/onboarding/b2b", "permanent": true },
|
||||
{ "source": "/docs/guides/solution-scenarios/onboarding/end-users", "destination": "/docs/guides/integrate/onboarding/end-users", "permanent": true },
|
||||
{ "source": "/docs/concepts/structure/jwt_idp", "destination": "/docs/guides/integrate/identity-providers/jwt-idp", "permanent": true },
|
||||
{ "source": "/docs/guides/solution-scenarios/onboarding/end-users", "destination": "/docs/guides/integrate/onboarding/end-users", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/serviceusers", "destination": "/docs/guides/integrate/service-users/authenticate-service-users", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/private-key-jwt", "destination": "/docs/guides/integrate/service-users/private-key-jwt", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/client-credentials", "destination": "/docs/guides/integrate/service-users/client-credentials", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/pat", "destination": "/docs/guides/integrate/service-users/private-access-token", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/access-zitadel-apis", "destination": "/docs/guides/integrate/zitadel-apis/access-zitadel-apis", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/access-zitadel-system-api", "destination": "/docs/guides/integrate/zitadel-apis/access-zitadel-system-api", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/event-api", "destination": "/docs/guides/integrate/zitadel-apis/event-api", "permanent": true },
|
||||
{ "source": "/docs/examples/call-zitadel-api/go", "destination": "/docs/guides/integrate/zitadel-apis/example-zitadel-api-with-go", "permanent": true },
|
||||
{ "source": "/docs/examples/call-zitadel-api/dot-net", "destination": "/docs/guides/integrate/zitadel-apis/example-zitadel-api-with-dot-net", "permanent": true },
|
||||
{ "source": "/docs/guides/manage/terraform/basics", "destination": "/docs/guides/manage/terraform-provider", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/identity-providers", "destination": "/docs/guides/integrate/identity-providers/introduction", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#centralized-authentication-endpoint", "destination": "/docs/guides/integrate/login/hosted-login#centralized-authentication-endpoint", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#security-and-compliance", "destination": "/docs/guides/integrate/login/hosted-login#security-and-compliance", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#developer-friendly-integration", "destination": "/docs/guides/integrate/login/hosted-login#developer-friendly-integration", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#key-features-of-the-hosted-login", "destination": "/docs/guides/integrate/login/hosted-login#key-features-of-the-hosted-login", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#flexible-usernames", "destination": "/docs/guides/integrate/login/hosted-login#flexible-usernames", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#support-for-multiple-authentication-methods", "destination": "/docs/guides/integrate/login/hosted-login#support-for-multiple-authentication-methods", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#enterprise-single-sign-on", "destination": "/docs/guides/integrate/login/hosted-login#enterprise-single-sign-on", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#multi-tenancy-authentication", "destination": "/docs/guides/integrate/login/hosted-login#multi-tenancy-authentication", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#customization-options", "destination": "/docs/guides/integrate/login/hosted-login#customization-options", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#fast-account-switching", "destination": "/docs/guides/integrate/login/hosted-login#fast-account-switching", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#self-service-for-users", "destination": "/docs/guides/integrate/login/hosted-login#self-service-for-users", "permanent": true },
|
||||
{ "source": "/docs/guides/integrate/login/login-users#password-reset", "destination": "/docs/guides/integrate/login/hosted-login#password-reset", "permanent": true }
|
||||
]
|
||||
"github": {
|
||||
"enabled": true
|
||||
},
|
||||
"cleanUrls": true,
|
||||
"rewrites": [
|
||||
{
|
||||
"source": "/docs/proxy/js/script.js",
|
||||
"destination": "https://plausible.io/js/script.tagged-events.pageview-props.outbound-links.js"
|
||||
},
|
||||
{
|
||||
"source": "/docs/proxy/api/event",
|
||||
"destination": "https://plausible.io/api/event"
|
||||
},
|
||||
{
|
||||
"source": "/docs/:match*",
|
||||
"destination": "/:match*"
|
||||
}
|
||||
],
|
||||
"redirects": [
|
||||
{ "source": "/", "destination": "/docs" },
|
||||
{
|
||||
"source": "/docs/category/apis/:slug*",
|
||||
"destination": "/docs/apis/:slug*",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/apis/mgmt/:slug*",
|
||||
"destination": "/docs/apis/resources/mgmt/:slug*",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/apis/auth/:slug*",
|
||||
"destination": "/docs/apis/resources/auth/:slug*",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/apis/system/:slug*",
|
||||
"destination": "/docs/apis/resources/system/:slug*",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/apis/admin/:slug*",
|
||||
"destination": "/docs/apis/resources/admin/:slug*",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/apis/actionsv2/introduction",
|
||||
"destination": "/docs/apis/actions/v2/usage",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/apis/actionsv2/execution-local",
|
||||
"destination": "/docs/apis/actions/v2/testing-locally",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/human-users",
|
||||
"destination": "/docs/guides/integrate/login",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/solution-scenarios/device-authorization",
|
||||
"destination": "/docs/guides/integrate/login/oidc/device-authorization",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/oauth-recommended-flows",
|
||||
"destination": "/docs/guides/integrate/login/oidc/oauth-recommended-flows",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login-users",
|
||||
"destination": "/docs/guides/integrate/login/oidc/login-users",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/logout",
|
||||
"destination": "/docs/guides/integrate/login/oidc/logout",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/solution-scenarios/onboarding",
|
||||
"destination": "/docs/guides/integrate/onboarding",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/solution-scenarios/onboarding/b2b",
|
||||
"destination": "/docs/guides/integrate/onboarding/b2b",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/solution-scenarios/onboarding/end-users",
|
||||
"destination": "/docs/guides/integrate/onboarding/end-users",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/concepts/structure/jwt_idp",
|
||||
"destination": "/docs/guides/integrate/identity-providers/jwt-idp",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/solution-scenarios/onboarding/end-users",
|
||||
"destination": "/docs/guides/integrate/onboarding/end-users",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/serviceusers",
|
||||
"destination": "/docs/guides/integrate/service-users/authenticate-service-users",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/private-key-jwt",
|
||||
"destination": "/docs/guides/integrate/service-users/private-key-jwt",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/client-credentials",
|
||||
"destination": "/docs/guides/integrate/service-users/client-credentials",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/pat",
|
||||
"destination": "/docs/guides/integrate/service-users/private-access-token",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/access-zitadel-apis",
|
||||
"destination": "/docs/guides/integrate/zitadel-apis/access-zitadel-apis",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/access-zitadel-system-api",
|
||||
"destination": "/docs/guides/integrate/zitadel-apis/access-zitadel-system-api",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/event-api",
|
||||
"destination": "/docs/guides/integrate/zitadel-apis/event-api",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/examples/call-zitadel-api/go",
|
||||
"destination": "/docs/guides/integrate/zitadel-apis/example-zitadel-api-with-go",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/examples/call-zitadel-api/dot-net",
|
||||
"destination": "/docs/guides/integrate/zitadel-apis/example-zitadel-api-with-dot-net",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/manage/terraform/basics",
|
||||
"destination": "/docs/guides/manage/terraform-provider",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/identity-providers",
|
||||
"destination": "/docs/guides/integrate/identity-providers/introduction",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#centralized-authentication-endpoint",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#centralized-authentication-endpoint",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#security-and-compliance",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#security-and-compliance",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#developer-friendly-integration",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#developer-friendly-integration",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#key-features-of-the-hosted-login",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#key-features-of-the-hosted-login",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#flexible-usernames",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#flexible-usernames",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#support-for-multiple-authentication-methods",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#support-for-multiple-authentication-methods",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#enterprise-single-sign-on",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#enterprise-single-sign-on",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#multi-tenancy-authentication",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#multi-tenancy-authentication",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#customization-options",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#customization-options",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#fast-account-switching",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#fast-account-switching",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#self-service-for-users",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#self-service-for-users",
|
||||
"permanent": true
|
||||
},
|
||||
{
|
||||
"source": "/docs/guides/integrate/login/login-users#password-reset",
|
||||
"destination": "/docs/guides/integrate/login/hosted-login#password-reset",
|
||||
"permanent": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
15395
docs/yarn.lock
15395
docs/yarn.lock
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user