mirror of
https://github.com/MizuchiLabs/mantrae.git
synced 2025-12-16 20:05:17 -06:00
update docs
This commit is contained in:
@@ -18,7 +18,7 @@ services:
|
||||
- proxy
|
||||
restart: unless-stopped
|
||||
|
||||
mantrae-agent:
|
||||
mantrae-agent: # agent for running on other machines
|
||||
image: ghcr.io/mizuchilabs/mantrae-agent:latest
|
||||
container_name: mantrae-agent
|
||||
network_mode: host # for detecting the hostname of the machine
|
||||
@@ -26,7 +26,7 @@ services:
|
||||
- /var/run/docker.sock:/var/run/docker.sock # needed if running as container
|
||||
environment:
|
||||
- TOKEN=<token> # token from mantrae server
|
||||
- HOST=https://mantrae.example.com # where to reach mantrae server
|
||||
- HOST=https://mantrae.example.com # where to reach your mantrae server
|
||||
restart: unless-stopped
|
||||
|
||||
traefik:
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
sidebar_position: 9
|
||||
---
|
||||
|
||||
# API Reference
|
||||
|
||||
Mantrae exposes a comprehensive API for programmatic access to all configuration management features. The API is built using gRPC with the Connect protocol, providing both gRPC and HTTP/JSON interfaces.
|
||||
|
||||
## API Endpoints
|
||||
|
||||
The Mantrae API documentation is available at:
|
||||
```
|
||||
http://localhost:3000/docs
|
||||
```
|
||||
|
||||
Each service has its own endpoint under this base path.
|
||||
|
||||
## Authentication
|
||||
|
||||
All API requests require authentication. You can authenticate using:
|
||||
|
||||
1. **Session cookies**: Automatically set when logging in through the web interface
|
||||
2. **Authorization header**: Bearer token for programmatic access
|
||||
|
||||
For programmatic access, obtain an API token through the web interface or create one using the UserService API.
|
||||
|
||||
## Dynamic Configuration API
|
||||
|
||||
In addition to the management API, Mantrae provides endpoints for Traefik to consume dynamic configuration:
|
||||
|
||||
### Profile Configuration Endpoint
|
||||
|
||||
```
|
||||
GET /api/{profile-name}
|
||||
```
|
||||
|
||||
Query Parameters:
|
||||
- `token`: Profile token for authentication
|
||||
- `format`: Response format (json or yaml)
|
||||
|
||||
Headers:
|
||||
- `Accept`: Alternative way to specify format (application/json or application/x-yaml)
|
||||
|
||||
This endpoint returns the complete Traefik dynamic configuration for the specified profile.
|
||||
|
||||
Example:
|
||||
```bash
|
||||
curl "http://localhost:3000/api/production?token=PROFILE_TOKEN&format=yaml"
|
||||
```
|
||||
|
||||
214
docs/docs/faq.md
214
docs/docs/faq.md
@@ -1,114 +1,190 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# FAQ
|
||||
|
||||
## General Questions
|
||||
|
||||
### Why would I use this? Traefik already has configuration discovery.
|
||||
### Why would I use Mantrae instead of Traefik's built-in configuration discovery?
|
||||
|
||||
Yes, Traefik has amazing configuration discovery capabilities for various providers (Docker, Kubernetes, etc.). But for all those times you can't use these features (e.g. multiple machines not connected via Docker Swarm or Kubernetes) you have to use the file provider. Mantrae helps you with that and adds additional automation features like managing DNS records as well, similar to external-dns for Kubernetes.
|
||||
Traefik's automatic discovery works great for Docker Swarm and Kubernetes, but many users run Traefik in simpler setups where these features aren't available. Mantrae fills this gap by:
|
||||
|
||||
Mantrae is particularly useful when you need to:
|
||||
- Manage multiple separate Traefik instances from a single interface
|
||||
- Automatically synchronize configurations from remote Docker hosts using agents
|
||||
- Have a visual interface for managing complex routing configurations
|
||||
- Centralize DNS management across multiple domains and providers
|
||||
- Providing a visual interface for managing Traefik's file provider configuration
|
||||
- Supporting multi-host Docker setups without requiring Swarm or Kubernetes
|
||||
- Offering centralized management of multiple Traefik instances
|
||||
- Automatically managing DNS records alongside routing configuration
|
||||
- Enabling team collaboration with user management and audit logs
|
||||
|
||||
### What's the difference between using Mantrae and Traefik's file provider directly?
|
||||
### Is Mantrae a replacement for Traefik's dashboard?
|
||||
|
||||
Using Mantrae provides several advantages over direct file provider management:
|
||||
- Web-based interface for easier configuration management
|
||||
- Multi-profile support for different environments
|
||||
- Agent-based automatic discovery of container configurations
|
||||
- Built-in DNS provider integration for certificate management
|
||||
- Backup and restore capabilities
|
||||
- User management and audit logging
|
||||
- Real-time configuration updates without manual file editing
|
||||
No. Mantrae is a **configuration manager**, not a monitoring dashboard. It generates the dynamic configuration that Traefik consumes via its HTTP provider. Traefik's dashboard shows real-time routing status and metrics, while Mantrae helps you create and manage those routes.
|
||||
|
||||
## DNS Providers
|
||||
### Can I use Mantrae alongside Traefik's other providers (Docker, Kubernetes, etc.)?
|
||||
|
||||
### I want to use multiple DNS providers of the same type (e.g. multiple Cloudflare accounts), how do I do that?
|
||||
Yes! Mantrae uses Traefik's HTTP provider, which works alongside other providers. You can have Traefik auto-discover some services while managing others through Mantrae. Just be careful to avoid naming conflicts between configurations.
|
||||
|
||||
Traefik doesn't support multiple DNS Challenge providers, so you have to use CNAME records to manage multiple accounts.
|
||||
### What happens if Mantrae goes down?
|
||||
|
||||
E.g. if you have a domain `example.com` on account "Foo" and a domain `example.org` on account "Bar", you can add the API Key for account "Foo" normally, but to get letsencrypt certificates for `example.org` you need add a CNAME record for `example.org` with these values:
|
||||
Traefik caches the configuration it receives from Mantrae. If Mantrae becomes unavailable:
|
||||
- Existing routes continue to work with the last cached configuration
|
||||
- You cannot make configuration changes until Mantrae is back online
|
||||
- DNS updates (if configured) won't happen until Mantrae recovers
|
||||
|
||||
- Type: `CNAME`
|
||||
- Name: `_acme-challenge.example.org`
|
||||
- Target: `_acme-challenge.example.com`
|
||||
## Profiles
|
||||
|
||||
Now you can request certificates for `sub.example.org` as well.
|
||||
### What are profiles and when should I use them?
|
||||
|
||||
### Can I use different DNS providers for different domains within the same profile?
|
||||
Profiles are isolated configuration environments within Mantrae. Each profile has its own:
|
||||
- Routers, services, and middleware
|
||||
- DNS provider settings
|
||||
- Agent connections
|
||||
- API token for Traefik
|
||||
|
||||
Yes, you can configure multiple DNS providers within a single profile and assign different providers to different routers. This allows you to manage domains across multiple DNS providers from a single Mantrae profile.
|
||||
Common use cases:
|
||||
- Separate configurations for development, staging, and production
|
||||
- Different Traefik instances for different teams or projects
|
||||
- Isolating configurations by customer in managed hosting scenarios
|
||||
|
||||
## Agents
|
||||
|
||||
### How do agents handle network connectivity when behind firewalls?
|
||||
### What do agents do and when do I need them?
|
||||
|
||||
Agents establish outbound connections to the Mantrae server, so they work well in environments where the Mantrae server is in a DMZ or cloud environment, and agents are behind firewalls. The Mantrae server does not need to initiate connections to the agents.
|
||||
Agents watch Docker containers on remote hosts and automatically create Mantrae configurations based on container labels. Use agents when:
|
||||
|
||||
### What happens if an agent loses connectivity to the Mantrae server?
|
||||
- Your Docker hosts can't be reached directly by Mantrae (behind NAT/firewall)
|
||||
- You want automatic discovery similar to Traefik's Docker provider
|
||||
- Managing multiple Docker hosts from a single Mantrae instance
|
||||
- You prefer labeling containers over manual configuration
|
||||
|
||||
When an agent loses connectivity:
|
||||
1. The agent will continue to monitor Docker containers locally
|
||||
2. Upon reconnection, the agent will synchronize any changes that occurred while offline
|
||||
3. The Mantrae server will mark the agent as offline after a timeout period
|
||||
4. Existing configurations will continue to function in Traefik
|
||||
If you're managing static configurations or non-Docker services, you don't need agents.
|
||||
|
||||
### Can I run multiple agents on the same host?
|
||||
### How do agents communicate with Mantrae?
|
||||
|
||||
Yes, you can run multiple agents on the same host, each configured for different profiles or with different tokens. This is useful in environments where you need to separate configurations for different purposes.
|
||||
Agents establish **outbound** connections to the Mantrae server using gRPC. This means:
|
||||
- Agents work behind firewalls and NAT (only outbound access needed)
|
||||
- No ports need to be opened on the agent's host
|
||||
- Communication can be secured with HTTPS/TLS
|
||||
- Mantrae server must be reachable from agent hosts
|
||||
|
||||
## Profiles & Multi-Environment Management
|
||||
### What happens when an agent disconnects?
|
||||
|
||||
### Can I share configurations between profiles?
|
||||
- The agent continues monitoring containers locally
|
||||
- When reconnected, it syncs any changes that occurred offline
|
||||
- Existing Traefik configurations remain active
|
||||
- Mantrae shows the agent as offline in the interface
|
||||
|
||||
Currently, configurations are profile-specific for security and isolation. However, you can export configurations from one profile and import them into another through the backup/import functionality.
|
||||
## DNS Integration
|
||||
|
||||
### How do I migrate from a single-profile setup to multi-profile?
|
||||
### Which DNS providers are supported?
|
||||
|
||||
1. Create new profiles for each environment
|
||||
2. Export your existing configuration
|
||||
3. Import the configuration into each new profile as needed
|
||||
4. Update your Traefik instances to point to the new profile endpoints
|
||||
Currently supported:
|
||||
- Cloudflare
|
||||
- PowerDNS
|
||||
- Technitium DNS
|
||||
|
||||
DNS integration automatically creates/updates DNS records when you configure routers, eliminating manual DNS management.
|
||||
|
||||
### How do I handle multiple accounts for the same DNS provider?
|
||||
|
||||
Traefik's ACME challenge only supports one provider instance. Use CNAME delegation:
|
||||
|
||||
1. Configure the primary account (e.g., Cloudflare account A with `example.com`)
|
||||
2. For domains on other accounts (e.g., `example.org` on account B), add a CNAME:
|
||||
- Type: `CNAME`
|
||||
- Name: `_acme-challenge.example.org`
|
||||
- Target: `_acme-challenge.example.com`
|
||||
|
||||
This allows Traefik to validate certificates for domains across multiple accounts.
|
||||
|
||||
## Configuration Management
|
||||
|
||||
### How do I version control my Mantrae configurations?
|
||||
|
||||
Use the backup feature to export configurations as JSON. You can:
|
||||
- Store exports in Git for version control
|
||||
- Include them in your infrastructure-as-code repository
|
||||
- Automate exports using Mantrae's API
|
||||
- Restore from backups when needed
|
||||
|
||||
### Can I manage Mantrae configurations via API or CLI?
|
||||
|
||||
Mantrae exposes a gRPC API using the Connect protocol (definitions in `proto/mantrae/v1/`). You can:
|
||||
- Programmatically create/update configurations
|
||||
- Integrate with CI/CD pipelines
|
||||
- Build custom tooling on top of Mantrae
|
||||
- Automate configuration management
|
||||
|
||||
A CLI tool is planned for future releases.
|
||||
|
||||
### How do I migrate from manual file provider configuration to Mantrae?
|
||||
|
||||
1. Deploy Mantrae and create a profile
|
||||
2. Import your existing dynamic yaml config
|
||||
3. Verify routes work correctly
|
||||
4. Remove or comment out the old file provider configuration
|
||||
|
||||
Start with non-critical routes first to minimize risk.
|
||||
|
||||
## Security
|
||||
|
||||
### How are credentials and secrets protected?
|
||||
### How are credentials and API tokens protected?
|
||||
|
||||
- Passwords are hashed using bcrypt with a cost factor of 12
|
||||
- API tokens are generated using cryptographically secure random generators
|
||||
- Database connections use prepared statements to prevent SQL injection
|
||||
- Communication between agents and the server can be secured with HTTPS
|
||||
- DNS provider credentials are encrypted at rest in the database
|
||||
- User passwords: hashed with bcrypt
|
||||
- API tokens: cryptographically secure random generation
|
||||
- DNS provider credentials: encrypted at rest
|
||||
- Database queries: prepared statements prevent SQL injection
|
||||
- Agent communication: supports HTTPS/TLS encryption
|
||||
|
||||
### Can I enforce specific security policies?
|
||||
### Can multiple users access Mantrae?
|
||||
|
||||
Mantrae supports:
|
||||
- OIDC/SAML integration for enterprise authentication
|
||||
Yes! Mantrae supports:
|
||||
- Multiple user accounts with individual credentials
|
||||
- OIDC integration
|
||||
- Audit logging of all configuration changes
|
||||
- Regular backup capabilities for disaster recovery
|
||||
|
||||
### How do I rotate profile tokens?
|
||||
|
||||
Profile tokens are used by Traefik to fetch configurations. To rotate:
|
||||
1. Generate a new token in the profile settings
|
||||
2. Update your Traefik configuration with the new token
|
||||
3. Wait for Traefik to successfully pull configuration with the new token
|
||||
|
||||
Traefik will continue using the old token until you update its configuration.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### My routers aren't working, how can I debug this?
|
||||
### Traefik isn't applying my Mantrae configuration
|
||||
|
||||
1. Check the Traefik logs for any error messages related to configuration loading
|
||||
2. Verify that the profile token in your Traefik configuration is correct
|
||||
3. Ensure the Mantrae server is accessible from your Traefik instance
|
||||
4. Check that the router rules are syntactically correct
|
||||
5. Confirm that services referenced by routers exist and are correctly configured
|
||||
Check these common issues:
|
||||
|
||||
## Development & Customization
|
||||
1. **Verify the HTTP provider endpoint**: Ensure the URL and token are correct in Traefik's configuration
|
||||
2. **Check Traefik logs**: Look for errors fetching from the HTTP provider
|
||||
3. **Test the endpoint manually**: Access `http://mantrae:3000/api/PROFILE?token=TOKEN` in a browser
|
||||
4. **Verify network connectivity**: Ensure Traefik can reach Mantrae (especially in Docker networks)
|
||||
5. **Check poll interval**: Default is 5s, but you can adjust if needed
|
||||
|
||||
### Is there an API I can integrate with?
|
||||
### DNS records aren't being created
|
||||
|
||||
Yes, Mantrae exposes a gRPC API using the Connect protocol. The API definitions are in the `proto/mantrae/v1/` directory of the source code.
|
||||
Verify:
|
||||
1. DNS provider credentials are correct in Mantrae
|
||||
2. API token has sufficient permissions for DNS management
|
||||
3. The domain is managed by the configured DNS provider
|
||||
4. Router has DNS provider assigned in configuration
|
||||
5. Check Mantrae logs for DNS provider errors
|
||||
|
||||
### How do I request new features?
|
||||
### Agent shows as offline but Docker containers are running
|
||||
|
||||
Check:
|
||||
1. Agent can reach Mantrae server (test with curl/ping)
|
||||
2. Profile token is correct in agent configuration
|
||||
3. Firewall isn't blocking outbound connections
|
||||
4. Agent logs for connection errors
|
||||
5. Mantrae server is running and accessible
|
||||
|
||||
## Performance
|
||||
|
||||
### How often does Traefik poll Mantrae?
|
||||
|
||||
The default poll interval is 5 seconds. You can adjust this in Traefik's configuration:
|
||||
- Lower values: faster updates, more load on Mantrae
|
||||
- Higher values: reduced load, slower configuration propagation
|
||||
|
||||
For most use cases, 5-10 seconds is appropriate.
|
||||
|
||||
Feature requests can be submitted as GitHub issues in the Mantrae repository. Community contributions are also welcome through pull requests.
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Welcome to Mantrae
|
||||
|
||||
**Mantrae** is a modern web interface for managing [Traefik](https://traefik.io/) configurations, built using **Go** for backend services and **SvelteKit** for a reactive frontend experience. With Mantrae, you can easily create, update, and manage routers, middlewares, services, and other Traefik components across multiple profiles.
|
||||
|
||||
## Key Features
|
||||
|
||||
- **Multi-Profile Management**: Create and manage multiple profiles to handle different Traefik instances (development, staging, production)
|
||||
- **Agent-Based Configuration**: Deploy agents to remote machines to automatically collect Docker container information and Traefik labels
|
||||
- **Unified Configuration Interface**: Manage HTTP, TCP, and UDP routers, services, and middlewares from a single dashboard
|
||||
- **Dynamic Config Generation**: Generate Traefik dynamic configuration files in real-time
|
||||
- **DNS Integration**: Built-in support for Cloudflare, PowerDNS, and Technitium DNS providers
|
||||
- **Backup & Restore**: Automatic backup of configurations with restore capabilities
|
||||
- **Real-Time Updates**: Get instant feedback with a SvelteKit-powered reactive UI
|
||||
|
||||
## How It Works
|
||||
|
||||
1. **Create Profiles**: Set up profiles for different environments (dev, staging, production)
|
||||
2. **Deploy Agents** (Optional): Install agents on remote machines to automatically collect container information
|
||||
3. **Configure Traefik**: Point your Traefik instances to Mantrae's dynamic configuration endpoints
|
||||
4. **Manage Configuration**: Use the web UI to create and manage your routing configuration
|
||||
|
||||
## Getting Started
|
||||
|
||||
To install and set up Mantrae, refer to our [Quickstart Guide](./quickstart.md).
|
||||
@@ -1,52 +1,40 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
# Getting Started
|
||||
|
||||
# Quick Start
|
||||
Mantrae is a web interface for managing Traefik's dynamic configuration. It generates configuration files that Traefik consumes via its HTTP provider.
|
||||
|
||||
Get Mantrae up and running quickly with this guide. This will walk you through installing Mantrae, creating your first profile, and configuring Traefik to use it.
|
||||
## What Mantrae Does
|
||||
|
||||
- Generates Traefik dynamic configuration (routers, services, middlewares)
|
||||
- Manages multiple configuration profiles for different environments
|
||||
- Provides optional agents for automatic Docker container discovery
|
||||
- Integrates with DNS providers (Cloudflare, PowerDNS, Technitium)
|
||||
- Backs up and restores configurations
|
||||
|
||||
:::note
|
||||
Mantrae is **not** a Traefik dashboard. It doesn't monitor Traefik's status. Instead, Traefik pulls configuration from Mantrae.
|
||||
:::
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Docker (recommended) or ability to run Go binaries
|
||||
- Docker (recommended) or Go runtime
|
||||
- A running Traefik instance
|
||||
- OpenSSL or similar tool to generate a secret
|
||||
- OpenSSL or similar tool
|
||||
|
||||
## Step 1: Generate a Secret
|
||||
## Installation
|
||||
|
||||
First, generate a secure secret for Mantrae:
|
||||
### 1. Generate a Secret
|
||||
|
||||
Generate a 16, 24, or 32 byte secret:
|
||||
|
||||
```bash
|
||||
openssl rand -hex 16
|
||||
```
|
||||
|
||||
Save this secret for the next step. It has to be either of size 16, 24, or 32 bytes.
|
||||
### 2. Deploy Mantrae
|
||||
|
||||
## Step 2: Run Mantrae
|
||||
Choose your deployment method:
|
||||
|
||||
### Using the Binary
|
||||
|
||||
1. Visit the [releases page](https://github.com/mizuchilabs/mantrae/releases) to download the latest Mantrae binary for your platform.
|
||||
2. Run the binary with:
|
||||
```bash
|
||||
export SECRET=<your_secret>
|
||||
export ADMIN_PASSWORD=<your_admin_password>
|
||||
./mantrae
|
||||
```
|
||||
### Using Docker
|
||||
|
||||
```bash
|
||||
docker run --name mantrae \
|
||||
-e SECRET=your-generated-secret \
|
||||
-e ADMIN_PASSWORD=your-admin-password \
|
||||
-p 3000:3000 \
|
||||
-v ./mantrae:/data \
|
||||
ghcr.io/mizuchilabs/mantrae:latest
|
||||
```
|
||||
|
||||
### Using Docker Compose (Recommended)
|
||||
|
||||
Create a `docker-compose.yml` file:
|
||||
#### Docker Compose (Recommended)
|
||||
|
||||
```yaml
|
||||
services:
|
||||
@@ -63,36 +51,43 @@ services:
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
Then run:
|
||||
|
||||
Run with:
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Step 3: Access the Web Interface
|
||||
#### Docker
|
||||
|
||||
Open your browser and navigate to:
|
||||
```bash
|
||||
docker run --name mantrae \
|
||||
-e SECRET=your-generated-secret \
|
||||
-e ADMIN_PASSWORD=your-admin-password \
|
||||
-p 3000:3000 \
|
||||
-v ./mantrae:/data \
|
||||
ghcr.io/mizuchilabs/mantrae:latest
|
||||
```
|
||||
|
||||
[http://localhost:3000](http://localhost:3000)
|
||||
#### Binary
|
||||
|
||||
Log in with the username `admin` and your admin password.
|
||||
Download from the [releases page](https://github.com/mizuchilabs/mantrae/releases), then:
|
||||
|
||||
```bash
|
||||
export SECRET=your-generated-secret
|
||||
export ADMIN_PASSWORD=your-admin-password
|
||||
./mantrae
|
||||
```
|
||||
|
||||
### 3. Access the Interface
|
||||
|
||||
Open [http://localhost:3000](http://localhost:3000) and log in:
|
||||
- Username: `admin`
|
||||
- Password: `your-admin-password`
|
||||
- Password: your admin password
|
||||
|
||||
## Step 4: Use the default profile or create your own
|
||||
## Configure Traefik
|
||||
|
||||
1. Click on the profile dropdown in the top navigation
|
||||
2. Select "Create New Profile"
|
||||
3. Enter profile details:
|
||||
- Name: `another-profile`
|
||||
- Description: `New profile for another site`
|
||||
4. Click "Create"
|
||||
Point Traefik to Mantrae's HTTP provider endpoint. You'll need a profile token (found in profile settings).
|
||||
|
||||
## Step 5: Configure Traefik
|
||||
|
||||
Update your Traefik configuration to use Mantrae as a dynamic configuration provider.
|
||||
|
||||
### Using Traefik Configuration File
|
||||
### Using traefik.yml
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
@@ -119,34 +114,54 @@ services:
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
**Note**: Replace `PROFILE_TOKEN` with the actual token from your profile (visible in the profile settings).
|
||||
Replace `PROFILE_TOKEN` with your actual token from the profile settings.
|
||||
|
||||
## Step 6: Create Your First Router
|
||||
## Create Your First Router
|
||||
|
||||
1. In the Mantrae web interface, navigate to "Routers"
|
||||
1. Navigate to "Routers" in the Mantrae interface
|
||||
2. Click "Add Router"
|
||||
3. Configure your router:
|
||||
3. Configure the router:
|
||||
- Name: `whoami`
|
||||
- Rule: Host(\`whoami.local\`)
|
||||
- Service: Create a new service pointing to your backend
|
||||
- Optional: Add middlewares or entry points
|
||||
4. Save the router
|
||||
- Service: Create or select a service pointing to your backend
|
||||
4. Save
|
||||
|
||||
## Step 7: Test Your Configuration
|
||||
Traefik will poll Mantrae and apply the configuration automatically.
|
||||
|
||||
If you've set up everything correctly, Traefik should now be routing requests based on your Mantrae configuration.
|
||||
## Verify Configuration
|
||||
|
||||
You can verify the dynamic configuration by accessing:
|
||||
Check the dynamic configuration at:
|
||||
```
|
||||
http://localhost:3000/api/default?token=PROFILE_TOKEN
|
||||
```
|
||||
|
||||
This should return the JSON configuration that Traefik is using.
|
||||
This returns the JSON configuration Traefik is consuming.
|
||||
|
||||
## Command Reference
|
||||
|
||||
```bash
|
||||
# Start the server
|
||||
mantrae
|
||||
|
||||
# Check version
|
||||
mantrae --version
|
||||
|
||||
# Check for updates
|
||||
mantrae update
|
||||
|
||||
# Update to latest version (binary only, not Docker)
|
||||
mantrae update --install
|
||||
|
||||
# Reset admin password
|
||||
mantrae reset --password newpassword
|
||||
|
||||
# Reset a specific user's password
|
||||
mantrae reset --user username --password newpassword
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [Learn about Profiles](./usage/profiles) to manage multiple environments
|
||||
- [Set up Agents](./usage/agents) for automatic container discovery
|
||||
- [Configure DNS Providers](./usage/dns) for automatic certificate management
|
||||
- [Explore Backups](./usage/backups) to protect your configurations
|
||||
|
||||
- [Profiles](./usage/profiles) - Manage multiple environments
|
||||
- [Agents](./usage/agents) - Automatic container discovery
|
||||
- [DNS Providers](./usage/dns) - DNS integration
|
||||
- [Backups](./usage/backups) - Configuration backups
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Agents
|
||||
|
||||
Agents in Mantrae extend your Traefik setup by enabling automatic configuration discovery from remote Docker hosts. Instead of manually defining routers in the web UI, you can label your containers with standard Traefik labels, and the agent will automatically synchronize this information with your Mantrae server.
|
||||
@@ -49,11 +45,11 @@ You can run the agent in several ways:
|
||||
Use the pre-generated Docker run command from the agent configuration page:
|
||||
```bash
|
||||
docker run -d \
|
||||
--name mantrae-agent \
|
||||
-e TOKEN=YOUR_AGENT_TOKEN \
|
||||
-e HOST=https://mantrae.example.com \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
ghcr.io/mizuchilabs/mantrae-agent:latest
|
||||
--name mantrae-agent \
|
||||
-e TOKEN=YOUR_AGENT_TOKEN \
|
||||
-e HOST=https://mantrae.example.com \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
ghcr.io/mizuchilabs/mantrae-agent:latest
|
||||
```
|
||||
|
||||
#### Option 3: Docker Compose
|
||||
|
||||
@@ -1,83 +1,30 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Backups & Restoration
|
||||
|
||||
Mantrae provides robust backup and restoration capabilities to help you manage and protect your configuration. You can perform both database backups and import configurations from Traefik dynamic config files.
|
||||
Mantrae provides automatic and manual backup capabilities to protect your configuration.
|
||||
|
||||
## Automatic Backups
|
||||
|
||||
Mantrae automatically creates backups of your database according to the configuration settings detailed in the [Environment](./environment.md) documentation. These backups ensure you can recover your configuration if needed.
|
||||
Mantrae automatically backs up your database on a schedule. Configure via environment variables:
|
||||
|
||||
By default, backups are created daily and retained for 30 days. You can customize the backup schedule and retention period through environment variables.
|
||||
|
||||
## Manual Backups & Restoration
|
||||
|
||||
### Database Backups
|
||||
|
||||
From the Settings page, you can:
|
||||
|
||||
- Create an immediate backup of your entire database
|
||||
- Download existing backup files
|
||||
- Restore from a previous backup file
|
||||
|
||||
> **Note**: Restoring from a database backup will completely reset your Mantrae instance, replacing all existing data including profiles, routers, services, and middlewares.
|
||||
|
||||
### Traefik Configuration Import
|
||||
|
||||
For more flexible configuration management, Mantrae supports importing from Traefik dynamic configuration files:
|
||||
|
||||
1. Navigate to the Settings page
|
||||
2. Select "Import Configuration"
|
||||
3. Choose your Traefik YAML/JSON configuration file
|
||||
4. Review the changes and confirm
|
||||
|
||||
Key benefits of configuration import:
|
||||
|
||||
- Non-destructive operation - existing data remains intact
|
||||
- Merges new configuration with existing setup
|
||||
- Overwrites only components with matching names
|
||||
- Preserves your current profiles and settings
|
||||
|
||||
Example of an importable Traefik configuration:
|
||||
|
||||
```yaml
|
||||
http:
|
||||
routers:
|
||||
my-router:
|
||||
rule: "Host(`example.com`)"
|
||||
service: "my-service"
|
||||
middlewares:
|
||||
- "auth-middleware"
|
||||
entryPoints:
|
||||
- "websecure"
|
||||
tls: {}
|
||||
|
||||
services:
|
||||
my-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://localhost:8080"
|
||||
|
||||
middlewares:
|
||||
auth-middleware:
|
||||
basicAuth:
|
||||
users:
|
||||
- "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"
|
||||
```bash
|
||||
BACKUP_SCHEDULE=0 2 * * * # Daily at 2 AM (cron format)
|
||||
BACKUP_RETENTION=30 # Keep for 30 days
|
||||
BACKUP_AUTO_ENABLED=true # Enable auto-backups
|
||||
```
|
||||
|
||||
## Backup Storage
|
||||
## Storage Options
|
||||
|
||||
Backups can be stored in multiple locations:
|
||||
### Local Storage (Default)
|
||||
|
||||
### Local Storage
|
||||
Backups stored in `/data/backups/` directory.
|
||||
|
||||
By default, backups are stored in the `data/backups/` directory within the Mantrae installation.
|
||||
```bash
|
||||
STORAGE_TYPE=local
|
||||
```
|
||||
|
||||
### S3-Compatible Storage
|
||||
|
||||
Configure S3-compatible storage for cloud backups:
|
||||
Store backups in the cloud:
|
||||
|
||||
```bash
|
||||
STORAGE_TYPE=s3
|
||||
@@ -89,27 +36,90 @@ STORAGE_S3_SECRET_KEY=your-secret-key
|
||||
STORAGE_S3_PATH=backups/
|
||||
```
|
||||
|
||||
## Backup Configuration
|
||||
Compatible with:
|
||||
- AWS S3
|
||||
- MinIO
|
||||
- DigitalOcean Spaces
|
||||
- Backblaze B2
|
||||
- Any S3-compatible storage
|
||||
|
||||
Customize backup behavior through environment variables:
|
||||
## Manual Operations
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `BACKUP_SCHEDULE` | `0 2 * * *` | Cron expression for backup schedule (daily at 2 AM) |
|
||||
| `BACKUP_RETENTION` | `30` | Number of days to keep backups |
|
||||
| `BACKUP_AUTO_ENABLED` | `true` | Enable automatic backups |
|
||||
Access backup controls in Settings:
|
||||
|
||||
### Create Backup
|
||||
|
||||
Generate an immediate database backup.
|
||||
|
||||
### Download Backup
|
||||
|
||||
Download existing backup files for off-site storage.
|
||||
|
||||
### Restore from Backup
|
||||
|
||||
Restore from a previous database backup.
|
||||
|
||||
:::warning
|
||||
Restoring from a database backup replaces **all** existing data including profiles, routers, services, and middlewares.
|
||||
:::
|
||||
|
||||
## Import Traefik Configuration
|
||||
|
||||
Import existing Traefik dynamic configuration files (YAML/JSON):
|
||||
|
||||
1. Go to Settings → Import Configuration
|
||||
2. Select your Traefik configuration file
|
||||
3. Review changes
|
||||
4. Confirm import
|
||||
|
||||
**Import behavior:**
|
||||
- Non-destructive - keeps existing data
|
||||
- Merges new configuration with current setup
|
||||
- Overwrites components with matching names
|
||||
- Preserves profiles and settings
|
||||
|
||||
### Example Import File
|
||||
|
||||
```yaml
|
||||
http:
|
||||
routers:
|
||||
my-router:
|
||||
rule: "Host(`example.com`)"
|
||||
service: "my-service"
|
||||
middlewares:
|
||||
- "auth"
|
||||
entryPoints:
|
||||
- "websecure"
|
||||
tls: {}
|
||||
|
||||
services:
|
||||
my-service:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://backend:8080"
|
||||
|
||||
middlewares:
|
||||
auth:
|
||||
basicAuth:
|
||||
users:
|
||||
- "admin:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Regular backups**: Although Mantrae handles automatic backups, consider creating manual backups before major changes
|
||||
2. **Configuration versioning**: Store your Traefik configurations in version control for additional safety
|
||||
3. **Test restorations**: Periodically verify your backup files can be successfully restored
|
||||
4. **Off-site storage**: Download and store backups in a secure off-site location
|
||||
5. **Multiple backup strategies**: Use both automatic backups and configuration imports for comprehensive protection
|
||||
1. **Test restores**: Periodically verify backups can be restored
|
||||
2. **Off-site storage**: Download backups or use S3 storage
|
||||
3. **Before major changes**: Create manual backup
|
||||
4. **Monitor retention**: Ensure old backups are cleaned up
|
||||
|
||||
## Backup Security
|
||||
|
||||
- Backup files contain sensitive configuration data
|
||||
- All backups are stored with appropriate file permissions
|
||||
- When using S3 storage, data is transmitted securely
|
||||
- Consider encrypting backup files when storing them off-site
|
||||
- Backups contain sensitive data (credentials, tokens)
|
||||
- S3 transfers use HTTPS
|
||||
- Encrypt S3 buckets at rest
|
||||
- Restrict backup file access
|
||||
- Use strong S3 credentials
|
||||
|
||||
:::tip
|
||||
Set up S3 storage for automatic off-site backups and redundancy.
|
||||
:::
|
||||
|
||||
113
docs/docs/usage/config.md
Normal file
113
docs/docs/usage/config.md
Normal file
@@ -0,0 +1,113 @@
|
||||
# Configuration
|
||||
|
||||
Configure Mantrae through environment variables and command-line arguments.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required | Description |
|
||||
|----------|---------|----------|-------------|
|
||||
| `SECRET` | - | Yes | Encryption key (16, 24, or 32 bytes) |
|
||||
| `ADMIN_PASSWORD` | auto-generated | No | Initial admin password |
|
||||
| `LOG_LEVEL` | `info` | No | Log level: `debug`, `info`, `warn`, `error` |
|
||||
| `LOG_FORMAT` | `text` | No | Log format: `text`, `json` |
|
||||
|
||||
:::warning
|
||||
The `SECRET` environment variable must be 16, 24, or 32 bytes. Mantrae will not start without it.
|
||||
:::
|
||||
|
||||
### Backup Configuration
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `BACKUP_SCHEDULE` | `0 2 * * *` | Cron schedule (daily at 2 AM) |
|
||||
| `BACKUP_RETENTION` | `30` | Days to retain backups |
|
||||
| `BACKUP_AUTO_ENABLED` | `true` | Enable automatic backups |
|
||||
|
||||
### Storage Configuration
|
||||
|
||||
#### Local Storage (Default)
|
||||
|
||||
```bash
|
||||
STORAGE_TYPE=local
|
||||
```
|
||||
|
||||
Backups stored in `/data/backups/`
|
||||
|
||||
#### S3-Compatible Storage
|
||||
|
||||
```bash
|
||||
STORAGE_TYPE=s3
|
||||
STORAGE_S3_ENDPOINT=https://s3.amazonaws.com
|
||||
STORAGE_S3_REGION=us-east-1
|
||||
STORAGE_S3_BUCKET=mantrae-backups
|
||||
STORAGE_S3_ACCESS_KEY=your-access-key
|
||||
STORAGE_S3_SECRET_KEY=your-secret-key
|
||||
STORAGE_S3_PATH=backups/
|
||||
```
|
||||
|
||||
Works with AWS S3, MinIO, DigitalOcean Spaces, etc.
|
||||
|
||||
## Command-Line Interface
|
||||
|
||||
### Server Commands
|
||||
|
||||
```bash
|
||||
# Start server
|
||||
mantrae
|
||||
|
||||
# Check version
|
||||
mantrae --version
|
||||
mantrae -v
|
||||
|
||||
# Check for updates
|
||||
mantrae update
|
||||
|
||||
# Install latest version (binary only)
|
||||
mantrae update --install
|
||||
```
|
||||
|
||||
### Password Management
|
||||
|
||||
```bash
|
||||
# Reset admin password
|
||||
mantrae reset --password newpassword
|
||||
mantrae reset -p newpassword
|
||||
|
||||
# Reset specific user
|
||||
mantrae reset --user username --password newpassword
|
||||
mantrae reset -u username -p newpassword
|
||||
```
|
||||
|
||||
### Flags
|
||||
|
||||
| Flag | Short | Description |
|
||||
|------|-------|-------------|
|
||||
| `--version` | `-v` | Display version and exit |
|
||||
| `--password` | `-p` | Password for reset command |
|
||||
| `--user` | `-u` | Username for reset (default: `admin`) |
|
||||
| `--install` | - | Install update (update command only) |
|
||||
|
||||
## Docker Example
|
||||
|
||||
```yaml
|
||||
services:
|
||||
mantrae:
|
||||
image: ghcr.io/mizuchilabs/mantrae:latest
|
||||
environment:
|
||||
- SECRET=${SECRET}
|
||||
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
|
||||
- LOG_LEVEL=info
|
||||
- LOG_FORMAT=json
|
||||
- BACKUP_SCHEDULE=0 3 * * *
|
||||
- BACKUP_RETENTION=90
|
||||
- STORAGE_TYPE=s3
|
||||
- STORAGE_S3_BUCKET=my-backups
|
||||
- STORAGE_S3_ACCESS_KEY=${S3_ACCESS_KEY}
|
||||
- STORAGE_S3_SECRET_KEY=${S3_SECRET_KEY}
|
||||
ports:
|
||||
- "3000:3000"
|
||||
volumes:
|
||||
- ./mantrae:/data
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
@@ -1,75 +1,58 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# DNS Providers
|
||||
|
||||
In Mantrae, you can set up DNS providers and configure them to automatically manage domain entries for your routers. This section explains how to add DNS providers, link them to routers, and manage DNS records for seamless integration with Traefik.
|
||||
Mantrae integrates with DNS providers to automatically manage domain records for your routers and handle Let's Encrypt DNS challenges.
|
||||
|
||||
## Supported DNS Providers
|
||||
## Supported Providers
|
||||
|
||||
Mantrae currently supports the following DNS providers:
|
||||
- Cloudflare
|
||||
- PowerDNS
|
||||
- Technitium
|
||||
|
||||
- **Cloudflare**
|
||||
- **PowerDNS**
|
||||
- **Technitium**
|
||||
## Adding a Provider
|
||||
|
||||
## Adding a DNS Provider
|
||||
|
||||
To add a DNS provider:
|
||||
|
||||
1. **Select Profile**: Ensure you're working with the correct profile
|
||||
2. Navigate to the **DNS** section (globe icon)
|
||||
3. Click "Add Provider"
|
||||
4. Select your provider from the available options and enter the necessary credentials
|
||||
5. For PowerDNS and Technitium you also need to set the endpoint where they are running
|
||||
6. Save the provider. It will now be available for selection when configuring routers
|
||||
|
||||
## Provider-Specific Configuration
|
||||
1. Navigate to DNS section (globe icon)
|
||||
2. Click "Add Provider"
|
||||
3. Select provider type
|
||||
4. Enter credentials:
|
||||
|
||||
### Cloudflare
|
||||
|
||||
For Cloudflare, you'll need:
|
||||
|
||||
- **API Token**: A scoped API token with DNS permissions
|
||||
- **API Token**: Scoped token with DNS edit permissions
|
||||
|
||||
### PowerDNS
|
||||
|
||||
For PowerDNS, you'll need:
|
||||
|
||||
- **API URL**: The URL to your PowerDNS API
|
||||
- **API Key**: The API key for authentication
|
||||
- **API URL**: PowerDNS API endpoint
|
||||
- **API Key**: Authentication key
|
||||
|
||||
### Technitium
|
||||
- **API URL**: Technitium DNS API endpoint
|
||||
- **API Key**: Authentication key
|
||||
- **Zone Type**: `primary` or `forwarder`
|
||||
|
||||
For Technitium DNS, you'll need:
|
||||
## Using DNS Providers
|
||||
|
||||
- **API URL**: The URL to your Technitium DNS API
|
||||
- **API Key**: The API key for authentication
|
||||
- **Zone Type**: The zone type can be either `primary` or `forwarder`
|
||||
### Automatic DNS Records
|
||||
|
||||
## Setting a DNS Provider in Routers
|
||||
When you assign a DNS provider to a router:
|
||||
- Mantrae creates DNS records for the router's domain
|
||||
- Existing records are skipped to prevent overwrites
|
||||
- Set a provider as "Default" to auto-assign it to new routers
|
||||
|
||||
Once a DNS provider is configured, you can assign it to specific routers. When you assign a DNS provider to a router:
|
||||
### Certificate Management
|
||||
|
||||
- Mantrae will automatically attempt to add the router's domain name to the configured DNS provider
|
||||
- **Duplicate Check**: If the domain already exists, Mantrae will skip it to avoid overwriting any existing records
|
||||
- **Default**: Setting a provider as "Default" will automatically use it on newly created routers, so if no DNS provider is assigned to the router, Mantrae will use the default DNS provider
|
||||
DNS providers enable automatic TLS certificates:
|
||||
1. Mantrae passes provider credentials to Traefik
|
||||
2. Traefik performs DNS-01 ACME challenges
|
||||
3. Certificates are automatically issued and renewed
|
||||
|
||||
## Automatic Certificate Management
|
||||
No manual DNS configuration needed.
|
||||
|
||||
When using DNS providers with Traefik:
|
||||
## Security
|
||||
|
||||
1. Traefik will automatically request certificates for configured domains
|
||||
2. Mantrae will provide the DNS provider credentials to Traefik through the dynamic configuration
|
||||
3. Traefik will create the necessary DNS challenge records
|
||||
4. Certificates will be automatically renewed as needed
|
||||
- Credentials are encrypted in the database
|
||||
- Each profile has its own providers
|
||||
- API tokens should use minimal required permissions
|
||||
- Credentials are only accessible within their profile
|
||||
|
||||
## Security Considerations
|
||||
:::tip
|
||||
Use scoped API tokens with only DNS edit permissions for security.
|
||||
:::
|
||||
|
||||
- DNS provider credentials are stored encrypted in the database
|
||||
- Each profile can have its own set of DNS providers
|
||||
- Credentials are only accessible to the profile they belong to
|
||||
- API tokens should follow the principle of least privilege
|
||||
|
||||
> **Note**: This DNS automation only applies if no entry for the domain exists. Ensure your domain records are unique to prevent conflicts.
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Environment Variables
|
||||
|
||||
Mantrae provides several command-line flags and environment variables to configure the application. This guide details each option and its purpose.
|
||||
|
||||
## Command-Line Arguments
|
||||
|
||||
You can use the following flags to customize the behavior of Mantrae:
|
||||
|
||||
| Flag | Type | Default | Description |
|
||||
| ----------------- | -------- | ------- | ------------------------------------------------------------------------ |
|
||||
| `-version` | `bool` | `false` | Prints the current version of Mantrae and exits. |
|
||||
| `-update` | `bool` | `false` | Updates Mantrae to the latest version. (Doesn't work inside a container) |
|
||||
| `-reset-password` | `string` | | Resets the admin password to the specified value. |
|
||||
| `-reset-user` | `string` | `admin` | Choose the username to reset the password for. |
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Environment variables can be used to set up Mantrae and configure its settings. Below is a list of the supported environment variables.
|
||||
|
||||
### Core Configuration
|
||||
|
||||
| Variable | Default | Description |
|
||||
| ---------------- | ------- | ------------------------------------------------------------------------ |
|
||||
| `SECRET` | | Secret key required for secure access (required) |
|
||||
| `ADMIN_PASSWORD` | | Admin password for the web interface (will be auto-generated if not set) |
|
||||
| `LOG_LEVEL` | `info` | Logging level (debug, info, warn, error) |
|
||||
| `LOG_FORMAT` | `text` | Log format (text, json) |
|
||||
|
||||
### Important Notes
|
||||
|
||||
- **SECRET** is a required environment variable and must be set; otherwise, the application will not start.
|
||||
- Database migrations are automatically applied on startup.
|
||||
- In production, always use a strong secret and HTTPS.
|
||||
92
docs/docs/usage/oidc.md
Normal file
92
docs/docs/usage/oidc.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# Authentication
|
||||
|
||||
Mantrae supports local authentication and OIDC (OpenID Connect) single sign-on.
|
||||
|
||||
## Local Authentication
|
||||
|
||||
Default authentication method using username and password stored in Mantrae's database.
|
||||
|
||||
### Initial Setup
|
||||
|
||||
Set admin password during first run:
|
||||
|
||||
```bash
|
||||
ADMIN_PASSWORD=your-secure-password
|
||||
```
|
||||
|
||||
If not set, Mantrae generates a random password (check logs).
|
||||
|
||||
### Password Reset
|
||||
|
||||
Reset passwords via CLI:
|
||||
|
||||
```bash
|
||||
# Reset admin password
|
||||
mantrae reset --password newpassword
|
||||
|
||||
# Reset specific user
|
||||
mantrae reset --user username --password newpassword
|
||||
```
|
||||
|
||||
## OIDC Authentication
|
||||
|
||||
Configure single sign-on with an OIDC provider through the Settings page.
|
||||
|
||||
### Supported Providers
|
||||
|
||||
Any OIDC-compliant provider:
|
||||
- Keycloak
|
||||
- Authentik
|
||||
- Auth0
|
||||
- Okta
|
||||
- Google Workspace
|
||||
- Azure AD
|
||||
- Custom OIDC providers
|
||||
|
||||
### Configuration
|
||||
|
||||
1. Navigate to Settings → Authentication
|
||||
2. Enable OIDC
|
||||
3. Configure provider details:
|
||||
- **Issuer URL**: Your OIDC provider's issuer endpoint (e.g., `https://auth.example.com/realms/master`)
|
||||
- **Client ID**: Application client ID from your provider
|
||||
- **Client Secret**: Application client secret (leave empty for PKCE)
|
||||
- **PKCE**: Enable for public clients without client secrets
|
||||
4. Save configuration
|
||||
|
||||
The callback URL will be automatically set to: `https://your-mantrae-domain.com/oidc/callback`
|
||||
|
||||
### Provider Setup
|
||||
|
||||
Create an OIDC application in your provider with these settings:
|
||||
|
||||
- **Redirect URI**: `https://mantrae.example.com/oidc/callback`
|
||||
- **Scopes**: `openid`, `profile`, `email`
|
||||
- **Grant Type**: Authorization Code
|
||||
- **Token Endpoint Auth Method**: Client Secret Post (or PKCE for public clients)
|
||||
|
||||
### User Provisioning
|
||||
|
||||
- First-time OIDC users are automatically created in Mantrae
|
||||
- Users are matched by email address
|
||||
- Usernames are derived from the `preferred_username` claim or email address
|
||||
- Email verification is required
|
||||
|
||||
### Fallback Authentication
|
||||
|
||||
Local authentication remains available when OIDC is enabled. Use for:
|
||||
- Emergency access if OIDC provider is unavailable
|
||||
- Service accounts
|
||||
- Initial admin setup
|
||||
|
||||
## Security Considerations
|
||||
|
||||
1. **HTTPS Required**: OIDC authentication requires HTTPS in production
|
||||
2. **Email Verification**: Users must have verified emails in the OIDC provider
|
||||
3. **Secure Secrets**: Store client secrets securely, never commit to version control
|
||||
4. **Exact Redirect URIs**: Ensure redirect URLs match exactly in your provider configuration
|
||||
5. **PKCE for Public Clients**: Enable PKCE if your application cannot securely store client secrets
|
||||
|
||||
:::tip
|
||||
Enable OIDC for centralized user management and leverage your provider's security features like MFA and SSO.
|
||||
:::
|
||||
@@ -1,98 +1,64 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# Profiles
|
||||
|
||||
Profiles in Mantrae allow you to manage multiple Traefik instances from a single interface. Each profile represents a distinct Traefik configuration environment, such as development, staging, or production.
|
||||
Profiles let you manage multiple Traefik instances from a single Mantrae installation. Each profile is an isolated environment with its own configuration.
|
||||
|
||||
## Understanding Profiles
|
||||
## What's in a Profile
|
||||
|
||||
A profile is a logical grouping of:
|
||||
Each profile contains:
|
||||
- Routers (HTTP, TCP, UDP)
|
||||
- Services (HTTP, TCP, UDP)
|
||||
- Services (HTTP, TCP, UDP)
|
||||
- Middlewares (HTTP, TCP)
|
||||
- Entry Points
|
||||
- Servers Transports
|
||||
- DNS Providers
|
||||
- Entry points
|
||||
- Server transports
|
||||
- DNS providers
|
||||
- Agents
|
||||
|
||||
Each profile has its own dynamic configuration endpoint that Traefik instances can consume.
|
||||
Profiles are completely isolated from each other.
|
||||
|
||||
## Creating a Profile
|
||||
|
||||
To create a new profile:
|
||||
1. Click the profile dropdown in the top navigation
|
||||
2. Select "Create New Profile"
|
||||
3. Configure:
|
||||
- **Name**: Unique identifier (e.g., `production`, `staging`)
|
||||
- **Description**: Optional purpose description
|
||||
- **Token**: Auto-generated security token for API access
|
||||
|
||||
1. **Access the Web UI**: Log into Mantrae at `http://localhost:3000`
|
||||
2. **Navigate to Profiles**: Click on the profile dropdown in the top navigation bar
|
||||
3. **Create New Profile**: Select "Create New Profile"
|
||||
4. **Configure Profile Details**:
|
||||
- **Name**: A unique identifier for this profile (e.g., `production`, `staging`)
|
||||
- **Description**: Optional description of the profile's purpose
|
||||
- **Token**: A security token for accessing this profile's configuration (auto-generated)
|
||||
The token is used by Traefik to authenticate when fetching configuration.
|
||||
|
||||
Once saved, this profile will serve as a dedicated space for managing Traefik configurations specific to this environment.
|
||||
## Connecting Traefik
|
||||
|
||||
## Using Profiles with Traefik
|
||||
|
||||
Each profile in Mantrae exposes a unique API endpoint that Traefik can use to fetch its dynamic configuration.
|
||||
|
||||
### Dynamic Configuration Endpoint
|
||||
|
||||
For a profile named `production`, the dynamic configuration endpoint would be:
|
||||
Each profile exposes a unique endpoint:
|
||||
```
|
||||
http://mantrae:3000/api/production?token=GENERATED_TOKEN
|
||||
http://mantrae:3000/api/PROFILE_NAME?token=TOKEN
|
||||
```
|
||||
|
||||
### Configure Traefik to Use Mantrae
|
||||
|
||||
Configure your Traefik instance to use Mantrae as its dynamic configuration provider:
|
||||
|
||||
#### Using Static Configuration File
|
||||
### Static Configuration
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
http:
|
||||
endpoint: "http://mantrae:3000/api/production?token=GENERATED_TOKEN"
|
||||
pollInterval: "5s" # Optional: polling interval for configuration updates
|
||||
endpoint: "http://mantrae:3000/api/production?token=TOKEN"
|
||||
pollInterval: "5s"
|
||||
```
|
||||
|
||||
#### Using Command Line Arguments
|
||||
|
||||
In Docker Compose:
|
||||
### Docker Compose
|
||||
|
||||
```yaml
|
||||
traefik:
|
||||
image: traefik:latest
|
||||
container_name: traefik
|
||||
command:
|
||||
- --providers.http.endpoint=http://mantrae:3000/api/production?token=GENERATED_TOKEN
|
||||
- --providers.http.endpoint=http://mantrae:3000/api/production?token=TOKEN
|
||||
- --providers.http.pollInterval=5s
|
||||
# ... other Traefik configuration
|
||||
```
|
||||
|
||||
#### Using Environment Variables
|
||||
## Switching Profiles
|
||||
|
||||
```bash
|
||||
TRAEFIK_PROVIDERS_HTTP_ENDPOINT=http://mantrae:3000/api/production?token=GENERATED_TOKEN
|
||||
TRAEFIK_PROVIDERS_HTTP_POLLINTERVAL=5s
|
||||
```
|
||||
Use the profile dropdown in the top navigation to switch between profiles. All actions apply to the currently selected profile.
|
||||
|
||||
## Profile-Specific Configuration
|
||||
## Profile Tokens
|
||||
|
||||
Each profile maintains its own separate configuration space. This means:
|
||||
|
||||
- Routers created in the `production` profile are completely isolated from those in the `staging` profile
|
||||
- Services, middlewares, and other components are profile-specific
|
||||
- Agents can be assigned to specific profiles
|
||||
- DNS providers can be configured per profile
|
||||
|
||||
## Managing Multiple Profiles
|
||||
|
||||
You can easily switch between profiles using the profile dropdown in the Mantrae web interface:
|
||||
|
||||
1. Click the current profile name in the top navigation bar
|
||||
2. Select the profile you want to work with from the dropdown
|
||||
3. All subsequent actions will apply to the selected profile
|
||||
|
||||
This allows you to manage multiple Traefik environments without switching between different Mantrae instances.
|
||||
- Each profile has a unique token
|
||||
- Find the token in profile settings
|
||||
- Tokens can be regenerated if compromised
|
||||
- Never commit tokens to version control
|
||||
|
||||
@@ -5,125 +5,124 @@ import type * as Preset from "@docusaurus/preset-classic";
|
||||
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
|
||||
|
||||
const config: Config = {
|
||||
title: "Mantrae",
|
||||
tagline:
|
||||
"Simple yet powerful Traefik manager, enhanced with advanced features.",
|
||||
favicon: "img/favicon.ico",
|
||||
url: "https://mizuchi.dev/",
|
||||
baseUrl: "/mantrae/",
|
||||
trailingSlash: false,
|
||||
organizationName: "mizuchilabs",
|
||||
projectName: "mantrae",
|
||||
onBrokenLinks: "throw",
|
||||
deploymentBranch: "gh-pages",
|
||||
title: "Mantrae",
|
||||
tagline:
|
||||
"Simple yet powerful Traefik manager, enhanced with advanced features.",
|
||||
favicon: "img/favicon.ico",
|
||||
url: "https://mizuchi.dev/",
|
||||
baseUrl: "/mantrae/",
|
||||
trailingSlash: false,
|
||||
organizationName: "mizuchilabs",
|
||||
projectName: "mantrae",
|
||||
onBrokenLinks: "throw",
|
||||
deploymentBranch: "gh-pages",
|
||||
|
||||
i18n: {
|
||||
defaultLocale: "en",
|
||||
locales: ["en"],
|
||||
},
|
||||
i18n: {
|
||||
defaultLocale: "en",
|
||||
locales: ["en"],
|
||||
},
|
||||
|
||||
presets: [
|
||||
[
|
||||
"classic",
|
||||
{
|
||||
docs: {
|
||||
sidebarPath: "./sidebars.ts",
|
||||
routeBasePath: "/",
|
||||
},
|
||||
blog: {
|
||||
showReadingTime: true,
|
||||
feedOptions: {
|
||||
type: ["rss", "atom"],
|
||||
xslt: true,
|
||||
},
|
||||
onInlineTags: "warn",
|
||||
onInlineAuthors: "warn",
|
||||
onUntruncatedBlogPosts: "warn",
|
||||
},
|
||||
theme: {
|
||||
customCss: "./src/css/custom.css",
|
||||
},
|
||||
} satisfies Preset.Options,
|
||||
],
|
||||
],
|
||||
presets: [
|
||||
[
|
||||
"classic",
|
||||
{
|
||||
docs: {
|
||||
sidebarPath: "./sidebars.ts",
|
||||
routeBasePath: "/",
|
||||
},
|
||||
blog: {
|
||||
showReadingTime: true,
|
||||
feedOptions: {
|
||||
type: ["rss", "atom"],
|
||||
xslt: true,
|
||||
},
|
||||
onInlineTags: "warn",
|
||||
onInlineAuthors: "warn",
|
||||
onUntruncatedBlogPosts: "warn",
|
||||
},
|
||||
theme: {
|
||||
customCss: "./src/css/custom.css",
|
||||
},
|
||||
} satisfies Preset.Options,
|
||||
],
|
||||
],
|
||||
|
||||
themeConfig: {
|
||||
// Replace with your project's social card
|
||||
//image: "img/mantrae-social-card.jpg",
|
||||
navbar: {
|
||||
title: "Mantrae",
|
||||
logo: {
|
||||
alt: "Mantrae Logo",
|
||||
src: "img/logo.svg",
|
||||
themeConfig: {
|
||||
// Replace with your project's social card
|
||||
//image: "img/mantrae-social-card.jpg",
|
||||
navbar: {
|
||||
title: "Mantrae",
|
||||
logo: {
|
||||
alt: "Mantrae Logo",
|
||||
src: "img/logo.svg",
|
||||
},
|
||||
items: [
|
||||
{
|
||||
type: "docSidebar",
|
||||
sidebarId: "tutorialSidebar",
|
||||
position: "left",
|
||||
label: "Docs",
|
||||
},
|
||||
{
|
||||
href: "https://github.com/mizuchilabs/mantrae",
|
||||
position: "right",
|
||||
className: "header-github-link",
|
||||
"aria-label": "GitHub repository",
|
||||
},
|
||||
{
|
||||
href: "https://buymeacoffee.com/d34dscene",
|
||||
position: "right",
|
||||
className: "header-coffee-link",
|
||||
"aria-label": "Support the project",
|
||||
},
|
||||
],
|
||||
},
|
||||
items: [
|
||||
{
|
||||
type: "docSidebar",
|
||||
sidebarId: "tutorialSidebar",
|
||||
position: "left",
|
||||
label: "Docs",
|
||||
},
|
||||
//{ to: "/blog", label: "Blog", position: "left" },
|
||||
{
|
||||
href: "https://github.com/mizuchilabs/mantrae",
|
||||
position: "right",
|
||||
className: "header-github-link",
|
||||
"aria-label": "GitHub repository",
|
||||
},
|
||||
{
|
||||
href: "https://buymeacoffee.com/d34dscene",
|
||||
position: "right",
|
||||
className: "header-coffee-link",
|
||||
"aria-label": "Support the project",
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
footer: {
|
||||
style: "dark",
|
||||
links: [
|
||||
{
|
||||
title: "Docs",
|
||||
items: [
|
||||
footer: {
|
||||
style: "dark",
|
||||
links: [
|
||||
{
|
||||
label: "Introduction",
|
||||
to: "/intro",
|
||||
title: "Docs",
|
||||
items: [
|
||||
{
|
||||
label: "Quickstart",
|
||||
to: "/quickstart",
|
||||
},
|
||||
{
|
||||
label: "Usage",
|
||||
to: "/usage/profiles",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Usage",
|
||||
to: "/usage/profiles",
|
||||
title: "More",
|
||||
items: [
|
||||
{
|
||||
label: "Mizuchi Labs",
|
||||
to: "https://mizuchi.dev",
|
||||
},
|
||||
{
|
||||
label: "GitHub",
|
||||
href: "https://github.com/mizuchilabs/mantrae",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "More",
|
||||
items: [
|
||||
{
|
||||
label: "Mizuchi Labs",
|
||||
to: "https://mizuchi.dev",
|
||||
},
|
||||
{
|
||||
label: "GitHub",
|
||||
href: "https://github.com/mizuchilabs/mantrae",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
copyright: `Copyright © ${new Date().getFullYear()} Mizuchi Labs, Inc. Built with Docusaurus.`,
|
||||
},
|
||||
],
|
||||
copyright: `Copyright © ${new Date().getFullYear()} Mizuchi Labs, Inc. Built with Docusaurus.`,
|
||||
},
|
||||
|
||||
prism: {
|
||||
theme: prismThemes.github,
|
||||
darkTheme: prismThemes.dracula,
|
||||
},
|
||||
prism: {
|
||||
theme: prismThemes.github,
|
||||
darkTheme: prismThemes.dracula,
|
||||
},
|
||||
|
||||
announcementBar: {
|
||||
id: "github-star",
|
||||
content: `If you like Mantrae, <a href=https://github.com/mizuchilabs/mantrae rel="noopener noreferrer" target="_blank">give us a star on GitHub</a>! ⭐️`,
|
||||
backgroundColor: "var(--ifm-color-primary)",
|
||||
textColor: "var(--ifm-color-white)",
|
||||
},
|
||||
} satisfies Preset.ThemeConfig,
|
||||
announcementBar: {
|
||||
id: "github-star",
|
||||
content: `If you like Mantrae, <a href=https://github.com/mizuchilabs/mantrae rel="noopener noreferrer" target="_blank">give us a star on GitHub</a>! ⭐️`,
|
||||
backgroundColor: "var(--ifm-color-primary)",
|
||||
textColor: "var(--ifm-color-white)",
|
||||
},
|
||||
} satisfies Preset.ThemeConfig,
|
||||
};
|
||||
|
||||
export default config;
|
||||
|
||||
360
docs/pnpm-lock.yaml
generated
360
docs/pnpm-lock.yaml
generated
@@ -10,13 +10,13 @@ importers:
|
||||
dependencies:
|
||||
'@docusaurus/core':
|
||||
specifier: ^3.9.2
|
||||
version: 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
version: 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/preset-classic':
|
||||
specifier: ^3.9.2
|
||||
version: 3.9.2(@algolia/client-search@5.43.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)
|
||||
version: 3.9.2(@algolia/client-search@5.43.0)(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)
|
||||
'@mdx-js/react':
|
||||
specifier: ^3.1.1
|
||||
version: 3.1.1(@types/react@19.2.2)(react@19.2.0)
|
||||
version: 3.1.1(@types/react@19.2.4)(react@19.2.0)
|
||||
clsx:
|
||||
specifier: ^2.1.1
|
||||
version: 2.1.1
|
||||
@@ -45,14 +45,14 @@ importers:
|
||||
|
||||
packages:
|
||||
|
||||
'@ai-sdk/gateway@2.0.7':
|
||||
resolution: {integrity: sha512-/AI5AKi4vOK9SEb8Z1dfXkhsJ5NAfWsoJQc96B/mzn2KIrjw5occOjIwD06scuhV9xWlghCoXJT1sQD9QH/tyg==}
|
||||
'@ai-sdk/gateway@2.0.9':
|
||||
resolution: {integrity: sha512-E6x4h5CPPPJ0za1r5HsLtHbeI+Tp3H+YFtcH8G3dSSPFE6w+PZINzB4NxLZmg1QqSeA5HTP3ZEzzsohp0o2GEw==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
zod: ^3.25.76 || ^4.1.8
|
||||
|
||||
'@ai-sdk/provider-utils@3.0.16':
|
||||
resolution: {integrity: sha512-lsWQY9aDXHitw7C1QRYIbVGmgwyT98TF3MfM8alNIXKpdJdi+W782Rzd9f1RyOfgRmZ08gJ2EYNDhWNK7RqpEA==}
|
||||
'@ai-sdk/provider-utils@3.0.17':
|
||||
resolution: {integrity: sha512-TR3Gs4I3Tym4Ll+EPdzRdvo/rc8Js6c4nVhFLuvGLX/Y4V9ZcQMa/HTiYsHEgmYrf1zVi6Q145UEZUfleOwOjw==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
zod: ^3.25.76 || ^4.1.8
|
||||
@@ -61,8 +61,8 @@ packages:
|
||||
resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
'@ai-sdk/react@2.0.89':
|
||||
resolution: {integrity: sha512-r2uCqx042JOjNrSlDrjh7ufSIfU2BM6Lo4qe47KHkYuJjPfssxhLpJUCFLB01iV7Foyn/xpbq06Zr6WI4qUDgw==}
|
||||
'@ai-sdk/react@2.0.93':
|
||||
resolution: {integrity: sha512-2TzhpQr10HuWxpqyHpSAUMRUqD1G2O73J2sAaJChomVDbjr7BwpM0mdR3aRamCXNtuLiJmTFQhbNzw8fXMBdYw==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
react: ^18 || ^19 || ^19.0.0-rc
|
||||
@@ -1012,11 +1012,11 @@ packages:
|
||||
react-dom:
|
||||
optional: true
|
||||
|
||||
'@docsearch/css@4.3.1':
|
||||
resolution: {integrity: sha512-Jnct7LKOi/+Oxbmq215YPYASkMdZqtyyDCkma8Cj4sCcbBuybL6fvyBaX7uJoM6kVF7aIpBA38RhHAyN5ByCHg==}
|
||||
'@docsearch/css@4.3.2':
|
||||
resolution: {integrity: sha512-K3Yhay9MgkBjJJ0WEL5MxnACModX9xuNt3UlQQkDEDZJZ0+aeWKtOkxHNndMRkMBnHdYvQjxkm6mdlneOtU1IQ==}
|
||||
|
||||
'@docsearch/react@4.3.1':
|
||||
resolution: {integrity: sha512-vbKwgDuHi/YA0CiicXhJm4DSfOIOccl3FJlkdVmeZ5d61wNbPdAnAy71i7FF0JzO6noCQScidBBguOCaNfauEw==}
|
||||
'@docsearch/react@4.3.2':
|
||||
resolution: {integrity: sha512-74SFD6WluwvgsOPqifYOviEEVwDxslxfhakTlra+JviaNcs7KK/rjsPj89kVEoQc9FUxRkAofaJnHIR7pb4TSQ==}
|
||||
peerDependencies:
|
||||
'@types/react': '>= 16.8.0 < 20.0.0'
|
||||
react: '>= 16.8.0 < 20.0.0'
|
||||
@@ -1516,8 +1516,8 @@ packages:
|
||||
'@types/node@17.0.45':
|
||||
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
|
||||
|
||||
'@types/node@24.10.0':
|
||||
resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==}
|
||||
'@types/node@24.10.1':
|
||||
resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
|
||||
|
||||
'@types/prismjs@1.26.5':
|
||||
resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==}
|
||||
@@ -1537,8 +1537,8 @@ packages:
|
||||
'@types/react-router@5.1.20':
|
||||
resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==}
|
||||
|
||||
'@types/react@19.2.2':
|
||||
resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==}
|
||||
'@types/react@19.2.4':
|
||||
resolution: {integrity: sha512-tBFxBp9Nfyy5rsmefN+WXc1JeW/j2BpBHFdLZbEVfs9wn3E3NRFxwV0pJg8M1qQAexFpvz73hJXFofV0ZAu92A==}
|
||||
|
||||
'@types/retry@0.12.2':
|
||||
resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==}
|
||||
@@ -1666,8 +1666,8 @@ packages:
|
||||
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
ai@5.0.89:
|
||||
resolution: {integrity: sha512-8Nq+ZojGacQrupoJEQLrTDzT5VtR3gyp5AaqFSV3tzsAXlYQ9Igb7QE3yeoEdzOk5IRfDwWL7mDCUD+oBg1hDA==}
|
||||
ai@5.0.93:
|
||||
resolution: {integrity: sha512-9eGcu+1PJgPg4pRNV4L7tLjRR3wdJC9CXQoNMvtqvYNOLZHFCzjHtVIOr2SIkoJJeu2+sOy3hyiSuTmy2MA40g==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
zod: ^3.25.76 || ^4.1.8
|
||||
@@ -1696,8 +1696,8 @@ packages:
|
||||
ajv@8.17.1:
|
||||
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
|
||||
|
||||
algoliasearch-helper@3.26.0:
|
||||
resolution: {integrity: sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw==}
|
||||
algoliasearch-helper@3.26.1:
|
||||
resolution: {integrity: sha512-CAlCxm4fYBXtvc5MamDzP6Svu8rW4z9me4DCBY1rQ2UDJ0u0flWmusQ8M3nOExZsLLRcUwUPoRAPMrhzOG3erw==}
|
||||
peerDependencies:
|
||||
algoliasearch: '>= 3.1 < 6'
|
||||
|
||||
@@ -1757,8 +1757,8 @@ packages:
|
||||
resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
|
||||
hasBin: true
|
||||
|
||||
autoprefixer@10.4.21:
|
||||
resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
|
||||
autoprefixer@10.4.22:
|
||||
resolution: {integrity: sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -1795,8 +1795,8 @@ packages:
|
||||
balanced-match@1.0.2:
|
||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||
|
||||
baseline-browser-mapping@2.8.25:
|
||||
resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==}
|
||||
baseline-browser-mapping@2.8.27:
|
||||
resolution: {integrity: sha512-2CXFpkjVnY2FT+B6GrSYxzYf65BJWEqz5tIRHCvNsZZ2F3CmsCB37h8SpYgKG7y9C4YAeTipIPWG7EmFmhAeXA==}
|
||||
hasBin: true
|
||||
|
||||
batch@0.6.1:
|
||||
@@ -1834,8 +1834,8 @@ packages:
|
||||
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
browserslist@4.27.0:
|
||||
resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
|
||||
browserslist@4.28.0:
|
||||
resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==}
|
||||
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
|
||||
hasBin: true
|
||||
|
||||
@@ -2250,8 +2250,8 @@ packages:
|
||||
resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
default-browser@5.2.1:
|
||||
resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
|
||||
default-browser@5.3.0:
|
||||
resolution: {integrity: sha512-Qq68+VkJlc8tjnPV1i7HtbIn7ohmjZa88qUvHMIK0ZKUXMCuV45cT7cEXALPUmeXCe0q1DWQkQTemHVaLIFSrg==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
defer-to-connect@2.0.1:
|
||||
@@ -2355,8 +2355,8 @@ packages:
|
||||
ee-first@1.1.1:
|
||||
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
|
||||
|
||||
electron-to-chromium@1.5.249:
|
||||
resolution: {integrity: sha512-5vcfL3BBe++qZ5kuFhD/p8WOM1N9m3nwvJPULJx+4xf2usSlZFJ0qoNYO2fOX4hi3ocuDcmDobtA+5SFr4OmBg==}
|
||||
electron-to-chromium@1.5.250:
|
||||
resolution: {integrity: sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==}
|
||||
|
||||
emoji-regex@8.0.0:
|
||||
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
||||
@@ -2609,8 +2609,8 @@ packages:
|
||||
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
||||
fraction.js@4.3.7:
|
||||
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
|
||||
fraction.js@5.3.4:
|
||||
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
|
||||
|
||||
fresh@0.5.2:
|
||||
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
|
||||
@@ -3066,8 +3066,8 @@ packages:
|
||||
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
|
||||
hasBin: true
|
||||
|
||||
js-yaml@4.1.0:
|
||||
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
|
||||
js-yaml@4.1.1:
|
||||
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
|
||||
hasBin: true
|
||||
|
||||
jsesc@3.1.0:
|
||||
@@ -3251,8 +3251,8 @@ packages:
|
||||
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
||||
memfs@4.50.0:
|
||||
resolution: {integrity: sha512-N0LUYQMUA1yS5tJKmMtU9yprPm6ZIg24yr/OVv/7t6q0kKDIho4cBbXRi1XKttUmNYDYgF/q45qrKE/UhGO0CA==}
|
||||
memfs@4.51.0:
|
||||
resolution: {integrity: sha512-4zngfkVM/GpIhC8YazOsM6E8hoB33NP0BCESPOA6z7qaL6umPJNqkO8CNYaLV2FB2MV6H1O3x2luHHOSqppv+A==}
|
||||
|
||||
merge-descriptors@1.0.3:
|
||||
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
|
||||
@@ -4954,8 +4954,8 @@ packages:
|
||||
yallist@3.1.1:
|
||||
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
|
||||
|
||||
yocto-queue@1.2.1:
|
||||
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
|
||||
yocto-queue@1.2.2:
|
||||
resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
|
||||
engines: {node: '>=12.20'}
|
||||
|
||||
zod@4.1.12:
|
||||
@@ -4966,14 +4966,14 @@ packages:
|
||||
|
||||
snapshots:
|
||||
|
||||
'@ai-sdk/gateway@2.0.7(zod@4.1.12)':
|
||||
'@ai-sdk/gateway@2.0.9(zod@4.1.12)':
|
||||
dependencies:
|
||||
'@ai-sdk/provider': 2.0.0
|
||||
'@ai-sdk/provider-utils': 3.0.16(zod@4.1.12)
|
||||
'@ai-sdk/provider-utils': 3.0.17(zod@4.1.12)
|
||||
'@vercel/oidc': 3.0.3
|
||||
zod: 4.1.12
|
||||
|
||||
'@ai-sdk/provider-utils@3.0.16(zod@4.1.12)':
|
||||
'@ai-sdk/provider-utils@3.0.17(zod@4.1.12)':
|
||||
dependencies:
|
||||
'@ai-sdk/provider': 2.0.0
|
||||
'@standard-schema/spec': 1.0.0
|
||||
@@ -4984,10 +4984,10 @@ snapshots:
|
||||
dependencies:
|
||||
json-schema: 0.4.0
|
||||
|
||||
'@ai-sdk/react@2.0.89(react@19.2.0)(zod@4.1.12)':
|
||||
'@ai-sdk/react@2.0.93(react@19.2.0)(zod@4.1.12)':
|
||||
dependencies:
|
||||
'@ai-sdk/provider-utils': 3.0.16(zod@4.1.12)
|
||||
ai: 5.0.89(zod@4.1.12)
|
||||
'@ai-sdk/provider-utils': 3.0.17(zod@4.1.12)
|
||||
ai: 5.0.93(zod@4.1.12)
|
||||
react: 19.2.0
|
||||
swr: 2.3.6(react@19.2.0)
|
||||
throttleit: 2.1.0
|
||||
@@ -5146,7 +5146,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@babel/compat-data': 7.28.5
|
||||
'@babel/helper-validator-option': 7.27.1
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
lru-cache: 5.1.1
|
||||
semver: 6.3.1
|
||||
|
||||
@@ -6148,26 +6148,26 @@ snapshots:
|
||||
|
||||
'@discoveryjs/json-ext@0.5.7': {}
|
||||
|
||||
'@docsearch/core@4.3.1(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
|
||||
'@docsearch/core@4.3.1(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
|
||||
optionalDependencies:
|
||||
'@types/react': 19.2.2
|
||||
'@types/react': 19.2.4
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
|
||||
'@docsearch/css@4.3.1': {}
|
||||
'@docsearch/css@4.3.2': {}
|
||||
|
||||
'@docsearch/react@4.3.1(@algolia/client-search@5.43.0)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)':
|
||||
'@docsearch/react@4.3.2(@algolia/client-search@5.43.0)(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)':
|
||||
dependencies:
|
||||
'@ai-sdk/react': 2.0.89(react@19.2.0)(zod@4.1.12)
|
||||
'@ai-sdk/react': 2.0.93(react@19.2.0)(zod@4.1.12)
|
||||
'@algolia/autocomplete-core': 1.19.2(@algolia/client-search@5.43.0)(algoliasearch@5.43.0)(search-insights@2.17.3)
|
||||
'@docsearch/core': 4.3.1(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docsearch/css': 4.3.1
|
||||
ai: 5.0.89(zod@4.1.12)
|
||||
'@docsearch/core': 4.3.1(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docsearch/css': 4.3.2
|
||||
ai: 5.0.93(zod@4.1.12)
|
||||
algoliasearch: 5.43.0
|
||||
marked: 16.4.2
|
||||
zod: 4.1.12
|
||||
optionalDependencies:
|
||||
'@types/react': 19.2.2
|
||||
'@types/react': 19.2.4
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
search-insights: 2.17.3
|
||||
@@ -6241,7 +6241,7 @@ snapshots:
|
||||
- uglify-js
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/core@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/babel': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/bundler': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
@@ -6250,7 +6250,7 @@ snapshots:
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0)
|
||||
'@mdx-js/react': 3.1.1(@types/react@19.2.4)(react@19.2.0)
|
||||
boxen: 6.2.1
|
||||
chalk: 4.1.2
|
||||
chokidar: 3.6.0
|
||||
@@ -6356,7 +6356,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@types/history': 4.7.11
|
||||
'@types/react': 19.2.2
|
||||
'@types/react': 19.2.4
|
||||
'@types/react-router-config': 5.0.11
|
||||
'@types/react-router-dom': 5.3.3
|
||||
react: 19.2.0
|
||||
@@ -6370,13 +6370,13 @@ snapshots:
|
||||
- uglify-js
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/plugin-content-blog@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/plugin-content-blog@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/logger': 3.9.2
|
||||
'@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
@@ -6411,13 +6411,13 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/logger': 3.9.2
|
||||
'@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
@@ -6425,7 +6425,7 @@ snapshots:
|
||||
'@types/react-router-config': 5.0.11
|
||||
combine-promises: 1.2.0
|
||||
fs-extra: 11.3.2
|
||||
js-yaml: 4.1.0
|
||||
js-yaml: 4.1.1
|
||||
lodash: 4.17.21
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
@@ -6451,9 +6451,9 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/plugin-content-pages@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/plugin-content-pages@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
@@ -6481,9 +6481,9 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/plugin-css-cascade-layers@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/plugin-css-cascade-layers@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
@@ -6508,9 +6508,9 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/plugin-debug@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/plugin-debug@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
fs-extra: 11.3.2
|
||||
@@ -6536,9 +6536,9 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/plugin-google-analytics@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/plugin-google-analytics@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
react: 19.2.0
|
||||
@@ -6562,9 +6562,9 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/plugin-google-gtag@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/plugin-google-gtag@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@types/gtag.js': 0.0.12
|
||||
@@ -6589,9 +6589,9 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/plugin-google-tag-manager@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/plugin-google-tag-manager@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
react: 19.2.0
|
||||
@@ -6615,9 +6615,9 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/plugin-sitemap@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/plugin-sitemap@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/logger': 3.9.2
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
@@ -6646,9 +6646,9 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/plugin-svgr@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/plugin-svgr@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
@@ -6676,22 +6676,22 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.43.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)':
|
||||
'@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.43.0)(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-css-cascade-layers': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-debug': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-google-analytics': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-google-gtag': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-google-tag-manager': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-sitemap': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-svgr': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/theme-classic': 3.9.2(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.43.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-css-cascade-layers': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-debug': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-google-analytics': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-google-gtag': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-google-tag-manager': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-sitemap': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-svgr': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/theme-classic': 3.9.2(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.43.0)(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
@@ -6718,25 +6718,25 @@ snapshots:
|
||||
|
||||
'@docusaurus/react-loadable@6.0.0(react@19.2.0)':
|
||||
dependencies:
|
||||
'@types/react': 19.2.2
|
||||
'@types/react': 19.2.4
|
||||
react: 19.2.0
|
||||
|
||||
'@docusaurus/theme-classic@3.9.2(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
'@docusaurus/theme-classic@3.9.2(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/logger': 3.9.2
|
||||
'@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-pages': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/theme-translations': 3.9.2
|
||||
'@docusaurus/types': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0)
|
||||
'@mdx-js/react': 3.1.1(@types/react@19.2.4)(react@19.2.0)
|
||||
clsx: 2.1.1
|
||||
infima: 0.2.0-alpha.45
|
||||
lodash: 4.17.21
|
||||
@@ -6768,15 +6768,15 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
|
||||
'@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
|
||||
dependencies:
|
||||
'@docusaurus/mdx-loader': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/module-type-aliases': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@types/history': 4.7.11
|
||||
'@types/react': 19.2.2
|
||||
'@types/react': 19.2.4
|
||||
'@types/react-router-config': 5.0.11
|
||||
clsx: 2.1.1
|
||||
parse-numeric-range: 1.3.0
|
||||
@@ -6792,18 +6792,18 @@ snapshots:
|
||||
- uglify-js
|
||||
- webpack-cli
|
||||
|
||||
'@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.43.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)':
|
||||
'@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.43.0)(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@docsearch/react': 4.3.1(@algolia/client-search@5.43.0)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docsearch/react': 4.3.2(@algolia/client-search@5.43.0)(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)
|
||||
'@docusaurus/core': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/logger': 3.9.2
|
||||
'@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/plugin-content-docs': 3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
'@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/theme-translations': 3.9.2
|
||||
'@docusaurus/utils': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
'@docusaurus/utils-validation': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
algoliasearch: 5.43.0
|
||||
algoliasearch-helper: 3.26.0(algoliasearch@5.43.0)
|
||||
algoliasearch-helper: 3.26.1(algoliasearch@5.43.0)
|
||||
clsx: 2.1.1
|
||||
eta: 2.2.0
|
||||
fs-extra: 11.3.2
|
||||
@@ -6845,7 +6845,7 @@ snapshots:
|
||||
'@mdx-js/mdx': 3.1.1
|
||||
'@types/history': 4.7.11
|
||||
'@types/mdast': 4.0.4
|
||||
'@types/react': 19.2.2
|
||||
'@types/react': 19.2.4
|
||||
commander: 5.1.0
|
||||
joi: 17.13.3
|
||||
react: 19.2.0
|
||||
@@ -6881,7 +6881,7 @@ snapshots:
|
||||
'@docusaurus/utils-common': 3.9.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
fs-extra: 11.3.2
|
||||
joi: 17.13.3
|
||||
js-yaml: 4.1.0
|
||||
js-yaml: 4.1.1
|
||||
lodash: 4.17.21
|
||||
tslib: 2.8.1
|
||||
transitivePeerDependencies:
|
||||
@@ -6906,7 +6906,7 @@ snapshots:
|
||||
globby: 11.1.0
|
||||
gray-matter: 4.0.3
|
||||
jiti: 1.21.7
|
||||
js-yaml: 4.1.0
|
||||
js-yaml: 4.1.1
|
||||
lodash: 4.17.21
|
||||
micromatch: 4.0.8
|
||||
p-queue: 6.6.2
|
||||
@@ -6940,7 +6940,7 @@ snapshots:
|
||||
'@jest/schemas': 29.6.3
|
||||
'@types/istanbul-lib-coverage': 2.0.6
|
||||
'@types/istanbul-reports': 3.0.4
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
'@types/yargs': 17.0.34
|
||||
chalk: 4.1.2
|
||||
|
||||
@@ -7036,10 +7036,10 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)':
|
||||
'@mdx-js/react@3.1.1(@types/react@19.2.4)(react@19.2.0)':
|
||||
dependencies:
|
||||
'@types/mdx': 2.0.13
|
||||
'@types/react': 19.2.2
|
||||
'@types/react': 19.2.4
|
||||
react: 19.2.0
|
||||
|
||||
'@nodelib/fs.scandir@2.1.5':
|
||||
@@ -7204,20 +7204,20 @@ snapshots:
|
||||
'@types/body-parser@1.19.6':
|
||||
dependencies:
|
||||
'@types/connect': 3.4.38
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
|
||||
'@types/bonjour@3.5.13':
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
|
||||
'@types/connect-history-api-fallback@1.5.4':
|
||||
dependencies:
|
||||
'@types/express-serve-static-core': 4.19.7
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
|
||||
'@types/connect@3.4.38':
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
|
||||
'@types/debug@4.1.12':
|
||||
dependencies:
|
||||
@@ -7241,7 +7241,7 @@ snapshots:
|
||||
|
||||
'@types/express-serve-static-core@4.19.7':
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
'@types/qs': 6.14.0
|
||||
'@types/range-parser': 1.2.7
|
||||
'@types/send': 1.2.1
|
||||
@@ -7269,7 +7269,7 @@ snapshots:
|
||||
|
||||
'@types/http-proxy@1.17.17':
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
|
||||
'@types/istanbul-lib-coverage@2.0.6': {}
|
||||
|
||||
@@ -7295,11 +7295,11 @@ snapshots:
|
||||
|
||||
'@types/node-forge@1.3.14':
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
|
||||
'@types/node@17.0.45': {}
|
||||
|
||||
'@types/node@24.10.0':
|
||||
'@types/node@24.10.1':
|
||||
dependencies:
|
||||
undici-types: 7.16.0
|
||||
|
||||
@@ -7312,21 +7312,21 @@ snapshots:
|
||||
'@types/react-router-config@5.0.11':
|
||||
dependencies:
|
||||
'@types/history': 4.7.11
|
||||
'@types/react': 19.2.2
|
||||
'@types/react': 19.2.4
|
||||
'@types/react-router': 5.1.20
|
||||
|
||||
'@types/react-router-dom@5.3.3':
|
||||
dependencies:
|
||||
'@types/history': 4.7.11
|
||||
'@types/react': 19.2.2
|
||||
'@types/react': 19.2.4
|
||||
'@types/react-router': 5.1.20
|
||||
|
||||
'@types/react-router@5.1.20':
|
||||
dependencies:
|
||||
'@types/history': 4.7.11
|
||||
'@types/react': 19.2.2
|
||||
'@types/react': 19.2.4
|
||||
|
||||
'@types/react@19.2.2':
|
||||
'@types/react@19.2.4':
|
||||
dependencies:
|
||||
csstype: 3.1.3
|
||||
|
||||
@@ -7339,11 +7339,11 @@ snapshots:
|
||||
'@types/send@0.17.6':
|
||||
dependencies:
|
||||
'@types/mime': 1.3.5
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
|
||||
'@types/send@1.2.1':
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
|
||||
'@types/serve-index@1.9.4':
|
||||
dependencies:
|
||||
@@ -7352,12 +7352,12 @@ snapshots:
|
||||
'@types/serve-static@1.15.10':
|
||||
dependencies:
|
||||
'@types/http-errors': 2.0.5
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
'@types/send': 0.17.6
|
||||
|
||||
'@types/sockjs@0.3.36':
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
|
||||
'@types/unist@2.0.11': {}
|
||||
|
||||
@@ -7365,7 +7365,7 @@ snapshots:
|
||||
|
||||
'@types/ws@8.18.1':
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
|
||||
'@types/yargs-parser@21.0.3': {}
|
||||
|
||||
@@ -7483,11 +7483,11 @@ snapshots:
|
||||
clean-stack: 2.2.0
|
||||
indent-string: 4.0.0
|
||||
|
||||
ai@5.0.89(zod@4.1.12):
|
||||
ai@5.0.93(zod@4.1.12):
|
||||
dependencies:
|
||||
'@ai-sdk/gateway': 2.0.7(zod@4.1.12)
|
||||
'@ai-sdk/gateway': 2.0.9(zod@4.1.12)
|
||||
'@ai-sdk/provider': 2.0.0
|
||||
'@ai-sdk/provider-utils': 3.0.16(zod@4.1.12)
|
||||
'@ai-sdk/provider-utils': 3.0.17(zod@4.1.12)
|
||||
'@opentelemetry/api': 1.9.0
|
||||
zod: 4.1.12
|
||||
|
||||
@@ -7518,7 +7518,7 @@ snapshots:
|
||||
json-schema-traverse: 1.0.0
|
||||
require-from-string: 2.0.2
|
||||
|
||||
algoliasearch-helper@3.26.0(algoliasearch@5.43.0):
|
||||
algoliasearch-helper@3.26.1(algoliasearch@5.43.0):
|
||||
dependencies:
|
||||
'@algolia/events': 4.0.1
|
||||
algoliasearch: 5.43.0
|
||||
@@ -7579,11 +7579,11 @@ snapshots:
|
||||
|
||||
astring@1.9.0: {}
|
||||
|
||||
autoprefixer@10.4.21(postcss@8.5.6):
|
||||
autoprefixer@10.4.22(postcss@8.5.6):
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
caniuse-lite: 1.0.30001754
|
||||
fraction.js: 4.3.7
|
||||
fraction.js: 5.3.4
|
||||
normalize-range: 0.1.2
|
||||
picocolors: 1.1.1
|
||||
postcss: 8.5.6
|
||||
@@ -7628,7 +7628,7 @@ snapshots:
|
||||
|
||||
balanced-match@1.0.2: {}
|
||||
|
||||
baseline-browser-mapping@2.8.25: {}
|
||||
baseline-browser-mapping@2.8.27: {}
|
||||
|
||||
batch@0.6.1: {}
|
||||
|
||||
@@ -7691,13 +7691,13 @@ snapshots:
|
||||
dependencies:
|
||||
fill-range: 7.1.1
|
||||
|
||||
browserslist@4.27.0:
|
||||
browserslist@4.28.0:
|
||||
dependencies:
|
||||
baseline-browser-mapping: 2.8.25
|
||||
baseline-browser-mapping: 2.8.27
|
||||
caniuse-lite: 1.0.30001754
|
||||
electron-to-chromium: 1.5.249
|
||||
electron-to-chromium: 1.5.250
|
||||
node-releases: 2.0.27
|
||||
update-browserslist-db: 1.1.4(browserslist@4.27.0)
|
||||
update-browserslist-db: 1.1.4(browserslist@4.28.0)
|
||||
|
||||
buffer-from@1.1.2: {}
|
||||
|
||||
@@ -7751,7 +7751,7 @@ snapshots:
|
||||
|
||||
caniuse-api@3.0.0:
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
caniuse-lite: 1.0.30001754
|
||||
lodash.memoize: 4.1.2
|
||||
lodash.uniq: 4.5.0
|
||||
@@ -7923,7 +7923,7 @@ snapshots:
|
||||
|
||||
core-js-compat@3.46.0:
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
|
||||
core-js-pure@3.46.0: {}
|
||||
|
||||
@@ -7934,7 +7934,7 @@ snapshots:
|
||||
cosmiconfig@8.3.6(typescript@5.9.3):
|
||||
dependencies:
|
||||
import-fresh: 3.3.1
|
||||
js-yaml: 4.1.0
|
||||
js-yaml: 4.1.1
|
||||
parse-json: 5.2.0
|
||||
path-type: 4.0.0
|
||||
optionalDependencies:
|
||||
@@ -8029,8 +8029,8 @@ snapshots:
|
||||
|
||||
cssnano-preset-advanced@6.1.2(postcss@8.5.6):
|
||||
dependencies:
|
||||
autoprefixer: 10.4.21(postcss@8.5.6)
|
||||
browserslist: 4.27.0
|
||||
autoprefixer: 10.4.22(postcss@8.5.6)
|
||||
browserslist: 4.28.0
|
||||
cssnano-preset-default: 6.1.2(postcss@8.5.6)
|
||||
postcss: 8.5.6
|
||||
postcss-discard-unused: 6.0.5(postcss@8.5.6)
|
||||
@@ -8040,7 +8040,7 @@ snapshots:
|
||||
|
||||
cssnano-preset-default@6.1.2(postcss@8.5.6):
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
css-declaration-sorter: 7.3.0(postcss@8.5.6)
|
||||
cssnano-utils: 4.0.2(postcss@8.5.6)
|
||||
postcss: 8.5.6
|
||||
@@ -8112,7 +8112,7 @@ snapshots:
|
||||
|
||||
default-browser-id@5.0.0: {}
|
||||
|
||||
default-browser@5.2.1:
|
||||
default-browser@5.3.0:
|
||||
dependencies:
|
||||
bundle-name: 4.1.0
|
||||
default-browser-id: 5.0.0
|
||||
@@ -8223,7 +8223,7 @@ snapshots:
|
||||
|
||||
ee-first@1.1.1: {}
|
||||
|
||||
electron-to-chromium@1.5.249: {}
|
||||
electron-to-chromium@1.5.250: {}
|
||||
|
||||
emoji-regex@8.0.0: {}
|
||||
|
||||
@@ -8350,7 +8350,7 @@ snapshots:
|
||||
|
||||
eval@0.1.8:
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
require-like: 0.1.2
|
||||
|
||||
eventemitter3@4.0.7: {}
|
||||
@@ -8489,7 +8489,7 @@ snapshots:
|
||||
|
||||
forwarded@0.2.0: {}
|
||||
|
||||
fraction.js@4.3.7: {}
|
||||
fraction.js@5.3.4: {}
|
||||
|
||||
fresh@0.5.2: {}
|
||||
|
||||
@@ -8966,7 +8966,7 @@ snapshots:
|
||||
jest-util@29.7.0:
|
||||
dependencies:
|
||||
'@jest/types': 29.6.3
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
chalk: 4.1.2
|
||||
ci-info: 3.9.0
|
||||
graceful-fs: 4.2.11
|
||||
@@ -8974,13 +8974,13 @@ snapshots:
|
||||
|
||||
jest-worker@27.5.1:
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
merge-stream: 2.0.0
|
||||
supports-color: 8.1.1
|
||||
|
||||
jest-worker@29.7.0:
|
||||
dependencies:
|
||||
'@types/node': 24.10.0
|
||||
'@types/node': 24.10.1
|
||||
jest-util: 29.7.0
|
||||
merge-stream: 2.0.0
|
||||
supports-color: 8.1.1
|
||||
@@ -9002,7 +9002,7 @@ snapshots:
|
||||
argparse: 1.0.10
|
||||
esprima: 4.0.1
|
||||
|
||||
js-yaml@4.1.0:
|
||||
js-yaml@4.1.1:
|
||||
dependencies:
|
||||
argparse: 2.0.1
|
||||
|
||||
@@ -9291,7 +9291,7 @@ snapshots:
|
||||
|
||||
media-typer@0.3.0: {}
|
||||
|
||||
memfs@4.50.0:
|
||||
memfs@4.51.0:
|
||||
dependencies:
|
||||
'@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1)
|
||||
'@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
|
||||
@@ -9734,7 +9734,7 @@ snapshots:
|
||||
|
||||
open@10.2.0:
|
||||
dependencies:
|
||||
default-browser: 5.2.1
|
||||
default-browser: 5.3.0
|
||||
define-lazy-prop: 3.0.0
|
||||
is-inside-container: 1.0.0
|
||||
wsl-utils: 0.1.0
|
||||
@@ -9753,7 +9753,7 @@ snapshots:
|
||||
|
||||
p-limit@4.0.0:
|
||||
dependencies:
|
||||
yocto-queue: 1.2.1
|
||||
yocto-queue: 1.2.2
|
||||
|
||||
p-locate@6.0.0:
|
||||
dependencies:
|
||||
@@ -9894,7 +9894,7 @@ snapshots:
|
||||
|
||||
postcss-colormin@6.1.0(postcss@8.5.6):
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
caniuse-api: 3.0.0
|
||||
colord: 2.9.3
|
||||
postcss: 8.5.6
|
||||
@@ -9902,7 +9902,7 @@ snapshots:
|
||||
|
||||
postcss-convert-values@6.1.0(postcss@8.5.6):
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
postcss: 8.5.6
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
@@ -10026,7 +10026,7 @@ snapshots:
|
||||
|
||||
postcss-merge-rules@6.1.1(postcss@8.5.6):
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
caniuse-api: 3.0.0
|
||||
cssnano-utils: 4.0.2(postcss@8.5.6)
|
||||
postcss: 8.5.6
|
||||
@@ -10046,7 +10046,7 @@ snapshots:
|
||||
|
||||
postcss-minify-params@6.1.0(postcss@8.5.6):
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
cssnano-utils: 4.0.2(postcss@8.5.6)
|
||||
postcss: 8.5.6
|
||||
postcss-value-parser: 4.2.0
|
||||
@@ -10115,7 +10115,7 @@ snapshots:
|
||||
|
||||
postcss-normalize-unicode@6.1.0(postcss@8.5.6):
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
postcss: 8.5.6
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
@@ -10191,8 +10191,8 @@ snapshots:
|
||||
'@csstools/postcss-text-decoration-shorthand': 4.0.3(postcss@8.5.6)
|
||||
'@csstools/postcss-trigonometric-functions': 4.0.9(postcss@8.5.6)
|
||||
'@csstools/postcss-unset-value': 4.0.0(postcss@8.5.6)
|
||||
autoprefixer: 10.4.21(postcss@8.5.6)
|
||||
browserslist: 4.27.0
|
||||
autoprefixer: 10.4.22(postcss@8.5.6)
|
||||
browserslist: 4.28.0
|
||||
css-blank-pseudo: 7.0.1(postcss@8.5.6)
|
||||
css-has-pseudo: 7.0.3(postcss@8.5.6)
|
||||
css-prefers-color-scheme: 10.0.0(postcss@8.5.6)
|
||||
@@ -10236,7 +10236,7 @@ snapshots:
|
||||
|
||||
postcss-reduce-initial@6.1.0(postcss@8.5.6):
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
caniuse-api: 3.0.0
|
||||
postcss: 8.5.6
|
||||
|
||||
@@ -10922,7 +10922,7 @@ snapshots:
|
||||
|
||||
stylehacks@6.1.1(postcss@8.5.6):
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
postcss: 8.5.6
|
||||
postcss-selector-parser: 6.1.2
|
||||
|
||||
@@ -11081,9 +11081,9 @@ snapshots:
|
||||
|
||||
unpipe@1.0.0: {}
|
||||
|
||||
update-browserslist-db@1.1.4(browserslist@4.27.0):
|
||||
update-browserslist-db@1.1.4(browserslist@4.28.0):
|
||||
dependencies:
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
escalade: 3.2.0
|
||||
picocolors: 1.1.1
|
||||
|
||||
@@ -11182,7 +11182,7 @@ snapshots:
|
||||
webpack-dev-middleware@7.4.5(webpack@5.102.1):
|
||||
dependencies:
|
||||
colorette: 2.0.20
|
||||
memfs: 4.50.0
|
||||
memfs: 4.51.0
|
||||
mime-types: 3.0.1
|
||||
on-finished: 2.4.1
|
||||
range-parser: 1.2.1
|
||||
@@ -11252,7 +11252,7 @@ snapshots:
|
||||
'@webassemblyjs/wasm-parser': 1.14.1
|
||||
acorn: 8.15.0
|
||||
acorn-import-phases: 1.0.4(acorn@8.15.0)
|
||||
browserslist: 4.27.0
|
||||
browserslist: 4.28.0
|
||||
chrome-trace-event: 1.0.4
|
||||
enhanced-resolve: 5.18.3
|
||||
es-module-lexer: 1.7.0
|
||||
@@ -11339,7 +11339,7 @@ snapshots:
|
||||
|
||||
yallist@3.1.1: {}
|
||||
|
||||
yocto-queue@1.2.1: {}
|
||||
yocto-queue@1.2.2: {}
|
||||
|
||||
zod@4.1.12: {}
|
||||
|
||||
|
||||
@@ -1,23 +1,22 @@
|
||||
import type { SidebarsConfig } from "@docusaurus/plugin-content-docs";
|
||||
|
||||
const sidebars: SidebarsConfig = {
|
||||
tutorialSidebar: [
|
||||
"intro",
|
||||
"quickstart",
|
||||
"faq",
|
||||
"api",
|
||||
{
|
||||
type: "category",
|
||||
label: "Usage",
|
||||
items: [
|
||||
"usage/profiles",
|
||||
"usage/dns",
|
||||
"usage/agents",
|
||||
"usage/environment",
|
||||
"usage/backups",
|
||||
],
|
||||
},
|
||||
],
|
||||
tutorialSidebar: [
|
||||
"quickstart",
|
||||
"faq",
|
||||
{
|
||||
type: "category",
|
||||
label: "Usage",
|
||||
items: [
|
||||
"usage/profiles",
|
||||
"usage/config",
|
||||
"usage/dns",
|
||||
"usage/agents",
|
||||
"usage/backups",
|
||||
"usage/oidc",
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export default sidebars;
|
||||
|
||||
@@ -3,70 +3,70 @@ import Heading from '@theme/Heading';
|
||||
import styles from './styles.module.css';
|
||||
|
||||
type FeatureItem = {
|
||||
title: string;
|
||||
Svg: React.ComponentType<React.ComponentProps<'svg'>>;
|
||||
description: JSX.Element;
|
||||
title: string;
|
||||
Svg: React.ComponentType<React.ComponentProps<'svg'>>;
|
||||
description: JSX.Element;
|
||||
};
|
||||
|
||||
const FeatureList: FeatureItem[] = [
|
||||
{
|
||||
title: 'Simple Management Interface',
|
||||
Svg: require('@site/static/img/dashboard.svg').default,
|
||||
description: (
|
||||
<>
|
||||
Mantrae provides an intuitive UI for managing Traefik routers, middlewares,
|
||||
and DNS entries, making setup and configuration straightforward.
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: 'Flexible DNS Automation',
|
||||
Svg: require('@site/static/img/dns.svg').default,
|
||||
description: (
|
||||
<>
|
||||
Automate DNS entries with Cloudflare, PowerDNS, or Technitium integration,
|
||||
allowing seamless domain configuration for your routers. Check out the
|
||||
<a href="/docs/usage/dns"> dns provider documentation</a>
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: 'Distributed Container Management',
|
||||
Svg: require('@site/static/img/container.svg').default,
|
||||
description: (
|
||||
<>
|
||||
Use Mantrae Agents to gather container information from multiple hosts,
|
||||
centralizing Traefik label management even without Traefik installed.
|
||||
Check out the <a href="/docs/usage/agents">agent documentation</a>
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: 'Simple Management Interface',
|
||||
Svg: require('@site/static/img/dashboard.svg').default,
|
||||
description: (
|
||||
<>
|
||||
Mantrae provides an intuitive UI for managing Traefik routers, middlewares,
|
||||
and DNS entries, making setup and configuration straightforward.
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: 'Flexible DNS Automation',
|
||||
Svg: require('@site/static/img/dns.svg').default,
|
||||
description: (
|
||||
<>
|
||||
Automate DNS entries with Cloudflare, PowerDNS, or Technitium integration,
|
||||
allowing seamless domain configuration for your routers. Check out the
|
||||
<a href="/docs/usage/dns"> dns provider documentation</a>
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: 'Distributed Container Management',
|
||||
Svg: require('@site/static/img/container.svg').default,
|
||||
description: (
|
||||
<>
|
||||
Use Mantrae Agents to gather container information from multiple hosts,
|
||||
centralizing Traefik label management even without Traefik installed.
|
||||
Check out the <a href="/docs/usage/agents">agent documentation</a>
|
||||
</>
|
||||
),
|
||||
},
|
||||
];
|
||||
|
||||
function Feature({ title, Svg, description }: FeatureItem) {
|
||||
return (
|
||||
<div className={clsx('col col--4')}>
|
||||
<div className="text--center">
|
||||
<Svg className={styles.featureSvg} role="img" />
|
||||
return (
|
||||
<div className={clsx('col col--4')}>
|
||||
<div className="text--center">
|
||||
<Svg className={styles.featureSvg} role="img" />
|
||||
</div>
|
||||
<div className="text--center padding-horiz--md">
|
||||
<Heading as="h3">{title}</Heading>
|
||||
<p>{description}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="text--center padding-horiz--md">
|
||||
<Heading as="h3">{title}</Heading>
|
||||
<p>{description}</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
export default function HomepageFeatures(): JSX.Element {
|
||||
return (
|
||||
<section className={styles.features}>
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
{FeatureList.map((props, idx) => (
|
||||
<Feature key={idx} {...props} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
return (
|
||||
<section className={styles.features}>
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
{FeatureList.map((props, idx) => (
|
||||
<Feature key={idx} {...props} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -8,36 +8,36 @@ import Heading from '@theme/Heading';
|
||||
import styles from './index.module.css';
|
||||
|
||||
function HomepageHeader() {
|
||||
const { siteConfig } = useDocusaurusContext();
|
||||
return (
|
||||
<header className={clsx('hero hero--primary', styles.heroBanner)}>
|
||||
<div className="container">
|
||||
<Heading as="h1" className="hero__title">
|
||||
{siteConfig.title}
|
||||
</Heading>
|
||||
<p className="hero__subtitle">{siteConfig.tagline}</p>
|
||||
<div className={styles.buttons}>
|
||||
<Link
|
||||
className="button button--secondary button--lg"
|
||||
to="/intro">
|
||||
Mantrae Tutorial - 5min ⏱️
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
const { siteConfig } = useDocusaurusContext();
|
||||
return (
|
||||
<header className={clsx('hero hero--primary', styles.heroBanner)}>
|
||||
<div className="container">
|
||||
<Heading as="h1" className="hero__title">
|
||||
{siteConfig.title}
|
||||
</Heading>
|
||||
<p className="hero__subtitle">{siteConfig.tagline}</p>
|
||||
<div className={styles.buttons}>
|
||||
<Link
|
||||
className="button button--secondary button--lg"
|
||||
to="/quickstart">
|
||||
Mantrae Tutorial - 5min ⏱️
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
|
||||
export default function Home(): JSX.Element {
|
||||
const { siteConfig } = useDocusaurusContext();
|
||||
return (
|
||||
<Layout
|
||||
title={`Hello from ${siteConfig.title}`}
|
||||
description="Description will go into a meta tag in <head />">
|
||||
<HomepageHeader />
|
||||
<main>
|
||||
<HomepageFeatures />
|
||||
</main>
|
||||
</Layout>
|
||||
);
|
||||
const { siteConfig } = useDocusaurusContext();
|
||||
return (
|
||||
<Layout
|
||||
title={`Hello from ${siteConfig.title}`}
|
||||
description="Description will go into a meta tag in <head />">
|
||||
<HomepageHeader />
|
||||
<main>
|
||||
<HomepageFeatures />
|
||||
</main>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
title: Markdown page example
|
||||
---
|
||||
|
||||
# Markdown page example
|
||||
|
||||
You don't need React to write simple standalone pages.
|
||||
@@ -52,7 +52,7 @@ tasks:
|
||||
update:
|
||||
desc: Update dependencies
|
||||
cmds:
|
||||
- go get -u ./...
|
||||
# - go get -u ./...
|
||||
- cd web && pnpm update --latest
|
||||
- cd docs && pnpm update --latest
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"format": "prettier --write ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@bufbuild/protobuf": "^2.10.0",
|
||||
"@bufbuild/protobuf": "^2.10.1",
|
||||
"@connectrpc/connect": "^2.1.0",
|
||||
"@connectrpc/connect-web": "^2.1.0",
|
||||
"@internationalized/date": "^3.10.0",
|
||||
@@ -21,13 +21,13 @@
|
||||
"@sveltejs/vite-plugin-svelte": "^6.2.1",
|
||||
"@tailwindcss/vite": "^4.1.17",
|
||||
"@types/node": "^24.10.1",
|
||||
"bits-ui": "2.14.2",
|
||||
"bits-ui": "2.14.3",
|
||||
"clsx": "^2.1.1",
|
||||
"formsnap": "^2.0.1",
|
||||
"globals": "^16.5.0",
|
||||
"mode-watcher": "^1.1.0",
|
||||
"oxlint": "^1.28.0",
|
||||
"oxlint-tsgolint": "^0.5.1",
|
||||
"oxlint-tsgolint": "^0.6.0",
|
||||
"prettier": "^3.6.2",
|
||||
"prettier-plugin-svelte": "^3.4.0",
|
||||
"prettier-plugin-tailwindcss": "^0.7.1",
|
||||
|
||||
118
web/pnpm-lock.yaml
generated
118
web/pnpm-lock.yaml
generated
@@ -16,14 +16,14 @@ importers:
|
||||
version: 8.21.3
|
||||
devDependencies:
|
||||
'@bufbuild/protobuf':
|
||||
specifier: ^2.10.0
|
||||
version: 2.10.0
|
||||
specifier: ^2.10.1
|
||||
version: 2.10.1
|
||||
'@connectrpc/connect':
|
||||
specifier: ^2.1.0
|
||||
version: 2.1.0(@bufbuild/protobuf@2.10.0)
|
||||
version: 2.1.0(@bufbuild/protobuf@2.10.1)
|
||||
'@connectrpc/connect-web':
|
||||
specifier: ^2.1.0
|
||||
version: 2.1.0(@bufbuild/protobuf@2.10.0)(@connectrpc/connect@2.1.0(@bufbuild/protobuf@2.10.0))
|
||||
version: 2.1.0(@bufbuild/protobuf@2.10.1)(@connectrpc/connect@2.1.0(@bufbuild/protobuf@2.10.1))
|
||||
'@internationalized/date':
|
||||
specifier: ^3.10.0
|
||||
version: 3.10.0
|
||||
@@ -46,8 +46,8 @@ importers:
|
||||
specifier: ^24.10.1
|
||||
version: 24.10.1
|
||||
bits-ui:
|
||||
specifier: 2.14.2
|
||||
version: 2.14.2(@internationalized/date@3.10.0)(@sveltejs/kit@2.48.4(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(svelte@5.43.6)
|
||||
specifier: 2.14.3
|
||||
version: 2.14.3(@internationalized/date@3.10.0)(@sveltejs/kit@2.48.4(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(svelte@5.43.6)
|
||||
clsx:
|
||||
specifier: ^2.1.1
|
||||
version: 2.1.1
|
||||
@@ -62,10 +62,10 @@ importers:
|
||||
version: 1.1.0(svelte@5.43.6)
|
||||
oxlint:
|
||||
specifier: ^1.28.0
|
||||
version: 1.28.0(oxlint-tsgolint@0.5.1)
|
||||
version: 1.28.0(oxlint-tsgolint@0.6.0)
|
||||
oxlint-tsgolint:
|
||||
specifier: ^0.5.1
|
||||
version: 0.5.1
|
||||
specifier: ^0.6.0
|
||||
version: 0.6.0
|
||||
prettier:
|
||||
specifier: ^3.6.2
|
||||
version: 3.6.2
|
||||
@@ -136,8 +136,8 @@ packages:
|
||||
resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@bufbuild/protobuf@2.10.0':
|
||||
resolution: {integrity: sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==}
|
||||
'@bufbuild/protobuf@2.10.1':
|
||||
resolution: {integrity: sha512-ckS3+vyJb5qGpEYv/s1OebUHDi/xSNtfgw1wqKZo7MR9F2z+qXr0q5XagafAG/9O0QPVIUfST0smluYSTpYFkg==}
|
||||
|
||||
'@connectrpc/connect-web@2.1.0':
|
||||
resolution: {integrity: sha512-4IBFeMeXS1RVtmmFE/MwH+vWq/5vDRKys70va+DAaWDh83Rdy0iUQOJbITUDzvonlY5as3vwfs5yy9Yp2miHSw==}
|
||||
@@ -357,33 +357,33 @@ packages:
|
||||
peerDependencies:
|
||||
svelte: ^5
|
||||
|
||||
'@oxlint-tsgolint/darwin-arm64@0.5.1':
|
||||
resolution: {integrity: sha512-UufHg95w3mto7D78QJkrBfxJlTBSQYj/6nAgfK8L/hBXMEt79VfEF2SyjByiDd98/QWqMygEt5b9rnfFtwLgRQ==}
|
||||
'@oxlint-tsgolint/darwin-arm64@0.6.0':
|
||||
resolution: {integrity: sha512-avIT0fnAQ52jqRWqmyhIdgk18Fw0leaWAxdBYpeJihw1Jr+NWDXebxQNk+NV1krOLHQTj7SWM5JroRe08x3Wgg==}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@oxlint-tsgolint/darwin-x64@0.5.1':
|
||||
resolution: {integrity: sha512-BlDTfMxx9SV7rDsW5on74zG0pHs5iomeynfjdigqRb7BULpoJRXKW3vgRvnkOgNE5qqV2KLduAuC0gBFj+hJRw==}
|
||||
'@oxlint-tsgolint/darwin-x64@0.6.0':
|
||||
resolution: {integrity: sha512-+cZLAv+mpiNHoJLZA0TcKeO+rJFCAWSMkk0TJov0GvIg0HGM04XaoUFxzpFZS6+lNipzlTxq2s8ZFoz1FPCTyQ==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@oxlint-tsgolint/linux-arm64@0.5.1':
|
||||
resolution: {integrity: sha512-O5R+HVBS2jCrO99Tv/SeUn5ExlYMhH10X2gzLq7W2F9Jl6PuhZvAKr+pSOLkbJArgLpn20glM6Q2E9lT3ckBQQ==}
|
||||
'@oxlint-tsgolint/linux-arm64@0.6.0':
|
||||
resolution: {integrity: sha512-cUuxWybs52R4c3SFUS0mhqwxyJlxLBnGTNjQaB6Zn6oFalCA/rZiip9zfpNR0/BjKJG8fvgtiw28MEf4Y8E66w==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@oxlint-tsgolint/linux-x64@0.5.1':
|
||||
resolution: {integrity: sha512-TuzApYs7FFawPlQYePYmtNdf518EsuEUzbOTDb7OUYrepNbBXAgsilyiUoyRCd/NLcThh5JYXCW72yjTEmnBWw==}
|
||||
'@oxlint-tsgolint/linux-x64@0.6.0':
|
||||
resolution: {integrity: sha512-4kuLLjC3Pd3p346xanpl1NjOAQ8WPDOn40af+GspdClS4mwzfQLCp/3jGxzO8ehLPgpqbck1fDGIXM0TdHSOOQ==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@oxlint-tsgolint/win32-arm64@0.5.1':
|
||||
resolution: {integrity: sha512-MxPYy8PCjobXuw6Z6yh+oHIYjlUIipZHvWU+6FX6vbwZn89iBLkJcw2Umzte/ceYZ7rPYNKbjCdD+ZY084US9g==}
|
||||
'@oxlint-tsgolint/win32-arm64@0.6.0':
|
||||
resolution: {integrity: sha512-akPpoQ3MX6Y0MTCD2Wm/fBne8QO2b4A1avk8gXiZoeQi5j5Q6gn17NHk49pjPflShBAfvFwrY39KSQu1UhCHqQ==}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@oxlint-tsgolint/win32-x64@0.5.1':
|
||||
resolution: {integrity: sha512-gGZafigorGdySViM5M1KIJOgsaYP9U6Fu2AoGosJiOwfPBBCJNo9KLrb2XyUJD08CPxK4wHdb0oBeOLm4IXgkQ==}
|
||||
'@oxlint-tsgolint/win32-x64@0.6.0':
|
||||
resolution: {integrity: sha512-NkUOLye7P8lesLKcHBD3BUl3VF61I8m9d1NK0dLtchNRaM4Y6dY6IC8o9BceeyKoAOcm9rv4L4Dstbe/bu4ZVg==}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
@@ -745,8 +745,8 @@ packages:
|
||||
'@types/unist@3.0.3':
|
||||
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
|
||||
|
||||
'@types/validator@13.15.7':
|
||||
resolution: {integrity: sha512-ELdb+iErB0wsVvwvHNn42JoyV7uUO7pAsW7UFVkszmiwc1F0zm+eal7tKhdwkK/MqzxF4/kZpmcSkO1UK1v5LA==}
|
||||
'@types/validator@13.15.8':
|
||||
resolution: {integrity: sha512-/NAHBJ0RwpsbLzzbLoLm/GnvCGB+A0/p5S61RUIsh7j3MP2dMkdUbWNdFqnluLlUheAs1CR2GlX2R7uzb7Tc0w==}
|
||||
|
||||
'@typeschema/class-validator@0.3.0':
|
||||
resolution: {integrity: sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww==}
|
||||
@@ -794,8 +794,8 @@ packages:
|
||||
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
bits-ui@2.14.2:
|
||||
resolution: {integrity: sha512-YqpAJj/nRTZjf7IlgUC3QlepVZ7YFiAQWpZaYUOAZFW5Py+g5DYkhEDTdNFI5SReo7l1rct/nRpMK4pfL9Xffw==}
|
||||
bits-ui@2.14.3:
|
||||
resolution: {integrity: sha512-Dkpenu6F5WUfdDJn5D8ALkTaAM+7sUCszKjzav5TWAzsq1fj2tcqKYJcUm82OS+JlgcolI7LOkrqIXzKnt56RA==}
|
||||
engines: {node: '>=20'}
|
||||
peerDependencies:
|
||||
'@internationalized/date': ^3.8.1
|
||||
@@ -859,8 +859,8 @@ packages:
|
||||
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
devalue@5.4.2:
|
||||
resolution: {integrity: sha512-MwPZTKEPK2k8Qgfmqrd48ZKVvzSQjgW0lXLxiIBA8dQjtf/6mw6pggHNLcyDKyf+fI6eXxlQwPsfaCMTU5U+Bw==}
|
||||
devalue@5.5.0:
|
||||
resolution: {integrity: sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==}
|
||||
|
||||
devlop@1.1.0:
|
||||
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
|
||||
@@ -1096,8 +1096,8 @@ packages:
|
||||
oniguruma-to-es@4.3.3:
|
||||
resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==}
|
||||
|
||||
oxlint-tsgolint@0.5.1:
|
||||
resolution: {integrity: sha512-C1MgHZRjs1uWJzRybwxlqHm2qvv8KrX0sEfZIaIWphJ9FJG5aUqEkGGa2Oug48hUgNbFgNB+KUpO7d8+7raAZQ==}
|
||||
oxlint-tsgolint@0.6.0:
|
||||
resolution: {integrity: sha512-kb6T36Zht1pu0P35iNc3dRFtKwdzvoDuAKNwypbQMwk5tCREeO9jD6343O7oIO6hBSQ3FOr0B8dAqQbVL9IM/Q==}
|
||||
hasBin: true
|
||||
|
||||
oxlint@1.28.0:
|
||||
@@ -1522,16 +1522,16 @@ snapshots:
|
||||
'@babel/runtime@7.28.4':
|
||||
optional: true
|
||||
|
||||
'@bufbuild/protobuf@2.10.0': {}
|
||||
'@bufbuild/protobuf@2.10.1': {}
|
||||
|
||||
'@connectrpc/connect-web@2.1.0(@bufbuild/protobuf@2.10.0)(@connectrpc/connect@2.1.0(@bufbuild/protobuf@2.10.0))':
|
||||
'@connectrpc/connect-web@2.1.0(@bufbuild/protobuf@2.10.1)(@connectrpc/connect@2.1.0(@bufbuild/protobuf@2.10.1))':
|
||||
dependencies:
|
||||
'@bufbuild/protobuf': 2.10.0
|
||||
'@connectrpc/connect': 2.1.0(@bufbuild/protobuf@2.10.0)
|
||||
'@bufbuild/protobuf': 2.10.1
|
||||
'@connectrpc/connect': 2.1.0(@bufbuild/protobuf@2.10.1)
|
||||
|
||||
'@connectrpc/connect@2.1.0(@bufbuild/protobuf@2.10.0)':
|
||||
'@connectrpc/connect@2.1.0(@bufbuild/protobuf@2.10.1)':
|
||||
dependencies:
|
||||
'@bufbuild/protobuf': 2.10.0
|
||||
'@bufbuild/protobuf': 2.10.1
|
||||
|
||||
'@esbuild/aix-ppc64@0.25.12':
|
||||
optional: true
|
||||
@@ -1676,22 +1676,22 @@ snapshots:
|
||||
dependencies:
|
||||
svelte: 5.43.6
|
||||
|
||||
'@oxlint-tsgolint/darwin-arm64@0.5.1':
|
||||
'@oxlint-tsgolint/darwin-arm64@0.6.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint-tsgolint/darwin-x64@0.5.1':
|
||||
'@oxlint-tsgolint/darwin-x64@0.6.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint-tsgolint/linux-arm64@0.5.1':
|
||||
'@oxlint-tsgolint/linux-arm64@0.6.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint-tsgolint/linux-x64@0.5.1':
|
||||
'@oxlint-tsgolint/linux-x64@0.6.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint-tsgolint/win32-arm64@0.5.1':
|
||||
'@oxlint-tsgolint/win32-arm64@0.6.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint-tsgolint/win32-x64@0.5.1':
|
||||
'@oxlint-tsgolint/win32-x64@0.6.0':
|
||||
optional: true
|
||||
|
||||
'@oxlint/darwin-arm64@1.28.0':
|
||||
@@ -1859,7 +1859,7 @@ snapshots:
|
||||
'@types/cookie': 0.6.0
|
||||
acorn: 8.15.0
|
||||
cookie: 0.6.0
|
||||
devalue: 5.4.2
|
||||
devalue: 5.5.0
|
||||
esm-env: 1.2.2
|
||||
kleur: 4.1.5
|
||||
magic-string: 0.30.21
|
||||
@@ -1990,7 +1990,7 @@ snapshots:
|
||||
|
||||
'@types/unist@3.0.3': {}
|
||||
|
||||
'@types/validator@13.15.7':
|
||||
'@types/validator@13.15.8':
|
||||
optional: true
|
||||
|
||||
'@typeschema/class-validator@0.3.0(@types/json-schema@7.0.15)(class-validator@0.14.2)':
|
||||
@@ -2015,7 +2015,7 @@ snapshots:
|
||||
'@vinejs/vine@3.0.1':
|
||||
dependencies:
|
||||
'@poppinss/macroable': 1.1.0
|
||||
'@types/validator': 13.15.7
|
||||
'@types/validator': 13.15.8
|
||||
'@vinejs/compiler': 3.0.0
|
||||
camelcase: 8.0.0
|
||||
dayjs: 1.11.19
|
||||
@@ -2042,7 +2042,7 @@ snapshots:
|
||||
|
||||
axobject-query@4.1.0: {}
|
||||
|
||||
bits-ui@2.14.2(@internationalized/date@3.10.0)(@sveltejs/kit@2.48.4(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(svelte@5.43.6):
|
||||
bits-ui@2.14.3(@internationalized/date@3.10.0)(@sveltejs/kit@2.48.4(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(svelte@5.43.6):
|
||||
dependencies:
|
||||
'@floating-ui/core': 1.7.3
|
||||
'@floating-ui/dom': 1.7.4
|
||||
@@ -2073,7 +2073,7 @@ snapshots:
|
||||
|
||||
class-validator@0.14.2:
|
||||
dependencies:
|
||||
'@types/validator': 13.15.7
|
||||
'@types/validator': 13.15.8
|
||||
libphonenumber-js: 1.12.26
|
||||
validator: 13.15.23
|
||||
optional: true
|
||||
@@ -2097,7 +2097,7 @@ snapshots:
|
||||
|
||||
detect-libc@2.1.2: {}
|
||||
|
||||
devalue@5.4.2: {}
|
||||
devalue@5.5.0: {}
|
||||
|
||||
devlop@1.1.0:
|
||||
dependencies:
|
||||
@@ -2346,16 +2346,16 @@ snapshots:
|
||||
regex: 6.0.1
|
||||
regex-recursion: 6.0.2
|
||||
|
||||
oxlint-tsgolint@0.5.1:
|
||||
oxlint-tsgolint@0.6.0:
|
||||
optionalDependencies:
|
||||
'@oxlint-tsgolint/darwin-arm64': 0.5.1
|
||||
'@oxlint-tsgolint/darwin-x64': 0.5.1
|
||||
'@oxlint-tsgolint/linux-arm64': 0.5.1
|
||||
'@oxlint-tsgolint/linux-x64': 0.5.1
|
||||
'@oxlint-tsgolint/win32-arm64': 0.5.1
|
||||
'@oxlint-tsgolint/win32-x64': 0.5.1
|
||||
'@oxlint-tsgolint/darwin-arm64': 0.6.0
|
||||
'@oxlint-tsgolint/darwin-x64': 0.6.0
|
||||
'@oxlint-tsgolint/linux-arm64': 0.6.0
|
||||
'@oxlint-tsgolint/linux-x64': 0.6.0
|
||||
'@oxlint-tsgolint/win32-arm64': 0.6.0
|
||||
'@oxlint-tsgolint/win32-x64': 0.6.0
|
||||
|
||||
oxlint@1.28.0(oxlint-tsgolint@0.5.1):
|
||||
oxlint@1.28.0(oxlint-tsgolint@0.6.0):
|
||||
optionalDependencies:
|
||||
'@oxlint/darwin-arm64': 1.28.0
|
||||
'@oxlint/darwin-x64': 1.28.0
|
||||
@@ -2365,7 +2365,7 @@ snapshots:
|
||||
'@oxlint/linux-x64-musl': 1.28.0
|
||||
'@oxlint/win32-arm64': 1.28.0
|
||||
'@oxlint/win32-x64': 1.28.0
|
||||
oxlint-tsgolint: 0.5.1
|
||||
oxlint-tsgolint: 0.6.0
|
||||
|
||||
picocolors@1.1.1: {}
|
||||
|
||||
@@ -2575,7 +2575,7 @@ snapshots:
|
||||
sveltekit-superforms@2.28.1(@sveltejs/kit@2.48.4(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(@types/json-schema@7.0.15)(esbuild@0.25.12)(svelte@5.43.6)(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@sveltejs/kit': 2.48.4(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)))(svelte@5.43.6)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1))
|
||||
devalue: 5.4.2
|
||||
devalue: 5.5.0
|
||||
memoize-weak: 1.0.2
|
||||
svelte: 5.43.6
|
||||
ts-deepmerge: 7.0.3
|
||||
|
||||
Reference in New Issue
Block a user