diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 000000000..6893dc38e
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+# Require review/approval for any changes to GitHub Actions workflows
+/.github/workflows/ @AchoArnold
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
new file mode 100644
index 000000000..dd2341311
--- /dev/null
+++ b/.github/copilot-instructions.md
@@ -0,0 +1,141 @@
+# Copilot Instructions for httpSMS
+
+httpSMS is a service that turns an Android phone into an SMS gateway via an HTTP API. This is a monorepo with three components:
+
+- **`api/`** — Go backend (Fiber, GORM, PostgreSQL)
+- **`web/`** — Nuxt 2 frontend (Vue 2, Vuetify 2, TypeScript)
+- **`android/`** — Native Android app (Kotlin)
+
+## Build, Test, and Lint Commands
+
+### API (Go)
+
+```bash
+cd api
+
+# Development with hot-reload
+air
+
+# Build
+go build -o ./tmp/main.exe .
+
+# Run tests
+go test ./...
+
+# Run a single test
+go test ./pkg/services/ -run TestMessageService
+
+# Generate Swagger docs (required after changing API annotations)
+swag init --requiredByDefault --parseDependency --parseInternal
+
+# Pre-commit hooks run: go-fumpt, go-imports, go-lint, go-mod-tidy
+```
+
+### Web (Nuxt/Vue)
+
+```bash
+cd web
+
+# Install dependencies
+pnpm install
+
+# Development server (port 3000)
+pnpm dev
+
+# Lint (eslint + stylelint + prettier)
+pnpm lint
+
+# Auto-fix lint issues
+pnpm lintfix
+
+# Run tests (Jest)
+pnpm test
+
+# Static site generation (production build)
+pnpm run generate
+
+# Regenerate TypeScript API models from Swagger
+pnpm api:models
+```
+
+### Android (Kotlin)
+
+```bash
+cd android
+
+# Build
+./gradlew build
+
+# Debug APK
+./gradlew assembleDebug
+
+# Release APK
+./gradlew assembleRelease
+```
+
+### Docker (full stack)
+
+```bash
+# Start all services (PostgreSQL, Redis, API, Web)
+docker compose up --build
+# API at localhost:8000, Web at localhost:3000
+```
+
+## Architecture
+
+### API — Layered Architecture with Event-Driven Processing
+
+The API uses a **DI container** (`pkg/di/container.go`) that lazily initializes all services as singletons. The layered architecture flows as:
+
+**Handlers → Services → Repositories → GORM/PostgreSQL**
+
+- **Handlers** (`pkg/handlers/`) — Fiber HTTP handlers. Each has a `RegisterRoutes()` method and embeds a base `handler` struct with standardized response methods (`responseBadRequest`, `responseNotFound`, etc.).
+- **Services** (`pkg/services/`) — Business logic. Orchestrate repositories and dispatch events.
+- **Repositories** (`pkg/repositories/`) — Data access via GORM. Interfaces defined alongside GORM implementations (prefixed `gorm*`).
+- **Validators** (`pkg/validators/`) — One validator per handler, return `url.Values` for field errors.
+- **Entities** (`pkg/entities/`) — Domain models, auto-migrated by GORM.
+
+**Event system**: Uses CloudEvents spec (`cloudevents/sdk-go`). Events defined in `pkg/events/` (31 event types). Listeners in `pkg/listeners/` process events either synchronously or via Google Cloud Tasks queue (emulator mode for local dev).
+
+**Entry point**: `main.go` loads `.env` in local mode, creates the DI container, and starts Fiber on `APP_PORT`.
+
+### Web — Nuxt 2 Static SPA
+
+- **State management**: Single Vuex store (`store/index.ts`) — actions make API calls via Axios, mutations update state, getters expose computed values.
+- **Components**: Use `vue-property-decorator` class syntax with `@Component`, `@Prop`, `@Watch` decorators.
+- **API client**: Axios configured in `plugins/axios.ts` with Firebase bearer token auth and `x-api-key` header support.
+- **API models**: TypeScript types in `models/` are auto-generated from the Swagger spec via `swagger-typescript-api`.
+- **Auth**: Firebase Authentication (Email/Password, Google, GitHub) with `auth` and `guest` middleware for route guards.
+- **Real-time**: Pusher.js for live message updates.
+
+### Android — Task-Oriented, Event-Driven
+
+- **No MVVM/Clean Architecture** — uses a flat package structure with Activities, Services, BroadcastReceivers, and WorkManager tasks.
+- **FCM integration**: `MyFirebaseMessagingService` receives push notifications → schedules `SendSmsWorker` via WorkManager → fetches message from API → sends SMS.
+- **Dual SIM support**: Independent settings per SIM via `Settings` singleton (SharedPreferences).
+- **HTTP client**: OkHttp with `x-api-key` authentication against the API.
+- **Encryption**: AES-256/CFB with SHA-256 key derivation (`Encrypter.kt`).
+
+## Key Conventions
+
+### API (Go)
+
+- **Error handling**: Use `github.com/palantir/stacktrace` — wrap errors with `stacktrace.Propagate(err, "context")` or `stacktrace.PropagateWithCode()`. Never return bare errors.
+- **Database queries**: Always use GORM query builder with context propagation (`repository.db.WithContext(ctx)`). No raw SQL.
+- **Route registration**: Each handler defines `RegisterRoutes()` called from the DI container. Routes follow REST conventions under `/v1/`.
+- **Middleware chain**: HTTP Logger → OpenTelemetry → CORS → Request Logger → Bearer Auth → API Key Auth.
+- **Observability**: All layers are instrumented with OpenTelemetry (Fiber, GORM, Redis). Pass `logger` and `tracer` to constructors.
+- **Code formatting**: `go-fumpt` (not `gofmt`), enforced via pre-commit hooks.
+
+### Web (Vue/TypeScript)
+
+- **Formatting**: No semicolons, single quotes, 2-space indentation (Prettier + ESLint).
+- **Component style**: Class-based with `vue-property-decorator`, not Options API (though some pages use `Vue.extend()`).
+- **Store pattern**: Actions handle async API calls and commit mutations. Access store from components via `this.$store`.
+
+### Android (Kotlin)
+
+- **API calls**: Use `HttpSmsApiService` singleton (static `create()` factory). OkHttp client with `x-api-key` header.
+- **Background work**: Use WorkManager for tasks that must survive process death. Direct `Thread { }` for lightweight background ops.
+- **State**: `Settings` object (SharedPreferences singleton) for all persistent state.
+- **Phone number formatting**: Use `libphonenumber` for E.164 format validation.
diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml
new file mode 100644
index 000000000..f9b756ed6
--- /dev/null
+++ b/.github/workflows/api.yml
@@ -0,0 +1,132 @@
+name: api
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+permissions:
+ contents: read
+ id-token: write
+
+jobs:
+ test:
+ name: Integration Tests
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v7
+
+ - name: Set up Go
+ uses: actions/setup-go@v7
+ with:
+ go-version: stable
+
+ - name: Generate Firebase credentials
+ run: |
+ bash tests/generate-firebase-credentials.sh tests/firebase-credentials.json
+ echo "FIREBASE_CREDENTIALS=$(jq -c . tests/firebase-credentials.json)" >> $GITHUB_ENV
+
+ - name: Start Services
+ working-directory: ./tests
+ run: docker compose up -d --build
+
+ - name: Wait for services to be healthy
+ working-directory: ./tests
+ run: |
+ echo "Waiting for MongoDB to be healthy..."
+ for i in $(seq 1 20); do
+ if docker compose exec mongodb mongosh --eval "db.runCommand('ping').ok" --quiet >/dev/null 2>&1; then
+ echo "MongoDB is healthy!"
+ break
+ fi
+ if [ $i -eq 20 ]; then
+ echo "MongoDB failed to become healthy"
+ docker compose logs mongodb
+ exit 1
+ fi
+ echo "MongoDB attempt $i/20 - waiting 3s..."
+ sleep 3
+ done
+
+ echo "Waiting for API to be healthy..."
+ for i in $(seq 1 40); do
+ if docker compose exec api curl -sf http://localhost:8000/health >/dev/null 2>&1; then
+ echo "API is healthy!"
+ break
+ fi
+ if [ $i -eq 40 ]; then
+ echo "API failed to become healthy"
+ docker compose logs api
+ exit 1
+ fi
+ echo "Attempt $i/40 - waiting 5s..."
+ sleep 5
+ done
+
+ - name: Seed Database
+ working-directory: ./tests
+ run: |
+ echo "Waiting for seed container to finish..."
+ docker compose wait seed || true
+ sleep 2
+
+ - name: Run Handler Integration Tests
+ working-directory: ./api
+ env:
+ USER_API_KEY: test-user-api-key
+ run: go test -tags integration -v -timeout 60s ./pkg/handlers
+
+ - name: Run Integration Tests
+ working-directory: ./tests
+ run: go test -v -timeout 300s ./...
+
+ - name: Collect Logs on Failure
+ if: failure()
+ working-directory: ./tests
+ run: |
+ docker compose logs --tail 200
+
+ - name: Stop Services
+ if: always()
+ working-directory: ./tests
+ run: docker compose down -v
+
+ deploy:
+ name: Deploy
+ runs-on: ubuntu-latest
+ needs: test
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
+ steps:
+ - name: Authenticate to Google Cloud
+ uses: google-github-actions/auth@v3
+ with:
+ workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
+ service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}
+
+ - name: Set up Cloud SDK
+ uses: google-github-actions/setup-gcloud@v3
+
+ - name: Trigger Cloud Build Deploy
+ run: |
+ BUILD_ID=$(gcloud builds triggers run api-httpsms-com \
+ --region=global \
+ --project=httpsms-86c51 \
+ --sha=${{ github.sha }} \
+ --format="value(metadata.build.id)")
+ echo -e "Cloud Build: \033[34mhttps://console.cloud.google.com/cloud-build/builds/$BUILD_ID?project=httpsms-86c51\033[0m"
+ echo ""
+ echo "Polling Cloud Build Status..."
+ while true; do
+ STATUS=$(gcloud builds describe "$BUILD_ID" --region=global --project=httpsms-86c51 --format="value(status)")
+ LOCAL_TIME=$(date -u '+%Y-%m-%d %H:%M:%S UTC')
+ echo -e " \033[90m${LOCAL_TIME}\033[0m status=\033[36m${STATUS}\033[0m"
+ case "$STATUS" in
+ SUCCESS) echo -e "\033[32mBuild succeeded!\033[0m"; exit 0 ;;
+ FAILURE|TIMEOUT|CANCELLED|EXPIRED|INTERNAL_ERROR) echo -e "\033[31mBuild failed with status: $STATUS\033[0m"; exit 1 ;;
+ esac
+ sleep 30
+ done
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 26d01123d..000000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-name: ci
-
-on:
- push:
- branches:
- - main
-
-defaults:
- run:
- working-directory: ./web
-
-jobs:
- ci:
- runs-on: ${{ matrix.os }}
-
- strategy:
- matrix:
- os: [ubuntu-latest]
- node: [20]
-
- steps:
- - name: Checkout 🛎
- uses: actions/checkout@master
-
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 9
-
- - name: Install dependencies 📦
- run: pnpm install
-
- - name: Run linter 👀
- run: pnpm lint
-
- - name: Run tests 🧪
- run: pnpm test
-
- - name: Debug 🐛
- run: echo GITHUB_SHA=${GITHUB_SHA}
-
- - name: Build 🏗️
- run: mv .env.production .env && echo GITHUB_SHA=${GITHUB_SHA} >> .env && pnpm run generate
-
- - name: Cloudflare Deploy 🚀
- uses: cloudflare/pages-action@1
- with:
- apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- projectName: httpsms
- directory: web/dist
- gitHubToken: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Firebase Deploy 🚀
- uses: FirebaseExtended/action-hosting-deploy@v0
- with:
- repoToken: "${{ secrets.GITHUB_TOKEN }}"
- channelId: live
- entryPoint: "./web"
- firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_HTTPSMS_86C51 }}"
- projectId: httpsms-86c51
diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml
new file mode 100644
index 000000000..50813d153
--- /dev/null
+++ b/.github/workflows/web.yml
@@ -0,0 +1,92 @@
+name: web
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+permissions:
+ contents: read
+ pull-requests: write
+ deployments: write
+
+defaults:
+ run:
+ working-directory: ./web
+
+jobs:
+ validate:
+ name: Validate
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ node: [24]
+
+ steps:
+ - name: Checkout 🛎
+ uses: actions/checkout@master
+
+ - uses: pnpm/action-setup@v6
+ name: Install pnpm
+ with:
+ version: 11.11.0
+
+ - name: Install dependencies 📦
+ run: pnpm install --trust-lockfile
+
+ - name: Run linter 👀
+ run: pnpm lint
+
+ - name: Run tests 🧪
+ run: pnpm test
+
+ - name: Build 🏗️
+ run: mv .env.production .env && echo "GITHUB_SHA=${GITHUB_SHA}" >> .env && pnpm run generate
+
+ deploy:
+ name: Deploy
+ needs: validate
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout 🛎
+ uses: actions/checkout@master
+
+ - name: Setup Node 🟢
+ uses: actions/setup-node@v7
+ with:
+ node-version: '24.18'
+
+ - uses: pnpm/action-setup@v6
+ name: Install pnpm
+ with:
+ version: 11.11.0
+
+ - name: Install dependencies 📦
+ run: pnpm install --trust-lockfile
+
+ - name: Build 🏗️
+ run: mv .env.production .env && echo "GITHUB_SHA=${GITHUB_SHA}" >> .env && pnpm run generate
+
+ - name: Cloudflare Deploy 🚀
+ uses: cloudflare/wrangler-action@v4
+ with:
+ apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ command: pages deploy web/.output/public --project-name=httpsms
+ gitHubToken: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Firebase Deploy 🚀
+ uses: FirebaseExtended/action-hosting-deploy@500ac625ca2dd40cbd15f7659af953801858032a
+ with:
+ repoToken: "${{ secrets.GITHUB_TOKEN }}"
+ channelId: live
+ entryPoint: "./web"
+ firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_HTTPSMS_86C51 }}"
+ projectId: httpsms-86c51
diff --git a/.gitignore b/.gitignore
index b114cdd06..8f4caf4b5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,13 @@
android/app/debug/
*main.exe*
android/app/release/
+
+tests/firebase-credentials.json
+tests/emulator/emulator.exe
+SECURITY_AUDIT_REPORT.md
+
+*.exe
+
+.output
+.agents/
+skills-lock.json
diff --git a/.mcp.json b/.mcp.json
new file mode 100644
index 000000000..ef3d2cf0a
--- /dev/null
+++ b/.mcp.json
@@ -0,0 +1,27 @@
+{
+ "mcpServers": {
+ "playwright": {
+ "type": "stdio",
+ "command": "npx",
+ "args": [
+ "-y",
+ "@modelcontextprotocol/server-playwright",
+ "--base-url",
+ "http://localhost:3000"
+ ],
+ "env": {
+ "BROWSER": "chromium"
+ }
+ },
+ "context7": {
+ "type": "stdio",
+ "command": "npx",
+ "args": ["@upstash/context7-mcp@latest"]
+ },
+ "axiom": {
+ "type": "stdio",
+ "command": "npx",
+ "args": ["-y", "mcp-remote", "https://mcp.axiom.co/mcp"]
+ }
+ }
+}
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6e658730d..8aa228d71 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,19 +1,20 @@
repos:
- repo: https://github.com/tekwizely/pre-commit-golang
- rev: v1.0.0-rc.1
+ rev: v1.0.0-rc.4
hooks:
- id: go-fumpt
- id: go-mod-tidy
- id: go-lint
- id: go-imports
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.4.0
+ rev: v6.0.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/pre-commit/mirrors-prettier
- rev: v3.0.0
+ rev: v4.0.0-alpha.8
hooks:
- id: prettier
+ exclude: ^web/
diff --git a/README.md b/README.md
index f1d9a1b09..42a6b0d36 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,13 @@
# httpSMS
-[](https://github.com/NdoleStudio/httpsms/actions/workflows/ci.yml)
+[](https://github.com/NdoleStudio/httpsms/actions/workflows/web.yml)
+[](https://github.com/NdoleStudio/httpsms/actions/workflows/api.yml)
[](https://github.com/NdoleStudio/httpsms/graphs/contributors)
[](https://github.com/NdoleStudio/httpsms/blob/master/LICENSE)
[](CODE_OF_CONDUCT.md)
[](https://scrutinizer-ci.com/g/NdoleStudio/httpsms/?branch=main)
[](https://uptime.betterstack.com/?utm_source=status_badge)
+[](https://www.greptile.com/?utm_source=oss_badge&utm_medium=readme&utm_campaign=greptile_for_open_source)
[](https://github.com/sponsors/ndolestudio)
[](https://discord.gg/kGk8HVqeEZ)
@@ -37,11 +39,13 @@ Quick Start Guide 👉 [https://docs.httpsms.com](https://docs.httpsms.com)
- [Self Host Setup - Docker](#self-host-setup---docker)
- [1. Setup Firebase](#1-setup-firebase)
- [2. Setup SMTP Email service](#2-setup-smtp-email-service)
- - [3. Download the code](#3-download-the-code)
- - [4. Setup the environment variables](#4-setup-the-environment-variables)
- - [5. Build and Run](#5-build-and-run)
- - [6. Create the System User](#6-create-the-system-user)
- - [7. Build the Android App.](#7-build-the-android-app)
+ - [3. Setup Cloudflare Turnstile](#3-setup-cloudflare-turnstile)
+ - [4. Download the code](#4-download-the-code)
+ - [5. Setup the environment variables](#5-setup-the-environment-variables)
+ - [6. Build and Run](#6-build-and-run)
+ - [7. Create the System User](#7-create-the-system-user)
+ - [8. Build the Android App.](#8-build-the-android-app)
+- [Integration Testing](#integration-testing)
- [License](#license)
@@ -60,7 +64,7 @@ It is hosted as a single page application on firebase. The source code is in the
## API
The API https://api.httpsms.com is built using [Fiber](https://gofiber.io/), Go and [CockroachDB](https://www.cockroachlabs.com/) for the database.
-It rus as a serverless application on Google Cloud Run. The API documentation can be found here https://api.httpsms.com/index.html
+It runs as a serverless application on Google Cloud Run. The API documentation can be found here https://api.httpsms.com/index.html
```go
// Sending an SMS Message using Go
@@ -92,7 +96,7 @@ works best for you:
### End-to-end Encryption
-You can encrypt your messages end-to-end ysubg the military grade [AES-256 encryption](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)
+You can encrypt your messages end-to-end using the military grade [AES-256 encryption](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)
algorithm. Your encryption key is stored only on our mobile phone so the even the server won't have any way to view the
content of your SMS messages which are sent and received on your Android phone.
@@ -164,7 +168,15 @@ const firebaseConfig = {
The httpSMS application uses [SMTP](https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol) to send emails to users e.g. when your Android phone has been offline for a long period of time.
You can use a service like [mailtrap](https://mailtrap.io/) to create an SMTP server for development purposes.
-### 3. Download the code
+### 3. Setup Cloudflare Turnstile
+
+The message search route (`/v1/messages/search`) is protected by a [Cloudflare Turnstile](https://developers.cloudflare.com/turnstile/get-started/) captcha to prevent abuse. You need to set up a Turnstile widget for the search messages feature to work.
+
+1. Go to the [Cloudflare dashboard](https://dash.cloudflare.com/) and navigate to **Turnstile**.
+2. Add a new site and configure it for your self-hosted domain (e.g., `localhost` for local development).
+3. Note down the **Site Key** and **Secret Key** — you will need them for the frontend and backend environment variables respectively.
+
+### 4. Download the code
Clone the httpSMS GitHub repository
@@ -172,7 +184,7 @@ Clone the httpSMS GitHub repository
git clone https://github.com/NdoleStudio/httpsms.git
```
-### 4. Setup the environment variables
+### 5. Setup the environment variables
- Copy the `.env.docker` file in the `web` directory into `.env`
@@ -190,6 +202,9 @@ FIREBASE_STORAGE_BUCKET=
FIREBASE_MESSAGING_SENDER_ID=
FIREBASE_APP_ID=
FIREBASE_MEASUREMENT_ID=
+
+# Cloudflare Turnstile site key from step 3
+CLOUDFLARE_TURNSTILE_SITE_KEY=
```
- Copy the `.env.docker` file in the `api` directory into `.env`
@@ -198,7 +213,7 @@ FIREBASE_MEASUREMENT_ID=
cp api/.env.docker api/.env
```
-- Update the environment variables in the `.env` file in the `api` directory with your firebase service account credentials and SMTP server details.
+- Update the environment variables in the `.env` file in the `api` directory with your firebase service account credentials, SMTP server details, and Cloudflare Turnstile secret key.
```dotenv
# SMTP email server settings
@@ -212,11 +227,14 @@ FIREBASE_CREDENTIALS=
# This is the `projectId` from your firebase web config
GCP_PROJECT_ID=
+
+# Cloudflare Turnstile secret key from step 3
+CLOUDFLARE_TURNSTILE_SECRET_KEY=
```
- Don't bother about the `EVENTS_QUEUE_USER_API_KEY` and `EVENTS_QUEUE_USER_ID` settings. We will set that up later.
-### 5. Build and Run
+### 6. Build and Run
- Build and run the API, the web UI, database and cache using the `docker-compose.yml` file. It takes a while for build and download all the docker images.
When it's finished, you'll be able to access the web UI at http://localhost:3000 and the API at http://localhost:8000
@@ -225,15 +243,41 @@ GCP_PROJECT_ID=
docker compose up --build
```
-### 6. Create the System User
+### 7. Create the System User
+
+- The application uses the concept of a system user to process events asynchronously. You should manually create this user in `users` table in your database. Make sure you use the same `id` and `api_key` as the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file.
-- The application uses the concept of a system user to process events async. You should manually create this user in `users` table in your database.
- Make sure you use the same `id` and `api_key` as the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file
+ ```SQL
+ INSERT INTO users (id, api_key, email ) VALUES ('your-system-user-id', 'your-system-api-key', 'system@domain.com');
+ ```
-### 7. Build the Android App.
+> [!IMPORTANT]
+> Restart your API docker container after modifying `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file so that the httpSMS API can pick up the changes.
+
+### 8. Build the Android App.
- Before building the Android app in [Android Studio](https://developer.android.com/studio), you need to replace the `google-services.json` file in the `android/app` directory with the file which you got from step 1. You need to do this for the firebase FCM messages to work properly.
+## Integration Testing
+
+The project includes end-to-end integration tests that validate the complete SMS send/receive lifecycle. Tests run the full stack (API, PostgreSQL, Redis) in Docker alongside a phone emulator that simulates an Android device.
+
+📖 **Full documentation:** [`tests/README.md`](tests/README.md)
+
+**Quick run:**
+
+```bash
+cd tests
+bash generate-firebase-credentials.sh
+export FIREBASE_CREDENTIALS=$(jq -c . firebase-credentials.json)
+docker compose up -d --build --wait
+docker compose wait seed && sleep 2
+go test -v -timeout 120s ./...
+docker compose down -v
+```
+
+Integration tests also run automatically in CI on every push/PR to `main`.
+
## License
This project is licensed under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 - see the [LICENSE](LICENSE) file for details
diff --git a/android/.gitignore b/android/.gitignore
index aa724b770..6c13541ca 100644
--- a/android/.gitignore
+++ b/android/.gitignore
@@ -12,4 +12,5 @@
/captures
.externalNativeBuild
.cxx
+.kotlin/sessions/
local.properties
diff --git a/android/app/build.gradle b/android/app/build.gradle
deleted file mode 100644
index f49acb2bf..000000000
--- a/android/app/build.gradle
+++ /dev/null
@@ -1,73 +0,0 @@
-plugins {
- id 'com.android.application'
- id 'org.jetbrains.kotlin.android'
- id 'com.google.gms.google-services'
- id "io.sentry.android.gradle" version "4.3.1"
-}
-
-def getGitHash = { ->
- def stdout = new ByteArrayOutputStream()
- exec {
- commandLine 'git', 'rev-parse', '--short', 'HEAD'
- standardOutput = stdout
- }
- return stdout.toString().trim()
-}
-
-android {
- compileSdk 35
-
- defaultConfig {
- applicationId "com.httpsms"
- minSdk 28
- targetSdk 35
- versionCode 1
- versionName "${getGitHash()}"
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- }
-
- buildTypes {
- debug {
- manifestPlaceholders["sentryEnvironment"] = "development"
- }
- release {
- manifestPlaceholders["sentryEnvironment"] = "production"
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- }
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
- kotlinOptions {
- jvmTarget = '1.8'
- }
- namespace 'com.httpsms'
-
- buildFeatures {
- buildConfig = true
- }
-}
-
-dependencies {
- implementation platform('com.google.firebase:firebase-bom:33.13.0')
- implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
- implementation 'com.google.firebase:firebase-analytics-ktx'
- implementation 'com.google.firebase:firebase-messaging-ktx'
- implementation 'com.squareup.okhttp3:okhttp:4.12.0'
- implementation 'com.jakewharton.timber:timber:5.0.1'
- implementation 'androidx.preference:preference-ktx:1.2.1'
- implementation 'androidx.work:work-runtime-ktx:2.10.1'
- implementation 'androidx.core:core-ktx:1.16.0'
- implementation "androidx.cardview:cardview:1.0.0"
- implementation 'com.beust:klaxon:5.6'
- implementation 'androidx.appcompat:appcompat:1.7.0'
- implementation 'org.apache.commons:commons-text:1.12.0'
- implementation 'com.google.android.material:material:1.12.0'
- implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
- implementation 'com.googlecode.libphonenumber:libphonenumber:9.0.4'
- testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.2.1'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
-}
diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts
new file mode 100644
index 000000000..f670b8bb7
--- /dev/null
+++ b/android/app/build.gradle.kts
@@ -0,0 +1,79 @@
+plugins {
+ id("com.android.application")
+ id("com.google.gms.google-services")
+ id("io.sentry.android.gradle") version "6.14.0"
+ id("org.jetbrains.kotlin.plugin.compose")
+}
+
+val gitHash = providers.exec {
+ commandLine("git", "rev-parse", "--short", "HEAD")
+}.standardOutput.asText.map { it.trim() }
+
+android {
+ compileSdk = 37
+
+ defaultConfig {
+ applicationId = "com.httpsms"
+ minSdk = 28
+ targetSdk = 37
+ versionCode = 1
+ versionName = gitHash.getOrElse("unknown")
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ getByName("debug") {
+ manifestPlaceholders["sentryEnvironment"] = "development"
+ }
+ getByName("release") {
+ manifestPlaceholders["sentryEnvironment"] = "production"
+ isMinifyEnabled = false
+ proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
+ }
+ }
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+ namespace = "com.httpsms"
+
+ buildFeatures {
+ buildConfig = true
+ compose = true
+ }
+}
+
+dependencies {
+ val composeBom = platform("androidx.compose:compose-bom:2026.06.01")
+ implementation(composeBom)
+ androidTestImplementation(composeBom)
+
+ implementation("androidx.compose.ui:ui")
+ implementation("androidx.compose.ui:ui-graphics")
+ implementation("androidx.compose.ui:ui-tooling-preview")
+ implementation("androidx.compose.material3:material3")
+ implementation("androidx.compose.material:material-icons-extended")
+ implementation("androidx.activity:activity-compose:1.13.0")
+ implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0")
+
+ implementation(platform("com.google.firebase:firebase-bom:34.16.0"))
+ implementation("com.journeyapps:zxing-android-embedded:4.3.0")
+ implementation("com.google.firebase:firebase-analytics")
+ implementation("com.google.firebase:firebase-messaging")
+ implementation("com.squareup.okhttp3:okhttp:5.4.0")
+ implementation("com.jakewharton.timber:timber:5.0.1")
+ implementation("androidx.preference:preference-ktx:1.2.1")
+ implementation("androidx.work:work-runtime-ktx:2.11.2")
+ implementation("androidx.core:core-ktx:1.19.0")
+ implementation("androidx.cardview:cardview:1.0.0")
+ implementation("com.beust:klaxon:5.6")
+ implementation("androidx.appcompat:appcompat:1.7.1")
+ implementation("org.apache.commons:commons-text:1.15.0")
+ implementation("com.google.android.material:material:1.14.0")
+ implementation("androidx.constraintlayout:constraintlayout:2.2.1")
+ implementation("com.googlecode.libphonenumber:libphonenumber:9.0.34")
+ implementation("com.klinkerapps:android-smsmms:5.2.6")
+ testImplementation("junit:junit:4.13.2")
+ androidTestImplementation("androidx.test.ext:junit:1.3.0")
+ androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0")
+}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 6d704adea..86ca0a514 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -12,6 +12,7 @@
+
@@ -30,7 +31,7 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.HttpSMS"
- tools:targetApi="31">
+ tools:targetApi="36">
+ android:name="com.journeyapps.barcodescanner.CaptureActivity"
+ android:screenOrientation="fullSensor"
+ tools:replace="screenOrientation"
+ tools:ignore="DiscouragedApi" />
+
+
+
+
@@ -90,6 +95,17 @@
+
+
+
+
+
diff --git a/android/app/src/main/java/com/httpsms/Constants.kt b/android/app/src/main/java/com/httpsms/Constants.kt
index fd8a0b900..ba3e15840 100644
--- a/android/app/src/main/java/com/httpsms/Constants.kt
+++ b/android/app/src/main/java/com/httpsms/Constants.kt
@@ -10,6 +10,7 @@ class Constants {
const val KEY_MESSAGE_TIMESTAMP = "KEY_MESSAGE_TIMESTAMP"
const val KEY_MESSAGE_REASON = "KEY_MESSAGE_REASON"
const val KEY_MESSAGE_ENCRYPTED = "KEY_MESSAGE_ENCRYPTED"
+ const val KEY_MESSAGE_ATTACHMENTS = "KEY_MESSAGE_ATTACHMENTS"
const val KEY_HEARTBEAT_ID = "KEY_HEARTBEAT_ID"
@@ -18,5 +19,7 @@ class Constants {
const val SIM2 = "SIM2"
const val TIMESTAMP_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'000000'ZZZZZ"
+
+ const val MAX_MMS_ATTACHMENT_SIZE: Long = (3L * 1024 * 1024) / 2
}
}
diff --git a/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt b/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt
index 8f1e448ca..e4113289b 100644
--- a/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt
+++ b/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt
@@ -9,6 +9,15 @@ import com.google.firebase.messaging.RemoteMessage
import com.httpsms.SentReceiver.FailedMessageWorker
import timber.log.Timber
+import com.google.android.mms.pdu_alt.CharacterSets
+import com.google.android.mms.pdu_alt.EncodedStringValue
+import com.google.android.mms.pdu_alt.PduBody
+import com.google.android.mms.pdu_alt.PduComposer
+import com.google.android.mms.pdu_alt.PduPart
+import com.google.android.mms.pdu_alt.SendReq
+import okhttp3.MediaType
+import java.io.File
+
class MyFirebaseMessagingService : FirebaseMessagingService() {
// [START receive_message]
override fun onMessageReceived(remoteMessage: RemoteMessage) {
@@ -158,6 +167,11 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
}
Receiver.register(applicationContext)
+
+ if (message.attachments != null && message.attachments.isNotEmpty()) {
+ return handleMmsMessage(message)
+ }
+
val parts = getMessageParts(applicationContext, message)
if (parts.size == 1) {
return handleSingleMessage(message, parts.first())
@@ -165,6 +179,143 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
return handleMultipartMessage(message, parts)
}
+ fun extractFileName(url: String, prefix: String, mimeType: String? = null): String {
+ val fileName = url.substringAfterLast("/")
+ .substringBefore("?")
+ .takeIf { it.isNotBlank() && it.contains(".") }
+ ?: run {
+ val extension = mimeType?.let { mime ->
+ val ext = mime.substringAfterLast("/")
+ if (ext.isNotBlank()) ".$ext" else ".bin"
+ } ?: ""
+ "attachment$extension"
+ }
+
+ return "${prefix}_$fileName"
+ }
+
+ private fun handleMmsMessage(message: Message): Result {
+ Timber.d("Processing MMS for message ID [${message.id}]")
+ val apiService = HttpSmsApiService.create(applicationContext)
+
+ val downloadedFiles = mutableListOf>()
+
+ try {
+ for ((index, attachment) in message.attachments!!.withIndex()) {
+ val file = apiService.downloadAttachment(applicationContext, attachment, message.id, index)
+ if (file.first == null || file.second == null) {
+ handleFailed(applicationContext, message.id, "Failed to download attachment or file size exceeded 1.5MB.")
+ return Result.failure()
+ }
+ downloadedFiles.add(Pair(file.first!!, file.second!!))
+ }
+
+ val sendReq = SendReq()
+
+ val encodedContact = EncodedStringValue(message.contact)
+ sendReq.to = arrayOf(encodedContact)
+
+ val pduBody = PduBody()
+
+ if (message.content.isNotEmpty()) {
+ val textPart = PduPart()
+ textPart.setCharset(CharacterSets.UTF_8)
+ textPart.contentType = "text/plain".toByteArray()
+ textPart.name = "text".toByteArray()
+ textPart.contentId = "text".toByteArray()
+ textPart.contentLocation = "text".toByteArray()
+
+ var messageBody = message.content
+ val encryptionKey = Settings.getEncryptionKey(applicationContext)
+ if (message.encrypted && !encryptionKey.isNullOrEmpty()) {
+ messageBody = Encrypter.decrypt(encryptionKey, messageBody)
+ }
+ textPart.data = messageBody.toByteArray(Charsets.UTF_8)
+
+ pduBody.addPart(textPart)
+ }
+
+ for ((index, file) in downloadedFiles.withIndex()) {
+ val fileBytes = file.first.readBytes()
+
+ val mediaPart = PduPart()
+ mediaPart.contentType = file.second.toString().toByteArray()
+
+
+ val fileName = extractFileName(message.attachments[index], index.toString(), file.second.toString())
+ mediaPart.name = fileName.toByteArray()
+ mediaPart.contentId = fileName.toByteArray()
+ mediaPart.contentLocation = fileName.toByteArray()
+ mediaPart.data = fileBytes
+
+ Timber.d("Adding MMS attachment with name [$fileName] and size [${fileBytes.size}] and type [${file.second}]")
+
+ pduBody.addPart(mediaPart)
+ }
+
+ sendReq.body = pduBody
+
+ val pduComposer = PduComposer(applicationContext, sendReq)
+ val pduBytes = pduComposer.make()
+
+ if (pduBytes == null) {
+ Timber.e("PduComposer failed to generate PDU byte array")
+ handleFailed(applicationContext, message.id, "Failed to compose MMS PDU.")
+ return Result.failure()
+ }
+
+ val mmsDir = java.io.File(applicationContext.cacheDir, "mms_attachments")
+ if (!mmsDir.exists()) {
+ mmsDir.mkdirs()
+ }
+
+ val pduFile = java.io.File(mmsDir, "pdu_${message.id}.dat")
+ java.io.FileOutputStream(pduFile).use { it.write(pduBytes) }
+
+ val pduUri = androidx.core.content.FileProvider.getUriForFile(
+ applicationContext,
+ "${BuildConfig.APPLICATION_ID}.fileprovider",
+ pduFile
+ )
+
+ val sentIntent = createPendingIntent(message.id, SmsManagerService.sentAction())
+ SmsManagerService().sendMultimediaMessage(applicationContext, pduUri, message.sim, sentIntent)
+
+ Timber.d("Successfully dispatched MMS for message ID [${message.id}]")
+ return Result.success()
+
+ } catch (e: Exception) {
+ Timber.e(e, "Failed to send MMS for message ID [${message.id}]")
+ handleFailed(applicationContext, message.id, e.message ?: "Internal error while building or sending MMS.")
+ return Result.failure()
+ } finally {
+ // Clean up any downloaded temporary files
+ downloadedFiles.forEach { file ->
+ if (file.first.exists()) {
+ file.first.delete()
+ }
+ }
+
+ // Also clean up the MMS PDU file to avoid cache buildup in cases where
+ // sendMultimediaMessage fails before the sent broadcast is delivered.
+ try {
+ // The PDU file is stored under the "mms_attachments" cache subdirectory;
+ // delete it from the same location to ensure cleanup is effective.
+ val pduDir = File(applicationContext.cacheDir, "mms_attachments")
+ val pduFile = File(pduDir, "pdu_${message.id}.dat")
+ if (pduFile.exists()) {
+ val deleted = pduFile.delete()
+ if (!deleted) {
+ Timber.w("Failed to delete MMS PDU file for message ID [${message.id}] at [${pduFile.absolutePath}]")
+ }
+ }
+ } catch (cleanupException: Exception) {
+ // Best-effort cleanup; log but do not change the original result.
+ Timber.w(cleanupException, "Error while cleaning up MMS PDU file for message ID [${message.id}]")
+ }
+ }
+ }
+
private fun handleMultipartMessage(message:Message, parts: ArrayList): Result {
Timber.d("sending multipart SMS for message with ID [${message.id}]")
return try {
diff --git a/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt b/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt
index 3d813e13f..51fa21cdc 100644
--- a/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt
+++ b/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt
@@ -1,12 +1,18 @@
package com.httpsms
import android.content.Context
+import com.httpsms.Constants.Companion.MAX_MMS_ATTACHMENT_SIZE
+import okhttp3.MediaType
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
-import org.apache.commons.text.StringEscapeUtils
import timber.log.Timber
+import java.io.File
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.InputStream
+import java.io.OutputStream
import java.net.URI
import java.net.URL
import java.util.logging.Level
@@ -68,17 +74,8 @@ class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) {
return sendEvent(messageId, "FAILED", timestamp, reason)
}
- fun receive(sim: String, from: String, to: String, content: String, encrypted: Boolean, timestamp: String): Boolean {
- val body = """
- {
- "content": "${StringEscapeUtils.escapeJson(content)}",
- "sim": "$sim",
- "from": "$from",
- "timestamp": "$timestamp",
- "encrypted": $encrypted,
- "to": "$to"
- }
- """.trimIndent()
+ fun receive(requestPayload: ReceivedMessageRequest): Boolean {
+ val body = com.beust.klaxon.Klaxon().toJsonString(requestPayload)
val request: Request = Request.Builder()
.url(resolveURL("/v1/messages/receive"))
@@ -87,16 +84,21 @@ class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) {
.header(clientVersionHeader, BuildConfig.VERSION_NAME)
.build()
- val response = client.newCall(request).execute()
+ val response = try {
+ client.newCall(request).execute()
+ } catch (e: Exception) {
+ Timber.e(e, "Exception while sending received message request")
+ return false
+ }
+
if (!response.isSuccessful) {
- Timber.e("error response [${response.body?.string()}] with code [${response.code}] while receiving message [${body}]")
+ Timber.e("error response [${response.body?.string()}] with code [${response.code}] while receiving message")
response.close()
return response.code in 400..499
}
- val message = ResponseMessage.fromJson(response.body!!.string())
response.close()
- Timber.i("received message stored successfully for message with ID [${message?.data?.id}]" )
+ Timber.i("received message stored successfully")
return true
}
@@ -156,6 +158,65 @@ class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) {
return true
}
+ fun InputStream.copyToWithLimit(
+ out: OutputStream,
+ limit: Long,
+ bufferSize: Int = DEFAULT_BUFFER_SIZE
+ ): Long {
+ var bytesCopied: Long = 0
+ val buffer = ByteArray(bufferSize)
+ var bytes = read(buffer)
+
+ while (bytes >= 0) {
+ bytesCopied += bytes
+
+ if (bytesCopied > limit) {
+ throw IOException("Download aborted: File exceeded maximum allowed size of $limit bytes.")
+ }
+
+ out.write(buffer, 0, bytes)
+ bytes = read(buffer)
+ }
+ return bytesCopied
+ }
+
+ fun downloadAttachment(context: Context, urlString: String, messageId: String, attachmentIndex: Int): Pair {
+ val request = Request.Builder().url(urlString).build()
+
+ try {
+ client.newCall(request).execute().use { response ->
+ if (!response.isSuccessful) {
+ Timber.e("Failed to download attachment: ${response.code}")
+ return Pair(null, null)
+ }
+
+ val body = response.body
+ val contentLength = body.contentLength()
+ if (contentLength > MAX_MMS_ATTACHMENT_SIZE) {
+ Timber.e("Attachment is too large ($contentLength bytes).")
+ return Pair(null, null)
+ }
+
+ val mmsDir = File(context.cacheDir, "mms_attachments")
+ if (!mmsDir.exists()) {
+ mmsDir.mkdirs()
+ }
+
+ val tempFile = File(mmsDir, "mms_${messageId}_$attachmentIndex")
+ val inputStream = body.byteStream()
+ FileOutputStream(tempFile).use { outputStream ->
+ inputStream.use { input ->
+ input.copyToWithLimit(outputStream, MAX_MMS_ATTACHMENT_SIZE)
+ }
+ }
+
+ return Pair(tempFile, body.contentType())
+ }
+ } catch (e: Exception) {
+ Timber.e(e, "Exception while download attachment")
+ return Pair(null, null)
+ }
+ }
private fun sendEvent(messageId: String, event: String, timestamp: String, reason: String? = null): Boolean {
var reasonString = "null"
@@ -186,7 +247,7 @@ class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) {
}
if (!response.isSuccessful) {
- Timber.e("error response [${response.body?.string()}] with code [${response.code}] while sending [${event}] event [${body}] for message with ID [${messageId}]")
+ Timber.e("error response [${response.body.string()}] with code [${response.code}] while sending [${event}] event [${body}] for message with ID [${messageId}]")
response.close()
return false
}
diff --git a/android/app/src/main/java/com/httpsms/LoginActivity.kt b/android/app/src/main/java/com/httpsms/LoginActivity.kt
index babe12df6..17bd6db66 100644
--- a/android/app/src/main/java/com/httpsms/LoginActivity.kt
+++ b/android/app/src/main/java/com/httpsms/LoginActivity.kt
@@ -8,56 +8,75 @@ import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.telephony.TelephonyManager
-import android.view.View
-import android.webkit.URLUtil
-import android.widget.LinearLayout
import android.widget.Toast
+import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
import androidx.core.app.ActivityCompat
-import androidx.lifecycle.MutableLiveData
import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GoogleApiAvailability
-import com.google.android.material.button.MaterialButton
-import com.google.android.material.progressindicator.LinearProgressIndicator
-import com.google.android.material.textfield.TextInputEditText
-import com.google.android.material.textfield.TextInputLayout
-import com.httpsms.validators.PhoneNumberValidator
+import com.httpsms.ui.login.LoginScreen
+import com.httpsms.ui.login.LoginViewModel
+import com.httpsms.ui.theme.HttpSmsTheme
import com.journeyapps.barcodescanner.ScanContract
import com.journeyapps.barcodescanner.ScanOptions
import timber.log.Timber
-import java.net.URI
-
class LoginActivity : AppCompatActivity() {
+ private val viewModel: LoginViewModel by viewModels()
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
redirectToMain()
- setContentView(R.layout.activity_login)
- registerListeners()
- setPhoneNumber()
- disableSim2()
- setServerURL()
- setupApiKeyInput()
- }
-
- private fun setupApiKeyInput() {
- val apiKeyInputLayout = findViewById(R.id.loginApiKeyTextInputLayout)
- val apiKeyInput = findViewById(R.id.loginApiKeyTextInput)
-
- apiKeyInput.setOnClickListener {
- startQrCodeScan()
- }
+
+ viewModel.initialize(this, getString(R.string.default_server_url))
+
+ setContent {
+ HttpSmsTheme {
+ val uiState by viewModel.uiState.collectAsState()
+
+ LaunchedEffect(uiState.loginSuccess) {
+ if (uiState.loginSuccess) {
+ redirectToMain()
+ }
+ }
- apiKeyInputLayout.setEndIconOnClickListener {
- startQrCodeScan()
+ LoginScreen(
+ viewModel = viewModel,
+ onQrScanClick = { startQrCodeScan() },
+ onLoginClick = {
+ val error = isGooglePlayServicesAvailable()
+ if (error != null) {
+ Toast.makeText(this@LoginActivity, error, Toast.LENGTH_SHORT).show()
+ } else {
+ viewModel.login(
+ context = this@LoginActivity,
+ countryCode = getCountryCode(),
+ onGooglePlayServicesError = {
+ Toast.makeText(this@LoginActivity, it, Toast.LENGTH_SHORT).show()
+ },
+ onFcmTokenMissing = {
+ Toast.makeText(
+ this@LoginActivity,
+ "Cannot find FCM token. Make sure you have Google Play Services installed",
+ Toast.LENGTH_LONG
+ ).show()
+ }
+ )
+ }
+ }
+ )
+ }
}
}
private val barcodeLauncher = registerForActivityResult(ScanContract()) { result ->
if (result.contents != null) {
- val apiKeyInput = findViewById(R.id.loginApiKeyTextInput)
- apiKeyInput.setText(result.contents)
+ viewModel.onApiKeyChange(result.contents)
Toast.makeText(this, "Scanned: ${result.contents}", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this, "Scan cancelled", Toast.LENGTH_SHORT).show()
@@ -79,46 +98,6 @@ class LoginActivity : AppCompatActivity() {
requestPermissions()
}
- override fun onResume() {
- super.onResume()
- setPhoneNumber()
- disableSim2()
- }
-
- private fun registerListeners() {
- loginButton().setOnClickListener { onLoginClick() }
- }
-
- private fun disableSim2() {
- if (SmsManagerService.isDualSIM(this)) {
- Timber.d("dual sim detected")
- val sim2Layout = findViewById(R.id.loginPhoneNumberLayoutSIM2)
- sim2Layout.visibility = LinearLayout.VISIBLE
- return
- }
- Timber.d("single sim detected")
- val sim2Layout = findViewById(R.id.loginPhoneNumberLayoutSIM2)
- sim2Layout.visibility = View.GONE
- }
-
- private fun setPhoneNumber() {
- val phoneNumber = getPhoneNumber(this)
- if(phoneNumber == null) {
- Timber.d("cannot get phone due to no permissions")
- return
- }
-
- val phoneInput = findViewById(R.id.loginPhoneNumberInputSIM1)
- phoneInput.setText(phoneNumber)
- Timber.d("[SIM1] phone number [$phoneNumber] set successfully")
- }
-
- private fun setServerURL() {
- val serverUrlInput = findViewById(R.id.loginServerUrlInput)
- serverUrlInput.setText(getString(R.string.default_server_url))
- Timber.d("default server url [${serverUrlInput.text.toString()}] set successfully")
- }
-
@SuppressLint("HardwareIds")
@Suppress("DEPRECATION")
private fun getPhoneNumber(context: Context): String? {
@@ -139,13 +118,16 @@ class LoginActivity : AppCompatActivity() {
return telephonyManager.line1Number
}
+ private val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
+ permissions.entries.forEach {
+ Timber.d("${it.key} = ${it.value}")
+ }
+ // Try to auto-detect phone numbers after permissions are granted
+ viewModel.autoDetectPhoneNumbers(this)
+ }
+
private fun requestPermissions() {
Timber.d("requesting permissions")
- val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
- permissions.entries.forEach {
- Timber.d("${it.key} = ${it.value}")
- }
- }
var permissions = arrayOf(
Manifest.permission.SEND_SMS,
@@ -175,169 +157,19 @@ class LoginActivity : AppCompatActivity() {
return null
}
-
- private fun onLoginClick() {
- Timber.d("login button clicked")
-
- val error = isGooglePlayServicesAvailable()
- if (error != null) {
- Timber.d("google play services not installed [${error}]")
- Toast.makeText(this, error, Toast.LENGTH_SHORT).show()
- return
- }
-
- if (Settings.getFcmToken(this) == null) {
- Timber.d("The FCM token is not set")
- Toast.makeText(this, "Cannot find FCM token. Make sure you have Google Play Services installed", Toast.LENGTH_LONG).show()
- return
- }
-
- loginButton().isEnabled = false
- val progressBar = findViewById(R.id.loginProgressIndicator)
- progressBar.visibility = View.VISIBLE
-
- val apiKeyLayout = findViewById(R.id.loginApiKeyTextInputLayout)
- apiKeyLayout.error = null
-
- val apiKey = findViewById(R.id.loginApiKeyTextInput)
- apiKey.isEnabled = false
-
- val serverUrlLayout = findViewById(R.id.loginServerUrlLayout)
- serverUrlLayout.error = null
-
- val serverUrl = findViewById(R.id.loginServerUrlInput)
- serverUrl.isEnabled = false
-
- val phoneNumberLayout = findViewById(R.id.loginPhoneNumberLayoutSIM1)
- phoneNumberLayout.error = null
-
- val phoneNumber = findViewById(R.id.loginPhoneNumberInputSIM1)
- phoneNumber.isEnabled = false
-
- val phoneNumberLayoutSIM2 = findViewById(R.id.loginPhoneNumberLayoutSIM2)
- phoneNumberLayoutSIM2.error = null
-
- val phoneNumberSIM2 = findViewById(R.id.loginPhoneNumberInputSIM2)
- phoneNumberSIM2.isEnabled = false
-
- val countryCode = getCountryCode()
-
- val resetView = fun () {
- apiKey.isEnabled = true
- serverUrl.isEnabled = true
- progressBar.visibility = View.INVISIBLE
- phoneNumber.isEnabled = true
- phoneNumberSIM2.isEnabled = true
- loginButton().isEnabled = true
- }
-
- if (!PhoneNumberValidator.isValidPhoneNumber(phoneNumber.text.toString().trim(), countryCode)) {
- Timber.e("[SIM1] phone number [${phoneNumber.text.toString()}] is not valid")
- resetView()
- phoneNumberLayout.error = "Enter an international phone number in the E.164 format"
- return
- }
-
- if (SmsManagerService.isDualSIM(this) && !PhoneNumberValidator.isValidPhoneNumber(phoneNumberSIM2.text.toString().trim(), countryCode)) {
- Timber.e("[SIM2] phone number [${phoneNumberSIM2.text.toString()}] is not valid")
- resetView()
- phoneNumberLayoutSIM2.error = "Enter an international phone number in the E.164 format"
- return
- }
-
- if(!URLUtil.isValidUrl(serverUrl.text.toString().trim())) {
- Timber.e("url number [${serverUrl.text.toString()}] is not a valid URL")
- resetView()
- serverUrlLayout.error = "Server URL [${serverUrl.text.toString()}] is invalid"
- return
- }
-
- if (!URLUtil.isHttpsUrl(serverUrl.text.toString().trim())) {
- Timber.e("url number [${serverUrl.text.toString()}] is not an https URL")
- resetView()
- serverUrlLayout.error = "Server URL [${serverUrl.text.toString()}] must be HTTPS"
- return
- }
-
- val liveData = MutableLiveData>()
- liveData.observe(this) { authResult ->
- run {
- progressBar.visibility = View.INVISIBLE
- if (authResult.first != null) {
- resetView()
- apiKeyLayout.error = authResult.first
- return@run
- }
-
- if (authResult.second != null) {
- resetView()
- serverUrlLayout.error = authResult.second
- return@run
- }
-
- Settings.setApiKeyAsync(this, apiKey.text.toString())
- Settings.setServerUrlAsync(this, serverUrl.text.toString().trim())
-
- val e164PhoneNumber = PhoneNumberValidator.formatE164(phoneNumber.text.toString().trim(), countryCode)
- Settings.setSIM1PhoneNumber(this, e164PhoneNumber)
-
- if(SmsManagerService.isDualSIM(this)) {
- val sim2PhoneNumber = PhoneNumberValidator.formatE164(phoneNumberSIM2.text.toString().trim(), countryCode)
- Settings.setSIM2PhoneNumber(this, sim2PhoneNumber)
- }
-
- Timber.d("login successfully redirecting to main view")
- redirectToMain()
- }
- }
-
- Thread {
- val service = HttpSmsApiService(apiKey.text.toString(), URI(serverUrl.text.toString().trim()))
-
- var e164PhoneNumber = PhoneNumberValidator.formatE164(phoneNumber.text.toString().trim(), countryCode)
- var response = service.updateFcmToken(e164PhoneNumber, Constants.SIM1, Settings.getFcmToken(this) ?: "")
- if(response.second != null || response.third != null) {
- Timber.e("error updating fcm token [${response.second}], third [${response.third}]")
- liveData.postValue(Pair(response.second, response.third))
- return@Thread
- }
-
- if (!SmsManagerService.isDualSIM(this)) {
- Timber.d("single sim detected, no need to update sim2")
- liveData.postValue(Pair(null, null))
- return@Thread
- }
-
- e164PhoneNumber = PhoneNumberValidator.formatE164(phoneNumberSIM2.text.toString().trim(), countryCode)
- response = service.updateFcmToken(e164PhoneNumber, Constants.SIM2, Settings.getFcmToken(this) ?: "")
-
- liveData.postValue(Pair(response.second, response.third))
- Timber.d("finished validating api URL")
- }.start()
- }
-
private fun redirectToMain() {
if (!Settings.isLoggedIn(this)) {
return
}
- finish()
+ finish()
val switchActivityIntent = Intent(this, MainActivity::class.java)
startActivity(switchActivityIntent)
}
- private fun loginButton(): MaterialButton {
- return findViewById(R.id.loginButton)
- }
-
private fun getCountryCode() : String {
- // Get the TelephonyManager from the system services
val tm = this.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
-
- // Get the network country ISO code and convert it to uppercase
val code = tm.networkCountryIso.uppercase()
-
- // If the country code is empty, retrieve the country code from the device's locale
if (code.isEmpty()) {
return this.resources.configuration.locales.get(0).country.uppercase()
}
diff --git a/android/app/src/main/java/com/httpsms/MainActivity.kt b/android/app/src/main/java/com/httpsms/MainActivity.kt
index 5f76ada8b..ff7587db2 100644
--- a/android/app/src/main/java/com/httpsms/MainActivity.kt
+++ b/android/app/src/main/java/com/httpsms/MainActivity.kt
@@ -6,41 +6,33 @@ import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.content.Intent
+import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
-import android.os.PowerManager
-import android.telephony.PhoneNumberUtils
-import android.view.View
-import android.widget.LinearLayout
-import android.widget.TextView
+import android.provider.Settings as ProviderSettings
import android.widget.Toast
+import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
-import androidx.lifecycle.MutableLiveData
import androidx.work.Constraints
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.NetworkType
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
-import com.google.android.material.button.MaterialButton
-import com.google.android.material.card.MaterialCardView
-import com.google.android.material.progressindicator.LinearProgressIndicator
import com.httpsms.services.StickyNotificationService
+import com.httpsms.ui.main.MainScreen
+import com.httpsms.ui.main.MainViewModel
+import com.httpsms.ui.theme.HttpSmsTheme
import com.httpsms.worker.HeartbeatWorker
-import okhttp3.internal.format
import timber.log.Timber
-import java.time.Instant
-import java.time.ZoneId
-import java.time.ZoneOffset
-import java.time.ZonedDateTime
-import java.time.format.DateTimeFormatter
-import java.util.*
import java.util.concurrent.TimeUnit
-import android.provider.Settings as ProviderSettings
class MainActivity : AppCompatActivity() {
+ private val viewModel: MainViewModel by viewModels()
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -48,19 +40,42 @@ class MainActivity : AppCompatActivity() {
redirectToLogin()
- setContentView(R.layout.activity_main)
+ viewModel.initialize(this, getString(R.string.app_version, BuildConfig.VERSION_NAME))
+
+ setContent {
+ HttpSmsTheme {
+ MainScreen(
+ viewModel = viewModel,
+ onSettingsClick = { onSettingsClick() },
+ onSmsPermissionClick = {
+ val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://httpsms.com/blog/grant-send-and-read-sms-permissions-on-android"))
+ startActivity(intent)
+ },
+ onBatteryOptimizationClick = {
+ val intent = Intent()
+ intent.action = ProviderSettings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
+ intent.data = Uri.parse("package:$packageName")
+ startActivity(intent)
+ },
+ onHeartbeatClick = {
+ viewModel.sendHeartbeat(this) { error ->
+ if (error != null) {
+ Timber.w("heartbeat sending failed with [$error]")
+ Toast.makeText(this, error, Toast.LENGTH_LONG).show()
+ } else {
+ Toast.makeText(this, "Heartbeat sent successfully", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+ )
+ }
+ }
createChannel()
-
- setCardContent(this)
- registerListeners()
refreshToken(this)
startStickyNotification(this)
scheduleHeartbeatWorker(this)
- setVersion()
- setHeartbeatListener(this)
- setBatteryOptimizationListener()
}
override fun onStart() {
@@ -73,34 +88,7 @@ class MainActivity : AppCompatActivity() {
Timber.d( "on activity resume")
redirectToLogin()
refreshToken(this)
- setCardContent(this)
- setBatteryOptimizationListener()
- }
-
- private fun setVersion() {
- val appVersionView = findViewById(R.id.mainAppVersion)
- appVersionView.text = format(getString(R.string.app_version), BuildConfig.VERSION_NAME)
- }
-
- private fun setCardContent(context: Context) {
- val titleText = findViewById(R.id.cardPhoneNumber)
- titleText.text = PhoneNumberUtils.formatNumber(Settings.getSIM1PhoneNumber(this), Locale.getDefault().country)
- if(!Settings.getActiveStatus(context, Constants.SIM1)) {
- titleText.setCompoundDrawables(null, null, null, null)
- }
-
- val titleTextSIM2 = findViewById(R.id.cardPhoneNumberSIM2)
- titleTextSIM2.text = PhoneNumberUtils.formatNumber(Settings.getSIM2PhoneNumber(this), Locale.getDefault().country)
- if(!Settings.getActiveStatus(context, Constants.SIM2)) {
- titleTextSIM2.setCompoundDrawables(null, null, null, null)
- }
-
- setLastHeartbeatTimestamp(context)
-
- if(!Settings.isDualSIM(context)) {
- val sim2Card = findViewById(R.id.mainPhoneCardSIM2)
- sim2Card.visibility = MaterialCardView.GONE
- }
+ viewModel.updateState(this, getString(R.string.app_version, BuildConfig.VERSION_NAME))
}
private fun requestPermissions(context:Context) {
@@ -114,6 +102,7 @@ class MainActivity : AppCompatActivity() {
Settings.setIncomingCallEventsEnabled(context, Constants.SIM2, false)
}
}
+ viewModel.updateState(context, getString(R.string.app_version, BuildConfig.VERSION_NAME))
}
var permissions = arrayOf(
@@ -226,10 +215,6 @@ class MainActivity : AppCompatActivity() {
}
}
- private fun registerListeners() {
- findViewById(R.id.mainSettingsButton).setOnClickListener { onSettingsClick() }
- }
-
private fun onSettingsClick() {
Timber.d("settings button clicked")
val switchActivityIntent = Intent(this, SettingsActivity::class.java)
@@ -245,28 +230,6 @@ class MainActivity : AppCompatActivity() {
return true
}
- private fun setLastHeartbeatTimestamp(context: Context) {
- val refreshTimestampView = findViewById(R.id.cardRefreshTime)
- val timestamp = Settings.getHeartbeatTimestamp(context)
-
- if (timestamp == 0.toLong()) {
- Timber.d("no heartbeat timestamp has been set")
- refreshTimestampView.text = "--"
- return
- }
-
- val timestampZdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneOffset.UTC)
- val localTime = timestampZdt.withZoneSameInstant(ZoneId.systemDefault())
- Timber.d("heartbeat timestamp in UTC is [${timestampZdt}] and local is [$localTime]")
-
- refreshTimestampView.text = localTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
-
- if (Settings.isDualSIM(context)) {
- val refreshTimestampViewSIM2 = findViewById(R.id.cardRefreshTimeSIM2)
- refreshTimestampViewSIM2.text = localTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
- }
- }
-
private fun createChannel() {
// Create the NotificationChannel
val name = getString(R.string.notification_channel_default)
@@ -279,73 +242,4 @@ class MainActivity : AppCompatActivity() {
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
}
-
- @SuppressLint("BatteryLife")
- private fun setBatteryOptimizationListener() {
- val pm = getSystemService(POWER_SERVICE) as PowerManager
- if (!pm.isIgnoringBatteryOptimizations(packageName)) {
- val button = findViewById(R.id.batteryOptimizationButtonButton)
- button.setOnClickListener {
- val intent = Intent()
- intent.action = ProviderSettings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
- intent.data = Uri.parse("package:$packageName")
- startActivity(intent)
- }
- } else {
- val layout = findViewById(R.id.batteryOptimizationLinearLayout)
- layout.visibility = View.GONE
- }
- }
-
- private fun setHeartbeatListener(context: Context) {
- findViewById(R.id.mainHeartbeatButton).setOnClickListener{onHeartbeatClick(context)}
- }
-
- private fun onHeartbeatClick(context: Context) {
- Timber.d("heartbeat button clicked")
- val heartbeatButton = findViewById(R.id.mainHeartbeatButton)
- heartbeatButton.isEnabled = false
-
- val progressBar = findViewById(R.id.mainProgressIndicator)
- progressBar.visibility = View.VISIBLE
-
- val liveData = MutableLiveData()
- liveData.observe(this) { exception ->
- run {
- progressBar.visibility = View.INVISIBLE
- heartbeatButton.isEnabled = true
-
- if (exception != null) {
- Timber.w("heartbeat sending failed with [$exception]")
- Toast.makeText(context, exception, Toast.LENGTH_LONG).show()
- return@run
- }
- Toast.makeText(context, "Heartbeat sent successfully", Toast.LENGTH_SHORT).show()
-
- setLastHeartbeatTimestamp(this)
- }
- }
-
- Thread {
- val charging = Settings.isCharging(applicationContext)
- var error: String? = null
- try {
- val phoneNumbers = mutableListOf()
- phoneNumbers.add(Settings.getSIM1PhoneNumber(applicationContext))
- if (Settings.getActiveStatus(applicationContext, Constants.SIM2)) {
- phoneNumbers.add(Settings.getSIM2PhoneNumber(applicationContext))
- }
- val isStored = HttpSmsApiService.create(context).storeHeartbeat(phoneNumbers.toTypedArray(), charging)
- if (!isStored) {
- error = "Could not send heartbeat make sure the phone is connected to the internet"
- }
- Settings.setHeartbeatTimestampAsync(applicationContext, System.currentTimeMillis())
- } catch (exception: Exception) {
- Timber.e(exception)
- error = exception.javaClass.simpleName
- }
- liveData.postValue(error)
- Timber.d("finished sending pulse")
- }.start()
- }
}
diff --git a/android/app/src/main/java/com/httpsms/Models.kt b/android/app/src/main/java/com/httpsms/Models.kt
index ccfe590b4..b4bf5464e 100644
--- a/android/app/src/main/java/com/httpsms/Models.kt
+++ b/android/app/src/main/java/com/httpsms/Models.kt
@@ -68,5 +68,24 @@ data class Message (
val type: String,
@Json(name = "updated_at")
- val updatedAt: String
+ val updatedAt: String,
+
+ val attachments: List? = null
+)
+
+data class ReceivedAttachment(
+ val name: String,
+ @Json(name = "content_type")
+ val contentType: String,
+ val content: String
+)
+
+data class ReceivedMessageRequest(
+ val sim: String,
+ val from: String,
+ val to: String,
+ val content: String,
+ val encrypted: Boolean,
+ val timestamp: String,
+ val attachments: List? = null
)
diff --git a/android/app/src/main/java/com/httpsms/ReceivedReceiver.kt b/android/app/src/main/java/com/httpsms/ReceivedReceiver.kt
index 9d0f3d83a..3edc30e2d 100644
--- a/android/app/src/main/java/com/httpsms/ReceivedReceiver.kt
+++ b/android/app/src/main/java/com/httpsms/ReceivedReceiver.kt
@@ -4,7 +4,7 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.provider.Telephony
-import androidx.work.BackoffPolicy
+import android.util.Base64
import androidx.work.Constraints
import androidx.work.Data
import androidx.work.NetworkType
@@ -13,20 +13,30 @@ import androidx.work.WorkManager
import androidx.work.Worker
import androidx.work.WorkerParameters
import androidx.work.workDataOf
+import com.google.android.mms.pdu_alt.CharacterSets
+import com.google.android.mms.pdu_alt.MultimediaMessagePdu
+import com.google.android.mms.pdu_alt.PduParser
+import com.google.android.mms.pdu_alt.RetrieveConf
import timber.log.Timber
+import java.io.File
+import java.io.FileOutputStream
import java.time.ZoneOffset
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
-import java.util.concurrent.TimeUnit
class ReceivedReceiver: BroadcastReceiver()
{
- override fun onReceive(context: Context,intent: Intent) {
- if (intent.action != Telephony.Sms.Intents.SMS_RECEIVED_ACTION) {
+ override fun onReceive(context: Context, intent: Intent) {
+ if (intent.action == Telephony.Sms.Intents.SMS_RECEIVED_ACTION) {
+ handleSmsReceived(context, intent)
+ } else if (intent.action == Telephony.Sms.Intents.WAP_PUSH_RECEIVED_ACTION) {
+ handleMmsReceived(context, intent)
+ } else {
Timber.e("received invalid intent with action [${intent.action}]")
- return
}
+ }
+ private fun handleSmsReceived(context: Context, intent: Intent) {
var smsSender = ""
var smsBody = ""
@@ -35,12 +45,7 @@ class ReceivedReceiver: BroadcastReceiver()
smsBody += smsMessage.messageBody
}
- var sim = Constants.SIM1
- var owner = Settings.getSIM1PhoneNumber(context)
- if (intent.getIntExtra("android.telephony.extra.SLOT_INDEX", 0) > 0 && Settings.isDualSIM(context)) {
- owner = Settings.getSIM2PhoneNumber(context)
- sim = Constants.SIM2
- }
+ val (sim, owner) = getSimAndOwner(context, intent)
if (!Settings.isIncomingMessageEnabled(context, sim)) {
Timber.w("[${sim}] is not active for incoming messages")
@@ -56,7 +61,71 @@ class ReceivedReceiver: BroadcastReceiver()
)
}
- private fun handleMessageReceived(context: Context, sim: String, from: String, to : String, content: String) {
+ private fun handleMmsReceived(context: Context, intent: Intent) {
+ val pushData = intent.getByteArrayExtra("data") ?: return
+ val pdu = PduParser(pushData, true).parse() ?: return
+
+ if (pdu !is MultimediaMessagePdu) {
+ Timber.d("Received PDU is not a MultimediaMessagePdu, ignoring.")
+ return
+ }
+
+ val from = pdu.from?.string ?: ""
+ var content = ""
+ val attachmentFiles = mutableListOf()
+
+ // Check if it's a RetrieveConf (which contains the actual message body)
+ if (pdu is RetrieveConf) {
+ val body = pdu.body
+ if (body != null) {
+ for (i in 0 until body.partsNum) {
+ val part = body.getPart(i)
+ val partData = part.data ?: continue
+ val contentType = String(part.contentType ?: "application/octet-stream".toByteArray())
+
+ if (contentType.startsWith("text/plain")) {
+ content += String(partData, charset(CharacterSets.getMimeName(part.charset)))
+ } else {
+ // Save attachment to a temporary file
+ val fileName = String(part.name ?: part.contentLocation ?: part.contentId ?: "attachment_$i".toByteArray())
+ val tempFile = File(context.cacheDir, "received_mms_${System.currentTimeMillis()}_$i")
+ FileOutputStream(tempFile).use { it.write(partData) }
+ attachmentFiles.add("${tempFile.absolutePath}|${contentType}|${fileName}")
+ }
+ }
+ }
+ } else {
+ Timber.d("Received PDU is of type [${pdu.javaClass.simpleName}], body extraction not implemented.")
+ }
+
+ val (sim, owner) = getSimAndOwner(context, intent)
+
+ if (!Settings.isIncomingMessageEnabled(context, sim)) {
+ Timber.w("[${sim}] is not active for incoming messages")
+ return
+ }
+
+ handleMessageReceived(
+ context,
+ sim,
+ from,
+ owner,
+ content,
+ attachmentFiles.toTypedArray()
+ )
+ }
+
+ private fun getSimAndOwner(context: Context, intent: Intent): Pair {
+ var sim = Constants.SIM1
+ var owner = Settings.getSIM1PhoneNumber(context)
+ if (intent.getIntExtra("android.telephony.extra.SLOT_INDEX", 0) > 0 && Settings.isDualSIM(context)) {
+ owner = Settings.getSIM2PhoneNumber(context)
+ sim = Constants.SIM2
+ }
+ return Pair(sim, owner)
+ }
+
+ private fun handleMessageReceived(context: Context, sim: String, from: String, to : String, content: String, attachments: Array? = null) {
val timestamp = ZonedDateTime.now(ZoneOffset.UTC)
if (!Settings.isLoggedIn(context)) {
@@ -84,7 +153,8 @@ class ReceivedReceiver: BroadcastReceiver()
Constants.KEY_MESSAGE_SIM to sim,
Constants.KEY_MESSAGE_CONTENT to body,
Constants.KEY_MESSAGE_ENCRYPTED to Settings.encryptReceivedMessages(context),
- Constants.KEY_MESSAGE_TIMESTAMP to DateTimeFormatter.ofPattern(Constants.TIMESTAMP_PATTERN).format(timestamp).replace("+", "Z")
+ Constants.KEY_MESSAGE_TIMESTAMP to DateTimeFormatter.ofPattern(Constants.TIMESTAMP_PATTERN).format(timestamp).replace("+", "Z"),
+ Constants.KEY_MESSAGE_ATTACHMENTS to attachments
)
val work = OneTimeWorkRequest
@@ -104,14 +174,52 @@ class ReceivedReceiver: BroadcastReceiver()
override fun doWork(): Result {
Timber.i("[${this.inputData.getString(Constants.KEY_MESSAGE_SIM)}] forwarding received message from [${this.inputData.getString(Constants.KEY_MESSAGE_FROM)}] to [${this.inputData.getString(Constants.KEY_MESSAGE_TO)}]")
- if (HttpSmsApiService.create(applicationContext).receive(
- this.inputData.getString(Constants.KEY_MESSAGE_SIM)!!,
- this.inputData.getString(Constants.KEY_MESSAGE_FROM)!!,
- this.inputData.getString(Constants.KEY_MESSAGE_TO)!!,
- this.inputData.getString(Constants.KEY_MESSAGE_CONTENT)!!,
- this.inputData.getBoolean(Constants.KEY_MESSAGE_ENCRYPTED, false),
- this.inputData.getString(Constants.KEY_MESSAGE_TIMESTAMP)!!,
- )) {
+ val sim = this.inputData.getString(Constants.KEY_MESSAGE_SIM)!!
+ val from = this.inputData.getString(Constants.KEY_MESSAGE_FROM)!!
+ val to = this.inputData.getString(Constants.KEY_MESSAGE_TO)!!
+ val content = this.inputData.getString(Constants.KEY_MESSAGE_CONTENT)!!
+ val encrypted = this.inputData.getBoolean(Constants.KEY_MESSAGE_ENCRYPTED, false)
+ val timestamp = this.inputData.getString(Constants.KEY_MESSAGE_TIMESTAMP)!!
+
+ val attachmentsData = inputData.getStringArray(Constants.KEY_MESSAGE_ATTACHMENTS)
+ val attachments = attachmentsData?.mapNotNull {
+ val parts = it.split("|")
+ val file = File(parts[0])
+ if (file.exists()) {
+ val bytes = file.readBytes()
+ val base64Content = Base64.encodeToString(bytes, Base64.NO_WRAP)
+ ReceivedAttachment(
+ name = parts[2],
+ contentType = parts[1],
+ content = base64Content
+ )
+ } else {
+ null
+ }
+ }
+
+ val request = ReceivedMessageRequest(
+ sim = sim,
+ from = from,
+ to = to,
+ content = content,
+ encrypted = encrypted,
+ timestamp = timestamp,
+ attachments = attachments
+ )
+
+ val success = HttpSmsApiService.create(applicationContext).receive(request)
+
+ // Cleanup temp files
+ attachmentsData?.forEach {
+ val path = it.split("|")[0]
+ val file = File(path)
+ if (file.exists()) {
+ file.delete()
+ }
+ }
+
+ if (success) {
return Result.success()
}
diff --git a/android/app/src/main/java/com/httpsms/SentReceiver.kt b/android/app/src/main/java/com/httpsms/SentReceiver.kt
index 7995c35c7..2b5bfd129 100644
--- a/android/app/src/main/java/com/httpsms/SentReceiver.kt
+++ b/android/app/src/main/java/com/httpsms/SentReceiver.kt
@@ -14,16 +14,40 @@ import androidx.work.Worker
import androidx.work.WorkerParameters
import androidx.work.workDataOf
import timber.log.Timber
+import java.io.File
internal class SentReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
+ val messageId = intent.getStringExtra(Constants.KEY_MESSAGE_ID)
+ cleanupPduFile(context, messageId)
when (resultCode) {
Activity.RESULT_OK -> handleMessageSent(context, intent.getStringExtra(Constants.KEY_MESSAGE_ID))
SmsManager.RESULT_ERROR_GENERIC_FAILURE -> handleMessageFailed(context, intent.getStringExtra(Constants.KEY_MESSAGE_ID), "GENERIC_FAILURE")
SmsManager.RESULT_ERROR_NO_SERVICE -> handleMessageFailed(context, intent.getStringExtra(Constants.KEY_MESSAGE_ID), "NO_SERVICE")
SmsManager.RESULT_ERROR_NULL_PDU -> handleMessageFailed(context, intent.getStringExtra(Constants.KEY_MESSAGE_ID), "NULL_PDU")
SmsManager.RESULT_ERROR_RADIO_OFF -> handleMessageFailed(context, intent.getStringExtra(Constants.KEY_MESSAGE_ID), "RADIO_OFF")
- else -> handleMessageFailed(context, intent.getStringExtra(Constants.KEY_MESSAGE_ID), "UNKNOWN")
+ SmsManager.RESULT_ERROR_LIMIT_EXCEEDED -> handleMessageFailed(context, intent.getStringExtra(Constants.KEY_MESSAGE_ID), "LIMIT_EXCEEDED")
+ else -> handleMessageFailed(context, intent.getStringExtra(Constants.KEY_MESSAGE_ID), "UNKNOWN:${resultCode}")
+ }
+ }
+
+ private fun cleanupPduFile(context: Context, messageId: String?) {
+ if (messageId == null) return
+
+ try {
+ val baseMessageId = messageId.substringBefore(".")
+ val mmsDir = File(context.cacheDir, "mms_attachments")
+ val pduFile = File(mmsDir, "pdu_$baseMessageId.dat")
+
+ if (pduFile.exists()) {
+ if (pduFile.delete()) {
+ Timber.d("Cleaned up PDU file for message ID [$baseMessageId]")
+ } else {
+ Timber.w("Failed to delete PDU file for message ID [$baseMessageId]")
+ }
+ }
+ } catch (e: Exception) {
+ Timber.e(e, "Error cleaning up PDU file for message ID [$messageId]")
}
}
diff --git a/android/app/src/main/java/com/httpsms/SettingsActivity.kt b/android/app/src/main/java/com/httpsms/SettingsActivity.kt
index cbc2831bc..37a8b3523 100644
--- a/android/app/src/main/java/com/httpsms/SettingsActivity.kt
+++ b/android/app/src/main/java/com/httpsms/SettingsActivity.kt
@@ -1,121 +1,33 @@
package com.httpsms
-import android.content.Context
import android.content.Intent
import android.os.Bundle
+import androidx.activity.compose.setContent
+import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
-import androidx.core.widget.doAfterTextChanged
-import com.google.android.material.appbar.MaterialToolbar
-import com.google.android.material.button.MaterialButton
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import com.google.android.material.switchmaterial.SwitchMaterial
-import com.google.android.material.textfield.TextInputEditText
-import com.google.android.material.textfield.TextInputLayout
+import com.httpsms.ui.settings.SettingsScreen
+import com.httpsms.ui.settings.SettingsViewModel
+import com.httpsms.ui.theme.HttpSmsTheme
import timber.log.Timber
class SettingsActivity : AppCompatActivity() {
+ private val viewModel: SettingsViewModel by viewModels()
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_settings)
- fillSettings(this)
- registerListeners()
- }
-
- private fun fillSettings(context: Context) {
- val debugLogs = findViewById(R.id.settingEnableDebugLogs)
- debugLogs.isChecked = Settings.isDebugLogEnabled(context)
- debugLogs.setOnCheckedChangeListener{ _, isChecked -> run { Settings.setDebugLogEnabled(context, isChecked) } }
-
-
- val phoneNumber = findViewById(R.id.settingsSIM1Input)
- phoneNumber.setText(Settings.getSIM1PhoneNumber(context))
- phoneNumber.isEnabled = false
-
- val sim1IncomingMessages = findViewById(R.id.settings_sim1_incoming_messages)
- sim1IncomingMessages.isChecked = Settings.isIncomingMessageEnabled(context, Constants.SIM1)
-
- sim1IncomingMessages.setOnCheckedChangeListener{ _, isChecked -> run { Settings.setIncomingActiveSIM1(context, isChecked) } }
-
- val sim1OutgoingMessages = findViewById(R.id.settings_sim1_outgoing_messages)
- sim1OutgoingMessages.isChecked = Settings.getActiveStatus(context, Constants.SIM1)
- sim1OutgoingMessages.setOnCheckedChangeListener{ _, isChecked -> run { Settings.setActiveStatusAsync(context, isChecked, Constants.SIM1) } }
-
- if (!Settings.isDualSIM(context)) {
- val layout = findViewById(R.id.settingsSIM2Layout)
- layout.visibility = TextInputLayout.GONE
- val sim2Switch = findViewById(R.id.settings_sim2_incoming_messages)
- sim2Switch.visibility = SwitchMaterial.GONE
- val outgoingSwitch = findViewById(R.id.settings_sim2_outgoing_messages)
- outgoingSwitch.visibility = SwitchMaterial.GONE
- } else {
- val phoneNumberSIM2 = findViewById(R.id.settingsSIM2InputEdit)
- phoneNumberSIM2.setText(Settings.getSIM2PhoneNumber(context))
- phoneNumberSIM2.isEnabled = false
-
- val sim2IncomingMessages = findViewById(R.id.settings_sim2_incoming_messages)
- sim2IncomingMessages.isChecked = Settings.isIncomingMessageEnabled(context, Constants.SIM2)
- sim2IncomingMessages.setOnCheckedChangeListener{ _, isChecked -> run { Settings.setIncomingActiveSIM2(context, isChecked) } }
-
- val sim2OutgoingMessages = findViewById(R.id.settings_sim2_outgoing_messages)
- sim2OutgoingMessages.isChecked = Settings.getActiveStatus(context, Constants.SIM2)
- sim2OutgoingMessages.setOnCheckedChangeListener{ _, isChecked -> run { Settings.setActiveStatusAsync(context, isChecked, Constants.SIM2) } }
- }
-
- handleEncryptionSettings(context)
- handleIncomingCallEvents(context)
- }
-
- private fun handleIncomingCallEvents(context: Context) {
- val enableIncomingCallEvents = findViewById(R.id.settingsSim1EnableIncomingCallEvents)
- enableIncomingCallEvents.isChecked = Settings.isIncomingCallEventsEnabled(context, Constants.SIM1)
- enableIncomingCallEvents.setOnCheckedChangeListener{ _, isChecked -> run {
- Settings.setIncomingCallEventsEnabled(context, Constants.SIM1, isChecked)
- }}
-
- val sim2IncomingCalls = findViewById(R.id.settingsSim2EnableIncomingCallEvents)
- if (!Settings.isDualSIM(context)) {
- sim2IncomingCalls.visibility = SwitchMaterial.GONE
- return
- }
-
- sim2IncomingCalls.isChecked = Settings.isIncomingCallEventsEnabled(context, Constants.SIM2)
- sim2IncomingCalls.setOnCheckedChangeListener{ _, isChecked -> run {
- Settings.setIncomingCallEventsEnabled(context, Constants.SIM2, isChecked)
- }}
- }
-
- private fun handleEncryptionSettings(context: Context) {
- val encryptionKey = findViewById(R.id.settingsEncryptionKeyInputEdit)
- val encryptReceivedMessages = findViewById(R.id.settingsEncryptReceivedMessages)
-
- val key = Settings.getEncryptionKey(context)
- if(key.isNullOrEmpty()) {
- encryptReceivedMessages.isEnabled = false
- } else {
- encryptionKey.setText(key.trim())
- }
-
- encryptionKey.doAfterTextChanged{
- if (it == null || it.toString().isEmpty()) {
- Settings.setEncryptionKey(context, null)
- Settings.setEncryptReceivedMessages(context, false)
- encryptReceivedMessages.isChecked = false
- encryptReceivedMessages.isEnabled = false
- } else {
- encryptReceivedMessages.isEnabled = true
- Settings.setEncryptionKey(context, it.toString().trim())
+
+ viewModel.initialize(this)
+
+ setContent {
+ HttpSmsTheme {
+ SettingsScreen(
+ viewModel = viewModel,
+ onBackClick = { onBackClicked() },
+ onLogoutClick = { onLogoutClick() }
+ )
}
}
-
- encryptReceivedMessages.isChecked = Settings.encryptReceivedMessages(context)
- encryptReceivedMessages.setOnCheckedChangeListener{ _, isChecked -> run {
- Settings.setEncryptReceivedMessages(context, isChecked)
- }}
- }
-
- private fun registerListeners() {
- appToolbar().setOnClickListener { onBackClicked() }
- findViewById(R.id.settingsLogoutButton).setOnClickListener { onLogoutClick() }
}
private fun onBackClicked() {
@@ -129,10 +41,6 @@ class SettingsActivity : AppCompatActivity() {
startActivity(switchActivityIntent)
}
- private fun appToolbar(): MaterialToolbar {
- return findViewById(R.id.settings_toolbar)
- }
-
private fun onLogoutClick() {
Timber.d("logout button clicked")
MaterialAlertDialogBuilder(this)
@@ -141,20 +49,9 @@ class SettingsActivity : AppCompatActivity() {
.setNeutralButton("Cancel"){ _, _ -> Timber.d("logout dialog canceled") }
.setPositiveButton("Logout"){_, _ ->
Timber.d("logging out user")
- Settings.setApiKeyAsync(this, null)
- Settings.setSIM1PhoneNumber(this, null)
- Settings.setSIM2PhoneNumber(this, null)
- Settings.setActiveStatusAsync(this, true, Constants.SIM1)
- Settings.setActiveStatusAsync(this, true, Constants.SIM2)
- Settings.setIncomingActiveSIM1(this, true)
- Settings.setIncomingActiveSIM2(this, true)
- Settings.setUserID(this, null)
- Settings.setEncryptionKey(this, null)
- Settings.setEncryptReceivedMessages(this, false)
- Settings.setFcmTokenLastUpdateTimestampAsync(this, 0)
- Settings.setIncomingCallEventsEnabled(this, Constants.SIM1, false)
- Settings.setIncomingCallEventsEnabled(this, Constants.SIM2, false)
- redirectToLogin()
+ viewModel.logout(this) {
+ redirectToLogin()
+ }
}
.show()
}
diff --git a/android/app/src/main/java/com/httpsms/SmsManagerService.kt b/android/app/src/main/java/com/httpsms/SmsManagerService.kt
index 17987b5cc..c96a90a03 100644
--- a/android/app/src/main/java/com/httpsms/SmsManagerService.kt
+++ b/android/app/src/main/java/com/httpsms/SmsManagerService.kt
@@ -62,7 +62,7 @@ class SmsManagerService {
}
Timber.d("active subscription info size: [${localSubscriptionManager.activeSubscriptionInfoList!!.size}]")
- val subscriptionId = if (sim == Constants.SIM1 && localSubscriptionManager.activeSubscriptionInfoList!!.size > 0) {
+ val subscriptionId = if (sim == Constants.SIM1 && localSubscriptionManager.activeSubscriptionInfoList!!.isNotEmpty()) {
localSubscriptionManager.activeSubscriptionInfoList!![0].subscriptionId
} else if (sim == Constants.SIM2 && localSubscriptionManager.activeSubscriptionInfoList!!.size > 1) {
localSubscriptionManager.activeSubscriptionInfoList!![1].subscriptionId
@@ -76,4 +76,10 @@ class SmsManagerService {
context.getSystemService(SmsManager::class.java).createForSubscriptionId(subscriptionId)
}
}
+
+ // Wrapper for the smsManager's sendMultimediaMessage
+ fun sendMultimediaMessage(context: Context, pduUri: android.net.Uri, sim: String, sentIntent: PendingIntent) {
+ val smsManager = getSmsManager(context, sim)
+ smsManager.sendMultimediaMessage(context, pduUri, null, null, sentIntent)
+ }
}
diff --git a/android/app/src/main/java/com/httpsms/ui/login/LoginActivityContent.kt b/android/app/src/main/java/com/httpsms/ui/login/LoginActivityContent.kt
new file mode 100644
index 000000000..0fc5e4c9d
--- /dev/null
+++ b/android/app/src/main/java/com/httpsms/ui/login/LoginActivityContent.kt
@@ -0,0 +1,217 @@
+package com.httpsms.ui.login
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.text.ClickableText
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.QrCodeScanner
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.OutlinedTextField
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalUriHandler
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.withStyle
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.httpsms.R
+import com.httpsms.ui.theme.Blue500
+import com.httpsms.ui.theme.Pink500
+
+@Composable
+fun LoginScreen(
+ viewModel: LoginViewModel,
+ onQrScanClick: () -> Unit,
+ onLoginClick: () -> Unit
+) {
+ val uiState by viewModel.uiState.collectAsState()
+ val uriHandler = LocalUriHandler.current
+
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .verticalScroll(rememberScrollState())
+ .padding(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ Spacer(modifier = Modifier.height(64.dp))
+
+ Image(
+ painter = painterResource(id = R.drawable.logo_cropped),
+ contentDescription = stringResource(id = R.string.img_http_sms_logo),
+ modifier = Modifier.size(100.dp)
+ )
+
+ Spacer(modifier = Modifier.height(32.dp))
+
+ val annotatedString = buildAnnotatedString {
+ val text = stringResource(id = R.string.get_your_api_key)
+ val linkText = "httpsms.com/settings"
+ val startIndex = text.indexOf(linkText)
+
+ if (startIndex >= 0) {
+ append(text.substring(0, startIndex))
+
+ pushStringAnnotation(tag = "URL", annotation = "https://httpsms.com/settings")
+ withStyle(style = SpanStyle(color = Blue500, fontWeight = FontWeight.Bold)) {
+ append(linkText)
+ }
+ pop()
+
+ append(text.substring(startIndex + linkText.length))
+ } else {
+ append(text)
+ }
+ }
+
+ ClickableText(
+ text = annotatedString,
+ onClick = { offset ->
+ annotatedString.getStringAnnotations(tag = "URL", start = offset, end = offset)
+ .firstOrNull()?.let { annotation ->
+ uriHandler.openUri(annotation.item)
+ }
+ },
+ style = MaterialTheme.typography.bodyLarge.copy(
+ textAlign = TextAlign.Center,
+ fontSize = 20.sp,
+ lineHeight = 28.sp,
+ color = MaterialTheme.colorScheme.onBackground
+ ),
+ modifier = Modifier.fillMaxWidth()
+ )
+
+ Spacer(modifier = Modifier.height(24.dp))
+
+ OutlinedTextField(
+ value = uiState.apiKey,
+ onValueChange = { viewModel.onApiKeyChange(it) },
+ label = { Text(stringResource(id = R.string.text_area_api_key)) },
+ modifier = Modifier.fillMaxWidth(),
+ isError = uiState.apiKeyError != null,
+ supportingText = uiState.apiKeyError?.let { { Text(it) } },
+ trailingIcon = {
+ IconButton(onClick = onQrScanClick) {
+ Icon(
+ imageVector = Icons.Default.QrCodeScanner,
+ contentDescription = "Scan QR Code"
+ )
+ }
+ },
+ keyboardOptions = KeyboardOptions(
+ keyboardType = KeyboardType.Text,
+ imeAction = ImeAction.Done
+ ),
+ enabled = !uiState.isLoading
+ )
+
+ Spacer(modifier = Modifier.height(8.dp))
+
+ OutlinedTextField(
+ value = uiState.phoneNumberSIM1,
+ onValueChange = { viewModel.onPhoneNumberSIM1Change(it) },
+ label = { Text(stringResource(id = R.string.login_phone_number_sim1)) },
+ placeholder = { Text(stringResource(id = R.string.login_phone_number_hint)) },
+ modifier = Modifier.fillMaxWidth(),
+ isError = uiState.phoneNumberSIM1Error != null,
+ supportingText = uiState.phoneNumberSIM1Error?.let { { Text(it) } },
+ keyboardOptions = KeyboardOptions(
+ keyboardType = KeyboardType.Phone,
+ imeAction = ImeAction.Done
+ ),
+ enabled = !uiState.isLoading
+ )
+
+ if (uiState.isDualSim) {
+ Spacer(modifier = Modifier.height(8.dp))
+ OutlinedTextField(
+ value = uiState.phoneNumberSIM2,
+ onValueChange = { viewModel.onPhoneNumberSIM2Change(it) },
+ label = { Text(stringResource(id = R.string.login_phone_number_sim2)) },
+ placeholder = { Text(stringResource(id = R.string.login_phone_number_hint)) },
+ modifier = Modifier.fillMaxWidth(),
+ isError = uiState.phoneNumberSIM2Error != null,
+ supportingText = uiState.phoneNumberSIM2Error?.let { { Text(it) } },
+ keyboardOptions = KeyboardOptions(
+ keyboardType = KeyboardType.Phone,
+ imeAction = ImeAction.Done
+ ),
+ enabled = !uiState.isLoading
+ )
+ }
+
+ Spacer(modifier = Modifier.height(8.dp))
+
+ OutlinedTextField(
+ value = uiState.serverUrl,
+ onValueChange = { viewModel.onServerUrlChange(it) },
+ label = { Text(stringResource(id = R.string.server_url)) },
+ placeholder = { Text(stringResource(id = R.string.login_server_url_hint)) },
+ modifier = Modifier.fillMaxWidth(),
+ isError = uiState.serverUrlError != null,
+ supportingText = uiState.serverUrlError?.let { { Text(it) } },
+ keyboardOptions = KeyboardOptions(
+ keyboardType = KeyboardType.Uri,
+ imeAction = ImeAction.Done
+ ),
+ enabled = !uiState.isLoading
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Button(
+ onClick = onLoginClick,
+ enabled = !uiState.isLoading,
+ modifier = Modifier.align(Alignment.CenterHorizontally),
+ colors = ButtonDefaults.buttonColors(containerColor = Blue500),
+ contentPadding = PaddingValues(horizontal = 32.dp, vertical = 16.dp)
+ ) {
+ Icon(
+ painter = painterResource(id = R.drawable.ic_login),
+ contentDescription = null,
+ modifier = Modifier.padding(end = 8.dp),
+ tint = Color.White
+ )
+ Text(
+ text = stringResource(id = R.string.sign_in_button),
+ color = Color.White,
+ fontSize = 18.sp
+ )
+ }
+
+ if (uiState.isLoading) {
+ Spacer(modifier = Modifier.height(16.dp))
+ CircularProgressIndicator(
+ modifier = Modifier.size(24.dp),
+ color = Pink500
+ )
+ }
+ }
+}
diff --git a/android/app/src/main/java/com/httpsms/ui/login/LoginViewModel.kt b/android/app/src/main/java/com/httpsms/ui/login/LoginViewModel.kt
new file mode 100644
index 000000000..a4803e41e
--- /dev/null
+++ b/android/app/src/main/java/com/httpsms/ui/login/LoginViewModel.kt
@@ -0,0 +1,221 @@
+package com.httpsms.ui.login
+
+import android.Manifest
+import android.content.Context
+import android.content.pm.PackageManager
+import android.os.Build
+import android.telephony.SubscriptionManager
+import android.telephony.TelephonyManager
+import android.webkit.URLUtil
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.httpsms.Constants
+import com.httpsms.HttpSmsApiService
+import com.httpsms.Settings
+import com.httpsms.SmsManagerService
+import com.httpsms.validators.PhoneNumberValidator
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+import timber.log.Timber
+import java.net.URI
+import java.net.URISyntaxException
+
+data class LoginUiState(
+ val apiKey: String = "",
+ val phoneNumberSIM1: String = "",
+ val phoneNumberSIM2: String = "",
+ val serverUrl: String = "",
+ val isLoading: Boolean = false,
+ val apiKeyError: String? = null,
+ val phoneNumberSIM1Error: String? = null,
+ val phoneNumberSIM2Error: String? = null,
+ val serverUrlError: String? = null,
+ val isDualSim: Boolean = false,
+ val loginSuccess: Boolean = false
+)
+
+class LoginViewModel : ViewModel() {
+ private val _uiState = MutableStateFlow(LoginUiState())
+ val uiState = _uiState.asStateFlow()
+
+ fun initialize(context: Context, defaultServerUrl: String) {
+ val isDualSim = SmsManagerService.isDualSIM(context)
+ val phoneNumberSIM1 = Settings.getSIM1PhoneNumber(context)
+ val phoneNumberSIM2 = Settings.getSIM2PhoneNumber(context)
+
+ _uiState.value = _uiState.value.copy(
+ isDualSim = isDualSim,
+ phoneNumberSIM1 = phoneNumberSIM1,
+ phoneNumberSIM2 = phoneNumberSIM2,
+ serverUrl = defaultServerUrl
+ )
+
+ // Try to auto-detect if fields are empty
+ if (phoneNumberSIM1.isEmpty() || (isDualSim && phoneNumberSIM2.isEmpty())) {
+ autoDetectPhoneNumbers(context)
+ }
+ }
+
+ fun autoDetectPhoneNumbers(context: Context) {
+ if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
+ Timber.d("READ_PHONE_STATE permission not granted for auto-detecting phone numbers")
+ return
+ }
+
+ val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
+
+ var detectedSIM1 = _uiState.value.phoneNumberSIM1
+ var detectedSIM2 = _uiState.value.phoneNumberSIM2
+
+ try {
+ val subscriptionManager = if (Build.VERSION.SDK_INT >= 31) {
+ context.getSystemService(SubscriptionManager::class.java)
+ } else {
+ SubscriptionManager.from(context)
+ }
+
+ val activeSubscriptions = try { subscriptionManager.activeSubscriptionInfoList } catch (e: Exception) { null }
+
+ if (detectedSIM1.isEmpty()) {
+ val line1Number = try { telephonyManager.line1Number } catch (e: Exception) { null }
+ if (!line1Number.isNullOrEmpty()) {
+ detectedSIM1 = line1Number
+ } else if (activeSubscriptions != null && activeSubscriptions.isNotEmpty()) {
+ detectedSIM1 = activeSubscriptions[0].number ?: ""
+ }
+ }
+
+ if (detectedSIM2.isEmpty() && activeSubscriptions != null && activeSubscriptions.size >= 2) {
+ detectedSIM2 = activeSubscriptions[1].number ?: ""
+ }
+
+ Timber.d("Auto-detected numbers - SIM1: $detectedSIM1, SIM2: $detectedSIM2")
+
+ } catch (e: SecurityException) {
+ Timber.e(e, "Security exception while auto-detecting phone numbers")
+ }
+
+ _uiState.value = _uiState.value.copy(
+ phoneNumberSIM1 = detectedSIM1,
+ phoneNumberSIM2 = detectedSIM2,
+ isDualSim = SmsManagerService.isDualSIM(context)
+ )
+ }
+
+ fun onApiKeyChange(value: String) {
+ _uiState.value = _uiState.value.copy(apiKey = value, apiKeyError = null)
+ }
+
+ fun onPhoneNumberSIM1Change(value: String) {
+ _uiState.value = _uiState.value.copy(phoneNumberSIM1 = value, phoneNumberSIM1Error = null)
+ }
+
+ fun onPhoneNumberSIM2Change(value: String) {
+ _uiState.value = _uiState.value.copy(phoneNumberSIM2 = value, phoneNumberSIM2Error = null)
+ }
+
+ fun onServerUrlChange(value: String) {
+ _uiState.value = _uiState.value.copy(serverUrl = value, serverUrlError = null)
+ }
+
+ fun login(context: Context, countryCode: String, onGooglePlayServicesError: (String) -> Unit, onFcmTokenMissing: () -> Unit) {
+ val currentState = _uiState.value
+
+ // Validation logic from LoginActivity.onLoginClick
+ if (Settings.getFcmToken(context) == null) {
+ onFcmTokenMissing()
+ return
+ }
+
+ _uiState.value = currentState.copy(isLoading = true)
+
+ viewModelScope.launch {
+ val apiKey = currentState.apiKey.trim()
+ val serverUrl = currentState.serverUrl.trim()
+ val phone1 = currentState.phoneNumberSIM1.trim()
+ val phone2 = currentState.phoneNumberSIM2.trim()
+
+ if (!PhoneNumberValidator.isValidPhoneNumber(phone1, countryCode)) {
+ _uiState.value = _uiState.value.copy(
+ isLoading = false,
+ phoneNumberSIM1Error = "Enter an international phone number in the E.164 format"
+ )
+ return@launch
+ }
+
+ if (currentState.isDualSim && !PhoneNumberValidator.isValidPhoneNumber(phone2, countryCode)) {
+ _uiState.value = _uiState.value.copy(
+ isLoading = false,
+ phoneNumberSIM2Error = "Enter an international phone number in the E.164 format"
+ )
+ return@launch
+ }
+
+ if (!URLUtil.isValidUrl(serverUrl)) {
+ _uiState.value = _uiState.value.copy(
+ isLoading = false,
+ serverUrlError = "Server URL [$serverUrl] is invalid"
+ )
+ return@launch
+ }
+
+ if (!URLUtil.isHttpsUrl(serverUrl)) {
+ _uiState.value = _uiState.value.copy(
+ isLoading = false,
+ serverUrlError = "Server URL [$serverUrl] must be HTTPS"
+ )
+ return@launch
+ }
+
+ val authResult = try {
+ withContext(Dispatchers.IO) {
+ val service = HttpSmsApiService(apiKey, URI(serverUrl))
+ val e164Phone1 = PhoneNumberValidator.formatE164(phone1, countryCode)
+ val response1 = service.updateFcmToken(e164Phone1, Constants.SIM1, Settings.getFcmToken(context) ?: "")
+
+ if (response1.second != null || response1.third != null) {
+ return@withContext Pair(response1.second, response1.third)
+ }
+
+ if (currentState.isDualSim) {
+ val e164Phone2 = PhoneNumberValidator.formatE164(phone2, countryCode)
+ val response2 = service.updateFcmToken(e164Phone2, Constants.SIM2, Settings.getFcmToken(context) ?: "")
+ return@withContext Pair(response2.second, response2.third)
+ }
+
+ Pair(null, null)
+ }
+ } catch (e: URISyntaxException) {
+ Timber.e(e, "Invalid URI: $serverUrl")
+ Pair(null, "Server URL [$serverUrl] is invalid")
+ } catch (e: Exception) {
+ Timber.e(e, "Login error")
+ Pair(null, "An unexpected error occurred: ${e.message}")
+ }
+
+ if (authResult.first != null) {
+ _uiState.value = _uiState.value.copy(isLoading = false, apiKeyError = authResult.first)
+ return@launch
+ }
+
+ if (authResult.second != null) {
+ _uiState.value = _uiState.value.copy(isLoading = false, serverUrlError = authResult.second)
+ return@launch
+ }
+
+ // Save settings
+ Settings.setApiKeyAsync(context, apiKey)
+ Settings.setServerUrlAsync(context, serverUrl)
+ Settings.setSIM1PhoneNumber(context, PhoneNumberValidator.formatE164(phone1, countryCode))
+ if (currentState.isDualSim) {
+ Settings.setSIM2PhoneNumber(context, PhoneNumberValidator.formatE164(phone2, countryCode))
+ }
+
+ _uiState.value = _uiState.value.copy(isLoading = false, loginSuccess = true)
+ }
+ }
+}
diff --git a/android/app/src/main/java/com/httpsms/ui/main/MainActivityContent.kt b/android/app/src/main/java/com/httpsms/ui/main/MainActivityContent.kt
new file mode 100644
index 000000000..087bf7921
--- /dev/null
+++ b/android/app/src/main/java/com/httpsms/ui/main/MainActivityContent.kt
@@ -0,0 +1,243 @@
+package com.httpsms.ui.main
+
+import android.telephony.PhoneNumberUtils
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.IntrinsicSize
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.BatteryAlert
+import androidx.compose.material.icons.filled.CheckCircle
+import androidx.compose.material.icons.filled.Favorite
+import androidx.compose.material.icons.filled.Settings
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.Card
+import androidx.compose.material3.CardDefaults
+import androidx.compose.material3.Icon
+import androidx.compose.material3.LinearProgressIndicator
+import androidx.compose.material3.LocalContentColor
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.httpsms.R
+import com.httpsms.ui.theme.Blue500
+import com.httpsms.ui.theme.Pink500
+import java.util.Locale
+
+@Composable
+fun MainScreen(
+ viewModel: MainViewModel,
+ onSettingsClick: () -> Unit,
+ onSmsPermissionClick: () -> Unit,
+ onBatteryOptimizationClick: () -> Unit,
+ onHeartbeatClick: () -> Unit
+) {
+ val uiState by viewModel.uiState.collectAsState()
+
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .verticalScroll(rememberScrollState())
+ .padding(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ Spacer(modifier = Modifier.height(64.dp))
+
+ Image(
+ painter = painterResource(id = R.drawable.logo_cropped),
+ contentDescription = stringResource(id = R.string.img_http_sms_logo),
+ modifier = Modifier
+ .width(147.dp)
+ .height(92.dp)
+ )
+
+ Spacer(modifier = Modifier.height(24.dp))
+
+ PhoneCard(
+ phoneNumber = uiState.phoneNumberSIM1,
+ isActive = uiState.isActiveSIM1,
+ refreshTime = uiState.lastHeartbeatTime
+ )
+
+ if (uiState.isDualSim) {
+ Spacer(modifier = Modifier.height(24.dp))
+ PhoneCard(
+ phoneNumber = uiState.phoneNumberSIM2,
+ isActive = uiState.isActiveSIM2,
+ refreshTime = uiState.lastHeartbeatTime
+ )
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ if (!uiState.isSmsPermissionGranted || !uiState.isBatteryOptimizationDisabled) {
+ Column(modifier = Modifier.fillMaxWidth()) {
+ if (!uiState.isSmsPermissionGranted) {
+ Button(
+ onClick = onSmsPermissionClick,
+ modifier = Modifier.align(Alignment.CenterHorizontally),
+ colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF4CAF50)),
+ contentPadding = PaddingValues(horizontal = 32.dp, vertical = 16.dp)
+ ) {
+ Text(
+ stringResource(id = R.string.enable_sms_permission),
+ color = Color.White,
+ fontSize = 18.sp
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Icon(
+ painter = painterResource(id = R.drawable.open_in_new_24),
+ contentDescription = null,
+ tint = Color.White
+ )
+ }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+
+ if (!uiState.isBatteryOptimizationDisabled) {
+ Button(
+ onClick = onBatteryOptimizationClick,
+ modifier = Modifier.align(Alignment.CenterHorizontally),
+ colors = ButtonDefaults.buttonColors(containerColor = Pink500),
+ contentPadding = PaddingValues(horizontal = 32.dp, vertical = 16.dp)
+ ) {
+ Icon(
+ imageVector = Icons.Default.BatteryAlert,
+ contentDescription = null,
+ tint = Color.White
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(
+ stringResource(id = R.string.disable_battery_optimization),
+ color = Color.White,
+ fontSize = 18.sp
+ )
+ }
+ }
+ }
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Column(
+ modifier = Modifier.width(IntrinsicSize.Max),
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ Button(
+ onClick = onHeartbeatClick,
+ modifier = Modifier.fillMaxWidth(),
+ enabled = !uiState.isHeartbeatLoading,
+ colors = ButtonDefaults.buttonColors(containerColor = Blue500),
+ contentPadding = PaddingValues(horizontal = 32.dp, vertical = 16.dp)
+ ) {
+ Icon(
+ imageVector = Icons.Default.Favorite,
+ contentDescription = null,
+ tint = if (uiState.isHeartbeatLoading) LocalContentColor.current else Pink500
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(
+ stringResource(id = R.string.send_heartbeat),
+ color = Color.White,
+ fontSize = 18.sp
+ )
+ }
+
+ if (uiState.isHeartbeatLoading) {
+ LinearProgressIndicator(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(top = 4.dp),
+ color = Pink500
+ )
+ }
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Text(
+ text = uiState.appVersion,
+ fontSize = 14.sp,
+ color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.6f)
+ )
+
+ Spacer(modifier = Modifier.weight(1f))
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Button(
+ onClick = onSettingsClick,
+ colors = ButtonDefaults.buttonColors(containerColor = Color.Black),
+ contentPadding = PaddingValues(horizontal = 32.dp, vertical = 16.dp)
+ ) {
+ Icon(Icons.Default.Settings, contentDescription = null, tint = Color.White)
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(
+ stringResource(id = R.string.main_app_settings),
+ color = Color.White,
+ fontSize = 18.sp
+ )
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+ }
+}
+
+@Composable
+fun PhoneCard(
+ phoneNumber: String,
+ isActive: Boolean,
+ refreshTime: String
+) {
+ Card(
+ modifier = Modifier.fillMaxWidth(),
+ elevation = CardDefaults.cardElevation(defaultElevation = 8.dp)
+ ) {
+ Column(modifier = Modifier.padding(16.dp)) {
+ Row(verticalAlignment = Alignment.CenterVertically) {
+ Text(
+ text = PhoneNumberUtils.formatNumber(phoneNumber, Locale.getDefault().country) ?: phoneNumber,
+ fontSize = 28.sp,
+ fontWeight = FontWeight.Medium,
+ modifier = Modifier.weight(1f),
+ color = MaterialTheme.colorScheme.onSurface
+ )
+ if (isActive) {
+ Icon(
+ imageVector = Icons.Default.CheckCircle,
+ contentDescription = "Active",
+ tint = Color(0xFF70AB5C),
+ modifier = Modifier.size(24.dp)
+ )
+ }
+ }
+ Spacer(modifier = Modifier.height(8.dp))
+ Text(
+ text = refreshTime,
+ fontSize = 16.sp,
+ color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f)
+ )
+ }
+ }
+}
diff --git a/android/app/src/main/java/com/httpsms/ui/main/MainViewModel.kt b/android/app/src/main/java/com/httpsms/ui/main/MainViewModel.kt
new file mode 100644
index 000000000..273cfe786
--- /dev/null
+++ b/android/app/src/main/java/com/httpsms/ui/main/MainViewModel.kt
@@ -0,0 +1,116 @@
+package com.httpsms.ui.main
+
+import android.Manifest
+import android.content.Context
+import android.content.pm.PackageManager
+import android.os.PowerManager
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.httpsms.Constants
+import com.httpsms.HttpSmsApiService
+import com.httpsms.Settings
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+import timber.log.Timber
+import java.time.Instant
+import java.time.ZoneId
+import java.time.ZoneOffset
+import java.time.ZonedDateTime
+import java.time.format.DateTimeFormatter
+
+data class MainUiState(
+ val phoneNumberSIM1: String = "",
+ val isActiveSIM1: Boolean = false,
+ val phoneNumberSIM2: String = "",
+ val isActiveSIM2: Boolean = false,
+ val isDualSim: Boolean = false,
+ val lastHeartbeatTime: String = "--",
+ val isSmsPermissionGranted: Boolean = true,
+ val isBatteryOptimizationDisabled: Boolean = true,
+ val isHeartbeatLoading: Boolean = false,
+ val appVersion: String = ""
+)
+
+class MainViewModel : ViewModel() {
+ private val _uiState = MutableStateFlow(MainUiState())
+ val uiState = _uiState.asStateFlow()
+
+ fun initialize(context: Context, appVersion: String) {
+ updateState(context, appVersion)
+ }
+
+ fun updateState(context: Context, appVersion: String) {
+ val isDualSim = Settings.isDualSIM(context)
+ val phone1 = Settings.getSIM1PhoneNumber(context) ?: ""
+ val active1 = Settings.getActiveStatus(context, Constants.SIM1)
+ val phone2 = Settings.getSIM2PhoneNumber(context) ?: ""
+ val active2 = Settings.getActiveStatus(context, Constants.SIM2)
+
+ val timestamp = Settings.getHeartbeatTimestamp(context)
+ val lastHeartbeat = if (timestamp == 0L) {
+ "--"
+ } else {
+ val timestampZdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneOffset.UTC)
+ val localTime = timestampZdt.withZoneSameInstant(ZoneId.systemDefault())
+ localTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
+ }
+
+ val smsPermissions = arrayOf(
+ Manifest.permission.SEND_SMS,
+ Manifest.permission.RECEIVE_SMS,
+ Manifest.permission.READ_SMS
+ )
+ val allGranted = smsPermissions.all {
+ context.checkSelfPermission(it) == PackageManager.PERMISSION_GRANTED
+ }
+
+ val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager
+ val batteryOptimized = pm.isIgnoringBatteryOptimizations(context.packageName)
+
+ _uiState.value = _uiState.value.copy(
+ phoneNumberSIM1 = phone1,
+ isActiveSIM1 = active1,
+ phoneNumberSIM2 = phone2,
+ isActiveSIM2 = active2,
+ isDualSim = isDualSim,
+ lastHeartbeatTime = lastHeartbeat,
+ isSmsPermissionGranted = allGranted,
+ isBatteryOptimizationDisabled = batteryOptimized,
+ appVersion = appVersion
+ )
+ }
+
+ fun sendHeartbeat(context: Context, onComplete: (String?) -> Unit) {
+ _uiState.value = _uiState.value.copy(isHeartbeatLoading = true)
+
+ viewModelScope.launch {
+ val result = withContext(Dispatchers.IO) {
+ val charging = Settings.isCharging(context)
+ try {
+ val phoneNumbers = mutableListOf()
+ phoneNumbers.add(Settings.getSIM1PhoneNumber(context))
+ if (Settings.getActiveStatus(context, Constants.SIM2)) {
+ phoneNumbers.add(Settings.getSIM2PhoneNumber(context))
+ }
+ val isStored = HttpSmsApiService.create(context).storeHeartbeat(phoneNumbers.toTypedArray(), charging)
+ if (!isStored) {
+ "Could not send heartbeat make sure the phone is connected to the internet"
+ } else {
+ Settings.setHeartbeatTimestampAsync(context, System.currentTimeMillis())
+ null
+ }
+ } catch (exception: Exception) {
+ Timber.e(exception)
+ exception.javaClass.simpleName
+ }
+ }
+
+ _uiState.value = _uiState.value.copy(isHeartbeatLoading = false)
+ updateState(context, _uiState.value.appVersion)
+ onComplete(result)
+ }
+ }
+}
diff --git a/android/app/src/main/java/com/httpsms/ui/settings/SettingsActivityContent.kt b/android/app/src/main/java/com/httpsms/ui/settings/SettingsActivityContent.kt
new file mode 100644
index 000000000..3335eb2c2
--- /dev/null
+++ b/android/app/src/main/java/com/httpsms/ui/settings/SettingsActivityContent.kt
@@ -0,0 +1,221 @@
+package com.httpsms.ui.settings
+
+import android.app.Activity
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.ArrowBack
+import androidx.compose.material.icons.automirrored.filled.Logout
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.OutlinedTextField
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.Switch
+import androidx.compose.material3.Text
+import androidx.compose.material3.TopAppBar
+import androidx.compose.material3.TopAppBarDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.SideEffect
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.toArgb
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalView
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.core.view.WindowCompat
+import com.httpsms.R
+import com.httpsms.ui.theme.LogoGreen
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun SettingsScreen(
+ viewModel: SettingsViewModel,
+ onBackClick: () -> Unit,
+ onLogoutClick: () -> Unit
+) {
+ val uiState by viewModel.uiState.collectAsState()
+ val context = LocalContext.current
+ val isDarkTheme = isSystemInDarkTheme()
+ val primaryColor = if (isDarkTheme) Color.Black else LogoGreen
+
+ val view = LocalView.current
+ if (!view.isInEditMode) {
+ SideEffect {
+ val window = (view.context as Activity).window
+ window.statusBarColor = primaryColor.toArgb()
+ WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = false
+ }
+ }
+
+ Scaffold(
+ topBar = {
+ TopAppBar(
+ title = { Text("App Settings") },
+ navigationIcon = {
+ IconButton(onClick = onBackClick) {
+ Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back")
+ }
+ },
+ colors = TopAppBarDefaults.topAppBarColors(
+ containerColor = primaryColor,
+ titleContentColor = Color.White,
+ navigationIconContentColor = Color.White
+ )
+ )
+ }
+ ) { paddingValues ->
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(paddingValues)
+ .verticalScroll(rememberScrollState())
+ .padding(16.dp)
+ ) {
+ // SIM 1 Settings
+ OutlinedTextField(
+ value = uiState.phoneNumberSIM1,
+ onValueChange = { },
+ label = { Text(stringResource(id = R.string.settings_sim1)) },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = false
+ )
+
+ SwitchSetting(
+ text = stringResource(id = R.string.settings_outgoing_messages_sim1),
+ checked = uiState.isActiveSIM1,
+ onCheckedChange = { viewModel.setActiveSIM1(context, it) }
+ )
+
+ SwitchSetting(
+ text = stringResource(id = R.string.settings_incoming_messages_sim1),
+ checked = uiState.isIncomingSIM1Enabled,
+ onCheckedChange = { viewModel.setIncomingSIM1Enabled(context, it) }
+ )
+
+ SwitchSetting(
+ text = stringResource(id = R.string.enable_incoming_call_events_sim1),
+ checked = uiState.isIncomingCallEventsSIM1Enabled,
+ onCheckedChange = { viewModel.setIncomingCallEventsSIM1Enabled(context, it) }
+ )
+
+ if (uiState.isDualSim) {
+ Spacer(modifier = Modifier.height(16.dp))
+ // SIM 2 Settings
+ OutlinedTextField(
+ value = uiState.phoneNumberSIM2,
+ onValueChange = { },
+ label = { Text(stringResource(id = R.string.settings_sim_2)) },
+ modifier = Modifier.fillMaxWidth(),
+ enabled = false
+ )
+
+ SwitchSetting(
+ text = stringResource(id = R.string.settings_outgoing_messages_sim2),
+ checked = uiState.isActiveSIM2,
+ onCheckedChange = { viewModel.setActiveSIM2(context, it) }
+ )
+
+ SwitchSetting(
+ text = stringResource(id = R.string.settings_incoming_messages_sim2),
+ checked = uiState.isIncomingSIM2Enabled,
+ onCheckedChange = { viewModel.setIncomingSIM2Enabled(context, it) }
+ )
+
+ SwitchSetting(
+ text = stringResource(id = R.string.enable_sim2_incoming_call_events),
+ checked = uiState.isIncomingCallEventsSIM2Enabled,
+ onCheckedChange = { viewModel.setIncomingCallEventsSIM2Enabled(context, it) }
+ )
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ OutlinedTextField(
+ value = uiState.encryptionKey,
+ onValueChange = { viewModel.setEncryptionKey(context, it) },
+ label = { Text(stringResource(id = R.string.encryption_key)) },
+ modifier = Modifier.fillMaxWidth()
+ )
+
+ SwitchSetting(
+ text = stringResource(id = R.string.encrypt_received_messages),
+ checked = uiState.isEncryptReceivedMessagesEnabled,
+ onCheckedChange = { viewModel.setEncryptReceivedMessagesEnabled(context, it) },
+ enabled = uiState.encryptionKey.isNotEmpty()
+ )
+
+ SwitchSetting(
+ text = stringResource(id = R.string.enable_debug_logs),
+ checked = uiState.isDebugLogEnabled,
+ onCheckedChange = { viewModel.setDebugLogEnabled(context, it) }
+ )
+
+ Spacer(modifier = Modifier.height(24.dp))
+
+ Button(
+ onClick = onLogoutClick,
+ modifier = Modifier.align(Alignment.CenterHorizontally),
+ colors = ButtonDefaults.buttonColors(containerColor = Color.Black),
+ contentPadding = PaddingValues(horizontal = 32.dp, vertical = 16.dp)
+ ) {
+ Icon(
+ imageVector = Icons.AutoMirrored.Filled.Logout,
+ contentDescription = null,
+ tint = Color.White
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(
+ stringResource(id = R.string.main_log_out),
+ color = Color.White,
+ fontSize = 18.sp
+ )
+ }
+ }
+ }
+}
+
+@Composable
+fun SwitchSetting(
+ text: String,
+ checked: Boolean,
+ onCheckedChange: (Boolean) -> Unit,
+ enabled: Boolean = true
+) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(vertical = 8.dp),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Text(
+ text = text,
+ modifier = Modifier.weight(1f),
+ fontSize = 18.sp,
+ color = if (enabled) MaterialTheme.colorScheme.onBackground else MaterialTheme.colorScheme.onBackground.copy(alpha = 0.5f)
+ )
+ Switch(
+ checked = checked,
+ onCheckedChange = onCheckedChange,
+ enabled = enabled
+ )
+ }
+}
diff --git a/android/app/src/main/java/com/httpsms/ui/settings/SettingsViewModel.kt b/android/app/src/main/java/com/httpsms/ui/settings/SettingsViewModel.kt
new file mode 100644
index 000000000..33a23e574
--- /dev/null
+++ b/android/app/src/main/java/com/httpsms/ui/settings/SettingsViewModel.kt
@@ -0,0 +1,114 @@
+package com.httpsms.ui.settings
+
+import android.content.Context
+import androidx.lifecycle.ViewModel
+import com.httpsms.Constants
+import com.httpsms.Settings
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+
+data class SettingsUiState(
+ val isDebugLogEnabled: Boolean = false,
+ val phoneNumberSIM1: String = "",
+ val isIncomingSIM1Enabled: Boolean = false,
+ val isActiveSIM1: Boolean = false,
+ val isIncomingCallEventsSIM1Enabled: Boolean = false,
+ val isDualSim: Boolean = false,
+ val phoneNumberSIM2: String = "",
+ val isIncomingSIM2Enabled: Boolean = false,
+ val isActiveSIM2: Boolean = false,
+ val isIncomingCallEventsSIM2Enabled: Boolean = false,
+ val encryptionKey: String = "",
+ val isEncryptReceivedMessagesEnabled: Boolean = false
+)
+
+class SettingsViewModel : ViewModel() {
+ private val _uiState = MutableStateFlow(SettingsUiState())
+ val uiState = _uiState.asStateFlow()
+
+ fun initialize(context: Context) {
+ _uiState.value = SettingsUiState(
+ isDebugLogEnabled = Settings.isDebugLogEnabled(context),
+ phoneNumberSIM1 = Settings.getSIM1PhoneNumber(context) ?: "",
+ isIncomingSIM1Enabled = Settings.isIncomingMessageEnabled(context, Constants.SIM1),
+ isActiveSIM1 = Settings.getActiveStatus(context, Constants.SIM1),
+ isIncomingCallEventsSIM1Enabled = Settings.isIncomingCallEventsEnabled(context, Constants.SIM1),
+ isDualSim = Settings.isDualSIM(context),
+ phoneNumberSIM2 = Settings.getSIM2PhoneNumber(context) ?: "",
+ isIncomingSIM2Enabled = Settings.isIncomingMessageEnabled(context, Constants.SIM2),
+ isActiveSIM2 = Settings.getActiveStatus(context, Constants.SIM2),
+ isIncomingCallEventsSIM2Enabled = Settings.isIncomingCallEventsEnabled(context, Constants.SIM2),
+ encryptionKey = Settings.getEncryptionKey(context) ?: "",
+ isEncryptReceivedMessagesEnabled = Settings.encryptReceivedMessages(context)
+ )
+ }
+
+ fun setDebugLogEnabled(context: Context, enabled: Boolean) {
+ Settings.setDebugLogEnabled(context, enabled)
+ _uiState.value = _uiState.value.copy(isDebugLogEnabled = enabled)
+ }
+
+ fun setIncomingSIM1Enabled(context: Context, enabled: Boolean) {
+ Settings.setIncomingActiveSIM1(context, enabled)
+ _uiState.value = _uiState.value.copy(isIncomingSIM1Enabled = enabled)
+ }
+
+ fun setActiveSIM1(context: Context, enabled: Boolean) {
+ Settings.setActiveStatusAsync(context, enabled, Constants.SIM1)
+ _uiState.value = _uiState.value.copy(isActiveSIM1 = enabled)
+ }
+
+ fun setIncomingCallEventsSIM1Enabled(context: Context, enabled: Boolean) {
+ Settings.setIncomingCallEventsEnabled(context, Constants.SIM1, enabled)
+ _uiState.value = _uiState.value.copy(isIncomingCallEventsSIM1Enabled = enabled)
+ }
+
+ fun setIncomingSIM2Enabled(context: Context, enabled: Boolean) {
+ Settings.setIncomingActiveSIM2(context, enabled)
+ _uiState.value = _uiState.value.copy(isIncomingSIM2Enabled = enabled)
+ }
+
+ fun setActiveSIM2(context: Context, enabled: Boolean) {
+ Settings.setActiveStatusAsync(context, enabled, Constants.SIM2)
+ _uiState.value = _uiState.value.copy(isActiveSIM2 = enabled)
+ }
+
+ fun setIncomingCallEventsSIM2Enabled(context: Context, enabled: Boolean) {
+ Settings.setIncomingCallEventsEnabled(context, Constants.SIM2, enabled)
+ _uiState.value = _uiState.value.copy(isIncomingCallEventsSIM2Enabled = enabled)
+ }
+
+ fun setEncryptionKey(context: Context, key: String) {
+ val trimmedKey = key.trim()
+ if (trimmedKey.isEmpty()) {
+ Settings.setEncryptionKey(context, null)
+ Settings.setEncryptReceivedMessages(context, false)
+ _uiState.value = _uiState.value.copy(encryptionKey = "", isEncryptReceivedMessagesEnabled = false)
+ } else {
+ Settings.setEncryptionKey(context, trimmedKey)
+ _uiState.value = _uiState.value.copy(encryptionKey = trimmedKey)
+ }
+ }
+
+ fun setEncryptReceivedMessagesEnabled(context: Context, enabled: Boolean) {
+ Settings.setEncryptReceivedMessages(context, enabled)
+ _uiState.value = _uiState.value.copy(isEncryptReceivedMessagesEnabled = enabled)
+ }
+
+ fun logout(context: Context, onLogoutComplete: () -> Unit) {
+ Settings.setApiKeyAsync(context, null)
+ Settings.setSIM1PhoneNumber(context, null)
+ Settings.setSIM2PhoneNumber(context, null)
+ Settings.setActiveStatusAsync(context, true, Constants.SIM1)
+ Settings.setActiveStatusAsync(context, true, Constants.SIM2)
+ Settings.setIncomingActiveSIM1(context, true)
+ Settings.setIncomingActiveSIM2(context, true)
+ Settings.setUserID(context, null)
+ Settings.setEncryptionKey(context, null)
+ Settings.setEncryptReceivedMessages(context, false)
+ Settings.setFcmTokenLastUpdateTimestampAsync(context, 0)
+ Settings.setIncomingCallEventsEnabled(context, Constants.SIM1, false)
+ Settings.setIncomingCallEventsEnabled(context, Constants.SIM2, false)
+ onLogoutComplete()
+ }
+}
diff --git a/android/app/src/main/java/com/httpsms/ui/theme/Theme.kt b/android/app/src/main/java/com/httpsms/ui/theme/Theme.kt
new file mode 100644
index 000000000..88c032fa6
--- /dev/null
+++ b/android/app/src/main/java/com/httpsms/ui/theme/Theme.kt
@@ -0,0 +1,75 @@
+package com.httpsms.ui.theme
+
+import android.app.Activity
+import android.os.Build
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.dynamicDarkColorScheme
+import androidx.compose.material3.dynamicLightColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.SideEffect
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.toArgb
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalView
+import androidx.core.view.WindowCompat
+
+val Blue500 = Color(0xFF2196F3)
+val Pink500 = Color(0xFFE91E63)
+val LogoGreen = Color(0xFF70AB5C)
+
+private val DarkColorScheme = darkColorScheme(
+ primary = Blue500,
+ secondary = Pink500,
+ tertiary = Color.White
+)
+
+private val LightColorScheme = lightColorScheme(
+ primary = Blue500,
+ secondary = Pink500,
+ tertiary = Color.Black
+
+ /* Other default colors to override
+ background = Color(0xFFFFFBFE),
+ surface = Color(0xFFFFFBFE),
+ onPrimary = Color.White,
+ onSecondary = Color.White,
+ onTertiary = Color.White,
+ onBackground = Color(0xFF1C1B1F),
+ onSurface = Color(0xFF1C1B1F),
+ */
+)
+
+@Composable
+fun HttpSmsTheme(
+ darkTheme: Boolean = isSystemInDarkTheme(),
+ // Dynamic color is available on Android 12+
+ dynamicColor: Boolean = true,
+ content: @Composable () -> Unit
+) {
+ val colorScheme = when {
+ dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
+ val context = LocalContext.current
+ if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
+ }
+
+ darkTheme -> DarkColorScheme
+ else -> LightColorScheme
+ }
+ val view = LocalView.current
+ if (!view.isInEditMode) {
+ SideEffect {
+ val window = (view.context as Activity).window
+ window.statusBarColor = colorScheme.background.toArgb()
+ WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme
+ }
+ }
+
+ MaterialTheme(
+ colorScheme = colorScheme,
+ typography = Typography,
+ content = content
+ )
+}
diff --git a/android/app/src/main/java/com/httpsms/ui/theme/Typography.kt b/android/app/src/main/java/com/httpsms/ui/theme/Typography.kt
new file mode 100644
index 000000000..d8030fef1
--- /dev/null
+++ b/android/app/src/main/java/com/httpsms/ui/theme/Typography.kt
@@ -0,0 +1,17 @@
+package com.httpsms.ui.theme
+
+import androidx.compose.material3.Typography
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.sp
+
+val Typography = Typography(
+ bodyLarge = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 16.sp,
+ lineHeight = 24.sp,
+ letterSpacing = 0.5.sp
+ )
+)
diff --git a/android/app/src/main/java/com/httpsms/worker/HeartbeatWorker.kt b/android/app/src/main/java/com/httpsms/worker/HeartbeatWorker.kt
index ab83a3ecf..174f27425 100644
--- a/android/app/src/main/java/com/httpsms/worker/HeartbeatWorker.kt
+++ b/android/app/src/main/java/com/httpsms/worker/HeartbeatWorker.kt
@@ -29,11 +29,16 @@ class HeartbeatWorker(appContext: Context, workerParams: WorkerParameters) : Wor
return Result.success()
}
- HttpSmsApiService.create(applicationContext).storeHeartbeat(phoneNumbers.toTypedArray(), Settings.isCharging(applicationContext))
- Timber.d("finished sending heartbeats to server")
+ try{
+ HttpSmsApiService.create(applicationContext).storeHeartbeat(phoneNumbers.toTypedArray(), Settings.isCharging(applicationContext))
+ Timber.d("finished sending heartbeats to server")
- Settings.setHeartbeatTimestampAsync(applicationContext, System.currentTimeMillis())
- Timber.d("Set the heartbeat timestamp")
+ Settings.setHeartbeatTimestampAsync(applicationContext, System.currentTimeMillis())
+ Timber.d("Set the heartbeat timestamp")
+ } catch (exception: Exception) {
+ Timber.e(exception, "Failed to send [${phoneNumbers.joinToString()}] heartbeats to server")
+ return Result.failure()
+ }
return Result.success()
}
diff --git a/android/app/src/main/res/drawable/open_in_new_24.xml b/android/app/src/main/res/drawable/open_in_new_24.xml
new file mode 100644
index 000000000..b257c3447
--- /dev/null
+++ b/android/app/src/main/res/drawable/open_in_new_24.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/android/app/src/main/res/layout/activity_login.xml b/android/app/src/main/res/layout/activity_login.xml
deleted file mode 100644
index cfd86db6b..000000000
--- a/android/app/src/main/res/layout/activity_login.xml
+++ /dev/null
@@ -1,174 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index d04b9150f..000000000
--- a/android/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,217 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/android/app/src/main/res/layout/activity_settings.xml b/android/app/src/main/res/layout/activity_settings.xml
deleted file mode 100644
index c4e03dafd..000000000
--- a/android/app/src/main/res/layout/activity_settings.xml
+++ /dev/null
@@ -1,205 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/android/app/src/main/res/values-night/themes.xml b/android/app/src/main/res/values-night/themes.xml
index 8e80d527b..dd456a18b 100644
--- a/android/app/src/main/res/values-night/themes.xml
+++ b/android/app/src/main/res/values-night/themes.xml
@@ -12,6 +12,6 @@
- #121212
- - true
+ - false
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 24e9609d6..02dfa1b63 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -7,7 +7,7 @@
Login With API Key
API Key
HTTP Sms Logo
- Open\nhttpsms.com/settings\nto get your API key
+ Get Your API Key at\nhttpsms.com/settings
Log Out
e.g +18005550199 (international format)
e.g https://api.httpsms.com
@@ -17,6 +17,7 @@
https://api.httpsms.com
httpsms.com - %s
Disable Battery Optimization
+ Enable SMS Permission
App Settings
SIM1
SIM2
diff --git a/android/app/src/main/res/values/themes.xml b/android/app/src/main/res/values/themes.xml
index 538ca49c5..5914accca 100644
--- a/android/app/src/main/res/values/themes.xml
+++ b/android/app/src/main/res/values/themes.xml
@@ -13,7 +13,7 @@
- #121212
- - true
+ - false
diff --git a/android/app/src/main/res/xml/file_paths.xml b/android/app/src/main/res/xml/file_paths.xml
new file mode 100644
index 000000000..0df3af414
--- /dev/null
+++ b/android/app/src/main/res/xml/file_paths.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/android/build.gradle b/android/build.gradle
deleted file mode 100644
index e29386c31..000000000
--- a/android/build.gradle
+++ /dev/null
@@ -1,27 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-buildscript {
- ext {
- kotlin_version = '2.1.0'
- }
- repositories {
- // Check that you have the following line (if not, add it):
- google()
- mavenCentral() // Google's Maven repository
-
- }
- dependencies {
- // Add this line
- classpath 'com.google.gms:google-services:4.4.2'
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- }
-}
-
-plugins {
- id 'com.android.application' version '8.9.2' apply false
- id 'com.android.library' version '8.9.2' apply false
- id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
-}
-
-tasks.register('clean', Delete) {
- delete rootProject.buildDir
-}
diff --git a/android/build.gradle.kts b/android/build.gradle.kts
new file mode 100644
index 000000000..3be829b64
--- /dev/null
+++ b/android/build.gradle.kts
@@ -0,0 +1,21 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ repositories {
+ google()
+ mavenCentral()
+ }
+ dependencies {
+ classpath("com.google.gms:google-services:4.5.0")
+ }
+}
+
+plugins {
+ id("com.android.application") version "9.2.1" apply false
+ id("com.android.library") version "9.2.1" apply false
+ id("org.jetbrains.kotlin.android") version "2.4.0" apply false
+ id("org.jetbrains.kotlin.plugin.compose") version "2.4.0" apply false
+}
+
+tasks.register("clean") {
+ delete(rootProject.layout.buildDirectory)
+}
diff --git a/android/gradle.properties b/android/gradle.properties
index cf0008ddc..1f1245465 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -22,3 +22,11 @@ kotlin.code.style=official
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
android.nonFinalResIds=false
+android.defaults.buildfeatures.resvalues=true
+android.sdk.defaultTargetSdkToCompileSdkIfUnset=false
+android.enableAppCompileTimeRClass=false
+android.usesSdkInManifest.disallowed=false
+android.uniquePackageNames=false
+android.dependency.useConstraints=true
+android.r8.strictFullModeForKeepRules=false
+android.r8.optimizedResourceShrinking=false
diff --git a/android/gradle/gradle-daemon-jvm.properties b/android/gradle/gradle-daemon-jvm.properties
new file mode 100644
index 000000000..6c1139ec0
--- /dev/null
+++ b/android/gradle/gradle-daemon-jvm.properties
@@ -0,0 +1,12 @@
+#This file is generated by updateDaemonJvm
+toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect
+toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect
+toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect
+toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect
+toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73bcfb608d1fde9fb62e462f834a3299/redirect
+toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/846ee0d876d26a26f37aa1ce8de73224/redirect
+toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect
+toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect
+toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/9482ddec596298c84656d31d16652665/redirect
+toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/39701d92e1756bb2f141eb67cd4c660e/redirect
+toolchainVersion=21
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index f40abbca7..ff340ba9e 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Thu Jun 23 15:32:32 EEST 2022
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
diff --git a/android/settings.gradle b/android/settings.gradle.kts
similarity index 95%
rename from android/settings.gradle
rename to android/settings.gradle.kts
index baf72e29c..75be430ae 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle.kts
@@ -13,4 +13,4 @@ dependencyResolutionManagement {
}
}
rootProject.name = "httpSMS"
-include ':app'
+include(":app")
diff --git a/api/.air.toml b/api/.air.toml
deleted file mode 100644
index 15d45a057..000000000
--- a/api/.air.toml
+++ /dev/null
@@ -1,36 +0,0 @@
-root = "."
-testdata_dir = "testdata"
-tmp_dir = "tmp"
-
-[build]
- bin = "tmp\\main.exe"
- cmd = "go build -o ./tmp/main.exe ."
- delay = 1000
- exclude_dir = ["assets", "tmp", "vendor", "testdata"]
- exclude_file = []
- exclude_regex = ["_test.go"]
- exclude_unchanged = false
- follow_symlink = false
- full_bin = ""
- include_dir = []
- include_ext = ["go", "tpl", "tmpl", "html"]
- kill_delay = "0s"
- log = "build-errors.log"
- send_interrupt = false
- stop_on_error = true
-
-[color]
- app = ""
- build = "yellow"
- main = "magenta"
- runner = "green"
- watcher = "cyan"
-
-[log]
- time = false
-
-[misc]
- clean_on_exit = false
-
-[screen]
- clear_on_rebuild = false
diff --git a/api/.env.docker b/api/.env.docker
index 9dc43fdb7..235972f4d 100644
--- a/api/.env.docker
+++ b/api/.env.docker
@@ -1,10 +1,14 @@
-ENV=production
+ENV=local
# This is the project-id of the firebase project you created in the setup instructions
GCP_PROJECT_ID=httpsms-docker
USE_HTTP_LOGGER=true
+# Set to "true" to enable feature entitlement checks (limits for free users).
+# Defaults to "false" for self-hosted deployments (no limits).
+ENTITLEMENT_ENABLED=false
+
EVENTS_QUEUE_TYPE=emulator
EVENTS_QUEUE_NAME=events-local
EVENTS_QUEUE_ENDPOINT=http://localhost:8000/v1/events
@@ -48,9 +52,16 @@ DATABASE_URL_DEDICATED=postgresql://dbusername:dbpassword@postgres:5432/httpsms
# Redis connection string
REDIS_URL=redis://@redis:6379
-# [optional] If you would like to use uptrace.dev for distributed tracing, you can set the DSN here.
-# This is optional and you can leave it empty if you don't want to use uptrace
-UPTRACE_DSN=
+# Google Cloud Storage bucket for MMS attachments. Leave empty to use in-memory storage.
+GCS_BUCKET_NAME=
+
+# [Optional] Axiom observability configuration
+# API token for Axiom (required for logging, traces, and metrics in production)
+AXIOM_TOKEN=
+# Dataset for logs and traces (e.g. "events")
+AXIOM_DATASET_EVENTS=
+# Dataset for metrics (e.g. "metrics")
+AXIOM_DATASET_METRICS=
# [optional] Websocket configuration for https://pusher.com if you will like to frontend to update in real time
@@ -58,3 +69,7 @@ PUSHER_APP_ID=
PUSHER_KEY=
PUSHER_SECRET=
PUSHER_CLUSTER=
+
+# Cloudflare Turnstile secret key for validating captcha tokens on the /v1/messages/search route
+# Get your secret key at https://developers.cloudflare.com/turnstile/get-started/
+CLOUDFLARE_TURNSTILE_SECRET_KEY=
diff --git a/api/Dockerfile b/api/Dockerfile
index 34d824030..6e6423b1d 100644
--- a/api/Dockerfile
+++ b/api/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang as builder
+FROM golang AS builder
ARG GIT_COMMIT
ENV GIT_COMMIT=$GIT_COMMIT
@@ -21,7 +21,7 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-X main.Version=$GI
FROM alpine:latest
-RUN addgroup -S http-sms && adduser -S http-sms -G http-sms
+RUN apk add --no-cache curl && addgroup -S http-sms && adduser -S http-sms -G http-sms
USER http-sms
WORKDIR /home/http-sms
diff --git a/api/cmd/fcm/main.go b/api/cmd/fcm/main.go
deleted file mode 100644
index 4906142b1..000000000
--- a/api/cmd/fcm/main.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package main
-
-import (
- "context"
- "log"
- "os"
- "time"
-
- "firebase.google.com/go/messaging"
- "github.com/NdoleStudio/httpsms/pkg/di"
- "github.com/joho/godotenv"
-)
-
-func main() {
- err := godotenv.Load("../../.env")
- if err != nil {
- log.Fatal("Error loading .env file")
- }
-
- container := di.NewContainer(os.Getenv("GCP_PROJECT_ID"), "")
- client := container.FirebaseMessagingClient()
-
- result, err := client.Send(context.Background(), &messaging.Message{
- Data: map[string]string{
- "KEY_HEARTBEAT_ID": time.Now().UTC().Format(time.RFC3339),
- },
- Android: &messaging.AndroidConfig{
- Priority: "high",
- },
- Token: os.Getenv("FIREBASE_TOKEN"),
- })
- if err != nil {
- container.Logger().Fatal(err)
- }
-
- container.Logger().Info(result)
-}
diff --git a/api/cmd/loadtest/main.go b/api/cmd/loadtest/main.go
deleted file mode 100644
index f072840c6..000000000
--- a/api/cmd/loadtest/main.go
+++ /dev/null
@@ -1,132 +0,0 @@
-package main
-
-import (
- "context"
- "crypto/aes"
- "crypto/cipher"
- "crypto/rand"
- "crypto/sha256"
- "encoding/base64"
- "fmt"
- "log"
- "os"
- "time"
-
- "github.com/google/uuid"
-
- "github.com/joho/godotenv"
-
- "github.com/carlmjohnson/requests"
- "github.com/palantir/stacktrace"
-)
-
-func main() {
- err := godotenv.Load("../../.env")
- if err != nil {
- log.Fatal("Error loading .env file")
- }
- sendSingle()
-}
-
-func bulkSend() {
- var to []string
- for i := 0; i < 100; i++ {
- to = append(to, os.Getenv("HTTPSMS_TO_BULK"))
- }
-
- var responsePayload string
- err := requests.
- URL("/v1/messages/bulk-send").
- Host("api.httpsms.com").
- Header("x-api-key", os.Getenv("HTTPSMS_KEY_BULK")).
- BodyJSON(&map[string]any{
- "content": fmt.Sprintf("Bulk Load Test [%s]", time.Now().Format(time.RFC850)),
- "from": os.Getenv("HTTPSMS_FROM_BULK"),
- "to": to,
- "request_id": fmt.Sprintf("load-%s", uuid.NewString()),
- }).
- ToString(&responsePayload).
- Fetch(context.Background())
- if err != nil {
- log.Println(responsePayload)
- log.Fatal(stacktrace.Propagate(err, "cannot create request"))
- }
- log.Println(responsePayload)
-}
-
-func sendSingle() {
- for i := 0; i < 1; i++ {
- var responsePayload string
- err := requests.
- URL("/v1/messages/send").
- Host("api.httpsms.com").
- Header("x-api-key", os.Getenv("HTTPSMS_KEY")).
- BodyJSON(&map[string]any{
- "content": fmt.Sprintf("This is a test text message [%d]", i),
- "from": os.Getenv("HTTPSMS_FROM"),
- "to": os.Getenv("HTTPSMS_TO"),
- "encrypted": false,
- "request_id": fmt.Sprintf("load-%s-%d", uuid.NewString(), i),
- }).
- ToString(&responsePayload).
- Fetch(context.Background())
- if err != nil {
- log.Fatal(stacktrace.Propagate(err, "cannot create json payload"))
- }
- log.Println(responsePayload)
- }
-}
-
-func encrypt(value string) string {
- key := sha256.Sum256([]byte("Password123"))
- iv := make([]byte, 16)
- _, err := rand.Read(iv)
- if err != nil {
- log.Fatal(stacktrace.Propagate(err, "cannot generate iv"))
- }
- c := ase256(value, key[:], iv)
- fmt.Println("iv", base64.StdEncoding.EncodeToString(iv))
- fmt.Println("cypher", base64.StdEncoding.EncodeToString(c))
- fmt.Println("cypher+iv", base64.StdEncoding.EncodeToString(append(iv, c...)))
- return base64.StdEncoding.EncodeToString(append(iv, c...))
-}
-
-func decode(value string) string {
- content, err := base64.StdEncoding.DecodeString(value)
- if err != nil {
- log.Fatal(err)
- }
-
- key := sha256.Sum256([]byte(os.Getenv("HTTPSMS_ENCRYPTION_KEY")))
- iv := content[:16]
-
- return ase256Decode(content[16:], key[:], iv)
-}
-
-func ase256(plaintext string, key []byte, bIV []byte) []byte {
- block, err := aes.NewCipher(key)
- if err != nil {
- log.Fatal(err)
- }
-
- text := []byte(plaintext)
-
- stream := cipher.NewCFBEncrypter(block, bIV)
- cypher := make([]byte, len(text))
- stream.XORKeyStream(cypher, text)
-
- return cypher
-}
-
-func ase256Decode(cipherText []byte, key []byte, iv []byte) (decryptedString string) {
- // Create a new AES cipher with the key and encrypted message
- block, err := aes.NewCipher(key)
- if err != nil {
- log.Fatal(err)
- }
-
- // Decrypt the message
- stream := cipher.NewCFBDecrypter(block, iv)
- stream.XORKeyStream(cipherText, cipherText)
- return string(cipherText)
-}
diff --git a/api/cmd/migration/main.go b/api/cmd/migration/main.go
deleted file mode 100644
index d64ca4b5c..000000000
--- a/api/cmd/migration/main.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package main
-
-import (
- "log"
-
- "github.com/joho/godotenv"
-)
-
-func main() {
- err := godotenv.Load("../../.env")
- if err != nil {
- log.Fatal("Error loading .env file")
- }
-}
diff --git a/api/cmd/replay/main.go b/api/cmd/replay/main.go
deleted file mode 100644
index 22e8eea42..000000000
--- a/api/cmd/replay/main.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package main
-
-import (
- "log"
-
- "github.com/NdoleStudio/httpsms/pkg/di"
- "github.com/joho/godotenv"
-)
-
-func main() {
- err := godotenv.Load("../../.env")
- if err != nil {
- log.Fatal("Error loading .env file")
- }
-
- _ = di.NewContainer("http-sms", "")
-}
diff --git a/api/docs/docs.go b/api/docs/docs.go
index 21f3a971d..8cd408cb1 100644
--- a/api/docs/docs.go
+++ b/api/docs/docs.go
@@ -1,5 +1,4 @@
-// Package docs GENERATED BY SWAG; DO NOT EDIT
-// This file was generated by swaggo/swag
+// Package docs Code generated by swaggo/swag. DO NOT EDIT
package docs
import "github.com/swaggo/swag"
@@ -145,13 +144,51 @@ const docTemplate = `{
}
},
"/bulk-messages": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Fetches the last 10 bulk message order summaries for the authenticated user showing counts per status.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "BulkSMS"
+ ],
+ "summary": "List bulk message orders",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.BulkMessagesResponse"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
- "description": "Sends bulk SMS messages to multiple users from a CSV or Excel file.",
+ "description": "Sends bulk SMS messages to multiple users based on our [CSV template](https://httpsms.com/templates/httpsms-bulk.csv) or our [Excel template](https://httpsms.com/templates/httpsms-bulk.xlsx).",
"consumes": [
"multipart/form-data"
],
@@ -165,7 +202,7 @@ const docTemplate = `{
"parameters": [
{
"type": "file",
- "description": "The Excel or CSV file formatted according to the templates",
+ "description": "The Excel or CSV file containing the messages to be sent.",
"name": "document",
"in": "formData",
"required": true
@@ -710,53 +747,6 @@ const docTemplate = `{
}
}
},
- "/lemonsqueezy/event": {
- "post": {
- "description": "Publish a lemonsqueezy event to the registered listeners",
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "Lemonsqueezy"
- ],
- "summary": "Consume a lemonsqueezy event",
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
"/message-threads": {
"get": {
"security": [
@@ -881,7 +871,7 @@ const docTemplate = `{
"200": {
"description": "OK",
"schema": {
- "$ref": "#/definitions/responses.PhoneResponse"
+ "$ref": "#/definitions/responses.MessageThreadResponse"
}
},
"400": {
@@ -896,6 +886,12 @@ const docTemplate = `{
"$ref": "#/definitions/responses.Unauthorized"
}
},
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
"422": {
"description": "Unprocessable Entity",
"schema": {
@@ -1419,7 +1415,7 @@ const docTemplate = `{
"ApiKeyAuth": []
}
],
- "description": "Add a new SMS message to be sent by the android phone",
+ "description": "Add a new SMS message to be sent by your Android phone",
"consumes": [
"application/json"
],
@@ -1429,10 +1425,10 @@ const docTemplate = `{
"tags": [
"Messages"
],
- "summary": "Send a new SMS message",
+ "summary": "Send an SMS message",
"parameters": [
{
- "description": "PostSend message request payload",
+ "description": "Send message request payload",
"name": "payload",
"in": "body",
"required": true,
@@ -1476,6 +1472,72 @@ const docTemplate = `{
}
},
"/messages/{messageID}": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get a message from the database by the message ID.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Get a message from the database.",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the message",
+ "name": "messageID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
"delete": {
"security": [
{
@@ -1741,6 +1803,12 @@ const docTemplate = `{
"$ref": "#/definitions/responses.Unauthorized"
}
},
+ "402": {
+ "description": "Payment Required",
+ "schema": {
+ "$ref": "#/definitions/responses.PaymentRequired"
+ }
+ },
"422": {
"description": "Unprocessable Entity",
"schema": {
@@ -2161,35 +2229,26 @@ const docTemplate = `{
}
}
},
- "/users/me": {
+ "/send-schedules": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
- "description": "Get details of the currently authenticated user",
- "consumes": [
- "application/json"
- ],
+ "description": "List all send schedules owned by the authenticated user.",
"produces": [
"application/json"
],
"tags": [
- "Users"
+ "SendSchedules"
],
- "summary": "Get current user",
+ "summary": "List send schedules",
"responses": {
"200": {
"description": "OK",
"schema": {
- "$ref": "#/definitions/responses.UserResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
+ "$ref": "#/definitions/responses.MessageSendSchedulesResponse"
}
},
"401": {
@@ -2198,12 +2257,6 @@ const docTemplate = `{
"$ref": "#/definitions/responses.Unauthorized"
}
},
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
"500": {
"description": "Internal Server Error",
"schema": {
@@ -2212,13 +2265,13 @@ const docTemplate = `{
}
}
},
- "put": {
+ "post": {
"security": [
{
"ApiKeyAuth": []
}
],
- "description": "Updates the details of the currently authenticated user",
+ "description": "Create a new send schedule for the authenticated user.",
"consumes": [
"application/json"
],
@@ -2226,25 +2279,25 @@ const docTemplate = `{
"application/json"
],
"tags": [
- "Users"
+ "SendSchedules"
],
- "summary": "Update a user",
+ "summary": "Create send schedule",
"parameters": [
{
- "description": "Payload of user details to update",
+ "description": "Payload of new send schedule.",
"name": "payload",
"in": "body",
"required": true,
"schema": {
- "$ref": "#/definitions/requests.UserUpdate"
+ "$ref": "#/definitions/requests.MessageSendScheduleStore"
}
}
],
"responses": {
- "200": {
- "description": "OK",
+ "201": {
+ "description": "Created",
"schema": {
- "$ref": "#/definitions/responses.PhoneResponse"
+ "$ref": "#/definitions/responses.MessageSendScheduleResponse"
}
},
"400": {
@@ -2259,6 +2312,12 @@ const docTemplate = `{
"$ref": "#/definitions/responses.Unauthorized"
}
},
+ "402": {
+ "description": "Payment Required",
+ "schema": {
+ "$ref": "#/definitions/responses.PaymentRequired"
+ }
+ },
"422": {
"description": "Unprocessable Entity",
"schema": {
@@ -2272,14 +2331,16 @@ const docTemplate = `{
}
}
}
- },
- "delete": {
+ }
+ },
+ "/send-schedules/{scheduleID}": {
+ "put": {
"security": [
{
"ApiKeyAuth": []
}
],
- "description": "Deletes the currently authenticated user together with all their data.",
+ "description": "Update a send schedule owned by the authenticated user.",
"consumes": [
"application/json"
],
@@ -2287,51 +2348,32 @@ const docTemplate = `{
"application/json"
],
"tags": [
- "Users"
+ "SendSchedules"
],
- "summary": "Delete a user",
- "responses": {
- "201": {
- "description": "Created",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
+ "summary": "Update send schedule",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Schedule ID",
+ "name": "scheduleID",
+ "in": "path",
+ "required": true
},
- "500": {
- "description": "Internal Server Error",
+ {
+ "description": "Payload of updated send schedule.",
+ "name": "payload",
+ "in": "body",
+ "required": true,
"schema": {
- "$ref": "#/definitions/responses.InternalServerError"
+ "$ref": "#/definitions/requests.MessageSendScheduleStore"
}
}
- }
- }
- },
- "/users/subscription": {
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Cancel the subscription of the authenticated user.",
- "produces": [
- "application/json"
],
- "tags": [
- "Users"
- ],
- "summary": "Cancel the user's subscription",
"responses": {
"200": {
"description": "OK",
"schema": {
- "$ref": "#/definitions/responses.NoContent"
+ "$ref": "#/definitions/responses.MessageSendScheduleResponse"
}
},
"400": {
@@ -2346,6 +2388,12 @@ const docTemplate = `{
"$ref": "#/definitions/responses.Unauthorized"
}
},
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
"422": {
"description": "Unprocessable Entity",
"schema": {
@@ -2359,27 +2407,280 @@ const docTemplate = `{
}
}
}
- }
- },
- "/users/subscription-update-url": {
- "get": {
+ },
+ "delete": {
"security": [
{
"ApiKeyAuth": []
}
],
- "description": "Fetches the subscription URL of the authenticated user.",
+ "description": "Delete a send schedule owned by the authenticated user.",
"produces": [
"application/json"
],
"tags": [
- "Users"
+ "SendSchedules"
],
- "summary": "Currently authenticated user subscription update URL",
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
+ "summary": "Delete send schedule",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Schedule ID",
+ "name": "scheduleID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/me": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get details of the currently authenticated user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Get current user",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.UserResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Updates the details of the currently authenticated user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Update a user",
+ "parameters": [
+ {
+ "description": "Payload of user details to update",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.UserUpdate"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PhoneResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Deletes the currently authenticated user together with all their data.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Delete a user",
+ "responses": {
+ "201": {
+ "description": "Created",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/subscription": {
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Cancel the subscription of the authenticated user.",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Cancel the user's subscription",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/subscription-update-url": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Fetches the subscription URL of the authenticated user.",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Currently authenticated user subscription update URL",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
"$ref": "#/definitions/responses.OkString"
}
},
@@ -2410,6 +2711,128 @@ const docTemplate = `{
}
}
},
+ "/users/subscription/invoices/{subscriptionInvoiceID}": {
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Generates a new invoice PDF file for the given subscription payment with given parameters.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/pdf"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Generate a subscription payment invoice",
+ "parameters": [
+ {
+ "description": "Generate subscription payment invoice parameters",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.UserPaymentInvoice"
+ }
+ },
+ {
+ "type": "string",
+ "description": "ID of the subscription invoice to generate the PDF for",
+ "name": "subscriptionInvoiceID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "file"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/subscription/payments": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Subscription payments are generated throughout the lifecycle of a subscription, typically there is one at the time of purchase and then one for each renewal.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Get the last 10 subscription payments.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.UserSubscriptionPaymentsResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
"/users/{userID}/api-keys": {
"delete": {
"security": [
@@ -2543,6 +2966,68 @@ const docTemplate = `{
}
}
},
+ "/v1/attachments/{userID}/{messageID}/{attachmentIndex}/{filename}": {
+ "get": {
+ "description": "Download an MMS attachment by its path components",
+ "produces": [
+ "application/octet-stream"
+ ],
+ "tags": [
+ "Attachments"
+ ],
+ "summary": "Download a message attachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "User ID",
+ "name": "userID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Message ID",
+ "name": "messageID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Attachment index",
+ "name": "attachmentIndex",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Filename with extension",
+ "name": "filename",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "file"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
"/webhooks": {
"get": {
"security": [
@@ -2864,6 +3349,58 @@ const docTemplate = `{
}
}
},
+ "entities.BulkMessage": {
+ "type": "object",
+ "required": [
+ "created_at",
+ "delivered_count",
+ "expired_count",
+ "failed_count",
+ "pending_count",
+ "request_id",
+ "scheduled_count",
+ "sent_count",
+ "total"
+ ],
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "delivered_count": {
+ "type": "integer",
+ "example": 25
+ },
+ "expired_count": {
+ "type": "integer",
+ "example": 3
+ },
+ "failed_count": {
+ "type": "integer",
+ "example": 5
+ },
+ "pending_count": {
+ "type": "integer",
+ "example": 30
+ },
+ "request_id": {
+ "type": "string",
+ "example": "bulk-httpsms-file.csv"
+ },
+ "scheduled_count": {
+ "type": "integer",
+ "example": 50
+ },
+ "sent_count": {
+ "type": "integer",
+ "example": 40
+ },
+ "total": {
+ "type": "integer",
+ "example": 150
+ }
+ }
+ },
"entities.Discord": {
"type": "object",
"required": [
@@ -2946,28 +3483,17 @@ const docTemplate = `{
"entities.Message": {
"type": "object",
"required": [
- "can_be_polled",
+ "attachments",
"contact",
"content",
"created_at",
- "delivered_at",
"encrypted",
- "expired_at",
- "failed_at",
- "failure_reason",
"id",
- "last_attempted_at",
"max_send_attempts",
"order_timestamp",
"owner",
- "received_at",
- "request_id",
"request_received_at",
- "scheduled_at",
- "scheduled_send_time",
"send_attempt_count",
- "send_time",
- "sent_at",
"sim",
"status",
"type",
@@ -2975,9 +3501,15 @@ const docTemplate = `{
"user_id"
],
"properties": {
- "can_be_polled": {
- "type": "boolean",
- "example": false
+ "attachments": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "https://example.com/image.jpg",
+ "https://example.com/video.mp4"
+ ]
},
"contact": {
"type": "string",
@@ -3066,7 +3598,11 @@ const docTemplate = `{
},
"sim": {
"description": "SIM is the SIM card to use to send the message\n* SMS1: use the SIM card in slot 1\n* SMS2: use the SIM card in slot 2\n* DEFAULT: used the default communication SIM card",
- "type": "string",
+ "allOf": [
+ {
+ "$ref": "#/definitions/entities.SIM"
+ }
+ ],
"example": "DEFAULT"
},
"status": {
@@ -3077,13 +3613,79 @@ const docTemplate = `{
"type": "string",
"example": "mobile-terminated"
},
- "updated_at": {
- "type": "string",
- "example": "2022-06-05T14:26:10.303278+03:00"
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:10.303278+03:00"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ }
+ }
+ },
+ "entities.MessageSendSchedule": {
+ "type": "object",
+ "required": [
+ "created_at",
+ "id",
+ "name",
+ "timezone",
+ "updated_at",
+ "user_id",
+ "windows"
+ ],
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "name": {
+ "type": "string",
+ "example": "Business Hours"
+ },
+ "timezone": {
+ "type": "string",
+ "example": "Europe/Tallinn"
+ },
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:10.303278+03:00"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ },
+ "windows": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.MessageSendScheduleWindow"
+ }
+ }
+ }
+ },
+ "entities.MessageSendScheduleWindow": {
+ "type": "object",
+ "required": [
+ "day_of_week",
+ "end_minute",
+ "start_minute"
+ ],
+ "properties": {
+ "day_of_week": {
+ "type": "integer",
+ "example": 1
+ },
+ "end_minute": {
+ "type": "integer",
+ "example": 1020
},
- "user_id": {
- "type": "string",
- "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ "start_minute": {
+ "type": "integer",
+ "example": 540
}
}
},
@@ -3095,6 +3697,7 @@ const docTemplate = `{
"created_at",
"id",
"is_archived",
+ "is_read",
"last_message_content",
"last_message_id",
"order_timestamp",
@@ -3124,6 +3727,10 @@ const docTemplate = `{
"type": "boolean",
"example": false
},
+ "is_read": {
+ "type": "boolean",
+ "example": true
+ },
"last_message_content": {
"type": "string",
"example": "This is a sample message content"
@@ -3158,14 +3765,13 @@ const docTemplate = `{
"type": "object",
"required": [
"created_at",
- "fcm_token",
"id",
"max_send_attempts",
"message_expiration_seconds",
"messages_per_minute",
- "missed_call_auto_reply",
"phone_number",
"sim",
+ "unarchive_thread",
"updated_at",
"user_id"
],
@@ -3191,6 +3797,10 @@ const docTemplate = `{
"description": "MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired.",
"type": "integer"
},
+ "message_send_schedule_id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
"messages_per_minute": {
"type": "integer",
"example": 1
@@ -3204,8 +3814,12 @@ const docTemplate = `{
"example": "+18005550199"
},
"sim": {
- "description": "SIM card that received the message",
- "type": "string"
+ "$ref": "#/definitions/entities.SIM"
+ },
+ "unarchive_thread": {
+ "description": "UnarchiveThread moves an archived message thread back to the inbox when a new message is received on this phone.",
+ "type": "boolean",
+ "example": false
},
"updated_at": {
"type": "string",
@@ -3281,10 +3895,49 @@ const docTemplate = `{
}
}
},
+ "entities.SIM": {
+ "type": "string",
+ "enum": [
+ "SIM1",
+ "SIM2"
+ ],
+ "x-enum-varnames": [
+ "SIM1",
+ "SIM2"
+ ]
+ },
+ "entities.SubscriptionName": {
+ "type": "string",
+ "enum": [
+ "free",
+ "pro-monthly",
+ "pro-yearly",
+ "ultra-monthly",
+ "ultra-yearly",
+ "pro-lifetime",
+ "20k-monthly",
+ "100k-monthly",
+ "50k-monthly",
+ "200k-monthly",
+ "20k-yearly"
+ ],
+ "x-enum-varnames": [
+ "SubscriptionNameFree",
+ "SubscriptionNameProMonthly",
+ "SubscriptionNameProYearly",
+ "SubscriptionNameUltraMonthly",
+ "SubscriptionNameUltraYearly",
+ "SubscriptionNameProLifetime",
+ "SubscriptionName20KMonthly",
+ "SubscriptionName100KMonthly",
+ "SubscriptionName50KMonthly",
+ "SubscriptionName200KMonthly",
+ "SubscriptionName20KYearly"
+ ]
+ },
"entities.User": {
"type": "object",
"required": [
- "active_phone_id",
"api_key",
"created_at",
"email",
@@ -3293,11 +3946,8 @@ const docTemplate = `{
"notification_message_status_enabled",
"notification_newsletter_enabled",
"notification_webhook_enabled",
- "subscription_ends_at",
"subscription_id",
"subscription_name",
- "subscription_renews_at",
- "subscription_status",
"timezone",
"updated_at"
],
@@ -3347,7 +3997,11 @@ const docTemplate = `{
"example": "8f9c71b8-b84e-4417-8408-a62274f65a08"
},
"subscription_name": {
- "type": "string",
+ "allOf": [
+ {
+ "$ref": "#/definitions/entities.SubscriptionName"
+ }
+ ],
"example": "free"
},
"subscription_renews_at": {
@@ -3482,15 +4136,46 @@ const docTemplate = `{
}
}
},
+ "requests.MessageAttachment": {
+ "type": "object",
+ "required": [
+ "content",
+ "content_type",
+ "name"
+ ],
+ "properties": {
+ "content": {
+ "description": "Content is the base64-encoded attachment data",
+ "type": "string",
+ "example": "base64data..."
+ },
+ "content_type": {
+ "description": "ContentType is the MIME type of the attachment",
+ "type": "string",
+ "example": "image/jpeg"
+ },
+ "name": {
+ "description": "Name is the original filename of the attachment",
+ "type": "string",
+ "example": "photo.jpg"
+ }
+ }
+ },
"requests.MessageBulkSend": {
"type": "object",
"required": [
"content",
- "encrypted",
"from",
"to"
],
"properties": {
+ "attachments": {
+ "description": "Attachments are optional. When you provide a list of attachments, the message will be sent out as an MMS",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
"content": {
"type": "string",
"example": "This is a sample text message"
@@ -3583,6 +4268,13 @@ const docTemplate = `{
"to"
],
"properties": {
+ "attachments": {
+ "description": "Attachments is the list of MMS attachments received with the message",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/requests.MessageAttachment"
+ }
+ },
"content": {
"type": "string",
"example": "This is a sample text message received on a phone"
@@ -3598,7 +4290,11 @@ const docTemplate = `{
},
"sim": {
"description": "SIM card that received the message",
- "type": "string",
+ "allOf": [
+ {
+ "$ref": "#/definitions/entities.SIM"
+ }
+ ],
"example": "SIM1"
},
"timestamp": {
@@ -3620,6 +4316,17 @@ const docTemplate = `{
"to"
],
"properties": {
+ "attachments": {
+ "description": "Attachments are optional. When you provide a list of attachments, the message will be sent out as an MMS",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "https://example.com/image.jpg",
+ "https://example.com/video.mp4"
+ ]
+ },
"content": {
"type": "string",
"example": "This is a sample text message"
@@ -3639,9 +4346,9 @@ const docTemplate = `{
"example": "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
},
"send_at": {
- "description": "SendAt is an optional parameter used to schedule a message to be sent in the future. The time is considered to be in your profile's local timezone.",
+ "description": "SendAt is an optional parameter used to schedule a message to be sent in the future. The time is considered to be in your profile's local timezone and you can queue messages for up to 20 days (480 hours) in the future.",
"type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
+ "example": "2025-12-19T16:39:57-08:00"
},
"to": {
"type": "string",
@@ -3649,15 +4356,57 @@ const docTemplate = `{
}
}
},
- "requests.MessageThreadUpdate": {
+ "requests.MessageSendScheduleStore": {
+ "type": "object",
+ "required": [
+ "name",
+ "timezone",
+ "windows"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "timezone": {
+ "type": "string"
+ },
+ "windows": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/requests.MessageSendScheduleWindow"
+ }
+ }
+ }
+ },
+ "requests.MessageSendScheduleWindow": {
"type": "object",
"required": [
- "is_archived"
+ "day_of_week",
+ "end_minute",
+ "start_minute"
],
+ "properties": {
+ "day_of_week": {
+ "type": "integer"
+ },
+ "end_minute": {
+ "type": "integer"
+ },
+ "start_minute": {
+ "type": "integer"
+ }
+ }
+ },
+ "requests.MessageThreadUpdate": {
+ "type": "object",
"properties": {
"is_archived": {
"type": "boolean",
"example": true
+ },
+ "is_read": {
+ "type": "boolean",
+ "example": true
}
}
},
@@ -3705,7 +4454,8 @@ const docTemplate = `{
"messages_per_minute",
"missed_call_auto_reply",
"phone_number",
- "sim"
+ "sim",
+ "unarchive_thread"
],
"properties": {
"fcm_token": {
@@ -3722,6 +4472,10 @@ const docTemplate = `{
"type": "integer",
"example": 12345
},
+ "message_send_schedule_id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
"messages_per_minute": {
"type": "integer",
"example": 1
@@ -3738,6 +4492,11 @@ const docTemplate = `{
"description": "SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot",
"type": "string",
"example": "SIM1"
+ },
+ "unarchive_thread": {
+ "description": "UnarchiveThread moves an archived thread back to the inbox when a new message is received on this phone.",
+ "type": "boolean",
+ "example": false
}
}
},
@@ -3768,6 +4527,48 @@ const docTemplate = `{
}
}
},
+ "requests.UserPaymentInvoice": {
+ "type": "object",
+ "required": [
+ "address",
+ "city",
+ "country",
+ "name",
+ "notes",
+ "state",
+ "zip_code"
+ ],
+ "properties": {
+ "address": {
+ "type": "string",
+ "example": "221B Baker Street, London"
+ },
+ "city": {
+ "type": "string",
+ "example": "Los Angeles"
+ },
+ "country": {
+ "type": "string",
+ "example": "US"
+ },
+ "name": {
+ "type": "string",
+ "example": "Acme Corp"
+ },
+ "notes": {
+ "type": "string",
+ "example": "Thank you for your business!"
+ },
+ "state": {
+ "type": "string",
+ "example": "CA"
+ },
+ "zip_code": {
+ "type": "string",
+ "example": "9800"
+ }
+ }
+ },
"requests.UserUpdate": {
"type": "object",
"required": [
@@ -3918,6 +4719,30 @@ const docTemplate = `{
}
}
},
+ "responses.BulkMessagesResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.BulkMessage"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
"responses.DiscordResponse": {
"type": "object",
"required": [
@@ -4046,6 +4871,72 @@ const docTemplate = `{
}
}
},
+ "responses.MessageSendScheduleResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.MessageSendSchedule"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.MessageSendSchedulesResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.MessageSendSchedule"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.MessageThreadResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.MessageThread"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
"responses.MessageThreadsResponse": {
"type": "object",
"required": [
@@ -4149,6 +5040,23 @@ const docTemplate = `{
}
}
},
+ "responses.PaymentRequired": {
+ "type": "object",
+ "required": [
+ "message",
+ "status"
+ ],
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "You have reached the maximum number of allowed resources. Please upgrade your plan."
+ },
+ "status": {
+ "type": "string",
+ "example": "error"
+ }
+ }
+ },
"responses.PhoneAPIKeyResponse": {
"type": "object",
"required": [
@@ -4309,6 +5217,156 @@ const docTemplate = `{
}
}
},
+ "responses.UserSubscriptionPaymentsResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "attributes",
+ "id",
+ "type"
+ ],
+ "properties": {
+ "attributes": {
+ "type": "object",
+ "required": [
+ "billing_reason",
+ "card_brand",
+ "card_last_four",
+ "created_at",
+ "currency",
+ "currency_rate",
+ "discount_total",
+ "discount_total_formatted",
+ "discount_total_usd",
+ "refunded",
+ "refunded_amount",
+ "refunded_amount_formatted",
+ "refunded_amount_usd",
+ "refunded_at",
+ "status",
+ "status_formatted",
+ "subtotal",
+ "subtotal_formatted",
+ "subtotal_usd",
+ "tax",
+ "tax_formatted",
+ "tax_inclusive",
+ "tax_usd",
+ "total",
+ "total_formatted",
+ "total_usd",
+ "updated_at"
+ ],
+ "properties": {
+ "billing_reason": {
+ "type": "string"
+ },
+ "card_brand": {
+ "type": "string"
+ },
+ "card_last_four": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ },
+ "currency_rate": {
+ "type": "string"
+ },
+ "discount_total": {
+ "type": "integer"
+ },
+ "discount_total_formatted": {
+ "type": "string"
+ },
+ "discount_total_usd": {
+ "type": "integer"
+ },
+ "refunded": {
+ "type": "boolean"
+ },
+ "refunded_amount": {
+ "type": "integer"
+ },
+ "refunded_amount_formatted": {
+ "type": "string"
+ },
+ "refunded_amount_usd": {
+ "type": "integer"
+ },
+ "refunded_at": {},
+ "status": {
+ "type": "string"
+ },
+ "status_formatted": {
+ "type": "string"
+ },
+ "subtotal": {
+ "type": "integer"
+ },
+ "subtotal_formatted": {
+ "type": "string"
+ },
+ "subtotal_usd": {
+ "type": "integer"
+ },
+ "tax": {
+ "type": "integer"
+ },
+ "tax_formatted": {
+ "type": "string"
+ },
+ "tax_inclusive": {
+ "type": "boolean"
+ },
+ "tax_usd": {
+ "type": "integer"
+ },
+ "total": {
+ "type": "integer"
+ },
+ "total_formatted": {
+ "type": "string"
+ },
+ "total_usd": {
+ "type": "integer"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ },
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
"responses.WebhookResponse": {
"type": "object",
"required": [
@@ -4374,6 +5432,8 @@ var SwaggerInfo = &swag.Spec{
Description: "Use your Android phone to send and receive SMS messages via a simple programmable API with end-to-end encryption.",
InfoInstanceName: "swagger",
SwaggerTemplate: docTemplate,
+ LeftDelim: "{{",
+ RightDelim: "}}",
}
func init() {
diff --git a/api/docs/swagger.json b/api/docs/swagger.json
index 5cef4eb02..ac9c12c98 100644
--- a/api/docs/swagger.json
+++ b/api/docs/swagger.json
@@ -1,3942 +1,5420 @@
{
- "schemes": ["https"],
- "swagger": "2.0",
- "info": {
- "description": "Use your Android phone to send and receive SMS messages via a simple programmable API with end-to-end encryption.",
- "title": "httpSMS API Reference",
- "contact": {
- "name": "support@httpsms.com",
- "email": "support@httpsms.com"
- },
- "license": {
- "name": "AGPL-3.0",
- "url": "https://raw.githubusercontent.com/NdoleStudio/http-sms-manager/main/LICENSE"
- },
- "version": "1.0"
- },
- "host": "api.httpsms.com",
- "basePath": "/v1",
- "paths": {
- "/billing/usage": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get the summary of sent and received messages for a user in the current month",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Billing"],
- "summary": "Get Billing Usage.",
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.BillingUsageResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/billing/usage-history": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get billing usage records of sent and received messages for a user in the past. It will be sorted by timestamp in descending order.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Billing"],
- "summary": "Get billing usage history.",
- "parameters": [
- {
- "minimum": 0,
- "type": "integer",
- "description": "number of heartbeats to skip",
- "name": "skip",
- "in": "query"
- },
- {
- "maximum": 100,
- "minimum": 1,
- "type": "integer",
- "description": "number of heartbeats to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.BillingUsagesResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/bulk-messages": {
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Sends bulk SMS messages to multiple users from a CSV or Excel file.",
- "consumes": ["multipart/form-data"],
- "produces": ["application/json"],
- "tags": ["BulkSMS"],
- "summary": "Store bulk SMS file",
- "parameters": [
- {
- "type": "file",
- "description": "The Excel or CSV file formatted according to the templates",
- "name": "document",
- "in": "formData",
- "required": true
- }
- ],
- "responses": {
- "202": {
- "description": "Accepted",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/discord-integrations": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get the discord integrations of a user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["DiscordIntegration"],
- "summary": "Get discord integrations of a user",
- "parameters": [
- {
- "minimum": 0,
- "type": "integer",
- "description": "number of discord integrations to skip",
- "name": "skip",
- "in": "query"
- },
- {
- "type": "string",
- "description": "filter discord integrations containing query",
- "name": "query",
- "in": "query"
- },
- {
- "maximum": 20,
- "minimum": 1,
- "type": "integer",
- "description": "number of discord integrations to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.DiscordsResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- },
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Store a discord integration for the authenticated user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["DiscordIntegration"],
- "summary": "Store discord integration",
- "parameters": [
- {
- "description": "Payload of the discord integration request",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.DiscordStore"
- }
- }
- ],
- "responses": {
- "201": {
- "description": "Created",
- "schema": {
- "$ref": "#/definitions/responses.DiscordResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/discord-integrations/{discordID}": {
- "put": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Update a discord integration for the currently authenticated user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["DiscordIntegration"],
- "summary": "Update a discord integration",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the discord integration",
- "name": "discordID",
- "in": "path",
- "required": true
- },
- {
- "description": "Payload of discord integration to update",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.DiscordUpdate"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.DiscordResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- },
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Delete a discord integration for a user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Webhooks"],
- "summary": "Delete discord integration",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the discord integration",
- "name": "discordID",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/discord/event": {
- "post": {
- "description": "Publish a discord event to the registered listeners",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Discord"],
- "summary": "Consume a discord event",
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/heartbeats": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get the last time a phone number requested for outstanding messages. It will be sorted by timestamp in descending order.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Heartbeats"],
- "summary": "Get heartbeats of an owner phone number",
- "parameters": [
- {
- "type": "string",
- "default": "+18005550199",
- "description": "the owner's phone number",
- "name": "owner",
- "in": "query",
- "required": true
- },
- {
- "minimum": 0,
- "type": "integer",
- "description": "number of heartbeats to skip",
- "name": "skip",
- "in": "query"
- },
- {
- "type": "string",
- "description": "filter containing query",
- "name": "query",
- "in": "query"
- },
- {
- "maximum": 20,
- "minimum": 1,
- "type": "integer",
- "description": "number of heartbeats to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.HeartbeatsResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- },
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Store the heartbeat to make notify that a phone number is still active",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Heartbeats"],
- "summary": "Register heartbeat of an owner phone number",
- "parameters": [
- {
- "description": "Payload of the heartbeat request",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.HeartbeatStore"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.HeartbeatResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/integration/3cx/messages": {
- "post": {
- "description": "Sends an SMS message from the 3CX platform",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["3CXIntegration"],
- "summary": "Sends a 3CX SMS message",
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/lemonsqueezy/event": {
- "post": {
- "description": "Publish a lemonsqueezy event to the registered listeners",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Lemonsqueezy"],
- "summary": "Consume a lemonsqueezy event",
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/message-threads": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get list of contacts which a phone number has communicated with (threads). It will be sorted by timestamp in descending order.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["MessageThreads"],
- "summary": "Get message threads for a phone number",
- "parameters": [
- {
- "type": "string",
- "default": "+18005550199",
- "description": "owner phone number",
- "name": "owner",
- "in": "query",
- "required": true
- },
- {
- "minimum": 0,
- "type": "integer",
- "description": "number of messages to skip",
- "name": "skip",
- "in": "query"
- },
- {
- "type": "string",
- "description": "filter message threads containing query",
- "name": "query",
- "in": "query"
- },
- {
- "maximum": 20,
- "minimum": 1,
- "type": "integer",
- "description": "number of messages to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.MessageThreadsResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/message-threads/{messageThreadID}": {
- "put": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Updates the details of a message thread",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["MessageThreads"],
- "summary": "Update a message thread",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the message thread",
- "name": "messageThreadID",
- "in": "path",
- "required": true
- },
- {
- "description": "Payload of message thread details to update",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.MessageThreadUpdate"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.PhoneResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- },
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Delete a message thread from the database and also deletes all the messages in the thread.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["MessageThreads"],
- "summary": "Delete a message thread from the database.",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the message thread",
- "name": "messageThreadID",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "404": {
- "description": "Not Found",
- "schema": {
- "$ref": "#/definitions/responses.NotFound"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/messages": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get list of messages which are sent between 2 phone numbers. It will be sorted by timestamp in descending order.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Messages"],
- "summary": "Get messages which are sent between 2 phone numbers",
- "parameters": [
- {
- "type": "string",
- "default": "+18005550199",
- "description": "the owner's phone number",
- "name": "owner",
- "in": "query",
- "required": true
- },
- {
- "type": "string",
- "default": "+18005550100",
- "description": "the contact's phone number",
- "name": "contact",
- "in": "query",
- "required": true
- },
- {
- "minimum": 0,
- "type": "integer",
- "description": "number of messages to skip",
- "name": "skip",
- "in": "query"
- },
- {
- "type": "string",
- "description": "filter messages containing query",
- "name": "query",
- "in": "query"
- },
- {
- "maximum": 20,
- "minimum": 1,
- "type": "integer",
- "description": "number of messages to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.MessagesResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/messages/bulk-send": {
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Add bulk SMS messages to be sent by the android phone",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Messages"],
- "summary": "Send bulk SMS messages",
- "parameters": [
- {
- "description": "Bulk send message request payload",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.MessageBulkSend"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/responses.MessagesResponse"
- }
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/messages/calls/missed": {
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "This endpoint is called by the httpSMS android app to register a missed call event on the mobile phone.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Messages"],
- "summary": "Register a missed call event on the mobile phone",
- "parameters": [
- {
- "description": "Payload of the missed call event.",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.MessageCallMissed"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.MessageResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "404": {
- "description": "Not Found",
- "schema": {
- "$ref": "#/definitions/responses.NotFound"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/messages/outstanding": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get an outstanding message to be sent by an android phone",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Messages"],
- "summary": "Get an outstanding message",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703cb",
- "description": "The ID of the message",
- "name": "message_id",
- "in": "query",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.MessageResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/messages/receive": {
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Add a new message received from a mobile phone",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Messages"],
- "summary": "Receive a new SMS message from a mobile phone",
- "parameters": [
- {
- "description": "Received message request payload",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.MessageReceive"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.MessageResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/messages/search": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "This returns the list of all messages based on the filter criteria including missed calls",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Messages"],
- "summary": "Search all messages of a user",
- "parameters": [
- {
- "type": "string",
- "description": "Cloudflare turnstile token https://www.cloudflare.com/en-gb/application-services/products/turnstile/",
- "name": "token",
- "in": "header",
- "required": true
- },
- {
- "type": "string",
- "default": "+18005550199,+18005550100",
- "description": "the owner's phone numbers",
- "name": "owners",
- "in": "query",
- "required": true
- },
- {
- "minimum": 0,
- "type": "integer",
- "description": "number of messages to skip",
- "name": "skip",
- "in": "query"
- },
- {
- "type": "string",
- "description": "filter messages containing query",
- "name": "query",
- "in": "query"
- },
- {
- "maximum": 200,
- "minimum": 1,
- "type": "integer",
- "description": "number of messages to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.MessagesResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/messages/send": {
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Add a new SMS message to be sent by the android phone",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Messages"],
- "summary": "Send a new SMS message",
- "parameters": [
- {
- "description": "PostSend message request payload",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.MessageSend"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.MessageResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/messages/{messageID}": {
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Delete a message from the database and removes the message content from the list of threads.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Messages"],
- "summary": "Delete a message from the database.",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the message",
- "name": "messageID",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "404": {
- "description": "Not Found",
- "schema": {
- "$ref": "#/definitions/responses.NotFound"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/messages/{messageID}/events": {
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Use this endpoint to send events for a message when it is failed, sent or delivered by the mobile phone.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Messages"],
- "summary": "Upsert an event for a message on the mobile phone",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the message",
- "name": "messageID",
- "in": "path",
- "required": true
- },
- {
- "description": "Payload of the event emitted.",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.MessageEvent"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.MessageResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "404": {
- "description": "Not Found",
- "schema": {
- "$ref": "#/definitions/responses.NotFound"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/phone-api-keys": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get list phone API keys which a user has registered on the httpSMS application",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["PhoneAPIKeys"],
- "summary": "Get the phone API keys of a user",
- "parameters": [
- {
- "minimum": 0,
- "type": "integer",
- "description": "number of phone api keys to skip",
- "name": "skip",
- "in": "query"
- },
- {
- "type": "string",
- "description": "filter phone api keys with name containing query",
- "name": "query",
- "in": "query"
- },
- {
- "maximum": 100,
- "minimum": 1,
- "type": "integer",
- "description": "number of phone api keys to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.PhoneAPIKeysResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- },
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Creates a new phone API key which can be used to log in to the httpSMS app on your Android phone",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["PhoneAPIKeys"],
- "summary": "Store phone API key",
- "parameters": [
- {
- "description": "Payload of new phone API key.",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.PhoneAPIKeyStoreRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.PhoneAPIKeyResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/phone-api-keys/{phoneAPIKeyID}": {
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Delete a phone API Key from the database and cannot be used for authentication anymore.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["PhoneAPIKeys"],
- "summary": "Delete a phone API key from the database.",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the phone API key",
- "name": "phoneAPIKeyID",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "404": {
- "description": "Not Found",
- "schema": {
- "$ref": "#/definitions/responses.NotFound"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/phone-api-keys/{phoneAPIKeyID}/phones/{phoneID}": {
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "You will need to login again to the httpSMS app on your Android phone with a new phone API key.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["PhoneAPIKeys"],
- "summary": "Remove the association of a phone from the phone API key.",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the phone API key",
- "name": "phoneAPIKeyID",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the phone",
- "name": "phoneID",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "404": {
- "description": "Not Found",
- "schema": {
- "$ref": "#/definitions/responses.NotFound"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/phones": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get list of phones which a user has registered on the http sms application",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Phones"],
- "summary": "Get phones of a user",
- "parameters": [
- {
- "minimum": 0,
- "type": "integer",
- "description": "number of heartbeats to skip",
- "name": "skip",
- "in": "query"
- },
- {
- "type": "string",
- "description": "filter phones containing query",
- "name": "query",
- "in": "query"
- },
- {
- "maximum": 20,
- "minimum": 1,
- "type": "integer",
- "description": "number of phones to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.PhonesResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- },
- "put": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Updates properties of a user's phone. If the phone with this number does not exist, a new one will be created. Think of this method like an 'upsert'",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Phones"],
- "summary": "Upsert Phone",
- "parameters": [
- {
- "description": "Payload of new phone number.",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.PhoneUpsert"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.PhoneResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/phones/fcm-token": {
- "put": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Updates the FCM token of a phone. If the phone with this number does not exist, a new one will be created. Think of this method like an 'upsert'",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Phones"],
- "summary": "Upserts the FCM token of a phone",
- "parameters": [
- {
- "description": "Payload of new FCM token.",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.PhoneFCMToken"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.PhoneResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/phones/{phoneID}": {
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Delete a phone that has been sored in the database",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Phones"],
- "summary": "Delete Phone",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the phone",
- "name": "phoneID",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/users/me": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get details of the currently authenticated user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Users"],
- "summary": "Get current user",
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.UserResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- },
- "put": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Updates the details of the currently authenticated user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Users"],
- "summary": "Update a user",
- "parameters": [
- {
- "description": "Payload of user details to update",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.UserUpdate"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.PhoneResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- },
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Deletes the currently authenticated user together with all their data.",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Users"],
- "summary": "Delete a user",
- "responses": {
- "201": {
- "description": "Created",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/users/subscription": {
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Cancel the subscription of the authenticated user.",
- "produces": ["application/json"],
- "tags": ["Users"],
- "summary": "Cancel the user's subscription",
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/users/subscription-update-url": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Fetches the subscription URL of the authenticated user.",
- "produces": ["application/json"],
- "tags": ["Users"],
- "summary": "Currently authenticated user subscription update URL",
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.OkString"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/users/{userID}/api-keys": {
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Rotate the user's API key in case the current API Key is compromised",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Users"],
- "summary": "Rotate the user's API Key",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the user to update",
- "name": "userID",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.UserResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/users/{userID}/notifications": {
- "put": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Update the email notification settings for a user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Users"],
- "summary": "Update notification settings",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the user to update",
- "name": "userID",
- "in": "path",
- "required": true
- },
- {
- "description": "User notification details to update",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.UserNotificationUpdate"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.UserResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/webhooks": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Get the webhooks of a user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Webhooks"],
- "summary": "Get webhooks of a user",
- "parameters": [
- {
- "minimum": 0,
- "type": "integer",
- "description": "number of webhooks to skip",
- "name": "skip",
- "in": "query"
- },
- {
- "type": "string",
- "description": "filter webhooks containing query",
- "name": "query",
- "in": "query"
- },
- {
- "maximum": 20,
- "minimum": 1,
- "type": "integer",
- "description": "number of webhooks to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.WebhooksResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- },
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Store a webhook for the authenticated user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Webhooks"],
- "summary": "Store a webhook",
- "parameters": [
- {
- "description": "Payload of the webhook request",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.WebhookStore"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.WebhookResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- },
- "/webhooks/{webhookID}": {
- "put": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Update a webhook for the currently authenticated user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Webhooks"],
- "summary": "Update a webhook",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the webhook",
- "name": "webhookID",
- "in": "path",
- "required": true
- },
- {
- "description": "Payload of webhook details to update",
- "name": "payload",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/requests.WebhookUpdate"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/responses.WebhookResponse"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- },
- "delete": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "description": "Delete a webhook for a user",
- "consumes": ["application/json"],
- "produces": ["application/json"],
- "tags": ["Webhooks"],
- "summary": "Delete webhook",
- "parameters": [
- {
- "type": "string",
- "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
- "description": "ID of the webhook",
- "name": "webhookID",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "204": {
- "description": "No Content",
- "schema": {
- "$ref": "#/definitions/responses.NoContent"
- }
- },
- "400": {
- "description": "Bad Request",
- "schema": {
- "$ref": "#/definitions/responses.BadRequest"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/responses.Unauthorized"
- }
- },
- "422": {
- "description": "Unprocessable Entity",
- "schema": {
- "$ref": "#/definitions/responses.UnprocessableEntity"
- }
- },
- "500": {
- "description": "Internal Server Error",
- "schema": {
- "$ref": "#/definitions/responses.InternalServerError"
- }
- }
- }
- }
- }
- },
- "definitions": {
- "entities.BillingUsage": {
- "type": "object",
- "required": [
- "created_at",
- "end_timestamp",
- "id",
- "received_messages",
- "sent_messages",
- "start_timestamp",
- "total_cost",
- "updated_at",
- "user_id"
- ],
- "properties": {
- "created_at": {
- "type": "string",
- "example": "2022-06-05T14:26:02.302718+03:00"
- },
- "end_timestamp": {
- "type": "string",
- "example": "2022-01-31T23:59:59+00:00"
- },
- "id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
- },
- "received_messages": {
- "type": "integer",
- "example": 465
- },
- "sent_messages": {
- "type": "integer",
- "example": 321
- },
- "start_timestamp": {
- "type": "string",
- "example": "2022-01-01T00:00:00+00:00"
- },
- "total_cost": {
- "type": "integer",
- "example": 0
- },
- "updated_at": {
- "type": "string",
- "example": "2022-06-05T14:26:10.303278+03:00"
- },
- "user_id": {
- "type": "string",
- "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
- }
- }
- },
- "entities.Discord": {
- "type": "object",
- "required": [
- "created_at",
- "id",
- "incoming_channel_id",
- "name",
- "server_id",
- "updated_at",
- "user_id"
- ],
- "properties": {
- "created_at": {
- "type": "string",
- "example": "2022-06-05T14:26:02.302718+03:00"
- },
- "id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
- },
- "incoming_channel_id": {
- "type": "string",
- "example": "1095780203256627291"
- },
- "name": {
- "type": "string",
- "example": "Game Server"
- },
- "server_id": {
- "type": "string",
- "example": "1095778291488653372"
- },
- "updated_at": {
- "type": "string",
- "example": "2022-06-05T14:26:10.303278+03:00"
- },
- "user_id": {
- "type": "string",
- "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
- }
- }
- },
- "entities.Heartbeat": {
- "type": "object",
- "required": [
- "charging",
- "id",
- "owner",
- "timestamp",
- "user_id",
- "version"
- ],
- "properties": {
- "charging": {
- "type": "boolean",
- "example": true
- },
- "id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
- },
- "owner": {
- "type": "string",
- "example": "+18005550199"
- },
- "timestamp": {
- "type": "string",
- "example": "2022-06-05T14:26:01.520828+03:00"
- },
- "user_id": {
- "type": "string",
- "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
- },
- "version": {
- "type": "string",
- "example": "344c10f"
- }
- }
- },
- "entities.Message": {
- "type": "object",
- "required": [
- "can_be_polled",
- "contact",
- "content",
- "created_at",
- "delivered_at",
- "encrypted",
- "expired_at",
- "failed_at",
- "failure_reason",
- "id",
- "last_attempted_at",
- "max_send_attempts",
- "order_timestamp",
- "owner",
- "received_at",
- "request_id",
- "request_received_at",
- "scheduled_at",
- "scheduled_send_time",
- "send_attempt_count",
- "send_time",
- "sent_at",
- "sim",
- "status",
- "type",
- "updated_at",
- "user_id"
- ],
- "properties": {
- "can_be_polled": {
- "type": "boolean",
- "example": false
- },
+ "schemes": [
+ "https"
+ ],
+ "swagger": "2.0",
+ "info": {
+ "description": "Use your Android phone to send and receive SMS messages via a simple programmable API with end-to-end encryption.",
+ "title": "httpSMS API Reference",
"contact": {
- "type": "string",
- "example": "+18005550100"
- },
- "content": {
- "type": "string",
- "example": "This is a sample text message"
- },
- "created_at": {
- "type": "string",
- "example": "2022-06-05T14:26:02.302718+03:00"
- },
- "delivered_at": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "encrypted": {
- "type": "boolean",
- "example": false
- },
- "expired_at": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "failed_at": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "failure_reason": {
- "type": "string",
- "example": "UNKNOWN"
- },
- "id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
- },
- "last_attempted_at": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "max_send_attempts": {
- "type": "integer",
- "example": 1
- },
- "order_timestamp": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "owner": {
- "type": "string",
- "example": "+18005550199"
- },
- "received_at": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "request_id": {
- "type": "string",
- "example": "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
- },
- "request_received_at": {
- "type": "string",
- "example": "2022-06-05T14:26:01.520828+03:00"
- },
- "scheduled_at": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "scheduled_send_time": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "send_attempt_count": {
- "type": "integer",
- "example": 0
- },
- "send_time": {
- "description": "SendDuration is the number of nanoseconds from when the request was received until when the mobile phone send the message",
- "type": "integer",
- "example": 133414
- },
- "sent_at": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "sim": {
- "description": "SIM is the SIM card to use to send the message\n* SMS1: use the SIM card in slot 1\n* SMS2: use the SIM card in slot 2\n* DEFAULT: used the default communication SIM card",
- "type": "string",
- "example": "DEFAULT"
- },
- "status": {
- "type": "string",
- "example": "pending"
- },
- "type": {
- "type": "string",
- "example": "mobile-terminated"
- },
- "updated_at": {
- "type": "string",
- "example": "2022-06-05T14:26:10.303278+03:00"
- },
- "user_id": {
- "type": "string",
- "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
- }
- }
- },
- "entities.MessageThread": {
- "type": "object",
- "required": [
- "color",
- "contact",
- "created_at",
- "id",
- "is_archived",
- "last_message_content",
- "last_message_id",
- "order_timestamp",
- "owner",
- "status",
- "updated_at",
- "user_id"
- ],
- "properties": {
- "color": {
- "type": "string",
- "example": "indigo"
- },
- "contact": {
- "type": "string",
- "example": "+18005550100"
- },
- "created_at": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703ca"
+ "name": "support@httpsms.com",
+ "email": "support@httpsms.com"
},
- "is_archived": {
- "type": "boolean",
- "example": false
+ "license": {
+ "name": "AGPL-3.0",
+ "url": "https://raw.githubusercontent.com/NdoleStudio/http-sms-manager/main/LICENSE"
},
- "last_message_content": {
- "type": "string",
- "example": "This is a sample message content"
- },
- "last_message_id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703ca"
- },
- "order_timestamp": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "owner": {
- "type": "string",
- "example": "+18005550199"
- },
- "status": {
- "type": "string",
- "example": "PENDING"
- },
- "updated_at": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "user_id": {
- "type": "string",
- "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
- }
- }
- },
- "entities.Phone": {
- "type": "object",
- "required": [
- "created_at",
- "fcm_token",
- "id",
- "max_send_attempts",
- "message_expiration_seconds",
- "messages_per_minute",
- "missed_call_auto_reply",
- "phone_number",
- "sim",
- "updated_at",
- "user_id"
- ],
- "properties": {
- "created_at": {
- "type": "string",
- "example": "2022-06-05T14:26:02.302718+03:00"
- },
- "fcm_token": {
- "type": "string",
- "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....."
- },
- "id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
- },
- "max_send_attempts": {
- "description": "MaxSendAttempts determines how many times to retry sending an SMS message",
- "type": "integer",
- "example": 2
- },
- "message_expiration_seconds": {
- "description": "MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired.",
- "type": "integer"
- },
- "messages_per_minute": {
- "type": "integer",
- "example": 1
- },
- "missed_call_auto_reply": {
- "type": "string",
- "example": "This phone cannot receive calls. Please send an SMS instead."
- },
- "phone_number": {
- "type": "string",
- "example": "+18005550199"
- },
- "sim": {
- "description": "SIM card that received the message",
- "type": "string"
- },
- "updated_at": {
- "type": "string",
- "example": "2022-06-05T14:26:10.303278+03:00"
- },
- "user_id": {
- "type": "string",
- "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
- }
- }
- },
- "entities.PhoneAPIKey": {
- "type": "object",
- "required": [
- "api_key",
- "created_at",
- "id",
- "name",
- "phone_ids",
- "phone_numbers",
- "updated_at",
- "user_email",
- "user_id"
- ],
- "properties": {
- "api_key": {
- "type": "string",
- "example": "pk_DGW8NwQp7mxKaSZ72Xq9v6xxxxx"
- },
- "created_at": {
- "type": "string",
- "example": "2022-06-05T14:26:02.302718+03:00"
- },
- "id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
- },
- "name": {
- "type": "string",
- "example": "Business Phone Key"
- },
- "phone_ids": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": [
- "32343a19-da5e-4b1b-a767-3298a73703cb",
- "32343a19-da5e-4b1b-a767-3298a73703cc"
- ]
- },
- "phone_numbers": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": ["+18005550199", "+18005550100"]
- },
- "updated_at": {
- "type": "string",
- "example": "2022-06-05T14:26:02.302718+03:00"
- },
- "user_email": {
- "type": "string",
- "example": "user@gmail.com"
- },
- "user_id": {
- "type": "string",
- "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
- }
- }
- },
- "entities.User": {
- "type": "object",
- "required": [
- "active_phone_id",
- "api_key",
- "created_at",
- "email",
- "id",
- "notification_heartbeat_enabled",
- "notification_message_status_enabled",
- "notification_newsletter_enabled",
- "notification_webhook_enabled",
- "subscription_ends_at",
- "subscription_id",
- "subscription_name",
- "subscription_renews_at",
- "subscription_status",
- "timezone",
- "updated_at"
- ],
- "properties": {
- "active_phone_id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
- },
- "api_key": {
- "type": "string",
- "example": "x-api-key"
- },
- "created_at": {
- "type": "string",
- "example": "2022-06-05T14:26:02.302718+03:00"
- },
- "email": {
- "type": "string",
- "example": "name@email.com"
- },
- "id": {
- "type": "string",
- "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
- },
- "notification_heartbeat_enabled": {
- "type": "boolean",
- "example": true
- },
- "notification_message_status_enabled": {
- "type": "boolean",
- "example": true
- },
- "notification_newsletter_enabled": {
- "type": "boolean",
- "example": true
- },
- "notification_webhook_enabled": {
- "type": "boolean",
- "example": true
- },
- "subscription_ends_at": {
- "type": "string",
- "example": "2022-06-05T14:26:02.302718+03:00"
- },
- "subscription_id": {
- "type": "string",
- "example": "8f9c71b8-b84e-4417-8408-a62274f65a08"
- },
- "subscription_name": {
- "type": "string",
- "example": "free"
- },
- "subscription_renews_at": {
- "type": "string",
- "example": "2022-06-05T14:26:02.302718+03:00"
- },
- "subscription_status": {
- "type": "string",
- "example": "on_trial"
- },
- "timezone": {
- "type": "string",
- "example": "Europe/Helsinki"
- },
- "updated_at": {
- "type": "string",
- "example": "2022-06-05T14:26:10.303278+03:00"
- }
- }
- },
- "entities.Webhook": {
- "type": "object",
- "required": [
- "created_at",
- "events",
- "id",
- "phone_numbers",
- "signing_key",
- "updated_at",
- "url",
- "user_id"
- ],
- "properties": {
- "created_at": {
- "type": "string",
- "example": "2022-06-05T14:26:02.302718+03:00"
- },
- "events": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": ["message.phone.received"]
- },
- "id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
- },
- "phone_numbers": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": ["+18005550199", "+18005550100"]
- },
- "signing_key": {
- "type": "string",
- "example": "DGW8NwQp7mxKaSZ72Xq9v67SLqSbWQvckzzmK8D6rvd7NywSEkdMJtuxKyEkYnCY"
- },
- "updated_at": {
- "type": "string",
- "example": "2022-06-05T14:26:10.303278+03:00"
- },
- "url": {
- "type": "string",
- "example": "https://example.com"
- },
- "user_id": {
- "type": "string",
- "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
- }
- }
- },
- "requests.DiscordStore": {
- "type": "object",
- "required": ["incoming_channel_id", "name", "server_id"],
- "properties": {
- "incoming_channel_id": {
- "type": "string"
- },
- "name": {
- "type": "string"
- },
- "server_id": {
- "type": "string"
- }
- }
- },
- "requests.DiscordUpdate": {
- "type": "object",
- "required": ["incoming_channel_id", "name", "server_id"],
- "properties": {
- "incoming_channel_id": {
- "type": "string"
- },
- "name": {
- "type": "string"
- },
- "server_id": {
- "type": "string"
- }
- }
- },
- "requests.HeartbeatStore": {
- "type": "object",
- "required": ["charging", "phone_numbers"],
- "properties": {
- "charging": {
- "type": "boolean"
- },
- "phone_numbers": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- },
- "requests.MessageBulkSend": {
- "type": "object",
- "required": ["content", "encrypted", "from", "to"],
- "properties": {
- "content": {
- "type": "string",
- "example": "This is a sample text message"
- },
- "encrypted": {
- "description": "Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app",
- "type": "boolean",
- "example": false
- },
- "from": {
- "type": "string",
- "example": "+18005550199"
- },
- "request_id": {
- "description": "RequestID is an optional parameter used to track a request from the client's perspective",
- "type": "string",
- "example": "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
- },
- "to": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": ["+18005550100", "+18005550100"]
- }
- }
- },
- "requests.MessageCallMissed": {
- "type": "object",
- "required": ["from", "sim", "timestamp", "to"],
- "properties": {
- "from": {
- "type": "string",
- "example": "+18005550199"
- },
- "sim": {
- "type": "string",
- "example": "SIM1"
- },
- "timestamp": {
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "to": {
- "type": "string",
- "example": "+18005550100"
- }
- }
- },
- "requests.MessageEvent": {
- "type": "object",
- "required": ["event_name", "reason", "timestamp"],
- "properties": {
- "event_name": {
- "description": "EventName is the type of event\n* SENT: is emitted when a message is sent by the mobile phone\n* FAILED: is event is emitted when the message could not be sent by the mobile phone\n* DELIVERED: is event is emitted when a delivery report has been received by the mobile phone",
- "type": "string",
- "example": "SENT"
- },
- "reason": {
- "description": "Reason is the exact error message in case the event is an error",
- "type": "string"
- },
- "timestamp": {
- "description": "Timestamp is the time when the event was emitted, Please send the timestamp in UTC with as much precision as possible",
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- }
- }
- },
- "requests.MessageReceive": {
- "type": "object",
- "required": ["content", "encrypted", "from", "sim", "timestamp", "to"],
- "properties": {
- "content": {
- "type": "string",
- "example": "This is a sample text message received on a phone"
- },
- "encrypted": {
- "description": "Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app",
- "type": "boolean",
- "example": false
- },
- "from": {
- "type": "string",
- "example": "+18005550199"
- },
- "sim": {
- "description": "SIM card that received the message",
- "type": "string",
- "example": "SIM1"
- },
- "timestamp": {
- "description": "Timestamp is the time when the event was emitted, Please send the timestamp in UTC with as much precision as possible",
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "to": {
- "type": "string",
- "example": "+18005550100"
- }
- }
- },
- "requests.MessageSend": {
- "type": "object",
- "required": ["content", "from", "to"],
- "properties": {
- "content": {
- "type": "string",
- "example": "This is a sample text message"
- },
- "encrypted": {
- "description": "Encrypted is an optional parameter used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app",
- "type": "boolean",
- "example": false
- },
- "from": {
- "type": "string",
- "example": "+18005550199"
- },
- "request_id": {
- "description": "RequestID is an optional parameter used to track a request from the client's perspective",
- "type": "string",
- "example": "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
- },
- "send_at": {
- "description": "SendAt is an optional parameter used to schedule a message to be sent in the future. The time is considered to be in your profile's local timezone.",
- "type": "string",
- "example": "2022-06-05T14:26:09.527976+03:00"
- },
- "to": {
- "type": "string",
- "example": "+18005550100"
- }
- }
- },
- "requests.MessageThreadUpdate": {
- "type": "object",
- "required": ["is_archived"],
- "properties": {
- "is_archived": {
- "type": "boolean",
- "example": true
- }
- }
- },
- "requests.PhoneAPIKeyStoreRequest": {
- "type": "object",
- "required": ["name"],
- "properties": {
- "name": {
- "type": "string",
- "example": "My Phone API Key"
- }
- }
- },
- "requests.PhoneFCMToken": {
- "type": "object",
- "required": ["fcm_token", "phone_number", "sim"],
- "properties": {
- "fcm_token": {
- "type": "string",
- "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....."
- },
- "phone_number": {
- "type": "string",
- "example": "[+18005550199]"
- },
- "sim": {
- "description": "SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot",
- "type": "string",
- "example": "SIM1"
- }
- }
- },
- "requests.PhoneUpsert": {
- "type": "object",
- "required": [
- "fcm_token",
- "max_send_attempts",
- "message_expiration_seconds",
- "messages_per_minute",
- "missed_call_auto_reply",
- "phone_number",
- "sim"
- ],
- "properties": {
- "fcm_token": {
- "type": "string",
- "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....."
- },
- "max_send_attempts": {
- "description": "MaxSendAttempts is the number of attempts when sending an SMS message to handle the case where the phone is offline.",
- "type": "integer",
- "example": 2
- },
- "message_expiration_seconds": {
- "description": "MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired.",
- "type": "integer",
- "example": 12345
- },
- "messages_per_minute": {
- "type": "integer",
- "example": 1
- },
- "missed_call_auto_reply": {
- "type": "string",
- "example": "e.g. This phone cannot receive calls. Please send an SMS instead."
- },
- "phone_number": {
- "type": "string",
- "example": "+18005550199"
- },
- "sim": {
- "description": "SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot",
- "type": "string",
- "example": "SIM1"
- }
- }
+ "version": "1.0"
},
- "requests.UserNotificationUpdate": {
- "type": "object",
- "required": [
- "heartbeat_enabled",
- "message_status_enabled",
- "newsletter_enabled",
- "webhook_enabled"
- ],
- "properties": {
- "heartbeat_enabled": {
- "type": "boolean",
- "example": true
- },
- "message_status_enabled": {
- "type": "boolean",
- "example": true
- },
- "newsletter_enabled": {
- "type": "boolean",
- "example": true
- },
- "webhook_enabled": {
- "type": "boolean",
- "example": true
- }
- }
- },
- "requests.UserUpdate": {
- "type": "object",
- "required": ["active_phone_id", "timezone"],
- "properties": {
- "active_phone_id": {
- "type": "string",
- "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
- },
- "timezone": {
- "type": "string",
- "example": "Europe/Helsinki"
- }
- }
- },
- "requests.WebhookStore": {
- "type": "object",
- "required": ["events", "phone_numbers", "signing_key", "url"],
- "properties": {
- "events": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "phone_numbers": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": ["+18005550100", "+18005550100"]
- },
- "signing_key": {
- "type": "string"
- },
- "url": {
- "type": "string"
- }
- }
- },
- "requests.WebhookUpdate": {
- "type": "object",
- "required": ["events", "phone_numbers", "signing_key", "url"],
- "properties": {
- "events": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "phone_numbers": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": ["+18005550100", "+18005550100"]
- },
- "signing_key": {
- "type": "string"
- },
- "url": {
- "type": "string"
- }
- }
- },
- "responses.BadRequest": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "string",
- "example": "The request body is not a valid JSON string"
- },
- "message": {
- "type": "string",
- "example": "The request isn't properly formed"
- },
- "status": {
- "type": "string",
- "example": "error"
- }
- }
- },
- "responses.BillingUsageResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "$ref": "#/definitions/entities.BillingUsage"
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.BillingUsagesResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/entities.BillingUsage"
- }
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.DiscordResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "$ref": "#/definitions/entities.Discord"
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.DiscordsResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/entities.Discord"
- }
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.HeartbeatResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "$ref": "#/definitions/entities.Heartbeat"
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.HeartbeatsResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/entities.Heartbeat"
- }
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.InternalServerError": {
- "type": "object",
- "required": ["message", "status"],
- "properties": {
- "message": {
- "type": "string",
- "example": "We ran into an internal error while handling the request."
- },
- "status": {
- "type": "string",
- "example": "error"
- }
- }
- },
- "responses.MessageResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "$ref": "#/definitions/entities.Message"
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.MessageThreadsResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/entities.MessageThread"
- }
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.MessagesResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/entities.Message"
- }
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.NoContent": {
- "type": "object",
- "required": ["message", "status"],
- "properties": {
- "message": {
- "type": "string",
- "example": "action performed successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.NotFound": {
- "type": "object",
- "required": ["message", "status"],
- "properties": {
- "message": {
- "type": "string",
- "example": "cannot find message with ID [32343a19-da5e-4b1b-a767-3298a73703ca]"
- },
- "status": {
- "type": "string",
- "example": "error"
- }
- }
- },
- "responses.OkString": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "string"
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.PhoneAPIKeyResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "$ref": "#/definitions/entities.PhoneAPIKey"
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.PhoneAPIKeysResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/entities.PhoneAPIKey"
- }
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.PhoneResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "$ref": "#/definitions/entities.Phone"
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.PhonesResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/entities.Phone"
- }
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
- }
- }
- },
- "responses.Unauthorized": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "string",
- "example": "Make sure your API key is set in the [X-API-Key] header in the request"
- },
- "message": {
- "type": "string",
- "example": "You are not authorized to carry out this request."
- },
- "status": {
- "type": "string",
- "example": "error"
- }
- }
- },
- "responses.UnprocessableEntity": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "object",
- "additionalProperties": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "message": {
- "type": "string",
- "example": "validation errors while handling request"
- },
- "status": {
- "type": "string",
- "example": "error"
- }
- }
- },
- "responses.UserResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "$ref": "#/definitions/entities.User"
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
+ "host": "api.httpsms.com",
+ "basePath": "/v1",
+ "paths": {
+ "/billing/usage": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get the summary of sent and received messages for a user in the current month",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Billing"
+ ],
+ "summary": "Get Billing Usage.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.BillingUsageResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/billing/usage-history": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get billing usage records of sent and received messages for a user in the past. It will be sorted by timestamp in descending order.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Billing"
+ ],
+ "summary": "Get billing usage history.",
+ "parameters": [
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "number of heartbeats to skip",
+ "name": "skip",
+ "in": "query"
+ },
+ {
+ "maximum": 100,
+ "minimum": 1,
+ "type": "integer",
+ "description": "number of heartbeats to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.BillingUsagesResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/bulk-messages": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Fetches the last 10 bulk message order summaries for the authenticated user showing counts per status.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "BulkSMS"
+ ],
+ "summary": "List bulk message orders",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.BulkMessagesResponse"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Sends bulk SMS messages to multiple users based on our [CSV template](https://httpsms.com/templates/httpsms-bulk.csv) or our [Excel template](https://httpsms.com/templates/httpsms-bulk.xlsx).",
+ "consumes": [
+ "multipart/form-data"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "BulkSMS"
+ ],
+ "summary": "Store bulk SMS file",
+ "parameters": [
+ {
+ "type": "file",
+ "description": "The Excel or CSV file containing the messages to be sent.",
+ "name": "document",
+ "in": "formData",
+ "required": true
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Accepted",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/discord-integrations": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get the discord integrations of a user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "DiscordIntegration"
+ ],
+ "summary": "Get discord integrations of a user",
+ "parameters": [
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "number of discord integrations to skip",
+ "name": "skip",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "filter discord integrations containing query",
+ "name": "query",
+ "in": "query"
+ },
+ {
+ "maximum": 20,
+ "minimum": 1,
+ "type": "integer",
+ "description": "number of discord integrations to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.DiscordsResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Store a discord integration for the authenticated user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "DiscordIntegration"
+ ],
+ "summary": "Store discord integration",
+ "parameters": [
+ {
+ "description": "Payload of the discord integration request",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.DiscordStore"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Created",
+ "schema": {
+ "$ref": "#/definitions/responses.DiscordResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/discord-integrations/{discordID}": {
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Update a discord integration for the currently authenticated user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "DiscordIntegration"
+ ],
+ "summary": "Update a discord integration",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the discord integration",
+ "name": "discordID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Payload of discord integration to update",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.DiscordUpdate"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.DiscordResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Delete a discord integration for a user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Webhooks"
+ ],
+ "summary": "Delete discord integration",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the discord integration",
+ "name": "discordID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/discord/event": {
+ "post": {
+ "description": "Publish a discord event to the registered listeners",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Discord"
+ ],
+ "summary": "Consume a discord event",
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/heartbeats": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get the last time a phone number requested for outstanding messages. It will be sorted by timestamp in descending order.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Heartbeats"
+ ],
+ "summary": "Get heartbeats of an owner phone number",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "+18005550199",
+ "description": "the owner's phone number",
+ "name": "owner",
+ "in": "query",
+ "required": true
+ },
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "number of heartbeats to skip",
+ "name": "skip",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "filter containing query",
+ "name": "query",
+ "in": "query"
+ },
+ {
+ "maximum": 20,
+ "minimum": 1,
+ "type": "integer",
+ "description": "number of heartbeats to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.HeartbeatsResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Store the heartbeat to make notify that a phone number is still active",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Heartbeats"
+ ],
+ "summary": "Register heartbeat of an owner phone number",
+ "parameters": [
+ {
+ "description": "Payload of the heartbeat request",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.HeartbeatStore"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.HeartbeatResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/integration/3cx/messages": {
+ "post": {
+ "description": "Sends an SMS message from the 3CX platform",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "3CXIntegration"
+ ],
+ "summary": "Sends a 3CX SMS message",
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/message-threads": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get list of contacts which a phone number has communicated with (threads). It will be sorted by timestamp in descending order.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "MessageThreads"
+ ],
+ "summary": "Get message threads for a phone number",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "+18005550199",
+ "description": "owner phone number",
+ "name": "owner",
+ "in": "query",
+ "required": true
+ },
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "number of messages to skip",
+ "name": "skip",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "filter message threads containing query",
+ "name": "query",
+ "in": "query"
+ },
+ {
+ "maximum": 20,
+ "minimum": 1,
+ "type": "integer",
+ "description": "number of messages to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageThreadsResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/message-threads/{messageThreadID}": {
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Updates the details of a message thread",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "MessageThreads"
+ ],
+ "summary": "Update a message thread",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the message thread",
+ "name": "messageThreadID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Payload of message thread details to update",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.MessageThreadUpdate"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageThreadResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Delete a message thread from the database and also deletes all the messages in the thread.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "MessageThreads"
+ ],
+ "summary": "Delete a message thread from the database.",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the message thread",
+ "name": "messageThreadID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/messages": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get list of messages which are sent between 2 phone numbers. It will be sorted by timestamp in descending order.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Get messages which are sent between 2 phone numbers",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "+18005550199",
+ "description": "the owner's phone number",
+ "name": "owner",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "default": "+18005550100",
+ "description": "the contact's phone number",
+ "name": "contact",
+ "in": "query",
+ "required": true
+ },
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "number of messages to skip",
+ "name": "skip",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "filter messages containing query",
+ "name": "query",
+ "in": "query"
+ },
+ {
+ "maximum": 20,
+ "minimum": 1,
+ "type": "integer",
+ "description": "number of messages to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessagesResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/messages/bulk-send": {
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Add bulk SMS messages to be sent by the android phone",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Send bulk SMS messages",
+ "parameters": [
+ {
+ "description": "Bulk send message request payload",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.MessageBulkSend"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/responses.MessagesResponse"
+ }
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/messages/calls/missed": {
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "This endpoint is called by the httpSMS android app to register a missed call event on the mobile phone.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Register a missed call event on the mobile phone",
+ "parameters": [
+ {
+ "description": "Payload of the missed call event.",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.MessageCallMissed"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/messages/outstanding": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get an outstanding message to be sent by an android phone",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Get an outstanding message",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703cb",
+ "description": "The ID of the message",
+ "name": "message_id",
+ "in": "query",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/messages/receive": {
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Add a new message received from a mobile phone",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Receive a new SMS message from a mobile phone",
+ "parameters": [
+ {
+ "description": "Received message request payload",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.MessageReceive"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/messages/search": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "This returns the list of all messages based on the filter criteria including missed calls",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Search all messages of a user",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Cloudflare turnstile token https://www.cloudflare.com/en-gb/application-services/products/turnstile/",
+ "name": "token",
+ "in": "header",
+ "required": true
+ },
+ {
+ "type": "string",
+ "default": "+18005550199,+18005550100",
+ "description": "the owner's phone numbers",
+ "name": "owners",
+ "in": "query",
+ "required": true
+ },
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "number of messages to skip",
+ "name": "skip",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "filter messages containing query",
+ "name": "query",
+ "in": "query"
+ },
+ {
+ "maximum": 200,
+ "minimum": 1,
+ "type": "integer",
+ "description": "number of messages to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessagesResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/messages/send": {
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Add a new SMS message to be sent by your Android phone",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Send an SMS message",
+ "parameters": [
+ {
+ "description": "Send message request payload",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.MessageSend"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/messages/{messageID}": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get a message from the database by the message ID.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Get a message from the database.",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the message",
+ "name": "messageID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Delete a message from the database and removes the message content from the list of threads.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Delete a message from the database.",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the message",
+ "name": "messageID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/messages/{messageID}/events": {
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Use this endpoint to send events for a message when it is failed, sent or delivered by the mobile phone.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Messages"
+ ],
+ "summary": "Upsert an event for a message on the mobile phone",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the message",
+ "name": "messageID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Payload of the event emitted.",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.MessageEvent"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/phone-api-keys": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get list phone API keys which a user has registered on the httpSMS application",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "PhoneAPIKeys"
+ ],
+ "summary": "Get the phone API keys of a user",
+ "parameters": [
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "number of phone api keys to skip",
+ "name": "skip",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "filter phone api keys with name containing query",
+ "name": "query",
+ "in": "query"
+ },
+ {
+ "maximum": 100,
+ "minimum": 1,
+ "type": "integer",
+ "description": "number of phone api keys to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PhoneAPIKeysResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Creates a new phone API key which can be used to log in to the httpSMS app on your Android phone",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "PhoneAPIKeys"
+ ],
+ "summary": "Store phone API key",
+ "parameters": [
+ {
+ "description": "Payload of new phone API key.",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.PhoneAPIKeyStoreRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PhoneAPIKeyResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "402": {
+ "description": "Payment Required",
+ "schema": {
+ "$ref": "#/definitions/responses.PaymentRequired"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/phone-api-keys/{phoneAPIKeyID}": {
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Delete a phone API Key from the database and cannot be used for authentication anymore.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "PhoneAPIKeys"
+ ],
+ "summary": "Delete a phone API key from the database.",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the phone API key",
+ "name": "phoneAPIKeyID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/phone-api-keys/{phoneAPIKeyID}/phones/{phoneID}": {
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "You will need to login again to the httpSMS app on your Android phone with a new phone API key.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "PhoneAPIKeys"
+ ],
+ "summary": "Remove the association of a phone from the phone API key.",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the phone API key",
+ "name": "phoneAPIKeyID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the phone",
+ "name": "phoneID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/phones": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get list of phones which a user has registered on the http sms application",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Phones"
+ ],
+ "summary": "Get phones of a user",
+ "parameters": [
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "number of heartbeats to skip",
+ "name": "skip",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "filter phones containing query",
+ "name": "query",
+ "in": "query"
+ },
+ {
+ "maximum": 20,
+ "minimum": 1,
+ "type": "integer",
+ "description": "number of phones to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PhonesResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Updates properties of a user's phone. If the phone with this number does not exist, a new one will be created. Think of this method like an 'upsert'",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Phones"
+ ],
+ "summary": "Upsert Phone",
+ "parameters": [
+ {
+ "description": "Payload of new phone number.",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.PhoneUpsert"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PhoneResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/phones/fcm-token": {
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Updates the FCM token of a phone. If the phone with this number does not exist, a new one will be created. Think of this method like an 'upsert'",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Phones"
+ ],
+ "summary": "Upserts the FCM token of a phone",
+ "parameters": [
+ {
+ "description": "Payload of new FCM token.",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.PhoneFCMToken"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PhoneResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/phones/{phoneID}": {
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Delete a phone that has been sored in the database",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Phones"
+ ],
+ "summary": "Delete Phone",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the phone",
+ "name": "phoneID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/send-schedules": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "List all send schedules owned by the authenticated user.",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "SendSchedules"
+ ],
+ "summary": "List send schedules",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageSendSchedulesResponse"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Create a new send schedule for the authenticated user.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "SendSchedules"
+ ],
+ "summary": "Create send schedule",
+ "parameters": [
+ {
+ "description": "Payload of new send schedule.",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.MessageSendScheduleStore"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Created",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageSendScheduleResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "402": {
+ "description": "Payment Required",
+ "schema": {
+ "$ref": "#/definitions/responses.PaymentRequired"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/send-schedules/{scheduleID}": {
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Update a send schedule owned by the authenticated user.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "SendSchedules"
+ ],
+ "summary": "Update send schedule",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Schedule ID",
+ "name": "scheduleID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Payload of updated send schedule.",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.MessageSendScheduleStore"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.MessageSendScheduleResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Delete a send schedule owned by the authenticated user.",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "SendSchedules"
+ ],
+ "summary": "Delete send schedule",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Schedule ID",
+ "name": "scheduleID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/me": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get details of the currently authenticated user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Get current user",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.UserResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Updates the details of the currently authenticated user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Update a user",
+ "parameters": [
+ {
+ "description": "Payload of user details to update",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.UserUpdate"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.PhoneResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Deletes the currently authenticated user together with all their data.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Delete a user",
+ "responses": {
+ "201": {
+ "description": "Created",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/subscription": {
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Cancel the subscription of the authenticated user.",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Cancel the user's subscription",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/subscription-update-url": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Fetches the subscription URL of the authenticated user.",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Currently authenticated user subscription update URL",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.OkString"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/subscription/invoices/{subscriptionInvoiceID}": {
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Generates a new invoice PDF file for the given subscription payment with given parameters.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/pdf"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Generate a subscription payment invoice",
+ "parameters": [
+ {
+ "description": "Generate subscription payment invoice parameters",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.UserPaymentInvoice"
+ }
+ },
+ {
+ "type": "string",
+ "description": "ID of the subscription invoice to generate the PDF for",
+ "name": "subscriptionInvoiceID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "file"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/subscription/payments": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Subscription payments are generated throughout the lifecycle of a subscription, typically there is one at the time of purchase and then one for each renewal.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Get the last 10 subscription payments.",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.UserSubscriptionPaymentsResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/{userID}/api-keys": {
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Rotate the user's API key in case the current API Key is compromised",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Rotate the user's API Key",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the user to update",
+ "name": "userID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.UserResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/users/{userID}/notifications": {
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Update the email notification settings for a user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Users"
+ ],
+ "summary": "Update notification settings",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the user to update",
+ "name": "userID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "User notification details to update",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.UserNotificationUpdate"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.UserResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/v1/attachments/{userID}/{messageID}/{attachmentIndex}/{filename}": {
+ "get": {
+ "description": "Download an MMS attachment by its path components",
+ "produces": [
+ "application/octet-stream"
+ ],
+ "tags": [
+ "Attachments"
+ ],
+ "summary": "Download a message attachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "User ID",
+ "name": "userID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Message ID",
+ "name": "messageID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Attachment index",
+ "name": "attachmentIndex",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Filename with extension",
+ "name": "filename",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "file"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/responses.NotFound"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/webhooks": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Get the webhooks of a user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Webhooks"
+ ],
+ "summary": "Get webhooks of a user",
+ "parameters": [
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "number of webhooks to skip",
+ "name": "skip",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "filter webhooks containing query",
+ "name": "query",
+ "in": "query"
+ },
+ {
+ "maximum": 20,
+ "minimum": 1,
+ "type": "integer",
+ "description": "number of webhooks to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.WebhooksResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "post": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Store a webhook for the authenticated user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Webhooks"
+ ],
+ "summary": "Store a webhook",
+ "parameters": [
+ {
+ "description": "Payload of the webhook request",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.WebhookStore"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.WebhookResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
+ },
+ "/webhooks/{webhookID}": {
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Update a webhook for the currently authenticated user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Webhooks"
+ ],
+ "summary": "Update a webhook",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the webhook",
+ "name": "webhookID",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Payload of webhook details to update",
+ "name": "payload",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/requests.WebhookUpdate"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/responses.WebhookResponse"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ },
+ "delete": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "Delete a webhook for a user",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "Webhooks"
+ ],
+ "summary": "Delete webhook",
+ "parameters": [
+ {
+ "type": "string",
+ "default": "32343a19-da5e-4b1b-a767-3298a73703ca",
+ "description": "ID of the webhook",
+ "name": "webhookID",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content",
+ "schema": {
+ "$ref": "#/definitions/responses.NoContent"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/responses.BadRequest"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/responses.Unauthorized"
+ }
+ },
+ "422": {
+ "description": "Unprocessable Entity",
+ "schema": {
+ "$ref": "#/definitions/responses.UnprocessableEntity"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/responses.InternalServerError"
+ }
+ }
+ }
+ }
}
- }
},
- "responses.WebhookResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "$ref": "#/definitions/entities.Webhook"
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
+ "definitions": {
+ "entities.BillingUsage": {
+ "type": "object",
+ "required": [
+ "created_at",
+ "end_timestamp",
+ "id",
+ "received_messages",
+ "sent_messages",
+ "start_timestamp",
+ "total_cost",
+ "updated_at",
+ "user_id"
+ ],
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "end_timestamp": {
+ "type": "string",
+ "example": "2022-01-31T23:59:59+00:00"
+ },
+ "id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "received_messages": {
+ "type": "integer",
+ "example": 465
+ },
+ "sent_messages": {
+ "type": "integer",
+ "example": 321
+ },
+ "start_timestamp": {
+ "type": "string",
+ "example": "2022-01-01T00:00:00+00:00"
+ },
+ "total_cost": {
+ "type": "integer",
+ "example": 0
+ },
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:10.303278+03:00"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ }
+ }
+ },
+ "entities.BulkMessage": {
+ "type": "object",
+ "required": [
+ "created_at",
+ "delivered_count",
+ "expired_count",
+ "failed_count",
+ "pending_count",
+ "request_id",
+ "scheduled_count",
+ "sent_count",
+ "total"
+ ],
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "delivered_count": {
+ "type": "integer",
+ "example": 25
+ },
+ "expired_count": {
+ "type": "integer",
+ "example": 3
+ },
+ "failed_count": {
+ "type": "integer",
+ "example": 5
+ },
+ "pending_count": {
+ "type": "integer",
+ "example": 30
+ },
+ "request_id": {
+ "type": "string",
+ "example": "bulk-httpsms-file.csv"
+ },
+ "scheduled_count": {
+ "type": "integer",
+ "example": 50
+ },
+ "sent_count": {
+ "type": "integer",
+ "example": 40
+ },
+ "total": {
+ "type": "integer",
+ "example": 150
+ }
+ }
+ },
+ "entities.Discord": {
+ "type": "object",
+ "required": [
+ "created_at",
+ "id",
+ "incoming_channel_id",
+ "name",
+ "server_id",
+ "updated_at",
+ "user_id"
+ ],
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "incoming_channel_id": {
+ "type": "string",
+ "example": "1095780203256627291"
+ },
+ "name": {
+ "type": "string",
+ "example": "Game Server"
+ },
+ "server_id": {
+ "type": "string",
+ "example": "1095778291488653372"
+ },
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:10.303278+03:00"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ }
+ }
+ },
+ "entities.Heartbeat": {
+ "type": "object",
+ "required": [
+ "charging",
+ "id",
+ "owner",
+ "timestamp",
+ "user_id",
+ "version"
+ ],
+ "properties": {
+ "charging": {
+ "type": "boolean",
+ "example": true
+ },
+ "id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "owner": {
+ "type": "string",
+ "example": "+18005550199"
+ },
+ "timestamp": {
+ "type": "string",
+ "example": "2022-06-05T14:26:01.520828+03:00"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ },
+ "version": {
+ "type": "string",
+ "example": "344c10f"
+ }
+ }
+ },
+ "entities.Message": {
+ "type": "object",
+ "required": [
+ "attachments",
+ "contact",
+ "content",
+ "created_at",
+ "encrypted",
+ "id",
+ "max_send_attempts",
+ "order_timestamp",
+ "owner",
+ "request_received_at",
+ "send_attempt_count",
+ "sim",
+ "status",
+ "type",
+ "updated_at",
+ "user_id"
+ ],
+ "properties": {
+ "attachments": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "https://example.com/image.jpg",
+ "https://example.com/video.mp4"
+ ]
+ },
+ "contact": {
+ "type": "string",
+ "example": "+18005550100"
+ },
+ "content": {
+ "type": "string",
+ "example": "This is a sample text message"
+ },
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "delivered_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "encrypted": {
+ "type": "boolean",
+ "example": false
+ },
+ "expired_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "failed_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "failure_reason": {
+ "type": "string",
+ "example": "UNKNOWN"
+ },
+ "id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "last_attempted_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "max_send_attempts": {
+ "type": "integer",
+ "example": 1
+ },
+ "order_timestamp": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "owner": {
+ "type": "string",
+ "example": "+18005550199"
+ },
+ "received_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "request_id": {
+ "type": "string",
+ "example": "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
+ },
+ "request_received_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:01.520828+03:00"
+ },
+ "scheduled_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "scheduled_send_time": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "send_attempt_count": {
+ "type": "integer",
+ "example": 0
+ },
+ "send_time": {
+ "description": "SendDuration is the number of nanoseconds from when the request was received until when the mobile phone send the message",
+ "type": "integer",
+ "example": 133414
+ },
+ "sent_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "sim": {
+ "description": "SIM is the SIM card to use to send the message\n* SMS1: use the SIM card in slot 1\n* SMS2: use the SIM card in slot 2\n* DEFAULT: used the default communication SIM card",
+ "allOf": [
+ {
+ "$ref": "#/definitions/entities.SIM"
+ }
+ ],
+ "example": "DEFAULT"
+ },
+ "status": {
+ "type": "string",
+ "example": "pending"
+ },
+ "type": {
+ "type": "string",
+ "example": "mobile-terminated"
+ },
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:10.303278+03:00"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ }
+ }
+ },
+ "entities.MessageSendSchedule": {
+ "type": "object",
+ "required": [
+ "created_at",
+ "id",
+ "name",
+ "timezone",
+ "updated_at",
+ "user_id",
+ "windows"
+ ],
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "name": {
+ "type": "string",
+ "example": "Business Hours"
+ },
+ "timezone": {
+ "type": "string",
+ "example": "Europe/Tallinn"
+ },
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:10.303278+03:00"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ },
+ "windows": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.MessageSendScheduleWindow"
+ }
+ }
+ }
+ },
+ "entities.MessageSendScheduleWindow": {
+ "type": "object",
+ "required": [
+ "day_of_week",
+ "end_minute",
+ "start_minute"
+ ],
+ "properties": {
+ "day_of_week": {
+ "type": "integer",
+ "example": 1
+ },
+ "end_minute": {
+ "type": "integer",
+ "example": 1020
+ },
+ "start_minute": {
+ "type": "integer",
+ "example": 540
+ }
+ }
+ },
+ "entities.MessageThread": {
+ "type": "object",
+ "required": [
+ "color",
+ "contact",
+ "created_at",
+ "id",
+ "is_archived",
+ "is_read",
+ "last_message_content",
+ "last_message_id",
+ "order_timestamp",
+ "owner",
+ "status",
+ "updated_at",
+ "user_id"
+ ],
+ "properties": {
+ "color": {
+ "type": "string",
+ "example": "indigo"
+ },
+ "contact": {
+ "type": "string",
+ "example": "+18005550100"
+ },
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703ca"
+ },
+ "is_archived": {
+ "type": "boolean",
+ "example": false
+ },
+ "is_read": {
+ "type": "boolean",
+ "example": true
+ },
+ "last_message_content": {
+ "type": "string",
+ "example": "This is a sample message content"
+ },
+ "last_message_id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703ca"
+ },
+ "order_timestamp": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "owner": {
+ "type": "string",
+ "example": "+18005550199"
+ },
+ "status": {
+ "type": "string",
+ "example": "PENDING"
+ },
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ }
+ }
+ },
+ "entities.Phone": {
+ "type": "object",
+ "required": [
+ "created_at",
+ "id",
+ "max_send_attempts",
+ "message_expiration_seconds",
+ "messages_per_minute",
+ "phone_number",
+ "sim",
+ "unarchive_thread",
+ "updated_at",
+ "user_id"
+ ],
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "fcm_token": {
+ "type": "string",
+ "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....."
+ },
+ "id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "max_send_attempts": {
+ "description": "MaxSendAttempts determines how many times to retry sending an SMS message",
+ "type": "integer",
+ "example": 2
+ },
+ "message_expiration_seconds": {
+ "description": "MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired.",
+ "type": "integer"
+ },
+ "message_send_schedule_id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "messages_per_minute": {
+ "type": "integer",
+ "example": 1
+ },
+ "missed_call_auto_reply": {
+ "type": "string",
+ "example": "This phone cannot receive calls. Please send an SMS instead."
+ },
+ "phone_number": {
+ "type": "string",
+ "example": "+18005550199"
+ },
+ "sim": {
+ "$ref": "#/definitions/entities.SIM"
+ },
+ "unarchive_thread": {
+ "description": "UnarchiveThread moves an archived message thread back to the inbox when a new message is received on this phone.",
+ "type": "boolean",
+ "example": false
+ },
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:10.303278+03:00"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ }
+ }
+ },
+ "entities.PhoneAPIKey": {
+ "type": "object",
+ "required": [
+ "api_key",
+ "created_at",
+ "id",
+ "name",
+ "phone_ids",
+ "phone_numbers",
+ "updated_at",
+ "user_email",
+ "user_id"
+ ],
+ "properties": {
+ "api_key": {
+ "type": "string",
+ "example": "pk_DGW8NwQp7mxKaSZ72Xq9v6xxxxx"
+ },
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "name": {
+ "type": "string",
+ "example": "Business Phone Key"
+ },
+ "phone_ids": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "32343a19-da5e-4b1b-a767-3298a73703cb",
+ "32343a19-da5e-4b1b-a767-3298a73703cc"
+ ]
+ },
+ "phone_numbers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "+18005550199",
+ "+18005550100"
+ ]
+ },
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "user_email": {
+ "type": "string",
+ "example": "user@gmail.com"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ }
+ }
+ },
+ "entities.SIM": {
+ "type": "string",
+ "enum": [
+ "SIM1",
+ "SIM2"
+ ],
+ "x-enum-varnames": [
+ "SIM1",
+ "SIM2"
+ ]
+ },
+ "entities.SubscriptionName": {
+ "type": "string",
+ "enum": [
+ "free",
+ "pro-monthly",
+ "pro-yearly",
+ "ultra-monthly",
+ "ultra-yearly",
+ "pro-lifetime",
+ "20k-monthly",
+ "100k-monthly",
+ "50k-monthly",
+ "200k-monthly",
+ "20k-yearly"
+ ],
+ "x-enum-varnames": [
+ "SubscriptionNameFree",
+ "SubscriptionNameProMonthly",
+ "SubscriptionNameProYearly",
+ "SubscriptionNameUltraMonthly",
+ "SubscriptionNameUltraYearly",
+ "SubscriptionNameProLifetime",
+ "SubscriptionName20KMonthly",
+ "SubscriptionName100KMonthly",
+ "SubscriptionName50KMonthly",
+ "SubscriptionName200KMonthly",
+ "SubscriptionName20KYearly"
+ ]
+ },
+ "entities.User": {
+ "type": "object",
+ "required": [
+ "api_key",
+ "created_at",
+ "email",
+ "id",
+ "notification_heartbeat_enabled",
+ "notification_message_status_enabled",
+ "notification_newsletter_enabled",
+ "notification_webhook_enabled",
+ "subscription_id",
+ "subscription_name",
+ "timezone",
+ "updated_at"
+ ],
+ "properties": {
+ "active_phone_id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "api_key": {
+ "type": "string",
+ "example": "x-api-key"
+ },
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "email": {
+ "type": "string",
+ "example": "name@email.com"
+ },
+ "id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ },
+ "notification_heartbeat_enabled": {
+ "type": "boolean",
+ "example": true
+ },
+ "notification_message_status_enabled": {
+ "type": "boolean",
+ "example": true
+ },
+ "notification_newsletter_enabled": {
+ "type": "boolean",
+ "example": true
+ },
+ "notification_webhook_enabled": {
+ "type": "boolean",
+ "example": true
+ },
+ "subscription_ends_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "subscription_id": {
+ "type": "string",
+ "example": "8f9c71b8-b84e-4417-8408-a62274f65a08"
+ },
+ "subscription_name": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/entities.SubscriptionName"
+ }
+ ],
+ "example": "free"
+ },
+ "subscription_renews_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "subscription_status": {
+ "type": "string",
+ "example": "on_trial"
+ },
+ "timezone": {
+ "type": "string",
+ "example": "Europe/Helsinki"
+ },
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:10.303278+03:00"
+ }
+ }
+ },
+ "entities.Webhook": {
+ "type": "object",
+ "required": [
+ "created_at",
+ "events",
+ "id",
+ "phone_numbers",
+ "signing_key",
+ "updated_at",
+ "url",
+ "user_id"
+ ],
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:02.302718+03:00"
+ },
+ "events": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "message.phone.received"
+ ]
+ },
+ "id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "phone_numbers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "+18005550199",
+ "+18005550100"
+ ]
+ },
+ "signing_key": {
+ "type": "string",
+ "example": "DGW8NwQp7mxKaSZ72Xq9v67SLqSbWQvckzzmK8D6rvd7NywSEkdMJtuxKyEkYnCY"
+ },
+ "updated_at": {
+ "type": "string",
+ "example": "2022-06-05T14:26:10.303278+03:00"
+ },
+ "url": {
+ "type": "string",
+ "example": "https://example.com"
+ },
+ "user_id": {
+ "type": "string",
+ "example": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
+ }
+ }
+ },
+ "requests.DiscordStore": {
+ "type": "object",
+ "required": [
+ "incoming_channel_id",
+ "name",
+ "server_id"
+ ],
+ "properties": {
+ "incoming_channel_id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "server_id": {
+ "type": "string"
+ }
+ }
+ },
+ "requests.DiscordUpdate": {
+ "type": "object",
+ "required": [
+ "incoming_channel_id",
+ "name",
+ "server_id"
+ ],
+ "properties": {
+ "incoming_channel_id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "server_id": {
+ "type": "string"
+ }
+ }
+ },
+ "requests.HeartbeatStore": {
+ "type": "object",
+ "required": [
+ "charging",
+ "phone_numbers"
+ ],
+ "properties": {
+ "charging": {
+ "type": "boolean"
+ },
+ "phone_numbers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "requests.MessageAttachment": {
+ "type": "object",
+ "required": [
+ "content",
+ "content_type",
+ "name"
+ ],
+ "properties": {
+ "content": {
+ "description": "Content is the base64-encoded attachment data",
+ "type": "string",
+ "example": "base64data..."
+ },
+ "content_type": {
+ "description": "ContentType is the MIME type of the attachment",
+ "type": "string",
+ "example": "image/jpeg"
+ },
+ "name": {
+ "description": "Name is the original filename of the attachment",
+ "type": "string",
+ "example": "photo.jpg"
+ }
+ }
+ },
+ "requests.MessageBulkSend": {
+ "type": "object",
+ "required": [
+ "content",
+ "from",
+ "to"
+ ],
+ "properties": {
+ "attachments": {
+ "description": "Attachments are optional. When you provide a list of attachments, the message will be sent out as an MMS",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "content": {
+ "type": "string",
+ "example": "This is a sample text message"
+ },
+ "encrypted": {
+ "description": "Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app",
+ "type": "boolean",
+ "example": false
+ },
+ "from": {
+ "type": "string",
+ "example": "+18005550199"
+ },
+ "request_id": {
+ "description": "RequestID is an optional parameter used to track a request from the client's perspective",
+ "type": "string",
+ "example": "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
+ },
+ "to": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "+18005550100",
+ "+18005550100"
+ ]
+ }
+ }
+ },
+ "requests.MessageCallMissed": {
+ "type": "object",
+ "required": [
+ "from",
+ "sim",
+ "timestamp",
+ "to"
+ ],
+ "properties": {
+ "from": {
+ "type": "string",
+ "example": "+18005550199"
+ },
+ "sim": {
+ "type": "string",
+ "example": "SIM1"
+ },
+ "timestamp": {
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "to": {
+ "type": "string",
+ "example": "+18005550100"
+ }
+ }
+ },
+ "requests.MessageEvent": {
+ "type": "object",
+ "required": [
+ "event_name",
+ "reason",
+ "timestamp"
+ ],
+ "properties": {
+ "event_name": {
+ "description": "EventName is the type of event\n* SENT: is emitted when a message is sent by the mobile phone\n* FAILED: is event is emitted when the message could not be sent by the mobile phone\n* DELIVERED: is event is emitted when a delivery report has been received by the mobile phone",
+ "type": "string",
+ "example": "SENT"
+ },
+ "reason": {
+ "description": "Reason is the exact error message in case the event is an error",
+ "type": "string"
+ },
+ "timestamp": {
+ "description": "Timestamp is the time when the event was emitted, Please send the timestamp in UTC with as much precision as possible",
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ }
+ }
+ },
+ "requests.MessageReceive": {
+ "type": "object",
+ "required": [
+ "content",
+ "encrypted",
+ "from",
+ "sim",
+ "timestamp",
+ "to"
+ ],
+ "properties": {
+ "attachments": {
+ "description": "Attachments is the list of MMS attachments received with the message",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/requests.MessageAttachment"
+ }
+ },
+ "content": {
+ "type": "string",
+ "example": "This is a sample text message received on a phone"
+ },
+ "encrypted": {
+ "description": "Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app",
+ "type": "boolean",
+ "example": false
+ },
+ "from": {
+ "type": "string",
+ "example": "+18005550199"
+ },
+ "sim": {
+ "description": "SIM card that received the message",
+ "allOf": [
+ {
+ "$ref": "#/definitions/entities.SIM"
+ }
+ ],
+ "example": "SIM1"
+ },
+ "timestamp": {
+ "description": "Timestamp is the time when the event was emitted, Please send the timestamp in UTC with as much precision as possible",
+ "type": "string",
+ "example": "2022-06-05T14:26:09.527976+03:00"
+ },
+ "to": {
+ "type": "string",
+ "example": "+18005550100"
+ }
+ }
+ },
+ "requests.MessageSend": {
+ "type": "object",
+ "required": [
+ "content",
+ "from",
+ "to"
+ ],
+ "properties": {
+ "attachments": {
+ "description": "Attachments are optional. When you provide a list of attachments, the message will be sent out as an MMS",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "https://example.com/image.jpg",
+ "https://example.com/video.mp4"
+ ]
+ },
+ "content": {
+ "type": "string",
+ "example": "This is a sample text message"
+ },
+ "encrypted": {
+ "description": "Encrypted is an optional parameter used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app",
+ "type": "boolean",
+ "example": false
+ },
+ "from": {
+ "type": "string",
+ "example": "+18005550199"
+ },
+ "request_id": {
+ "description": "RequestID is an optional parameter used to track a request from the client's perspective",
+ "type": "string",
+ "example": "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
+ },
+ "send_at": {
+ "description": "SendAt is an optional parameter used to schedule a message to be sent in the future. The time is considered to be in your profile's local timezone and you can queue messages for up to 20 days (480 hours) in the future.",
+ "type": "string",
+ "example": "2025-12-19T16:39:57-08:00"
+ },
+ "to": {
+ "type": "string",
+ "example": "+18005550100"
+ }
+ }
+ },
+ "requests.MessageSendScheduleStore": {
+ "type": "object",
+ "required": [
+ "name",
+ "timezone",
+ "windows"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "timezone": {
+ "type": "string"
+ },
+ "windows": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/requests.MessageSendScheduleWindow"
+ }
+ }
+ }
+ },
+ "requests.MessageSendScheduleWindow": {
+ "type": "object",
+ "required": [
+ "day_of_week",
+ "end_minute",
+ "start_minute"
+ ],
+ "properties": {
+ "day_of_week": {
+ "type": "integer"
+ },
+ "end_minute": {
+ "type": "integer"
+ },
+ "start_minute": {
+ "type": "integer"
+ }
+ }
+ },
+ "requests.MessageThreadUpdate": {
+ "type": "object",
+ "properties": {
+ "is_archived": {
+ "type": "boolean",
+ "example": true
+ },
+ "is_read": {
+ "type": "boolean",
+ "example": true
+ }
+ }
+ },
+ "requests.PhoneAPIKeyStoreRequest": {
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string",
+ "example": "My Phone API Key"
+ }
+ }
+ },
+ "requests.PhoneFCMToken": {
+ "type": "object",
+ "required": [
+ "fcm_token",
+ "phone_number",
+ "sim"
+ ],
+ "properties": {
+ "fcm_token": {
+ "type": "string",
+ "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....."
+ },
+ "phone_number": {
+ "type": "string",
+ "example": "[+18005550199]"
+ },
+ "sim": {
+ "description": "SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot",
+ "type": "string",
+ "example": "SIM1"
+ }
+ }
+ },
+ "requests.PhoneUpsert": {
+ "type": "object",
+ "required": [
+ "fcm_token",
+ "max_send_attempts",
+ "message_expiration_seconds",
+ "messages_per_minute",
+ "missed_call_auto_reply",
+ "phone_number",
+ "sim",
+ "unarchive_thread"
+ ],
+ "properties": {
+ "fcm_token": {
+ "type": "string",
+ "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....."
+ },
+ "max_send_attempts": {
+ "description": "MaxSendAttempts is the number of attempts when sending an SMS message to handle the case where the phone is offline.",
+ "type": "integer",
+ "example": 2
+ },
+ "message_expiration_seconds": {
+ "description": "MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired.",
+ "type": "integer",
+ "example": 12345
+ },
+ "message_send_schedule_id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "messages_per_minute": {
+ "type": "integer",
+ "example": 1
+ },
+ "missed_call_auto_reply": {
+ "type": "string",
+ "example": "e.g. This phone cannot receive calls. Please send an SMS instead."
+ },
+ "phone_number": {
+ "type": "string",
+ "example": "+18005550199"
+ },
+ "sim": {
+ "description": "SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot",
+ "type": "string",
+ "example": "SIM1"
+ },
+ "unarchive_thread": {
+ "description": "UnarchiveThread moves an archived thread back to the inbox when a new message is received on this phone.",
+ "type": "boolean",
+ "example": false
+ }
+ }
+ },
+ "requests.UserNotificationUpdate": {
+ "type": "object",
+ "required": [
+ "heartbeat_enabled",
+ "message_status_enabled",
+ "newsletter_enabled",
+ "webhook_enabled"
+ ],
+ "properties": {
+ "heartbeat_enabled": {
+ "type": "boolean",
+ "example": true
+ },
+ "message_status_enabled": {
+ "type": "boolean",
+ "example": true
+ },
+ "newsletter_enabled": {
+ "type": "boolean",
+ "example": true
+ },
+ "webhook_enabled": {
+ "type": "boolean",
+ "example": true
+ }
+ }
+ },
+ "requests.UserPaymentInvoice": {
+ "type": "object",
+ "required": [
+ "address",
+ "city",
+ "country",
+ "name",
+ "notes",
+ "state",
+ "zip_code"
+ ],
+ "properties": {
+ "address": {
+ "type": "string",
+ "example": "221B Baker Street, London"
+ },
+ "city": {
+ "type": "string",
+ "example": "Los Angeles"
+ },
+ "country": {
+ "type": "string",
+ "example": "US"
+ },
+ "name": {
+ "type": "string",
+ "example": "Acme Corp"
+ },
+ "notes": {
+ "type": "string",
+ "example": "Thank you for your business!"
+ },
+ "state": {
+ "type": "string",
+ "example": "CA"
+ },
+ "zip_code": {
+ "type": "string",
+ "example": "9800"
+ }
+ }
+ },
+ "requests.UserUpdate": {
+ "type": "object",
+ "required": [
+ "active_phone_id",
+ "timezone"
+ ],
+ "properties": {
+ "active_phone_id": {
+ "type": "string",
+ "example": "32343a19-da5e-4b1b-a767-3298a73703cb"
+ },
+ "timezone": {
+ "type": "string",
+ "example": "Europe/Helsinki"
+ }
+ }
+ },
+ "requests.WebhookStore": {
+ "type": "object",
+ "required": [
+ "events",
+ "phone_numbers",
+ "signing_key",
+ "url"
+ ],
+ "properties": {
+ "events": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "phone_numbers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "+18005550100",
+ "+18005550100"
+ ]
+ },
+ "signing_key": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "requests.WebhookUpdate": {
+ "type": "object",
+ "required": [
+ "events",
+ "phone_numbers",
+ "signing_key",
+ "url"
+ ],
+ "properties": {
+ "events": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "phone_numbers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "example": [
+ "+18005550100",
+ "+18005550100"
+ ]
+ },
+ "signing_key": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "responses.BadRequest": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "string",
+ "example": "The request body is not a valid JSON string"
+ },
+ "message": {
+ "type": "string",
+ "example": "The request isn't properly formed"
+ },
+ "status": {
+ "type": "string",
+ "example": "error"
+ }
+ }
+ },
+ "responses.BillingUsageResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.BillingUsage"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.BillingUsagesResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.BillingUsage"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.BulkMessagesResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.BulkMessage"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.DiscordResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.Discord"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.DiscordsResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.Discord"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.HeartbeatResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.Heartbeat"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.HeartbeatsResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.Heartbeat"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.InternalServerError": {
+ "type": "object",
+ "required": [
+ "message",
+ "status"
+ ],
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "We ran into an internal error while handling the request."
+ },
+ "status": {
+ "type": "string",
+ "example": "error"
+ }
+ }
+ },
+ "responses.MessageResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.Message"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.MessageSendScheduleResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.MessageSendSchedule"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.MessageSendSchedulesResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.MessageSendSchedule"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.MessageThreadResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.MessageThread"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.MessageThreadsResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.MessageThread"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.MessagesResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.Message"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.NoContent": {
+ "type": "object",
+ "required": [
+ "message",
+ "status"
+ ],
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "action performed successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.NotFound": {
+ "type": "object",
+ "required": [
+ "message",
+ "status"
+ ],
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "cannot find message with ID [32343a19-da5e-4b1b-a767-3298a73703ca]"
+ },
+ "status": {
+ "type": "string",
+ "example": "error"
+ }
+ }
+ },
+ "responses.OkString": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.PaymentRequired": {
+ "type": "object",
+ "required": [
+ "message",
+ "status"
+ ],
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "You have reached the maximum number of allowed resources. Please upgrade your plan."
+ },
+ "status": {
+ "type": "string",
+ "example": "error"
+ }
+ }
+ },
+ "responses.PhoneAPIKeyResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.PhoneAPIKey"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.PhoneAPIKeysResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.PhoneAPIKey"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.PhoneResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.Phone"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.PhonesResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.Phone"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.Unauthorized": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "string",
+ "example": "Make sure your API key is set in the [X-API-Key] header in the request"
+ },
+ "message": {
+ "type": "string",
+ "example": "You are not authorized to carry out this request."
+ },
+ "status": {
+ "type": "string",
+ "example": "error"
+ }
+ }
+ },
+ "responses.UnprocessableEntity": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "validation errors while handling request"
+ },
+ "status": {
+ "type": "string",
+ "example": "error"
+ }
+ }
+ },
+ "responses.UserResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.User"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.UserSubscriptionPaymentsResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "attributes",
+ "id",
+ "type"
+ ],
+ "properties": {
+ "attributes": {
+ "type": "object",
+ "required": [
+ "billing_reason",
+ "card_brand",
+ "card_last_four",
+ "created_at",
+ "currency",
+ "currency_rate",
+ "discount_total",
+ "discount_total_formatted",
+ "discount_total_usd",
+ "refunded",
+ "refunded_amount",
+ "refunded_amount_formatted",
+ "refunded_amount_usd",
+ "refunded_at",
+ "status",
+ "status_formatted",
+ "subtotal",
+ "subtotal_formatted",
+ "subtotal_usd",
+ "tax",
+ "tax_formatted",
+ "tax_inclusive",
+ "tax_usd",
+ "total",
+ "total_formatted",
+ "total_usd",
+ "updated_at"
+ ],
+ "properties": {
+ "billing_reason": {
+ "type": "string"
+ },
+ "card_brand": {
+ "type": "string"
+ },
+ "card_last_four": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ },
+ "currency_rate": {
+ "type": "string"
+ },
+ "discount_total": {
+ "type": "integer"
+ },
+ "discount_total_formatted": {
+ "type": "string"
+ },
+ "discount_total_usd": {
+ "type": "integer"
+ },
+ "refunded": {
+ "type": "boolean"
+ },
+ "refunded_amount": {
+ "type": "integer"
+ },
+ "refunded_amount_formatted": {
+ "type": "string"
+ },
+ "refunded_amount_usd": {
+ "type": "integer"
+ },
+ "refunded_at": {},
+ "status": {
+ "type": "string"
+ },
+ "status_formatted": {
+ "type": "string"
+ },
+ "subtotal": {
+ "type": "integer"
+ },
+ "subtotal_formatted": {
+ "type": "string"
+ },
+ "subtotal_usd": {
+ "type": "integer"
+ },
+ "tax": {
+ "type": "integer"
+ },
+ "tax_formatted": {
+ "type": "string"
+ },
+ "tax_inclusive": {
+ "type": "boolean"
+ },
+ "tax_usd": {
+ "type": "integer"
+ },
+ "total": {
+ "type": "integer"
+ },
+ "total_formatted": {
+ "type": "string"
+ },
+ "total_usd": {
+ "type": "integer"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ },
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.WebhookResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/entities.Webhook"
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
+ },
+ "responses.WebhooksResponse": {
+ "type": "object",
+ "required": [
+ "data",
+ "message",
+ "status"
+ ],
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/entities.Webhook"
+ }
+ },
+ "message": {
+ "type": "string",
+ "example": "Request handled successfully"
+ },
+ "status": {
+ "type": "string",
+ "example": "success"
+ }
+ }
}
- }
},
- "responses.WebhooksResponse": {
- "type": "object",
- "required": ["data", "message", "status"],
- "properties": {
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/entities.Webhook"
- }
- },
- "message": {
- "type": "string",
- "example": "Request handled successfully"
- },
- "status": {
- "type": "string",
- "example": "success"
+ "securityDefinitions": {
+ "ApiKeyAuth": {
+ "type": "apiKey",
+ "name": "x-api-Key",
+ "in": "header"
}
- }
- }
- },
- "securityDefinitions": {
- "ApiKeyAuth": {
- "type": "apiKey",
- "name": "x-api-Key",
- "in": "header"
}
- }
-}
+}
\ No newline at end of file
diff --git a/api/docs/swagger.yaml b/api/docs/swagger.yaml
index efc316c49..ddc6ae700 100644
--- a/api/docs/swagger.yaml
+++ b/api/docs/swagger.yaml
@@ -30,15 +30,55 @@ definitions:
example: WB7DRDWrJZRGbYrv2CKGkqbzvqdC
type: string
required:
- - created_at
- - end_timestamp
- - id
- - received_messages
- - sent_messages
- - start_timestamp
- - total_cost
- - updated_at
- - user_id
+ - created_at
+ - end_timestamp
+ - id
+ - received_messages
+ - sent_messages
+ - start_timestamp
+ - total_cost
+ - updated_at
+ - user_id
+ type: object
+ entities.BulkMessage:
+ properties:
+ created_at:
+ example: "2022-06-05T14:26:02.302718+03:00"
+ type: string
+ delivered_count:
+ example: 25
+ type: integer
+ expired_count:
+ example: 3
+ type: integer
+ failed_count:
+ example: 5
+ type: integer
+ pending_count:
+ example: 30
+ type: integer
+ request_id:
+ example: bulk-httpsms-file.csv
+ type: string
+ scheduled_count:
+ example: 50
+ type: integer
+ sent_count:
+ example: 40
+ type: integer
+ total:
+ example: 150
+ type: integer
+ required:
+ - created_at
+ - delivered_count
+ - expired_count
+ - failed_count
+ - pending_count
+ - request_id
+ - scheduled_count
+ - sent_count
+ - total
type: object
entities.Discord:
properties:
@@ -64,13 +104,13 @@ definitions:
example: WB7DRDWrJZRGbYrv2CKGkqbzvqdC
type: string
required:
- - created_at
- - id
- - incoming_channel_id
- - name
- - server_id
- - updated_at
- - user_id
+ - created_at
+ - id
+ - incoming_channel_id
+ - name
+ - server_id
+ - updated_at
+ - user_id
type: object
entities.Heartbeat:
properties:
@@ -93,18 +133,22 @@ definitions:
example: 344c10f
type: string
required:
- - charging
- - id
- - owner
- - timestamp
- - user_id
- - version
+ - charging
+ - id
+ - owner
+ - timestamp
+ - user_id
+ - version
type: object
entities.Message:
properties:
- can_be_polled:
- example: false
- type: boolean
+ attachments:
+ example:
+ - https://example.com/image.jpg
+ - https://example.com/video.mp4
+ items:
+ type: string
+ type: array
contact:
example: "+18005550100"
type: string
@@ -163,8 +207,7 @@ definitions:
example: 0
type: integer
send_time:
- description:
- SendDuration is the number of nanoseconds from when the request
+ description: SendDuration is the number of nanoseconds from when the request
was received until when the mobile phone send the message
example: 133414
type: integer
@@ -172,13 +215,14 @@ definitions:
example: "2022-06-05T14:26:09.527976+03:00"
type: string
sim:
+ allOf:
+ - $ref: '#/definitions/entities.SIM'
description: |-
SIM is the SIM card to use to send the message
* SMS1: use the SIM card in slot 1
* SMS2: use the SIM card in slot 2
* DEFAULT: used the default communication SIM card
example: DEFAULT
- type: string
status:
example: pending
type: string
@@ -192,33 +236,71 @@ definitions:
example: WB7DRDWrJZRGbYrv2CKGkqbzvqdC
type: string
required:
- - can_be_polled
- - contact
- - content
- - created_at
- - delivered_at
- - encrypted
- - expired_at
- - failed_at
- - failure_reason
- - id
- - last_attempted_at
- - max_send_attempts
- - order_timestamp
- - owner
- - received_at
- - request_id
- - request_received_at
- - scheduled_at
- - scheduled_send_time
- - send_attempt_count
- - send_time
- - sent_at
- - sim
- - status
- - type
- - updated_at
- - user_id
+ - attachments
+ - contact
+ - content
+ - created_at
+ - encrypted
+ - id
+ - max_send_attempts
+ - order_timestamp
+ - owner
+ - request_received_at
+ - send_attempt_count
+ - sim
+ - status
+ - type
+ - updated_at
+ - user_id
+ type: object
+ entities.MessageSendSchedule:
+ properties:
+ created_at:
+ example: "2022-06-05T14:26:02.302718+03:00"
+ type: string
+ id:
+ example: 32343a19-da5e-4b1b-a767-3298a73703cb
+ type: string
+ name:
+ example: Business Hours
+ type: string
+ timezone:
+ example: Europe/Tallinn
+ type: string
+ updated_at:
+ example: "2022-06-05T14:26:10.303278+03:00"
+ type: string
+ user_id:
+ example: WB7DRDWrJZRGbYrv2CKGkqbzvqdC
+ type: string
+ windows:
+ items:
+ $ref: '#/definitions/entities.MessageSendScheduleWindow'
+ type: array
+ required:
+ - created_at
+ - id
+ - name
+ - timezone
+ - updated_at
+ - user_id
+ - windows
+ type: object
+ entities.MessageSendScheduleWindow:
+ properties:
+ day_of_week:
+ example: 1
+ type: integer
+ end_minute:
+ example: 1020
+ type: integer
+ start_minute:
+ example: 540
+ type: integer
+ required:
+ - day_of_week
+ - end_minute
+ - start_minute
type: object
entities.MessageThread:
properties:
@@ -237,6 +319,9 @@ definitions:
is_archived:
example: false
type: boolean
+ is_read:
+ example: true
+ type: boolean
last_message_content:
example: This is a sample message content
type: string
@@ -259,18 +344,19 @@ definitions:
example: WB7DRDWrJZRGbYrv2CKGkqbzvqdC
type: string
required:
- - color
- - contact
- - created_at
- - id
- - is_archived
- - last_message_content
- - last_message_id
- - order_timestamp
- - owner
- - status
- - updated_at
- - user_id
+ - color
+ - contact
+ - created_at
+ - id
+ - is_archived
+ - is_read
+ - last_message_content
+ - last_message_id
+ - order_timestamp
+ - owner
+ - status
+ - updated_at
+ - user_id
type: object
entities.Phone:
properties:
@@ -284,16 +370,17 @@ definitions:
example: 32343a19-da5e-4b1b-a767-3298a73703cb
type: string
max_send_attempts:
- description:
- MaxSendAttempts determines how many times to retry sending an
+ description: MaxSendAttempts determines how many times to retry sending an
SMS message
example: 2
type: integer
message_expiration_seconds:
- description:
- MessageExpirationSeconds is the duration in seconds after sending
+ description: MessageExpirationSeconds is the duration in seconds after sending
a message when it is considered to be expired.
type: integer
+ message_send_schedule_id:
+ example: 32343a19-da5e-4b1b-a767-3298a73703cb
+ type: string
messages_per_minute:
example: 1
type: integer
@@ -304,8 +391,12 @@ definitions:
example: "+18005550199"
type: string
sim:
- description: SIM card that received the message
- type: string
+ $ref: '#/definitions/entities.SIM'
+ unarchive_thread:
+ description: UnarchiveThread moves an archived message thread back to the
+ inbox when a new message is received on this phone.
+ example: false
+ type: boolean
updated_at:
example: "2022-06-05T14:26:10.303278+03:00"
type: string
@@ -313,17 +404,16 @@ definitions:
example: WB7DRDWrJZRGbYrv2CKGkqbzvqdC
type: string
required:
- - created_at
- - fcm_token
- - id
- - max_send_attempts
- - message_expiration_seconds
- - messages_per_minute
- - missed_call_auto_reply
- - phone_number
- - sim
- - updated_at
- - user_id
+ - created_at
+ - id
+ - max_send_attempts
+ - message_expiration_seconds
+ - messages_per_minute
+ - phone_number
+ - sim
+ - unarchive_thread
+ - updated_at
+ - user_id
type: object
entities.PhoneAPIKey:
properties:
@@ -341,15 +431,15 @@ definitions:
type: string
phone_ids:
example:
- - 32343a19-da5e-4b1b-a767-3298a73703cb
- - 32343a19-da5e-4b1b-a767-3298a73703cc
+ - 32343a19-da5e-4b1b-a767-3298a73703cb
+ - 32343a19-da5e-4b1b-a767-3298a73703cc
items:
type: string
type: array
phone_numbers:
example:
- - "+18005550199"
- - "+18005550100"
+ - "+18005550199"
+ - "+18005550100"
items:
type: string
type: array
@@ -363,16 +453,50 @@ definitions:
example: WB7DRDWrJZRGbYrv2CKGkqbzvqdC
type: string
required:
- - api_key
- - created_at
- - id
- - name
- - phone_ids
- - phone_numbers
- - updated_at
- - user_email
- - user_id
+ - api_key
+ - created_at
+ - id
+ - name
+ - phone_ids
+ - phone_numbers
+ - updated_at
+ - user_email
+ - user_id
type: object
+ entities.SIM:
+ enum:
+ - SIM1
+ - SIM2
+ type: string
+ x-enum-varnames:
+ - SIM1
+ - SIM2
+ entities.SubscriptionName:
+ enum:
+ - free
+ - pro-monthly
+ - pro-yearly
+ - ultra-monthly
+ - ultra-yearly
+ - pro-lifetime
+ - 20k-monthly
+ - 100k-monthly
+ - 50k-monthly
+ - 200k-monthly
+ - 20k-yearly
+ type: string
+ x-enum-varnames:
+ - SubscriptionNameFree
+ - SubscriptionNameProMonthly
+ - SubscriptionNameProYearly
+ - SubscriptionNameUltraMonthly
+ - SubscriptionNameUltraYearly
+ - SubscriptionNameProLifetime
+ - SubscriptionName20KMonthly
+ - SubscriptionName100KMonthly
+ - SubscriptionName50KMonthly
+ - SubscriptionName200KMonthly
+ - SubscriptionName20KYearly
entities.User:
properties:
active_phone_id:
@@ -409,8 +533,9 @@ definitions:
example: 8f9c71b8-b84e-4417-8408-a62274f65a08
type: string
subscription_name:
+ allOf:
+ - $ref: '#/definitions/entities.SubscriptionName'
example: free
- type: string
subscription_renews_at:
example: "2022-06-05T14:26:02.302718+03:00"
type: string
@@ -424,22 +549,18 @@ definitions:
example: "2022-06-05T14:26:10.303278+03:00"
type: string
required:
- - active_phone_id
- - api_key
- - created_at
- - email
- - id
- - notification_heartbeat_enabled
- - notification_message_status_enabled
- - notification_newsletter_enabled
- - notification_webhook_enabled
- - subscription_ends_at
- - subscription_id
- - subscription_name
- - subscription_renews_at
- - subscription_status
- - timezone
- - updated_at
+ - api_key
+ - created_at
+ - email
+ - id
+ - notification_heartbeat_enabled
+ - notification_message_status_enabled
+ - notification_newsletter_enabled
+ - notification_webhook_enabled
+ - subscription_id
+ - subscription_name
+ - timezone
+ - updated_at
type: object
entities.Webhook:
properties:
@@ -448,7 +569,7 @@ definitions:
type: string
events:
example:
- - message.phone.received
+ - message.phone.received
items:
type: string
type: array
@@ -457,8 +578,8 @@ definitions:
type: string
phone_numbers:
example:
- - "+18005550199"
- - "+18005550100"
+ - "+18005550199"
+ - "+18005550100"
items:
type: string
type: array
@@ -475,14 +596,14 @@ definitions:
example: WB7DRDWrJZRGbYrv2CKGkqbzvqdC
type: string
required:
- - created_at
- - events
- - id
- - phone_numbers
- - signing_key
- - updated_at
- - url
- - user_id
+ - created_at
+ - events
+ - id
+ - phone_numbers
+ - signing_key
+ - updated_at
+ - url
+ - user_id
type: object
requests.DiscordStore:
properties:
@@ -493,9 +614,9 @@ definitions:
server_id:
type: string
required:
- - incoming_channel_id
- - name
- - server_id
+ - incoming_channel_id
+ - name
+ - server_id
type: object
requests.DiscordUpdate:
properties:
@@ -506,9 +627,9 @@ definitions:
server_id:
type: string
required:
- - incoming_channel_id
- - name
- - server_id
+ - incoming_channel_id
+ - name
+ - server_id
type: object
requests.HeartbeatStore:
properties:
@@ -519,17 +640,41 @@ definitions:
type: string
type: array
required:
- - charging
- - phone_numbers
+ - charging
+ - phone_numbers
+ type: object
+ requests.MessageAttachment:
+ properties:
+ content:
+ description: Content is the base64-encoded attachment data
+ example: base64data...
+ type: string
+ content_type:
+ description: ContentType is the MIME type of the attachment
+ example: image/jpeg
+ type: string
+ name:
+ description: Name is the original filename of the attachment
+ example: photo.jpg
+ type: string
+ required:
+ - content
+ - content_type
+ - name
type: object
requests.MessageBulkSend:
properties:
+ attachments:
+ description: Attachments are optional. When you provide a list of attachments,
+ the message will be sent out as an MMS
+ items:
+ type: string
+ type: array
content:
example: This is a sample text message
type: string
encrypted:
- description:
- Encrypted is used to determine if the content is end-to-end encrypted.
+ description: Encrypted is used to determine if the content is end-to-end encrypted.
Make sure to set the encryption key on the httpSMS mobile app
example: false
type: boolean
@@ -537,23 +682,21 @@ definitions:
example: "+18005550199"
type: string
request_id:
- description:
- RequestID is an optional parameter used to track a request from
+ description: RequestID is an optional parameter used to track a request from
the client's perspective
example: 153554b5-ae44-44a0-8f4f-7bbac5657ad4
type: string
to:
example:
- - "+18005550100"
- - "+18005550100"
+ - "+18005550100"
+ - "+18005550100"
items:
type: string
type: array
required:
- - content
- - encrypted
- - from
- - to
+ - content
+ - from
+ - to
type: object
requests.MessageCallMissed:
properties:
@@ -570,10 +713,10 @@ definitions:
example: "+18005550100"
type: string
required:
- - from
- - sim
- - timestamp
- - to
+ - from
+ - sim
+ - timestamp
+ - to
type: object
requests.MessageEvent:
properties:
@@ -589,24 +732,28 @@ definitions:
description: Reason is the exact error message in case the event is an error
type: string
timestamp:
- description:
- Timestamp is the time when the event was emitted, Please send
+ description: Timestamp is the time when the event was emitted, Please send
the timestamp in UTC with as much precision as possible
example: "2022-06-05T14:26:09.527976+03:00"
type: string
required:
- - event_name
- - reason
- - timestamp
+ - event_name
+ - reason
+ - timestamp
type: object
requests.MessageReceive:
properties:
+ attachments:
+ description: Attachments is the list of MMS attachments received with the
+ message
+ items:
+ $ref: '#/definitions/requests.MessageAttachment'
+ type: array
content:
example: This is a sample text message received on a phone
type: string
encrypted:
- description:
- Encrypted is used to determine if the content is end-to-end encrypted.
+ description: Encrypted is used to determine if the content is end-to-end encrypted.
Make sure to set the encryption key on the httpSMS mobile app
example: false
type: boolean
@@ -614,12 +761,12 @@ definitions:
example: "+18005550199"
type: string
sim:
+ allOf:
+ - $ref: '#/definitions/entities.SIM'
description: SIM card that received the message
example: SIM1
- type: string
timestamp:
- description:
- Timestamp is the time when the event was emitted, Please send
+ description: Timestamp is the time when the event was emitted, Please send
the timestamp in UTC with as much precision as possible
example: "2022-06-05T14:26:09.527976+03:00"
type: string
@@ -627,21 +774,29 @@ definitions:
example: "+18005550100"
type: string
required:
- - content
- - encrypted
- - from
- - sim
- - timestamp
- - to
+ - content
+ - encrypted
+ - from
+ - sim
+ - timestamp
+ - to
type: object
requests.MessageSend:
properties:
+ attachments:
+ description: Attachments are optional. When you provide a list of attachments,
+ the message will be sent out as an MMS
+ example:
+ - https://example.com/image.jpg
+ - https://example.com/video.mp4
+ items:
+ type: string
+ type: array
content:
example: This is a sample text message
type: string
encrypted:
- description:
- Encrypted is an optional parameter used to determine if the content
+ description: Encrypted is an optional parameter used to determine if the content
is end-to-end encrypted. Make sure to set the encryption key on the httpSMS
mobile app
example: false
@@ -650,33 +805,61 @@ definitions:
example: "+18005550199"
type: string
request_id:
- description:
- RequestID is an optional parameter used to track a request from
+ description: RequestID is an optional parameter used to track a request from
the client's perspective
example: 153554b5-ae44-44a0-8f4f-7bbac5657ad4
type: string
send_at:
- description:
- SendAt is an optional parameter used to schedule a message to
+ description: SendAt is an optional parameter used to schedule a message to
be sent in the future. The time is considered to be in your profile's local
- timezone.
- example: "2022-06-05T14:26:09.527976+03:00"
+ timezone and you can queue messages for up to 20 days (480 hours) in the
+ future.
+ example: "2025-12-19T16:39:57-08:00"
type: string
to:
example: "+18005550100"
type: string
required:
- - content
- - from
- - to
+ - content
+ - from
+ - to
+ type: object
+ requests.MessageSendScheduleStore:
+ properties:
+ name:
+ type: string
+ timezone:
+ type: string
+ windows:
+ items:
+ $ref: '#/definitions/requests.MessageSendScheduleWindow'
+ type: array
+ required:
+ - name
+ - timezone
+ - windows
+ type: object
+ requests.MessageSendScheduleWindow:
+ properties:
+ day_of_week:
+ type: integer
+ end_minute:
+ type: integer
+ start_minute:
+ type: integer
+ required:
+ - day_of_week
+ - end_minute
+ - start_minute
type: object
requests.MessageThreadUpdate:
properties:
is_archived:
example: true
type: boolean
- required:
- - is_archived
+ is_read:
+ example: true
+ type: boolean
type: object
requests.PhoneAPIKeyStoreRequest:
properties:
@@ -684,7 +867,7 @@ definitions:
example: My Phone API Key
type: string
required:
- - name
+ - name
type: object
requests.PhoneFCMToken:
properties:
@@ -692,18 +875,17 @@ definitions:
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd.....
type: string
phone_number:
- example: "[+18005550199]"
+ example: '[+18005550199]'
type: string
sim:
- description:
- SIM is the SIM slot of the phone in case the phone has more than
+ description: SIM is the SIM slot of the phone in case the phone has more than
1 SIM slot
example: SIM1
type: string
required:
- - fcm_token
- - phone_number
- - sim
+ - fcm_token
+ - phone_number
+ - sim
type: object
requests.PhoneUpsert:
properties:
@@ -711,17 +893,18 @@ definitions:
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd.....
type: string
max_send_attempts:
- description:
- MaxSendAttempts is the number of attempts when sending an SMS
+ description: MaxSendAttempts is the number of attempts when sending an SMS
message to handle the case where the phone is offline.
example: 2
type: integer
message_expiration_seconds:
- description:
- MessageExpirationSeconds is the duration in seconds after sending
+ description: MessageExpirationSeconds is the duration in seconds after sending
a message when it is considered to be expired.
example: 12345
type: integer
+ message_send_schedule_id:
+ example: 32343a19-da5e-4b1b-a767-3298a73703cb
+ type: string
messages_per_minute:
example: 1
type: integer
@@ -732,19 +915,24 @@ definitions:
example: "+18005550199"
type: string
sim:
- description:
- SIM is the SIM slot of the phone in case the phone has more than
+ description: SIM is the SIM slot of the phone in case the phone has more than
1 SIM slot
example: SIM1
type: string
+ unarchive_thread:
+ description: UnarchiveThread moves an archived thread back to the inbox when
+ a new message is received on this phone.
+ example: false
+ type: boolean
required:
- - fcm_token
- - max_send_attempts
- - message_expiration_seconds
- - messages_per_minute
- - missed_call_auto_reply
- - phone_number
- - sim
+ - fcm_token
+ - max_send_attempts
+ - message_expiration_seconds
+ - messages_per_minute
+ - missed_call_auto_reply
+ - phone_number
+ - sim
+ - unarchive_thread
type: object
requests.UserNotificationUpdate:
properties:
@@ -761,10 +949,42 @@ definitions:
example: true
type: boolean
required:
- - heartbeat_enabled
- - message_status_enabled
- - newsletter_enabled
- - webhook_enabled
+ - heartbeat_enabled
+ - message_status_enabled
+ - newsletter_enabled
+ - webhook_enabled
+ type: object
+ requests.UserPaymentInvoice:
+ properties:
+ address:
+ example: 221B Baker Street, London
+ type: string
+ city:
+ example: Los Angeles
+ type: string
+ country:
+ example: US
+ type: string
+ name:
+ example: Acme Corp
+ type: string
+ notes:
+ example: Thank you for your business!
+ type: string
+ state:
+ example: CA
+ type: string
+ zip_code:
+ example: "9800"
+ type: string
+ required:
+ - address
+ - city
+ - country
+ - name
+ - notes
+ - state
+ - zip_code
type: object
requests.UserUpdate:
properties:
@@ -775,8 +995,8 @@ definitions:
example: Europe/Helsinki
type: string
required:
- - active_phone_id
- - timezone
+ - active_phone_id
+ - timezone
type: object
requests.WebhookStore:
properties:
@@ -786,8 +1006,8 @@ definitions:
type: array
phone_numbers:
example:
- - "+18005550100"
- - "+18005550100"
+ - "+18005550100"
+ - "+18005550100"
items:
type: string
type: array
@@ -796,10 +1016,10 @@ definitions:
url:
type: string
required:
- - events
- - phone_numbers
- - signing_key
- - url
+ - events
+ - phone_numbers
+ - signing_key
+ - url
type: object
requests.WebhookUpdate:
properties:
@@ -809,8 +1029,8 @@ definitions:
type: array
phone_numbers:
example:
- - "+18005550100"
- - "+18005550100"
+ - "+18005550100"
+ - "+18005550100"
items:
type: string
type: array
@@ -819,10 +1039,10 @@ definitions:
url:
type: string
required:
- - events
- - phone_numbers
- - signing_key
- - url
+ - events
+ - phone_numbers
+ - signing_key
+ - url
type: object
responses.BadRequest:
properties:
@@ -836,14 +1056,14 @@ definitions:
example: error
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.BillingUsageResponse:
properties:
data:
- $ref: "#/definitions/entities.BillingUsage"
+ $ref: '#/definitions/entities.BillingUsage'
message:
example: Request handled successfully
type: string
@@ -851,15 +1071,15 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.BillingUsagesResponse:
properties:
data:
items:
- $ref: "#/definitions/entities.BillingUsage"
+ $ref: '#/definitions/entities.BillingUsage'
type: array
message:
example: Request handled successfully
@@ -868,14 +1088,31 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
+ type: object
+ responses.BulkMessagesResponse:
+ properties:
+ data:
+ items:
+ $ref: '#/definitions/entities.BulkMessage'
+ type: array
+ message:
+ example: Request handled successfully
+ type: string
+ status:
+ example: success
+ type: string
+ required:
+ - data
+ - message
+ - status
type: object
responses.DiscordResponse:
properties:
data:
- $ref: "#/definitions/entities.Discord"
+ $ref: '#/definitions/entities.Discord'
message:
example: Request handled successfully
type: string
@@ -883,15 +1120,15 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.DiscordsResponse:
properties:
data:
items:
- $ref: "#/definitions/entities.Discord"
+ $ref: '#/definitions/entities.Discord'
type: array
message:
example: Request handled successfully
@@ -900,14 +1137,14 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.HeartbeatResponse:
properties:
data:
- $ref: "#/definitions/entities.Heartbeat"
+ $ref: '#/definitions/entities.Heartbeat'
message:
example: Request handled successfully
type: string
@@ -915,15 +1152,15 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.HeartbeatsResponse:
properties:
data:
items:
- $ref: "#/definitions/entities.Heartbeat"
+ $ref: '#/definitions/entities.Heartbeat'
type: array
message:
example: Request handled successfully
@@ -932,9 +1169,9 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.InternalServerError:
properties:
@@ -945,13 +1182,13 @@ definitions:
example: error
type: string
required:
- - message
- - status
+ - message
+ - status
type: object
responses.MessageResponse:
properties:
data:
- $ref: "#/definitions/entities.Message"
+ $ref: '#/definitions/entities.Message'
message:
example: Request handled successfully
type: string
@@ -959,15 +1196,62 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
+ type: object
+ responses.MessageSendScheduleResponse:
+ properties:
+ data:
+ $ref: '#/definitions/entities.MessageSendSchedule'
+ message:
+ example: Request handled successfully
+ type: string
+ status:
+ example: success
+ type: string
+ required:
+ - data
+ - message
+ - status
+ type: object
+ responses.MessageSendSchedulesResponse:
+ properties:
+ data:
+ items:
+ $ref: '#/definitions/entities.MessageSendSchedule'
+ type: array
+ message:
+ example: Request handled successfully
+ type: string
+ status:
+ example: success
+ type: string
+ required:
+ - data
+ - message
+ - status
+ type: object
+ responses.MessageThreadResponse:
+ properties:
+ data:
+ $ref: '#/definitions/entities.MessageThread'
+ message:
+ example: Request handled successfully
+ type: string
+ status:
+ example: success
+ type: string
+ required:
+ - data
+ - message
+ - status
type: object
responses.MessageThreadsResponse:
properties:
data:
items:
- $ref: "#/definitions/entities.MessageThread"
+ $ref: '#/definitions/entities.MessageThread'
type: array
message:
example: Request handled successfully
@@ -976,15 +1260,15 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.MessagesResponse:
properties:
data:
items:
- $ref: "#/definitions/entities.Message"
+ $ref: '#/definitions/entities.Message'
type: array
message:
example: Request handled successfully
@@ -993,9 +1277,9 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.NoContent:
properties:
@@ -1006,8 +1290,8 @@ definitions:
example: success
type: string
required:
- - message
- - status
+ - message
+ - status
type: object
responses.NotFound:
properties:
@@ -1018,8 +1302,8 @@ definitions:
example: error
type: string
required:
- - message
- - status
+ - message
+ - status
type: object
responses.OkString:
properties:
@@ -1032,14 +1316,27 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
+ type: object
+ responses.PaymentRequired:
+ properties:
+ message:
+ example: You have reached the maximum number of allowed resources. Please
+ upgrade your plan.
+ type: string
+ status:
+ example: error
+ type: string
+ required:
+ - message
+ - status
type: object
responses.PhoneAPIKeyResponse:
properties:
data:
- $ref: "#/definitions/entities.PhoneAPIKey"
+ $ref: '#/definitions/entities.PhoneAPIKey'
message:
example: Request handled successfully
type: string
@@ -1047,15 +1344,15 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.PhoneAPIKeysResponse:
properties:
data:
items:
- $ref: "#/definitions/entities.PhoneAPIKey"
+ $ref: '#/definitions/entities.PhoneAPIKey'
type: array
message:
example: Request handled successfully
@@ -1064,14 +1361,14 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.PhoneResponse:
properties:
data:
- $ref: "#/definitions/entities.Phone"
+ $ref: '#/definitions/entities.Phone'
message:
example: Request handled successfully
type: string
@@ -1079,15 +1376,15 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.PhonesResponse:
properties:
data:
items:
- $ref: "#/definitions/entities.Phone"
+ $ref: '#/definitions/entities.Phone'
type: array
message:
example: Request handled successfully
@@ -1096,9 +1393,9 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.Unauthorized:
properties:
@@ -1112,9 +1409,9 @@ definitions:
example: error
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.UnprocessableEntity:
properties:
@@ -1131,14 +1428,14 @@ definitions:
example: error
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.UserResponse:
properties:
data:
- $ref: "#/definitions/entities.User"
+ $ref: '#/definitions/entities.User'
message:
example: Request handled successfully
type: string
@@ -1146,14 +1443,124 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
+ type: object
+ responses.UserSubscriptionPaymentsResponse:
+ properties:
+ data:
+ items:
+ properties:
+ attributes:
+ properties:
+ billing_reason:
+ type: string
+ card_brand:
+ type: string
+ card_last_four:
+ type: string
+ created_at:
+ type: string
+ currency:
+ type: string
+ currency_rate:
+ type: string
+ discount_total:
+ type: integer
+ discount_total_formatted:
+ type: string
+ discount_total_usd:
+ type: integer
+ refunded:
+ type: boolean
+ refunded_amount:
+ type: integer
+ refunded_amount_formatted:
+ type: string
+ refunded_amount_usd:
+ type: integer
+ refunded_at: {}
+ status:
+ type: string
+ status_formatted:
+ type: string
+ subtotal:
+ type: integer
+ subtotal_formatted:
+ type: string
+ subtotal_usd:
+ type: integer
+ tax:
+ type: integer
+ tax_formatted:
+ type: string
+ tax_inclusive:
+ type: boolean
+ tax_usd:
+ type: integer
+ total:
+ type: integer
+ total_formatted:
+ type: string
+ total_usd:
+ type: integer
+ updated_at:
+ type: string
+ required:
+ - billing_reason
+ - card_brand
+ - card_last_four
+ - created_at
+ - currency
+ - currency_rate
+ - discount_total
+ - discount_total_formatted
+ - discount_total_usd
+ - refunded
+ - refunded_amount
+ - refunded_amount_formatted
+ - refunded_amount_usd
+ - refunded_at
+ - status
+ - status_formatted
+ - subtotal
+ - subtotal_formatted
+ - subtotal_usd
+ - tax
+ - tax_formatted
+ - tax_inclusive
+ - tax_usd
+ - total
+ - total_formatted
+ - total_usd
+ - updated_at
+ type: object
+ id:
+ type: string
+ type:
+ type: string
+ required:
+ - attributes
+ - id
+ - type
+ type: object
+ type: array
+ message:
+ example: Request handled successfully
+ type: string
+ status:
+ example: success
+ type: string
+ required:
+ - data
+ - message
+ - status
type: object
responses.WebhookResponse:
properties:
data:
- $ref: "#/definitions/entities.Webhook"
+ $ref: '#/definitions/entities.Webhook'
message:
example: Request handled successfully
type: string
@@ -1161,15 +1568,15 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
responses.WebhooksResponse:
properties:
data:
items:
- $ref: "#/definitions/entities.Webhook"
+ $ref: '#/definitions/entities.Webhook'
type: array
message:
example: Request handled successfully
@@ -1178,17 +1585,16 @@ definitions:
example: success
type: string
required:
- - data
- - message
- - status
+ - data
+ - message
+ - status
type: object
host: api.httpsms.com
info:
contact:
email: support@httpsms.com
name: support@httpsms.com
- description:
- Use your Android phone to send and receive SMS messages via a simple
+ description: Use your Android phone to send and receive SMS messages via a simple
programmable API with end-to-end encryption.
license:
name: AGPL-3.0
@@ -1199,1848 +1605,2147 @@ paths:
/billing/usage:
get:
consumes:
- - application/json
- description:
- Get the summary of sent and received messages for a user in the
+ - application/json
+ description: Get the summary of sent and received messages for a user in the
current month
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.BillingUsageResponse"
+ $ref: '#/definitions/responses.BillingUsageResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get Billing Usage.
tags:
- - Billing
+ - Billing
/billing/usage-history:
get:
consumes:
- - application/json
- description:
- Get billing usage records of sent and received messages for a user
+ - application/json
+ description: Get billing usage records of sent and received messages for a user
in the past. It will be sorted by timestamp in descending order.
parameters:
- - description: number of heartbeats to skip
- in: query
- minimum: 0
- name: skip
- type: integer
- - description: number of heartbeats to return
- in: query
- maximum: 100
- minimum: 1
- name: limit
- type: integer
+ - description: number of heartbeats to skip
+ in: query
+ minimum: 0
+ name: skip
+ type: integer
+ - description: number of heartbeats to return
+ in: query
+ maximum: 100
+ minimum: 1
+ name: limit
+ type: integer
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.BillingUsagesResponse"
+ $ref: '#/definitions/responses.BillingUsagesResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get billing usage history.
tags:
- - Billing
+ - Billing
/bulk-messages:
+ get:
+ consumes:
+ - application/json
+ description: Fetches the last 10 bulk message order summaries for the authenticated
+ user showing counts per status.
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/responses.BulkMessagesResponse'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/responses.Unauthorized'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/responses.InternalServerError'
+ security:
+ - ApiKeyAuth: []
+ summary: List bulk message orders
+ tags:
+ - BulkSMS
post:
consumes:
- - multipart/form-data
- description: Sends bulk SMS messages to multiple users from a CSV or Excel file.
+ - multipart/form-data
+ description: Sends bulk SMS messages to multiple users based on our [CSV template](https://httpsms.com/templates/httpsms-bulk.csv)
+ or our [Excel template](https://httpsms.com/templates/httpsms-bulk.xlsx).
parameters:
- - description: The Excel or CSV file formatted according to the templates
- in: formData
- name: document
- required: true
- type: file
+ - description: The Excel or CSV file containing the messages to be sent.
+ in: formData
+ name: document
+ required: true
+ type: file
produces:
- - application/json
+ - application/json
responses:
"202":
description: Accepted
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Store bulk SMS file
tags:
- - BulkSMS
+ - BulkSMS
/discord-integrations:
get:
consumes:
- - application/json
+ - application/json
description: Get the discord integrations of a user
parameters:
- - description: number of discord integrations to skip
- in: query
- minimum: 0
- name: skip
- type: integer
- - description: filter discord integrations containing query
- in: query
- name: query
- type: string
- - description: number of discord integrations to return
- in: query
- maximum: 20
- minimum: 1
- name: limit
- type: integer
+ - description: number of discord integrations to skip
+ in: query
+ minimum: 0
+ name: skip
+ type: integer
+ - description: filter discord integrations containing query
+ in: query
+ name: query
+ type: string
+ - description: number of discord integrations to return
+ in: query
+ maximum: 20
+ minimum: 1
+ name: limit
+ type: integer
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.DiscordsResponse"
+ $ref: '#/definitions/responses.DiscordsResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get discord integrations of a user
tags:
- - DiscordIntegration
+ - DiscordIntegration
post:
consumes:
- - application/json
+ - application/json
description: Store a discord integration for the authenticated user
parameters:
- - description: Payload of the discord integration request
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.DiscordStore"
+ - description: Payload of the discord integration request
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.DiscordStore'
produces:
- - application/json
+ - application/json
responses:
"201":
description: Created
schema:
- $ref: "#/definitions/responses.DiscordResponse"
+ $ref: '#/definitions/responses.DiscordResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Store discord integration
tags:
- - DiscordIntegration
+ - DiscordIntegration
/discord-integrations/{discordID}:
delete:
consumes:
- - application/json
+ - application/json
description: Delete a discord integration for a user
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the discord integration
- in: path
- name: discordID
- required: true
- type: string
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the discord integration
+ in: path
+ name: discordID
+ required: true
+ type: string
produces:
- - application/json
+ - application/json
responses:
"204":
description: No Content
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Delete discord integration
tags:
- - Webhooks
+ - Webhooks
put:
consumes:
- - application/json
+ - application/json
description: Update a discord integration for the currently authenticated user
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the discord integration
- in: path
- name: discordID
- required: true
- type: string
- - description: Payload of discord integration to update
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.DiscordUpdate"
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the discord integration
+ in: path
+ name: discordID
+ required: true
+ type: string
+ - description: Payload of discord integration to update
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.DiscordUpdate'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.DiscordResponse"
+ $ref: '#/definitions/responses.DiscordResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Update a discord integration
tags:
- - DiscordIntegration
+ - DiscordIntegration
/discord/event:
post:
consumes:
- - application/json
+ - application/json
description: Publish a discord event to the registered listeners
produces:
- - application/json
+ - application/json
responses:
"204":
description: No Content
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
summary: Consume a discord event
tags:
- - Discord
+ - Discord
/heartbeats:
get:
consumes:
- - application/json
- description:
- Get the last time a phone number requested for outstanding messages.
+ - application/json
+ description: Get the last time a phone number requested for outstanding messages.
It will be sorted by timestamp in descending order.
parameters:
- - default: "+18005550199"
- description: the owner's phone number
- in: query
- name: owner
- required: true
- type: string
- - description: number of heartbeats to skip
- in: query
- minimum: 0
- name: skip
- type: integer
- - description: filter containing query
- in: query
- name: query
- type: string
- - description: number of heartbeats to return
- in: query
- maximum: 20
- minimum: 1
- name: limit
- type: integer
+ - default: "+18005550199"
+ description: the owner's phone number
+ in: query
+ name: owner
+ required: true
+ type: string
+ - description: number of heartbeats to skip
+ in: query
+ minimum: 0
+ name: skip
+ type: integer
+ - description: filter containing query
+ in: query
+ name: query
+ type: string
+ - description: number of heartbeats to return
+ in: query
+ maximum: 20
+ minimum: 1
+ name: limit
+ type: integer
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.HeartbeatsResponse"
+ $ref: '#/definitions/responses.HeartbeatsResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get heartbeats of an owner phone number
tags:
- - Heartbeats
+ - Heartbeats
post:
consumes:
- - application/json
- description:
- Store the heartbeat to make notify that a phone number is still
+ - application/json
+ description: Store the heartbeat to make notify that a phone number is still
active
parameters:
- - description: Payload of the heartbeat request
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.HeartbeatStore"
+ - description: Payload of the heartbeat request
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.HeartbeatStore'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.HeartbeatResponse"
+ $ref: '#/definitions/responses.HeartbeatResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Register heartbeat of an owner phone number
tags:
- - Heartbeats
+ - Heartbeats
/integration/3cx/messages:
post:
consumes:
- - application/json
+ - application/json
description: Sends an SMS message from the 3CX platform
produces:
- - application/json
+ - application/json
responses:
"204":
description: No Content
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
summary: Sends a 3CX SMS message
tags:
- - 3CXIntegration
- /lemonsqueezy/event:
- post:
- consumes:
- - application/json
- description: Publish a lemonsqueezy event to the registered listeners
- produces:
- - application/json
- responses:
- "204":
- description: No Content
- schema:
- $ref: "#/definitions/responses.NoContent"
- "400":
- description: Bad Request
- schema:
- $ref: "#/definitions/responses.BadRequest"
- "401":
- description: Unauthorized
- schema:
- $ref: "#/definitions/responses.Unauthorized"
- "422":
- description: Unprocessable Entity
- schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
- "500":
- description: Internal Server Error
- schema:
- $ref: "#/definitions/responses.InternalServerError"
- summary: Consume a lemonsqueezy event
- tags:
- - Lemonsqueezy
+ - 3CXIntegration
/message-threads:
get:
consumes:
- - application/json
- description:
- Get list of contacts which a phone number has communicated with
+ - application/json
+ description: Get list of contacts which a phone number has communicated with
(threads). It will be sorted by timestamp in descending order.
parameters:
- - default: "+18005550199"
- description: owner phone number
- in: query
- name: owner
- required: true
- type: string
- - description: number of messages to skip
- in: query
- minimum: 0
- name: skip
- type: integer
- - description: filter message threads containing query
- in: query
- name: query
- type: string
- - description: number of messages to return
- in: query
- maximum: 20
- minimum: 1
- name: limit
- type: integer
+ - default: "+18005550199"
+ description: owner phone number
+ in: query
+ name: owner
+ required: true
+ type: string
+ - description: number of messages to skip
+ in: query
+ minimum: 0
+ name: skip
+ type: integer
+ - description: filter message threads containing query
+ in: query
+ name: query
+ type: string
+ - description: number of messages to return
+ in: query
+ maximum: 20
+ minimum: 1
+ name: limit
+ type: integer
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.MessageThreadsResponse"
+ $ref: '#/definitions/responses.MessageThreadsResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get message threads for a phone number
tags:
- - MessageThreads
+ - MessageThreads
/message-threads/{messageThreadID}:
delete:
consumes:
- - application/json
- description:
- Delete a message thread from the database and also deletes all
+ - application/json
+ description: Delete a message thread from the database and also deletes all
the messages in the thread.
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the message thread
- in: path
- name: messageThreadID
- required: true
- type: string
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the message thread
+ in: path
+ name: messageThreadID
+ required: true
+ type: string
produces:
- - application/json
+ - application/json
responses:
"204":
description: No Content
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"404":
description: Not Found
schema:
- $ref: "#/definitions/responses.NotFound"
+ $ref: '#/definitions/responses.NotFound'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Delete a message thread from the database.
tags:
- - MessageThreads
+ - MessageThreads
put:
consumes:
- - application/json
+ - application/json
description: Updates the details of a message thread
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the message thread
- in: path
- name: messageThreadID
- required: true
- type: string
- - description: Payload of message thread details to update
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.MessageThreadUpdate"
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the message thread
+ in: path
+ name: messageThreadID
+ required: true
+ type: string
+ - description: Payload of message thread details to update
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.MessageThreadUpdate'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.PhoneResponse"
+ $ref: '#/definitions/responses.MessageThreadResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/responses.NotFound'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Update a message thread
tags:
- - MessageThreads
+ - MessageThreads
/messages:
get:
consumes:
- - application/json
- description:
- Get list of messages which are sent between 2 phone numbers. It
+ - application/json
+ description: Get list of messages which are sent between 2 phone numbers. It
will be sorted by timestamp in descending order.
parameters:
- - default: "+18005550199"
- description: the owner's phone number
- in: query
- name: owner
- required: true
- type: string
- - default: "+18005550100"
- description: the contact's phone number
- in: query
- name: contact
- required: true
- type: string
- - description: number of messages to skip
- in: query
- minimum: 0
- name: skip
- type: integer
- - description: filter messages containing query
- in: query
- name: query
- type: string
- - description: number of messages to return
- in: query
- maximum: 20
- minimum: 1
- name: limit
- type: integer
+ - default: "+18005550199"
+ description: the owner's phone number
+ in: query
+ name: owner
+ required: true
+ type: string
+ - default: "+18005550100"
+ description: the contact's phone number
+ in: query
+ name: contact
+ required: true
+ type: string
+ - description: number of messages to skip
+ in: query
+ minimum: 0
+ name: skip
+ type: integer
+ - description: filter messages containing query
+ in: query
+ name: query
+ type: string
+ - description: number of messages to return
+ in: query
+ maximum: 20
+ minimum: 1
+ name: limit
+ type: integer
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.MessagesResponse"
+ $ref: '#/definitions/responses.MessagesResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get messages which are sent between 2 phone numbers
tags:
- - Messages
+ - Messages
/messages/{messageID}:
delete:
consumes:
- - application/json
- description:
- Delete a message from the database and removes the message content
+ - application/json
+ description: Delete a message from the database and removes the message content
from the list of threads.
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the message
- in: path
- name: messageID
- required: true
- type: string
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the message
+ in: path
+ name: messageID
+ required: true
+ type: string
produces:
- - application/json
+ - application/json
responses:
"204":
description: No Content
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"404":
description: Not Found
schema:
- $ref: "#/definitions/responses.NotFound"
+ $ref: '#/definitions/responses.NotFound'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Delete a message from the database.
tags:
- - Messages
+ - Messages
+ get:
+ consumes:
+ - application/json
+ description: Get a message from the database by the message ID.
+ parameters:
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the message
+ in: path
+ name: messageID
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "204":
+ description: No Content
+ schema:
+ $ref: '#/definitions/responses.MessageResponse'
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/responses.BadRequest'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/responses.Unauthorized'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/responses.NotFound'
+ "422":
+ description: Unprocessable Entity
+ schema:
+ $ref: '#/definitions/responses.UnprocessableEntity'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/responses.InternalServerError'
+ security:
+ - ApiKeyAuth: []
+ summary: Get a message from the database.
+ tags:
+ - Messages
/messages/{messageID}/events:
post:
consumes:
- - application/json
- description:
- Use this endpoint to send events for a message when it is failed,
+ - application/json
+ description: Use this endpoint to send events for a message when it is failed,
sent or delivered by the mobile phone.
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the message
- in: path
- name: messageID
- required: true
- type: string
- - description: Payload of the event emitted.
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.MessageEvent"
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the message
+ in: path
+ name: messageID
+ required: true
+ type: string
+ - description: Payload of the event emitted.
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.MessageEvent'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.MessageResponse"
+ $ref: '#/definitions/responses.MessageResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"404":
description: Not Found
schema:
- $ref: "#/definitions/responses.NotFound"
+ $ref: '#/definitions/responses.NotFound'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Upsert an event for a message on the mobile phone
tags:
- - Messages
+ - Messages
/messages/bulk-send:
post:
consumes:
- - application/json
+ - application/json
description: Add bulk SMS messages to be sent by the android phone
parameters:
- - description: Bulk send message request payload
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.MessageBulkSend"
+ - description: Bulk send message request payload
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.MessageBulkSend'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
items:
- $ref: "#/definitions/responses.MessagesResponse"
+ $ref: '#/definitions/responses.MessagesResponse'
type: array
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Send bulk SMS messages
tags:
- - Messages
+ - Messages
/messages/calls/missed:
post:
consumes:
- - application/json
- description:
- This endpoint is called by the httpSMS android app to register
+ - application/json
+ description: This endpoint is called by the httpSMS android app to register
a missed call event on the mobile phone.
parameters:
- - description: Payload of the missed call event.
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.MessageCallMissed"
+ - description: Payload of the missed call event.
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.MessageCallMissed'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.MessageResponse"
+ $ref: '#/definitions/responses.MessageResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"404":
description: Not Found
schema:
- $ref: "#/definitions/responses.NotFound"
+ $ref: '#/definitions/responses.NotFound'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Register a missed call event on the mobile phone
tags:
- - Messages
+ - Messages
/messages/outstanding:
get:
consumes:
- - application/json
+ - application/json
description: Get an outstanding message to be sent by an android phone
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703cb
- description: The ID of the message
- in: query
- name: message_id
- required: true
- type: string
+ - default: 32343a19-da5e-4b1b-a767-3298a73703cb
+ description: The ID of the message
+ in: query
+ name: message_id
+ required: true
+ type: string
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.MessageResponse"
+ $ref: '#/definitions/responses.MessageResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get an outstanding message
tags:
- - Messages
+ - Messages
/messages/receive:
post:
consumes:
- - application/json
+ - application/json
description: Add a new message received from a mobile phone
parameters:
- - description: Received message request payload
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.MessageReceive"
+ - description: Received message request payload
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.MessageReceive'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.MessageResponse"
+ $ref: '#/definitions/responses.MessageResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Receive a new SMS message from a mobile phone
tags:
- - Messages
+ - Messages
/messages/search:
get:
consumes:
- - application/json
- description:
- This returns the list of all messages based on the filter criteria
+ - application/json
+ description: This returns the list of all messages based on the filter criteria
including missed calls
parameters:
- - description: Cloudflare turnstile token https://www.cloudflare.com/en-gb/application-services/products/turnstile/
- in: header
- name: token
- required: true
- type: string
- - default: +18005550199,+18005550100
- description: the owner's phone numbers
- in: query
- name: owners
- required: true
- type: string
- - description: number of messages to skip
- in: query
- minimum: 0
- name: skip
- type: integer
- - description: filter messages containing query
- in: query
- name: query
- type: string
- - description: number of messages to return
- in: query
- maximum: 200
- minimum: 1
- name: limit
- type: integer
+ - description: Cloudflare turnstile token https://www.cloudflare.com/en-gb/application-services/products/turnstile/
+ in: header
+ name: token
+ required: true
+ type: string
+ - default: +18005550199,+18005550100
+ description: the owner's phone numbers
+ in: query
+ name: owners
+ required: true
+ type: string
+ - description: number of messages to skip
+ in: query
+ minimum: 0
+ name: skip
+ type: integer
+ - description: filter messages containing query
+ in: query
+ name: query
+ type: string
+ - description: number of messages to return
+ in: query
+ maximum: 200
+ minimum: 1
+ name: limit
+ type: integer
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.MessagesResponse"
+ $ref: '#/definitions/responses.MessagesResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Search all messages of a user
tags:
- - Messages
+ - Messages
/messages/send:
post:
consumes:
- - application/json
- description: Add a new SMS message to be sent by the android phone
+ - application/json
+ description: Add a new SMS message to be sent by your Android phone
parameters:
- - description: PostSend message request payload
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.MessageSend"
+ - description: Send message request payload
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.MessageSend'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.MessageResponse"
+ $ref: '#/definitions/responses.MessageResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
- summary: Send a new SMS message
+ - ApiKeyAuth: []
+ summary: Send an SMS message
tags:
- - Messages
+ - Messages
/phone-api-keys:
get:
consumes:
- - application/json
- description:
- Get list phone API keys which a user has registered on the httpSMS
+ - application/json
+ description: Get list phone API keys which a user has registered on the httpSMS
application
parameters:
- - description: number of phone api keys to skip
- in: query
- minimum: 0
- name: skip
- type: integer
- - description: filter phone api keys with name containing query
- in: query
- name: query
- type: string
- - description: number of phone api keys to return
- in: query
- maximum: 100
- minimum: 1
- name: limit
- type: integer
+ - description: number of phone api keys to skip
+ in: query
+ minimum: 0
+ name: skip
+ type: integer
+ - description: filter phone api keys with name containing query
+ in: query
+ name: query
+ type: string
+ - description: number of phone api keys to return
+ in: query
+ maximum: 100
+ minimum: 1
+ name: limit
+ type: integer
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.PhoneAPIKeysResponse"
+ $ref: '#/definitions/responses.PhoneAPIKeysResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get the phone API keys of a user
tags:
- - PhoneAPIKeys
+ - PhoneAPIKeys
post:
consumes:
- - application/json
- description:
- Creates a new phone API key which can be used to log in to the
+ - application/json
+ description: Creates a new phone API key which can be used to log in to the
httpSMS app on your Android phone
parameters:
- - description: Payload of new phone API key.
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.PhoneAPIKeyStoreRequest"
+ - description: Payload of new phone API key.
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.PhoneAPIKeyStoreRequest'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.PhoneAPIKeyResponse"
+ $ref: '#/definitions/responses.PhoneAPIKeyResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
+ "402":
+ description: Payment Required
+ schema:
+ $ref: '#/definitions/responses.PaymentRequired'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Store phone API key
tags:
- - PhoneAPIKeys
+ - PhoneAPIKeys
/phone-api-keys/{phoneAPIKeyID}:
delete:
consumes:
- - application/json
- description:
- Delete a phone API Key from the database and cannot be used for
+ - application/json
+ description: Delete a phone API Key from the database and cannot be used for
authentication anymore.
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the phone API key
- in: path
- name: phoneAPIKeyID
- required: true
- type: string
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the phone API key
+ in: path
+ name: phoneAPIKeyID
+ required: true
+ type: string
produces:
- - application/json
+ - application/json
responses:
"204":
description: No Content
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"404":
description: Not Found
schema:
- $ref: "#/definitions/responses.NotFound"
+ $ref: '#/definitions/responses.NotFound'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Delete a phone API key from the database.
tags:
- - PhoneAPIKeys
+ - PhoneAPIKeys
/phone-api-keys/{phoneAPIKeyID}/phones/{phoneID}:
delete:
consumes:
- - application/json
- description:
- You will need to login again to the httpSMS app on your Android
+ - application/json
+ description: You will need to login again to the httpSMS app on your Android
phone with a new phone API key.
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the phone API key
- in: path
- name: phoneAPIKeyID
- required: true
- type: string
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the phone
- in: path
- name: phoneID
- required: true
- type: string
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the phone API key
+ in: path
+ name: phoneAPIKeyID
+ required: true
+ type: string
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the phone
+ in: path
+ name: phoneID
+ required: true
+ type: string
produces:
- - application/json
+ - application/json
responses:
"204":
description: No Content
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"404":
description: Not Found
schema:
- $ref: "#/definitions/responses.NotFound"
+ $ref: '#/definitions/responses.NotFound'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Remove the association of a phone from the phone API key.
tags:
- - PhoneAPIKeys
+ - PhoneAPIKeys
/phones:
get:
consumes:
- - application/json
- description:
- Get list of phones which a user has registered on the http sms
+ - application/json
+ description: Get list of phones which a user has registered on the http sms
application
parameters:
- - description: number of heartbeats to skip
- in: query
- minimum: 0
- name: skip
- type: integer
- - description: filter phones containing query
- in: query
- name: query
- type: string
- - description: number of phones to return
- in: query
- maximum: 20
- minimum: 1
- name: limit
- type: integer
+ - description: number of heartbeats to skip
+ in: query
+ minimum: 0
+ name: skip
+ type: integer
+ - description: filter phones containing query
+ in: query
+ name: query
+ type: string
+ - description: number of phones to return
+ in: query
+ maximum: 20
+ minimum: 1
+ name: limit
+ type: integer
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.PhonesResponse"
+ $ref: '#/definitions/responses.PhonesResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get phones of a user
tags:
- - Phones
+ - Phones
put:
consumes:
- - application/json
- description:
- Updates properties of a user's phone. If the phone with this number
+ - application/json
+ description: Updates properties of a user's phone. If the phone with this number
does not exist, a new one will be created. Think of this method like an 'upsert'
parameters:
- - description: Payload of new phone number.
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.PhoneUpsert"
+ - description: Payload of new phone number.
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.PhoneUpsert'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.PhoneResponse"
+ $ref: '#/definitions/responses.PhoneResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Upsert Phone
tags:
- - Phones
+ - Phones
/phones/{phoneID}:
delete:
consumes:
- - application/json
+ - application/json
description: Delete a phone that has been sored in the database
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the phone
- in: path
- name: phoneID
- required: true
- type: string
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the phone
+ in: path
+ name: phoneID
+ required: true
+ type: string
produces:
- - application/json
+ - application/json
responses:
"204":
description: No Content
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Delete Phone
tags:
- - Phones
+ - Phones
/phones/fcm-token:
put:
consumes:
- - application/json
- description:
- Updates the FCM token of a phone. If the phone with this number
+ - application/json
+ description: Updates the FCM token of a phone. If the phone with this number
does not exist, a new one will be created. Think of this method like an 'upsert'
parameters:
- - description: Payload of new FCM token.
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.PhoneFCMToken"
+ - description: Payload of new FCM token.
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.PhoneFCMToken'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.PhoneResponse"
+ $ref: '#/definitions/responses.PhoneResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Upserts the FCM token of a phone
tags:
- - Phones
+ - Phones
+ /send-schedules:
+ get:
+ description: List all send schedules owned by the authenticated user.
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/responses.MessageSendSchedulesResponse'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/responses.Unauthorized'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/responses.InternalServerError'
+ security:
+ - ApiKeyAuth: []
+ summary: List send schedules
+ tags:
+ - SendSchedules
+ post:
+ consumes:
+ - application/json
+ description: Create a new send schedule for the authenticated user.
+ parameters:
+ - description: Payload of new send schedule.
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.MessageSendScheduleStore'
+ produces:
+ - application/json
+ responses:
+ "201":
+ description: Created
+ schema:
+ $ref: '#/definitions/responses.MessageSendScheduleResponse'
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/responses.BadRequest'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/responses.Unauthorized'
+ "402":
+ description: Payment Required
+ schema:
+ $ref: '#/definitions/responses.PaymentRequired'
+ "422":
+ description: Unprocessable Entity
+ schema:
+ $ref: '#/definitions/responses.UnprocessableEntity'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/responses.InternalServerError'
+ security:
+ - ApiKeyAuth: []
+ summary: Create send schedule
+ tags:
+ - SendSchedules
+ /send-schedules/{scheduleID}:
+ delete:
+ description: Delete a send schedule owned by the authenticated user.
+ parameters:
+ - description: Schedule ID
+ in: path
+ name: scheduleID
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "204":
+ description: No Content
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/responses.BadRequest'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/responses.Unauthorized'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/responses.NotFound'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/responses.InternalServerError'
+ security:
+ - ApiKeyAuth: []
+ summary: Delete send schedule
+ tags:
+ - SendSchedules
+ put:
+ consumes:
+ - application/json
+ description: Update a send schedule owned by the authenticated user.
+ parameters:
+ - description: Schedule ID
+ in: path
+ name: scheduleID
+ required: true
+ type: string
+ - description: Payload of updated send schedule.
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.MessageSendScheduleStore'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/responses.MessageSendScheduleResponse'
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/responses.BadRequest'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/responses.Unauthorized'
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/responses.NotFound'
+ "422":
+ description: Unprocessable Entity
+ schema:
+ $ref: '#/definitions/responses.UnprocessableEntity'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/responses.InternalServerError'
+ security:
+ - ApiKeyAuth: []
+ summary: Update send schedule
+ tags:
+ - SendSchedules
/users/{userID}/api-keys:
delete:
consumes:
- - application/json
+ - application/json
description: Rotate the user's API key in case the current API Key is compromised
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the user to update
- in: path
- name: userID
- required: true
- type: string
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the user to update
+ in: path
+ name: userID
+ required: true
+ type: string
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.UserResponse"
+ $ref: '#/definitions/responses.UserResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Rotate the user's API Key
tags:
- - Users
+ - Users
/users/{userID}/notifications:
put:
consumes:
- - application/json
+ - application/json
description: Update the email notification settings for a user
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the user to update
- in: path
- name: userID
- required: true
- type: string
- - description: User notification details to update
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.UserNotificationUpdate"
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the user to update
+ in: path
+ name: userID
+ required: true
+ type: string
+ - description: User notification details to update
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.UserNotificationUpdate'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.UserResponse"
+ $ref: '#/definitions/responses.UserResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Update notification settings
tags:
- - Users
+ - Users
/users/me:
delete:
consumes:
- - application/json
- description:
- Deletes the currently authenticated user together with all their
+ - application/json
+ description: Deletes the currently authenticated user together with all their
data.
produces:
- - application/json
+ - application/json
responses:
"201":
description: Created
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Delete a user
tags:
- - Users
+ - Users
get:
consumes:
- - application/json
+ - application/json
description: Get details of the currently authenticated user
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.UserResponse"
+ $ref: '#/definitions/responses.UserResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get current user
tags:
- - Users
+ - Users
put:
consumes:
- - application/json
+ - application/json
description: Updates the details of the currently authenticated user
parameters:
- - description: Payload of user details to update
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.UserUpdate"
+ - description: Payload of user details to update
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.UserUpdate'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.PhoneResponse"
+ $ref: '#/definitions/responses.PhoneResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Update a user
tags:
- - Users
+ - Users
/users/subscription:
delete:
description: Cancel the subscription of the authenticated user.
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Cancel the user's subscription
tags:
- - Users
+ - Users
/users/subscription-update-url:
get:
description: Fetches the subscription URL of the authenticated user.
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.OkString"
+ $ref: '#/definitions/responses.OkString'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Currently authenticated user subscription update URL
tags:
- - Users
+ - Users
+ /users/subscription/invoices/{subscriptionInvoiceID}:
+ post:
+ consumes:
+ - application/json
+ description: Generates a new invoice PDF file for the given subscription payment
+ with given parameters.
+ parameters:
+ - description: Generate subscription payment invoice parameters
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.UserPaymentInvoice'
+ - description: ID of the subscription invoice to generate the PDF for
+ in: path
+ name: subscriptionInvoiceID
+ required: true
+ type: string
+ produces:
+ - application/pdf
+ responses:
+ "200":
+ description: OK
+ schema:
+ type: file
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/responses.BadRequest'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/responses.Unauthorized'
+ "422":
+ description: Unprocessable Entity
+ schema:
+ $ref: '#/definitions/responses.UnprocessableEntity'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/responses.InternalServerError'
+ security:
+ - ApiKeyAuth: []
+ summary: Generate a subscription payment invoice
+ tags:
+ - Users
+ /users/subscription/payments:
+ get:
+ consumes:
+ - application/json
+ description: Subscription payments are generated throughout the lifecycle of
+ a subscription, typically there is one at the time of purchase and then one
+ for each renewal.
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/responses.UserSubscriptionPaymentsResponse'
+ "400":
+ description: Bad Request
+ schema:
+ $ref: '#/definitions/responses.BadRequest'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/responses.Unauthorized'
+ "422":
+ description: Unprocessable Entity
+ schema:
+ $ref: '#/definitions/responses.UnprocessableEntity'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/responses.InternalServerError'
+ security:
+ - ApiKeyAuth: []
+ summary: Get the last 10 subscription payments.
+ tags:
+ - Users
+ /v1/attachments/{userID}/{messageID}/{attachmentIndex}/{filename}:
+ get:
+ description: Download an MMS attachment by its path components
+ parameters:
+ - description: User ID
+ in: path
+ name: userID
+ required: true
+ type: string
+ - description: Message ID
+ in: path
+ name: messageID
+ required: true
+ type: string
+ - description: Attachment index
+ in: path
+ name: attachmentIndex
+ required: true
+ type: string
+ - description: Filename with extension
+ in: path
+ name: filename
+ required: true
+ type: string
+ produces:
+ - application/octet-stream
+ responses:
+ "200":
+ description: OK
+ schema:
+ type: file
+ "404":
+ description: Not Found
+ schema:
+ $ref: '#/definitions/responses.NotFound'
+ "500":
+ description: Internal Server Error
+ schema:
+ $ref: '#/definitions/responses.InternalServerError'
+ summary: Download a message attachment
+ tags:
+ - Attachments
/webhooks:
get:
consumes:
- - application/json
+ - application/json
description: Get the webhooks of a user
parameters:
- - description: number of webhooks to skip
- in: query
- minimum: 0
- name: skip
- type: integer
- - description: filter webhooks containing query
- in: query
- name: query
- type: string
- - description: number of webhooks to return
- in: query
- maximum: 20
- minimum: 1
- name: limit
- type: integer
+ - description: number of webhooks to skip
+ in: query
+ minimum: 0
+ name: skip
+ type: integer
+ - description: filter webhooks containing query
+ in: query
+ name: query
+ type: string
+ - description: number of webhooks to return
+ in: query
+ maximum: 20
+ minimum: 1
+ name: limit
+ type: integer
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.WebhooksResponse"
+ $ref: '#/definitions/responses.WebhooksResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Get webhooks of a user
tags:
- - Webhooks
+ - Webhooks
post:
consumes:
- - application/json
+ - application/json
description: Store a webhook for the authenticated user
parameters:
- - description: Payload of the webhook request
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.WebhookStore"
+ - description: Payload of the webhook request
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.WebhookStore'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.WebhookResponse"
+ $ref: '#/definitions/responses.WebhookResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Store a webhook
tags:
- - Webhooks
+ - Webhooks
/webhooks/{webhookID}:
delete:
consumes:
- - application/json
+ - application/json
description: Delete a webhook for a user
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the webhook
- in: path
- name: webhookID
- required: true
- type: string
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the webhook
+ in: path
+ name: webhookID
+ required: true
+ type: string
produces:
- - application/json
+ - application/json
responses:
"204":
description: No Content
schema:
- $ref: "#/definitions/responses.NoContent"
+ $ref: '#/definitions/responses.NoContent'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Delete webhook
tags:
- - Webhooks
+ - Webhooks
put:
consumes:
- - application/json
+ - application/json
description: Update a webhook for the currently authenticated user
parameters:
- - default: 32343a19-da5e-4b1b-a767-3298a73703ca
- description: ID of the webhook
- in: path
- name: webhookID
- required: true
- type: string
- - description: Payload of webhook details to update
- in: body
- name: payload
- required: true
- schema:
- $ref: "#/definitions/requests.WebhookUpdate"
+ - default: 32343a19-da5e-4b1b-a767-3298a73703ca
+ description: ID of the webhook
+ in: path
+ name: webhookID
+ required: true
+ type: string
+ - description: Payload of webhook details to update
+ in: body
+ name: payload
+ required: true
+ schema:
+ $ref: '#/definitions/requests.WebhookUpdate'
produces:
- - application/json
+ - application/json
responses:
"200":
description: OK
schema:
- $ref: "#/definitions/responses.WebhookResponse"
+ $ref: '#/definitions/responses.WebhookResponse'
"400":
description: Bad Request
schema:
- $ref: "#/definitions/responses.BadRequest"
+ $ref: '#/definitions/responses.BadRequest'
"401":
description: Unauthorized
schema:
- $ref: "#/definitions/responses.Unauthorized"
+ $ref: '#/definitions/responses.Unauthorized'
"422":
description: Unprocessable Entity
schema:
- $ref: "#/definitions/responses.UnprocessableEntity"
+ $ref: '#/definitions/responses.UnprocessableEntity'
"500":
description: Internal Server Error
schema:
- $ref: "#/definitions/responses.InternalServerError"
+ $ref: '#/definitions/responses.InternalServerError'
security:
- - ApiKeyAuth: []
+ - ApiKeyAuth: []
summary: Update a webhook
tags:
- - Webhooks
+ - Webhooks
schemes:
- - https
+- https
securityDefinitions:
ApiKeyAuth:
in: header
diff --git a/api/go.mod b/api/go.mod
index 91454eef8..6e3d5bdb0 100644
--- a/api/go.mod
+++ b/api/go.mod
@@ -1,191 +1,214 @@
module github.com/NdoleStudio/httpsms
-go 1.24.2
-
-toolchain go1.24.3
+go 1.25.8
require (
- cloud.google.com/go/cloudtasks v1.13.7
+ cloud.google.com/go/cloudtasks v1.19.0
+ cloud.google.com/go/compute/metadata v0.9.0
+ cloud.google.com/go/storage v1.64.0
firebase.google.com/go v3.13.0+incompatible
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.30.0
- github.com/NdoleStudio/go-otelroundtripper v0.0.13
- github.com/NdoleStudio/lemonsqueezy-go v1.2.4
- github.com/NdoleStudio/plunk-go v0.0.1
- github.com/avast/retry-go v3.0.0+incompatible
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.59.0
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.35.0
+ github.com/NdoleStudio/go-otelroundtripper v0.0.15
+ github.com/NdoleStudio/lemonsqueezy-go v1.3.2
+ github.com/NdoleStudio/plunk-go v0.0.2
+ github.com/NdoleStudio/stacktrace v1.1.0
+ github.com/avast/retry-go/v5 v5.0.0
+ github.com/axiomhq/axiom-go v0.32.0
github.com/carlmjohnson/requests v0.25.1
github.com/cloudevents/sdk-go/v2 v2.16.2
- github.com/cockroachdb/cockroach-go/v2 v2.4.2
+ github.com/cockroachdb/cockroach-go/v2 v2.4.3
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
- github.com/dgraph-io/ristretto/v2 v2.3.0
+ github.com/dgraph-io/ristretto/v2 v2.4.2
github.com/dustin/go-humanize v1.0.1
- github.com/gofiber/contrib/otelfiber v1.0.10
- github.com/gofiber/fiber/v2 v2.52.10
- github.com/gofiber/swagger v1.1.1
- github.com/golang-jwt/jwt/v5 v5.3.0
+ github.com/gertd/go-pluralize v0.2.1
+ github.com/go-hermes/hermes/v2 v2.6.2
+ github.com/gofiber/contrib/v3/otel v1.2.2
+ github.com/gofiber/contrib/v3/swaggo v1.0.8
+ github.com/gofiber/fiber/v3 v3.4.0
+ github.com/golang-jwt/jwt/v5 v5.3.1
github.com/google/uuid v1.6.0
github.com/hashicorp/go-retryablehttp v0.7.8
github.com/hirosassa/zerodriver v0.1.4
- github.com/jaswdr/faker/v2 v2.9.0
- github.com/jinzhu/now v1.1.5
+ github.com/jaswdr/faker/v2 v2.9.1
github.com/joho/godotenv v1.5.1
github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible
github.com/jszwec/csvutil v1.10.0
- github.com/lib/pq v1.10.9
- github.com/matcornic/hermes v1.3.0
- github.com/nyaruka/phonenumbers v1.6.7
- github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177
+ github.com/lib/pq v1.12.3
+ github.com/nyaruka/phonenumbers v1.8.1
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/pkg/errors v0.9.1
github.com/pusher/pusher-http-go/v5 v5.1.1
- github.com/redis/go-redis/extra/redisotel/v9 v9.17.2
- github.com/redis/go-redis/v9 v9.17.2
- github.com/rs/zerolog v1.34.0
+ github.com/redis/go-redis/extra/redisotel/v9 v9.21.0
+ github.com/redis/go-redis/v9 v9.21.0
+ github.com/rs/zerolog v1.35.1
github.com/stretchr/testify v1.11.1
github.com/swaggo/swag v1.16.6
github.com/thedevsaddam/govalidator v1.9.10
- github.com/uptrace/uptrace-go v1.38.0
- github.com/xuri/excelize/v2 v2.10.0
- go.opentelemetry.io/otel v1.38.0
- go.opentelemetry.io/otel/metric v1.38.0
- go.opentelemetry.io/otel/sdk v1.38.0
- go.opentelemetry.io/otel/sdk/metric v1.38.0
- go.opentelemetry.io/otel/trace v1.38.0
- google.golang.org/api v0.256.0
- google.golang.org/protobuf v1.36.10
+ github.com/uptrace/uptrace-go v1.43.0
+ github.com/xuri/excelize/v2 v2.11.0
+ go.mongodb.org/mongo-driver/v2 v2.8.0
+ go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/v2/mongo/otelmongo v0.0.0-20260624193928-df9c7a836708
+ go.opentelemetry.io/otel v1.44.0
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.44.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0
+ go.opentelemetry.io/otel/metric v1.44.0
+ go.opentelemetry.io/otel/sdk v1.44.0
+ go.opentelemetry.io/otel/sdk/metric v1.44.0
+ go.opentelemetry.io/otel/trace v1.44.0
+ golang.org/x/sync v0.22.0
+ google.golang.org/api v0.287.1
+ google.golang.org/protobuf v1.36.11
gorm.io/driver/postgres v1.6.0
- gorm.io/gorm v1.31.1
+ gorm.io/gorm v1.31.2
gorm.io/plugin/opentelemetry v0.1.16
)
require (
- cel.dev/expr v0.24.0 // indirect
+ github.com/Masterminds/semver/v3 v3.5.0 // indirect
+ github.com/Masterminds/sprig/v3 v3.3.0 // indirect
+ github.com/inbucket/html2text v1.0.0 // indirect
+ github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect
+ github.com/olekukonko/errors v1.3.0 // indirect
+ github.com/olekukonko/ll v0.1.8 // indirect
+ github.com/sirupsen/logrus v1.9.4 // indirect
+ github.com/spf13/cast v1.10.0 // indirect
+ github.com/yuin/goldmark v1.8.2 // indirect
+)
+
+require (
+ cel.dev/expr v0.25.2 // indirect
cloud.google.com/go v0.123.0 // indirect
- cloud.google.com/go/auth v0.17.0 // indirect
+ cloud.google.com/go/auth v0.20.0 // indirect
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
- cloud.google.com/go/compute/metadata v0.9.0 // indirect
- cloud.google.com/go/firestore v1.19.0 // indirect
- cloud.google.com/go/iam v1.5.3 // indirect
- cloud.google.com/go/longrunning v0.7.0 // indirect
- cloud.google.com/go/monitoring v1.24.3 // indirect
- cloud.google.com/go/storage v1.57.0 // indirect
- cloud.google.com/go/trace v1.11.7 // indirect
+ cloud.google.com/go/firestore v1.22.0 // indirect
+ cloud.google.com/go/iam v1.11.0 // indirect
+ cloud.google.com/go/longrunning v1.2.0 // indirect
+ cloud.google.com/go/monitoring v1.29.0 // indirect
+ cloud.google.com/go/trace v1.16.0 // indirect
dario.cat/mergo v1.0.2 // indirect
- filippo.io/edwards25519 v1.1.0 // indirect
- github.com/ClickHouse/ch-go v0.69.0 // indirect
- github.com/ClickHouse/clickhouse-go/v2 v2.40.3 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 // indirect
+ filippo.io/edwards25519 v1.2.0 // indirect
+ github.com/ClickHouse/ch-go v0.72.0 // indirect
+ github.com/ClickHouse/clickhouse-go/v2 v2.46.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.59.0 // indirect
github.com/KyleBanks/depth v1.2.1 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
- github.com/Masterminds/semver v1.5.0 // indirect
- github.com/Masterminds/sprig v2.22.0+incompatible // indirect
- github.com/PuerkitoBio/goquery v1.10.3 // indirect
- github.com/andybalholm/brotli v1.2.0 // indirect
- github.com/andybalholm/cascadia v1.3.3 // indirect
+ github.com/PuerkitoBio/goquery v1.12.0 // indirect
+ github.com/andybalholm/brotli v1.2.2 // indirect
+ github.com/andybalholm/cascadia v1.3.4 // indirect
+ github.com/buger/jsonparser v1.2.0 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
- github.com/clipperhouse/uax29/v2 v2.2.0 // indirect
- github.com/cncf/xds/go v0.0.0-20251014123835-2ee22ca58382 // indirect
- github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
- github.com/envoyproxy/go-control-plane/envoy v1.35.0 // indirect
- github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect
- github.com/fatih/color v1.18.0 // indirect
- github.com/felixge/httpsnoop v1.0.4 // indirect
+ github.com/clipperhouse/displaywidth v0.11.0 // indirect
+ github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
+ github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect
+ github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect
+ github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect
+ github.com/fatih/color v1.19.0 // indirect
+ github.com/felixge/httpsnoop v1.1.0 // indirect
github.com/go-faster/city v1.0.1 // indirect
github.com/go-faster/errors v0.7.1 // indirect
- github.com/go-jose/go-jose/v4 v4.1.3 // indirect
+ github.com/go-jose/go-jose/v4 v4.1.4 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
- github.com/go-openapi/jsonpointer v0.22.1 // indirect
- github.com/go-openapi/jsonreference v0.21.2 // indirect
- github.com/go-openapi/spec v0.22.0 // indirect
- github.com/go-openapi/swag/conv v0.25.1 // indirect
- github.com/go-openapi/swag/jsonname v0.25.1 // indirect
- github.com/go-openapi/swag/jsonutils v0.25.1 // indirect
- github.com/go-openapi/swag/loading v0.25.1 // indirect
- github.com/go-openapi/swag/stringutils v0.25.1 // indirect
- github.com/go-openapi/swag/typeutils v0.25.1 // indirect
- github.com/go-openapi/swag/yamlutils v0.25.1 // indirect
- github.com/go-sql-driver/mysql v1.9.3 // indirect
+ github.com/go-openapi/jsonpointer v0.24.0 // indirect
+ github.com/go-openapi/jsonreference v0.21.6 // indirect
+ github.com/go-openapi/spec v0.22.6 // indirect
+ github.com/go-openapi/swag/conv v0.27.0 // indirect
+ github.com/go-openapi/swag/jsonname v0.27.0 // indirect
+ github.com/go-openapi/swag/jsonutils v0.27.0 // indirect
+ github.com/go-openapi/swag/loading v0.27.0 // indirect
+ github.com/go-openapi/swag/stringutils v0.27.0 // indirect
+ github.com/go-openapi/swag/typeutils v0.27.0 // indirect
+ github.com/go-openapi/swag/yamlutils v0.27.0 // indirect
+ github.com/go-sql-driver/mysql v1.10.0 // indirect
+ github.com/goccy/go-json v0.10.6 // indirect
+ github.com/gofiber/schema v1.8.2 // indirect
+ github.com/gofiber/utils/v2 v2.2.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
+ github.com/google/go-querystring v1.2.0 // indirect
github.com/google/s2a-go v0.1.9 // indirect
- github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect
- github.com/googleapis/gax-go/v2 v2.15.0 // indirect
+ github.com/googleapis/enterprise-certificate-proxy v0.3.17 // indirect
+ github.com/googleapis/gax-go/v2 v2.23.0 // indirect
github.com/gorilla/css v1.0.1 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
- github.com/hashicorp/go-version v1.7.0 // indirect
+ github.com/hashicorp/go-version v1.9.0 // indirect
github.com/huandu/xstrings v1.5.0 // indirect
- github.com/imdario/mergo v0.3.16 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
- github.com/jackc/pgx/v5 v5.7.6 // indirect
+ github.com/jackc/pgx/v5 v5.10.0 // indirect
github.com/jackc/puddle/v2 v2.2.2 // indirect
- github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
+ github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.18.0 // indirect
- github.com/mattn/go-colorable v0.1.14 // indirect
- github.com/mattn/go-isatty v0.0.20 // indirect
- github.com/mattn/go-runewidth v0.0.19 // indirect
+ github.com/klauspost/compress v1.19.0 // indirect
+ github.com/mattn/go-colorable v0.1.15 // indirect
+ github.com/mattn/go-isatty v0.0.22 // indirect
+ github.com/mattn/go-runewidth v0.0.24 // indirect
+ github.com/mattn/go-sqlite3 v1.14.44 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/olekukonko/tablewriter v0.0.5 // indirect
- github.com/paulmach/orb v0.12.0 // indirect
- github.com/pierrec/lz4/v4 v4.1.22 // indirect
+ github.com/olekukonko/tablewriter v1.1.4 // indirect
+ github.com/paulmach/orb v0.13.0 // indirect
+ github.com/philhofer/fwd v1.2.0 // indirect
+ github.com/pierrec/lz4/v4 v4.1.27 // indirect
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
- github.com/redis/go-redis/extra/rediscmd/v9 v9.17.2 // indirect
- github.com/richardlehane/mscfb v1.0.4 // indirect
- github.com/richardlehane/msoleps v1.0.4 // indirect
- github.com/russross/blackfriday/v2 v2.1.0 // indirect
+ github.com/redis/go-redis/extra/rediscmd/v9 v9.21.0 // indirect
+ github.com/richardlehane/mscfb v1.0.7 // indirect
+ github.com/richardlehane/msoleps v1.0.6 // indirect
github.com/segmentio/asm v1.2.1 // indirect
github.com/shopspring/decimal v1.4.0 // indirect
- github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect
+ github.com/spiffe/go-spiffe/v2 v2.8.1 // indirect
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
github.com/swaggo/files/v2 v2.0.2 // indirect
- github.com/tiendc/go-deepcopy v1.7.1 // indirect
+ github.com/tiendc/go-deepcopy v1.7.2 // indirect
+ github.com/tinylib/msgp v1.6.4 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
- github.com/valyala/fasthttp v1.67.0 // indirect
+ github.com/valyala/fasthttp v1.72.0 // indirect
github.com/vanng822/css v1.0.1 // indirect
- github.com/vanng822/go-premailer v1.25.0 // indirect
+ github.com/vanng822/go-premailer v1.34.0 // indirect
+ github.com/xdg-go/pbkdf2 v1.0.0 // indirect
+ github.com/xdg-go/scram v1.2.0 // indirect
+ github.com/xdg-go/stringprep v1.0.4 // indirect
github.com/xuri/efp v0.0.1 // indirect
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
+ github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
- go.opentelemetry.io/contrib v1.38.0 // indirect
- go.opentelemetry.io/contrib/detectors/gcp v1.38.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/runtime v0.63.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 // indirect
- go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 // indirect
- go.opentelemetry.io/otel/log v0.14.0 // indirect
- go.opentelemetry.io/otel/sdk/log v0.14.0 // indirect
- go.opentelemetry.io/proto/otlp v1.8.0 // indirect
+ go.opentelemetry.io/contrib v1.44.0 // indirect
+ go.opentelemetry.io/contrib/detectors/gcp v1.44.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/runtime v0.69.0 // indirect
+ go.opentelemetry.io/contrib/processors/minsev v0.16.1 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.20.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.44.0 // indirect
+ go.opentelemetry.io/otel/log v0.20.0 // indirect
+ go.opentelemetry.io/otel/sdk/log v0.20.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.10.0 // indirect
+ go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.27.0 // indirect
+ go.uber.org/zap v1.28.0 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
- golang.org/x/crypto v0.45.0 // indirect
- golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b // indirect
- golang.org/x/mod v0.29.0 // indirect
- golang.org/x/net v0.47.0 // indirect
- golang.org/x/oauth2 v0.33.0 // indirect
- golang.org/x/sync v0.18.0 // indirect
- golang.org/x/sys v0.38.0 // indirect
- golang.org/x/text v0.31.0 // indirect
- golang.org/x/time v0.14.0 // indirect
- golang.org/x/tools v0.38.0 // indirect
+ golang.org/x/crypto v0.54.0 // indirect
+ golang.org/x/mod v0.37.0 // indirect
+ golang.org/x/net v0.57.0 // indirect
+ golang.org/x/oauth2 v0.36.0 // indirect
+ golang.org/x/sys v0.47.0 // indirect
+ golang.org/x/text v0.40.0 // indirect
+ golang.org/x/time v0.15.0 // indirect
+ golang.org/x/tools v0.47.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
- google.golang.org/genproto v0.0.0-20251014184007-4626949a642f // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20251014184007-4626949a642f // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 // indirect
- google.golang.org/grpc v1.76.0 // indirect
+ google.golang.org/genproto v0.0.0-20260622175928-b703f567277d // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260630182238-925bb5da69e7 // indirect
+ google.golang.org/grpc v1.82.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/driver/clickhouse v0.7.0 // indirect
gorm.io/driver/mysql v1.6.0 // indirect
diff --git a/api/go.sum b/api/go.sum
index 86e6039dc..bea96100b 100644
--- a/api/go.sum
+++ b/api/go.sum
@@ -1,174 +1,197 @@
bou.ke/monkey v1.0.2 h1:kWcnsrCNUatbxncxR/ThdYqbytgOIArtYWqcQLQzKLI=
bou.ke/monkey v1.0.2/go.mod h1:OqickVX3tNx6t33n1xvtTtu85YN5s6cKwVug+oHMaIA=
-cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
-cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
+cel.dev/expr v0.25.2 h1:K6j46C81hXtZQfuX60cVWQFBJahKSE2gfRbNuvr5bFs=
+cel.dev/expr v0.25.2/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE=
cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU=
-cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4=
-cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ=
+cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA=
+cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q=
cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c=
-cloud.google.com/go/cloudtasks v1.13.7 h1:H2v8GEolNtMFfYzUpZBaZbydqU7drpyo99GtAgA+m4I=
-cloud.google.com/go/cloudtasks v1.13.7/go.mod h1:H0TThOUG+Ml34e2+ZtW6k6nt4i9KuH3nYAJ5mxh7OM4=
+cloud.google.com/go/cloudtasks v1.19.0 h1:+RK0lPIB6TlcBP7JyqmmhCNihp1Iw4QQ8uxcvlKhBVQ=
+cloud.google.com/go/cloudtasks v1.19.0/go.mod h1:8q8wNubq0jFvXW5Pz8P3O7QWJBXOmfrY918FqTgIqHA=
cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
-cloud.google.com/go/firestore v1.19.0 h1:E3FiRsWfZKwZ6W+Lsp1YqTzZ9H6jP+QsKW40KR21C8I=
-cloud.google.com/go/firestore v1.19.0/go.mod h1:jqu4yKdBmDN5srneWzx3HlKrHFWFdlkgjgQ6BKIOFQo=
-cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc=
-cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU=
-cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc=
-cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA=
-cloud.google.com/go/longrunning v0.7.0 h1:FV0+SYF1RIj59gyoWDRi45GiYUMM3K1qO51qoboQT1E=
-cloud.google.com/go/longrunning v0.7.0/go.mod h1:ySn2yXmjbK9Ba0zsQqunhDkYi0+9rlXIwnoAf+h+TPY=
-cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE=
-cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI=
-cloud.google.com/go/storage v1.57.0 h1:4g7NB7Ta7KetVbOMpCqy89C+Vg5VE8scqlSHUPm7Rds=
-cloud.google.com/go/storage v1.57.0/go.mod h1:329cwlpzALLgJuu8beyJ/uvQznDHpa2U5lGjWednkzg=
-cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U=
-cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s=
+cloud.google.com/go/firestore v1.22.0 h1:avooeboIq37vKXobrbPUFhFBxS/c3FqmWoX0xs8dO6E=
+cloud.google.com/go/firestore v1.22.0/go.mod h1:PaM4i7i7ruALSKmlpHXXZaPObcZw0W7ie5UOPr72iTU=
+cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM=
+cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4=
+cloud.google.com/go/logging v1.18.0 h1:KhzZq+1cSkPH9YUaKLLhLtQxIHitVayBmk0sGfoM9+k=
+cloud.google.com/go/logging v1.18.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI=
+cloud.google.com/go/longrunning v1.2.0 h1:WjYH3YHBGCxGJP9M4dWGHBfXr/cFIjMkNgWcJj7/iMM=
+cloud.google.com/go/longrunning v1.2.0/go.mod h1:5KMQALFGOCtFoi2xSOA1u3H7WKlhmckgiyFw7+LGQp0=
+cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY=
+cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM=
+cloud.google.com/go/storage v1.64.0 h1:KLpxI/oX9LxeRsNqn877d2WyeT3ryiEwnGt8pwcSPZg=
+cloud.google.com/go/storage v1.64.0/go.mod h1:lWyAtwvDZHdL3k68WVKbESP6bmWaV23ZJJ/JEVw/ZaQ=
+cloud.google.com/go/trace v1.16.0 h1:GmQovzFc5F0CNfl0VLgL64aoTtu7xsM0YajW2GlG9+E=
+cloud.google.com/go/trace v1.16.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0=
dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8=
dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA=
-filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
-filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
+filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo=
+filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc=
firebase.google.com/go v3.13.0+incompatible h1:3TdYC3DDi6aHn20qoRkxwGqNgdjtblwVAyRLQwGn/+4=
firebase.google.com/go v3.13.0+incompatible/go.mod h1:xlah6XbEyW6tbfSklcfe5FHJIwjt8toICdV5Wh9ptHs=
-github.com/ClickHouse/ch-go v0.69.0 h1:nO0OJkpxOlN/eaXFj0KzjTz5p7vwP1/y3GN4qc5z/iM=
-github.com/ClickHouse/ch-go v0.69.0/go.mod h1:9XeZpSAT4S0kVjOpaJ5186b7PY/NH/hhF8R6u0WIjwg=
-github.com/ClickHouse/clickhouse-go/v2 v2.40.3 h1:46jB4kKwVDUOnECpStKMVXxvR0Cg9zeV9vdbPjtn6po=
-github.com/ClickHouse/clickhouse-go/v2 v2.40.3/go.mod h1:qO0HwvjCnTB4BPL/k6EE3l4d9f/uF+aoimAhJX70eKA=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 h1:lhhYARPUu3LmHysQ/igznQphfzynnqI3D75oUyw1HXk=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0/go.mod h1:l9rva3ApbBpEJxSNYnwT9N4CDLrWgtq3u8736C5hyJw=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.30.0 h1:5eCqTd9rTwMlE62z0xFdzPJ+3pji75hJrwq1jrCjo5w=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.30.0/go.mod h1:4BcvJy7WxY8X2eX49z2VO1ByhO+CcQK8lKPCH/QlZvo=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0 h1:xfK3bbi6F2RDtaZFtUdKO3osOBIhNb+xTs8lFW6yx9o=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 h1:s0WlVbf9qpvkh1c/uDAPElam0WrL7fHRIidgZJ7UqZI=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc=
+github.com/ClickHouse/ch-go v0.72.0 h1:DSyUd4kuxisOVXlZSXyIQYBAajSErZWC379651DpAMU=
+github.com/ClickHouse/ch-go v0.72.0/go.mod h1:eeWlJavWDsMf5fZzLNCYaBiMxVoREJYK00aiZ9FJ3E0=
+github.com/ClickHouse/clickhouse-go/v2 v2.46.0 h1:s3eRy+hYmu5uzotB6ZhDofgHu8kDgGN/fpmjxRkqSpk=
+github.com/ClickHouse/clickhouse-go/v2 v2.46.0/go.mod h1:giJfUVlMkcfUEPVfRpt51zZaGEx9i17gCos8gBl392c=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0 h1:l7+6kwRMJNwdCvYdDl7Eax+wzEYHSnNY7zrrfbhDdTA=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0/go.mod h1:pJTkW8hEUIIi3Pf65lPZOnn4Y81yCllX6IWk2jNXdkM=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.59.0 h1:c/Ivw7FuawPLfrr+zB0LZKeCchO2cAHQpF2qZ6OV7rQ=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.59.0/go.mod h1:Zba7lknY/d78oxbKqFTmCsaGwfpzeJ3ktrrLXtnTV6g=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.35.0 h1:PaC2zW6tfeh9rQydOQq6Pff4xpWwUDMCMolQXiypq0o=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.35.0/go.mod h1:3zRs1e/YFBfj7yv/2HFUlH1EKaP0priee5IqmYUHMP4=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.59.0 h1:xTXsqDOj5k9mK3VVWHYUryryJCIdYfXxdjKFwpzINUw=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.59.0/go.mod h1:V9g30lTKzfUsEW+gpWssck6u9IhARajmipodImLLcwI=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.59.0 h1:18FRm6ZcN/x9+ZmhMr96hLcTtlLn2/gHPuDLVeg7XcY=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.59.0/go.mod h1:YqwkQPrWSC7+byyc1VlKbWLBF5JsW5IoL6xUkemYSXk=
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
-github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
-github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
-github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60=
-github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
-github.com/NdoleStudio/go-otelroundtripper v0.0.13 h1:fDgdxcNJov4LTrMhXqJnF/E3jO4HJVczj90wkxh5PSc=
-github.com/NdoleStudio/go-otelroundtripper v0.0.13/go.mod h1:UIUQ22ErFoBUyLuPDrVNRRKmBHBTfzQO9GF1ztqDvqo=
-github.com/NdoleStudio/lemonsqueezy-go v1.2.4 h1:BhWlCUH+DIPfSn4g/V7f2nFkMCQuzno9DXKZ7YDrXXA=
-github.com/NdoleStudio/lemonsqueezy-go v1.2.4/go.mod h1:2uZlWgn9sbNxOx3JQWLlPrDOC6NT/wmSTOgL3U/fMMw=
-github.com/NdoleStudio/plunk-go v0.0.1 h1:nWPr5pcwFDvhYGZS5n3a3cKGkQvg5re9DSAiFMZCFvs=
-github.com/NdoleStudio/plunk-go v0.0.1/go.mod h1:pqG3zKhpn/A2bL1K+WsWzvfTpOeSkYgXhNk5H65uEc8=
-github.com/PuerkitoBio/goquery v1.10.3 h1:pFYcNSqHxBD06Fpj/KsbStFRsgRATgnf3LeXiUkhzPo=
-github.com/PuerkitoBio/goquery v1.10.3/go.mod h1:tMUX0zDMHXYlAQk6p35XxQMqMweEKB7iK7iLNd4RH4Y=
-github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ=
-github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
-github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
-github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
-github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHSxpiH9JdtuBj0=
-github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=
+github.com/Masterminds/semver/v3 v3.5.0 h1:kQceYJfbupGfZOKZQg0kou0DgAKhzDg2NZPAwZ/2OOE=
+github.com/Masterminds/semver/v3 v3.5.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
+github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
+github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
+github.com/NdoleStudio/go-otelroundtripper v0.0.15 h1:lClvnSNRKfdPejUcMaFa3vv9nkIdONJOzO/WSNBVY2w=
+github.com/NdoleStudio/go-otelroundtripper v0.0.15/go.mod h1:YkRryIMC2i4a/6S86isXH+bht3Qp4RRB0rOnnnHBPjU=
+github.com/NdoleStudio/lemonsqueezy-go v1.3.2 h1:XUNOzpMriXErxRQRW0dQT0OvkNBP6VAyZKlFWypyGrc=
+github.com/NdoleStudio/lemonsqueezy-go v1.3.2/go.mod h1:xKRsRX1jSI6mLrVXyWh2sF/1isxTioZrSjWy6HpA3xQ=
+github.com/NdoleStudio/plunk-go v0.0.2 h1:afPW7MHK4Z3rsybpJBnmTmxKCLKF1M7sPI+BNGPf35A=
+github.com/NdoleStudio/plunk-go v0.0.2/go.mod h1:pqG3zKhpn/A2bL1K+WsWzvfTpOeSkYgXhNk5H65uEc8=
+github.com/NdoleStudio/stacktrace v1.1.0 h1:Ai0j//4tDo/So3nR8bZgS3pQ4NYmViHlarpIReiyb5k=
+github.com/NdoleStudio/stacktrace v1.1.0/go.mod h1:WOBcbXShYu+v8JtjFEM+rRV9GJW50m+dwIvp4sLuVTg=
+github.com/PuerkitoBio/goquery v1.12.0 h1:pAcL4g3WRXekcB9AU/y1mbKez2dbY2AajVhtkO8RIBo=
+github.com/PuerkitoBio/goquery v1.12.0/go.mod h1:802ej+gV2y7bbIhOIoPY5sT183ZW0YFofScC4q/hIpQ=
+github.com/andybalholm/brotli v1.2.2 h1:HzTuoo2ErYQqf5qvcJInB8uvqSVxRttzkFexPWtnceM=
+github.com/andybalholm/brotli v1.2.2/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
+github.com/andybalholm/cascadia v1.3.4 h1:vM2lgh0Vru9Vwyfm4cQqWP2HHMW0u0+2PAW7Q38Qufg=
+github.com/andybalholm/cascadia v1.3.4/go.mod h1:BLRmbRjpEtNKieZOCCvYj4RqN+KRA41GBe/5O+G93kM=
+github.com/avast/retry-go/v5 v5.0.0 h1:kf1Qc2UsTZ4qq8elDymqfbISvkyMuhgRxuJqX2NHP7k=
+github.com/avast/retry-go/v5 v5.0.0/go.mod h1://d+usmKWio1agtZfS1H/ltTqwtIfBnRq9zEwjc3eH8=
+github.com/axiomhq/axiom-go v0.32.0 h1:aRpbqUAn01hY8aJXQftvWHyXfnrNB2KzN5ZquBWvFcE=
+github.com/axiomhq/axiom-go v0.32.0/go.mod h1:3Gmr5M4tINm7Ti00GVfzAduO92Uhd0pghr4ZehIhFxc=
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
+github.com/buger/jsonparser v1.2.0 h1:4EFcvK1kD4jyj6YqNK6skK6w+y7FHHBR+XBCtxwu/6g=
+github.com/buger/jsonparser v1.2.0/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/carlmjohnson/requests v0.25.1 h1:17zNRLecxtAjhtdEIV+F+wrYfe+AGZUjWJtpndcOUYA=
github.com/carlmjohnson/requests v0.25.1/go.mod h1:z3UEf8IE4sZxZ78spW6/tLdqBkfCu1Fn4RaYMnZ8SRM=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/clipperhouse/uax29/v2 v2.2.0 h1:ChwIKnQN3kcZteTXMgb1wztSgaU+ZemkgWdohwgs8tY=
-github.com/clipperhouse/uax29/v2 v2.2.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
+github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8=
+github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0=
+github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk=
+github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
github.com/cloudevents/sdk-go/v2 v2.16.2 h1:ZYDFrYke4FD+jM8TZTJJO6JhKHzOQl2oqpFK1D+NnQM=
github.com/cloudevents/sdk-go/v2 v2.16.2/go.mod h1:laOcGImm4nVJEU+PHnUrKL56CKmRL65RlQF0kRmW/kg=
-github.com/cncf/xds/go v0.0.0-20251014123835-2ee22ca58382 h1:5IeUoAZvqwF6LcCnV99NbhrGKN6ihZgahJv5jKjmZ3k=
-github.com/cncf/xds/go v0.0.0-20251014123835-2ee22ca58382/go.mod h1:HlzOvOjVBOfTGSRXRyY0OiCS/3J1akRGQQpRO/7zyF4=
-github.com/cockroachdb/cockroach-go/v2 v2.4.2 h1:QB0ozDWQUUJ0GP8Zw63X/qHefPTCpLvtfCs6TLrPgyE=
-github.com/cockroachdb/cockroach-go/v2 v2.4.2/go.mod h1:9U179XbCx4qFWtNhc7BiWLPfuyMVQ7qdAhfrwLz1vH0=
-github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
+github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik=
+github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4=
+github.com/cockroachdb/cockroach-go/v2 v2.4.3 h1:LJO3K3jC5WXvMePRQSJE1NsIGoFGcEx1LW83W6RAlhw=
+github.com/cockroachdb/cockroach-go/v2 v2.4.3/go.mod h1:9U179XbCx4qFWtNhc7BiWLPfuyMVQ7qdAhfrwLz1vH0=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgraph-io/ristretto/v2 v2.3.0 h1:qTQ38m7oIyd4GAed/QkUZyPFNMnvVWyazGXRwvOt5zk=
-github.com/dgraph-io/ristretto/v2 v2.3.0/go.mod h1:gpoRV3VzrEY1a9dWAYV6T1U7YzfgttXdd/ZzL1s9OZM=
+github.com/dgraph-io/ristretto/v2 v2.4.2 h1:x0cvjmUKxt764Yxdk2nr94we1AvPPAMh1rh5TQ+Jo80=
+github.com/dgraph-io/ristretto/v2 v2.4.2/go.mod h1:0KsrXtXvnv0EqnzyowllbVJB8yBonswa2lTCK2gGo9E=
github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38=
github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
-github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M=
-github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA=
-github.com/envoyproxy/go-control-plane/envoy v1.35.0 h1:ixjkELDE+ru6idPxcHLj8LBVc2bFP7iBytj353BoHUo=
-github.com/envoyproxy/go-control-plane/envoy v1.35.0/go.mod h1:09qwbGVuSWWAyN5t/b3iyVfz5+z8QWGrzkoqm/8SbEs=
+github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA=
+github.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU=
+github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ=
+github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A=
github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI=
github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4=
-github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
-github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
-github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
-github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
-github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
-github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds=
+github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0=
+github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w=
+github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE=
+github.com/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc=
+github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE=
+github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
+github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
+github.com/fxamacker/cbor/v2 v2.9.2 h1:X4Ksno9+x3cz0TZv69ec1hxP/+tymuR8PXQJyDwfh78=
+github.com/fxamacker/cbor/v2 v2.9.2/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
+github.com/gertd/go-pluralize v0.2.1 h1:M3uASbVjMnTsPb0PNqg+E/24Vwigyo/tvyMTtAlLgiA=
+github.com/gertd/go-pluralize v0.2.1/go.mod h1:rbYaKDbsXxmRfr8uygAEKhOWsjyrrqrkHVpZvoOp8zk=
github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw=
github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw=
github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg=
github.com/go-faster/errors v0.7.1/go.mod h1:5ySTjWFiphBs07IKuiL69nxdfd5+fzh1u7FPGZP2quo=
-github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs=
-github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08=
+github.com/go-hermes/hermes/v2 v2.6.2 h1:RuGQlICVtIHixfxtYwN7hAoqGyGxr+D3kE42oE6emcw=
+github.com/go-hermes/hermes/v2 v2.6.2/go.mod h1:RLVNk31/1KqF35vK3mAaQVuJvMH+K5//6OTGJk+j/80=
+github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA=
+github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/go-openapi/jsonpointer v0.22.1 h1:sHYI1He3b9NqJ4wXLoJDKmUmHkWy/L7rtEo92JUxBNk=
-github.com/go-openapi/jsonpointer v0.22.1/go.mod h1:pQT9OsLkfz1yWoMgYFy4x3U5GY5nUlsOn1qSBH5MkCM=
-github.com/go-openapi/jsonreference v0.21.2 h1:Wxjda4M/BBQllegefXrY/9aq1fxBA8sI5M/lFU6tSWU=
-github.com/go-openapi/jsonreference v0.21.2/go.mod h1:pp3PEjIsJ9CZDGCNOyXIQxsNuroxm8FAJ/+quA0yKzQ=
-github.com/go-openapi/spec v0.22.0 h1:xT/EsX4frL3U09QviRIZXvkh80yibxQmtoEvyqug0Tw=
-github.com/go-openapi/spec v0.22.0/go.mod h1:K0FhKxkez8YNS94XzF8YKEMULbFrRw4m15i2YUht4L0=
+github.com/go-openapi/jsonpointer v0.24.0 h1:AA6mCjHYHmZ+1RU2Js089EaOK/iwXXNwQsTgnsTha2M=
+github.com/go-openapi/jsonpointer v0.24.0/go.mod h1:Z3rw7dWu1p9IgitXCFamSlA5lmDiklEB6vkaxcNZW5Y=
+github.com/go-openapi/jsonreference v0.21.6 h1:NZ5nGfnaM1n4I43Xjm1e5/M2GjOwQwndQz22uhxwD+Y=
+github.com/go-openapi/jsonreference v0.21.6/go.mod h1:xzbgtQ3ZbWxvET3AxdzCJlJt6vkovbf+IfSPJjD0tUY=
+github.com/go-openapi/spec v0.22.6 h1:Tyy1pLaNCM8GBCFLoGYLonjJi6zykqyLCjXLc19ZPic=
+github.com/go-openapi/spec v0.22.6/go.mod h1:HZvTHat+iH0PALQRWhrqIHtU/PEqxqd89fu0MxGlMeM=
github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM=
-github.com/go-openapi/swag/conv v0.25.1 h1:+9o8YUg6QuqqBM5X6rYL/p1dpWeZRhoIt9x7CCP+he0=
-github.com/go-openapi/swag/conv v0.25.1/go.mod h1:Z1mFEGPfyIKPu0806khI3zF+/EUXde+fdeksUl2NiDs=
-github.com/go-openapi/swag/jsonname v0.25.1 h1:Sgx+qbwa4ej6AomWC6pEfXrA6uP2RkaNjA9BR8a1RJU=
-github.com/go-openapi/swag/jsonname v0.25.1/go.mod h1:71Tekow6UOLBD3wS7XhdT98g5J5GR13NOTQ9/6Q11Zo=
-github.com/go-openapi/swag/jsonutils v0.25.1 h1:AihLHaD0brrkJoMqEZOBNzTLnk81Kg9cWr+SPtxtgl8=
-github.com/go-openapi/swag/jsonutils v0.25.1/go.mod h1:JpEkAjxQXpiaHmRO04N1zE4qbUEg3b7Udll7AMGTNOo=
-github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.1 h1:DSQGcdB6G0N9c/KhtpYc71PzzGEIc/fZ1no35x4/XBY=
-github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.1/go.mod h1:kjmweouyPwRUEYMSrbAidoLMGeJ5p6zdHi9BgZiqmsg=
-github.com/go-openapi/swag/loading v0.25.1 h1:6OruqzjWoJyanZOim58iG2vj934TysYVptyaoXS24kw=
-github.com/go-openapi/swag/loading v0.25.1/go.mod h1:xoIe2EG32NOYYbqxvXgPzne989bWvSNoWoyQVWEZicc=
-github.com/go-openapi/swag/stringutils v0.25.1 h1:Xasqgjvk30eUe8VKdmyzKtjkVjeiXx1Iz0zDfMNpPbw=
-github.com/go-openapi/swag/stringutils v0.25.1/go.mod h1:JLdSAq5169HaiDUbTvArA2yQxmgn4D6h4A+4HqVvAYg=
-github.com/go-openapi/swag/typeutils v0.25.1 h1:rD/9HsEQieewNt6/k+JBwkxuAHktFtH3I3ysiFZqukA=
-github.com/go-openapi/swag/typeutils v0.25.1/go.mod h1:9McMC/oCdS4BKwk2shEB7x17P6HmMmA6dQRtAkSnNb8=
-github.com/go-openapi/swag/yamlutils v0.25.1 h1:mry5ez8joJwzvMbaTGLhw8pXUnhDK91oSJLDPF1bmGk=
-github.com/go-openapi/swag/yamlutils v0.25.1/go.mod h1:cm9ywbzncy3y6uPm/97ysW8+wZ09qsks+9RS8fLWKqg=
-github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
-github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
-github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/gofiber/contrib/otelfiber v1.0.10 h1:Bu28Pi4pfYmGfIc/9+sNaBbFwTHGY/zpSIK5jBxuRtM=
-github.com/gofiber/contrib/otelfiber v1.0.10/go.mod h1:jN6AvS1HolDHTQHFURsV+7jSX96FpXYeKH6nmkq8AIw=
-github.com/gofiber/fiber/v2 v2.52.10 h1:jRHROi2BuNti6NYXmZ6gbNSfT3zj/8c0xy94GOU5elY=
-github.com/gofiber/fiber/v2 v2.52.10/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw=
-github.com/gofiber/swagger v1.1.1 h1:FZVhVQQ9s1ZKLHL/O0loLh49bYB5l1HEAgxDlcTtkRA=
-github.com/gofiber/swagger v1.1.1/go.mod h1:vtvY/sQAMc/lGTUCg0lqmBL7Ht9O7uzChpbvJeJQINw=
-github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
-github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
-github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
+github.com/go-openapi/swag/conv v0.27.0 h1:EKOH4feXrvdo8DbSsXSAqRT8fz1epEnS5O2IfXUOzE8=
+github.com/go-openapi/swag/conv v0.27.0/go.mod h1:pfiv0uKQTbaGApk8Zs/lZV3uSjmSpa2FO1y183YngN8=
+github.com/go-openapi/swag/jsonname v0.27.0 h1:4QVB//CKOdE8IOiBg19JNY2wfDS48MhesIquYBy2rUE=
+github.com/go-openapi/swag/jsonname v0.27.0/go.mod h1:I1YsyvvhBuZsFXSW6I7ODfdyq13p7hDil//1T9/pFFk=
+github.com/go-openapi/swag/jsonutils v0.27.0 h1:VYtd9jEQYeU4j8q5vdn5KWotF4vKywhGdMBrALtAsfE=
+github.com/go-openapi/swag/jsonutils v0.27.0/go.mod h1:U7pb8AGuwhok3RDicHeHwSG4L3PXSq6PAL98Aon632g=
+github.com/go-openapi/swag/jsonutils/fixtures_test v0.27.0 h1:+d7C7Ur/SsGg/UZ9G0JEovnfRqtMNZCJQGKc2h/ojoE=
+github.com/go-openapi/swag/jsonutils/fixtures_test v0.27.0/go.mod h1:mofwUWx70wvskwESqRJ//k/9kURmCgyJl5m5Ppoh5kY=
+github.com/go-openapi/swag/loading v0.27.0 h1:s8DA9aPEdFH6OluHUYUn3DnIuoTdyWs9RwffXBUfyeI=
+github.com/go-openapi/swag/loading v0.27.0/go.mod h1:VOz+Jg6UGGywcmRvYsI4fvtp+bd7NfioseGEPleYdA4=
+github.com/go-openapi/swag/stringutils v0.27.0 h1:Of7w/HljWsNZvuxsUAnw3n+hCOyI6HLJOxW2kQRAxio=
+github.com/go-openapi/swag/stringutils v0.27.0/go.mod h1:lzRN95CxXmA03XcDWHLOb6nOMcxCqR5rGY0lOgsfRoM=
+github.com/go-openapi/swag/typeutils v0.27.0 h1:aCf4MSGo8NLwZP8Q6t32DWLJSvl/WwNqgmEG+xJ6v2o=
+github.com/go-openapi/swag/typeutils v0.27.0/go.mod h1:Srm0xFNRZ1Y+vCxJclo5qzx8aj+1pAKda/YfFPrG0dQ=
+github.com/go-openapi/swag/yamlutils v0.27.0 h1:bQ6eAMil5X9tdcf7dMn4t15alzG6jddnrKPuKa/zxKM=
+github.com/go-openapi/swag/yamlutils v0.27.0/go.mod h1:yRfIo7qqVkmJRQjX8exjA3AfcI8rH1KDNPsTparoCv4=
+github.com/go-openapi/testify/enable/yaml/v2 v2.6.0 h1:gGHwAJ0R/5jU8BEGDbfRNR3hL68dAVi84WuOApp29B0=
+github.com/go-openapi/testify/enable/yaml/v2 v2.6.0/go.mod h1:tY+St1SGq4NFl0QIqdTY4aEdbChAHxhyB77XQi9iJCo=
+github.com/go-openapi/testify/v2 v2.6.0 h1:5PKH2HE7YJ/LuRPQGvSxBRlFXNQhSetBLlGAgUEu3ug=
+github.com/go-openapi/testify/v2 v2.6.0/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw=
+github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw=
+github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk=
+github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU=
+github.com/goccy/go-json v0.10.6/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
+github.com/gofiber/contrib/v3/otel v1.2.2 h1:DQ0S5dIDb5UsnUT2HI5rXAwzy/pIiOMZkO6izQr8Fok=
+github.com/gofiber/contrib/v3/otel v1.2.2/go.mod h1:icVCf1XJoqCuY7Fq/EAbaTk30ngA1Fc9r4zq/P2FBvk=
+github.com/gofiber/contrib/v3/swaggo v1.0.8 h1:11YmMVbkMO7zv6YR0gdNfRWcs5ZVUkDpR21AhjhbK00=
+github.com/gofiber/contrib/v3/swaggo v1.0.8/go.mod h1:7jyBZxqQ4MjOxIidOvLQ9jNAxNk05yKpid40OYb3pLE=
+github.com/gofiber/fiber/v3 v3.4.0 h1:F0aND4vwZF7dR7cbvSwFQQEpBU902XHKWxrLsFBkVqw=
+github.com/gofiber/fiber/v3 v3.4.0/go.mod h1:nAhJfdxUIJJph2tPWPmqWf8QDIN2iiqQiQf3lENZpdk=
+github.com/gofiber/schema v1.8.2 h1:wq+LO2xEGlsqma/8Akp9PUebQ6vcsYmF0xYQ4F2ijvU=
+github.com/gofiber/schema v1.8.2/go.mod h1:iyAMJztdyky7Pk2U7bwUP3EHjzMqUNjZ/hglE0nYO/g=
+github.com/gofiber/utils/v2 v2.2.0 h1:YSSmCzQponq/f9uSOg2HtXC5qK1Dmor0o6DqaQVz8GE=
+github.com/gofiber/utils/v2 v2.2.0/go.mod h1:Ieopk6sQh7rbhQ12aBNCJtJuG0gxAg0nz63sFCrrOmE=
+github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw=
+github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0=
+github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
+github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
+github.com/google/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0=
+github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc=
github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0=
@@ -176,40 +199,38 @@ github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAVrGgAa0f2/R35S4DJwfFaUPFQ=
-github.com/googleapis/enterprise-certificate-proxy v0.3.7/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
-github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo=
-github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
+github.com/googleapis/enterprise-certificate-proxy v0.3.17 h1:73NfMHdiqo9JFU9+7a5ExpVa10/R29pXfZIaW559nrg=
+github.com/googleapis/enterprise-certificate-proxy v0.3.17/go.mod h1:rSEsBUemEBZEexP2y6jPp16LUmUbjmSbcPMQizR0o4k=
+github.com/googleapis/gax-go/v2 v2.23.0 h1:Tchl7qkvE7Ip3y+ztvNufYFvkfqTe7NfLTYGIdJRLuE=
+github.com/googleapis/gax-go/v2 v2.23.0/go.mod h1:rBQKOVJCdb8IFEzg+FCwlt1LP/xMDGuqUXhUG+XMXEg=
github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48=
github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw=
-github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
-github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA=
+github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hirosassa/zerodriver v0.1.4 h1:8bzamKUOHHq03aEk12qi/lnji2dM+IhFOe+RpKpIZFM=
github.com/hirosassa/zerodriver v0.1.4/go.mod h1:hHOOAQvVGwBV1iVVYujM6vwOBBqQcBIFpJxCD9mJU7Y=
github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
-github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
-github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
+github.com/inbucket/html2text v1.0.0 h1:N5kza++4uBBDJ2Z3KUnTRyPNoBcW+YfOgNiNmNB+sgs=
+github.com/inbucket/html2text v1.0.0/go.mod h1:5TrhXQKGU+LXurODaSm55Y9eXoPBRnYiOz4x2XfUoJU=
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.7.6 h1:rWQc5FwZSPX58r1OQmkuaNicxdmExaEz5A2DO2hUuTk=
-github.com/jackc/pgx/v5 v5.7.6/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M=
+github.com/jackc/pgx/v5 v5.10.0 h1:VhSvgU2jSli8o3AqIEOTJr7rZwAEUVo4E4XhR94Zfr0=
+github.com/jackc/pgx/v5 v5.10.0/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4=
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
-github.com/jaswdr/faker/v2 v2.9.0 h1:Sqqpp+pxduDO+MGOhYE3UHtI9Sowt9j95f8h8nVvips=
-github.com/jaswdr/faker/v2 v2.9.0/go.mod h1:jZq+qzNQr8/P+5fHd9t3txe2GNPnthrTfohtnJ7B+68=
-github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 h1:iCHtR9CQyktQ5+f3dMVZfwD2KWJUgm7M0gdL9NGr8KA=
-github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk=
+github.com/jaswdr/faker/v2 v2.9.1 h1:J0Rjqb2/FquZnoZplzkGVL5LmhNkeIpvsSMoJKzn+8E=
+github.com/jaswdr/faker/v2 v2.9.1/go.mod h1:jZq+qzNQr8/P+5fHd9t3txe2GNPnthrTfohtnJ7B+68=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
@@ -222,34 +243,24 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jszwec/csvutil v1.10.0 h1:upMDUxhQKqZ5ZDCs/wy+8Kib8rZR8I8lOR34yJkdqhI=
github.com/jszwec/csvutil v1.10.0/go.mod h1:/E4ONrmGkwmWsk9ae9jpXnv9QT8pLHEPcCirMFhxG9I=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
-github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/klauspost/compress v1.19.0 h1:sXLILfc9jV2QYWkzFOPWStmcUVH2RHEB1JCdY2oVvCQ=
+github.com/klauspost/compress v1.19.0/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
+github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
+github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
-github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
-github.com/matcornic/hermes v1.3.0 h1:k6rih7zpUgfIF/57F3WeBi9n68XkvhC/z8eQTRIsQqc=
-github.com/matcornic/hermes v1.3.0/go.mod h1:X3MXWWBHjKSfgQl0xjv+NQTAGWSiNr/fZTlhAEQJ63Q=
-github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
-github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
-github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
-github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
-github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
-github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
-github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
+github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ=
+github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA=
+github.com/mattn/go-colorable v0.1.15 h1:+u9SLTRGnXv73cEsnsmoZBom+dMU88B2M0aDcWy0/jY=
+github.com/mattn/go-colorable v0.1.15/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
+github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4=
+github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
+github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU=
+github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
+github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8=
+github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
@@ -259,20 +270,24 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
-github.com/nyaruka/phonenumbers v1.6.7 h1:WmebT8TNEzNaui5QlrGqbccRC6dZkEkYc+MGQoILSSo=
-github.com/nyaruka/phonenumbers v1.6.7/go.mod h1:7gjs+Lchqm49adhAKB5cdcng5ZXgt6x7Jgvi0ZorUtU=
-github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
-github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
-github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 h1:nRlQD0u1871kaznCnn1EvYiMbum36v7hw1DLPEjds4o=
-github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177/go.mod h1:ao5zGxj8Z4x60IOVYZUbDSmt3R8Ddo080vEgPosHpak=
+github.com/nyaruka/phonenumbers v1.8.1 h1:2K9YMQuv1dCGqjjzB1DwmdCe89khT4KPBQb2CxAMMlU=
+github.com/nyaruka/phonenumbers v1.8.1/go.mod h1:fsKPJ70O9JetEA4ggnJadYTFWwtGPvu/lETTXNXq6Cs=
+github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 h1:zrbMGy9YXpIeTnGj4EljqMiZsIcE09mmF8XsD5AYOJc=
+github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0=
+github.com/olekukonko/errors v1.3.0 h1:teJvgLGUEqMzBUms+Dj3/3szNqCG/Jdw9iDbum8fR6U=
+github.com/olekukonko/errors v1.3.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y=
+github.com/olekukonko/ll v0.1.8 h1:ysHCJRGHYKzmBSdz9w5AySztx7lG8SQY+naTGYUbsz8=
+github.com/olekukonko/ll v0.1.8/go.mod h1:RPRC6UcscfFZgjo1nulkfMH5IM0QAYim0LfnMvUuozw=
+github.com/olekukonko/tablewriter v1.1.4 h1:ORUMI3dXbMnRlRggJX3+q7OzQFDdvgbN9nVWj1drm6I=
+github.com/olekukonko/tablewriter v1.1.4/go.mod h1:+kedxuyTtgoZLwif3P1Em4hARJs+mVnzKxmsCL/C5RY=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
-github.com/paulmach/orb v0.12.0 h1:z+zOwjmG3MyEEqzv92UN49Lg1JFYx0L9GpGKNVDKk1s=
-github.com/paulmach/orb v0.12.0/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
-github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
-github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU=
-github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
+github.com/paulmach/orb v0.13.0 h1:r7n7mQGGF+cj/CbcivEj9J3HGK+XR+yXnvzRdq9saIw=
+github.com/paulmach/orb v0.13.0/go.mod h1:6scRWINywA2Jf05dcjOfLfxrUIMECvTSG2MVbRLxu/k=
+github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM=
+github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM=
+github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk=
+github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
@@ -282,35 +297,36 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pusher/pusher-http-go/v5 v5.1.1 h1:ZLUGdLA8yXMvByafIkS47nvuXOHrYmlh4bsQvuZnYVQ=
github.com/pusher/pusher-http-go/v5 v5.1.1/go.mod h1:Ibji4SGoUDtOy7CVRhCiEpgy+n5Xv6hSL/QqYOhmWW8=
-github.com/redis/go-redis/extra/rediscmd/v9 v9.17.2 h1:KYWnHK9pwzOUo3sNJlNmzRwZ5mw7opugn8njtGThKNg=
-github.com/redis/go-redis/extra/rediscmd/v9 v9.17.2/go.mod h1:wsfMQVl/GFYD9Gx/tlxurlTtvHkZRAt8j1qi27eIlTk=
-github.com/redis/go-redis/extra/redisotel/v9 v9.17.2 h1:wthFPRW3Y50CknMrjjJoYwXUFR4U7hMVJCMeLzDI8s4=
-github.com/redis/go-redis/extra/redisotel/v9 v9.17.2/go.mod h1:iqfQX7U2o8MWSl8W+Ah8KqbQyi/UoR/MQNgvaUyA1wc=
-github.com/redis/go-redis/v9 v9.17.2 h1:P2EGsA4qVIM3Pp+aPocCJ7DguDHhqrXNhVcEp4ViluI=
-github.com/redis/go-redis/v9 v9.17.2/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370=
-github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM=
-github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
-github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
-github.com/richardlehane/msoleps v1.0.4 h1:WuESlvhX3gH2IHcd8UqyCuFY5yiq/GR/yqaSM/9/g00=
-github.com/richardlehane/msoleps v1.0.4/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
-github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
-github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
-github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
-github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
-github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
-github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
-github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/redis/go-redis/extra/rediscmd/v9 v9.21.0 h1:jsV3tyMeJrEoc2f3EhNf7qoBW3NEZW7l/4ziT3M+OJI=
+github.com/redis/go-redis/extra/rediscmd/v9 v9.21.0/go.mod h1:e5t17bY9cEpVV+xw2U7jsPOKkXBtL5IQmNVABShnHUk=
+github.com/redis/go-redis/extra/redisotel/v9 v9.21.0 h1:36qq3rbF2If2CP0zGHHF8o/4XDluErn6DD0c9/L2iNI=
+github.com/redis/go-redis/extra/redisotel/v9 v9.21.0/go.mod h1:7y2cVB/LXXLHqHOO2jCVzBqimIQk1w7Rp9WSpyVY/o8=
+github.com/redis/go-redis/v9 v9.21.0 h1:FPBE4hhbAke+TLmcY3WkpbDffJEomdqPn3HYiqAtL9E=
+github.com/redis/go-redis/v9 v9.21.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA=
+github.com/richardlehane/mscfb v1.0.7 h1:oeoiM0WE79vHwE8RpIYYvIAc8ajTH2mb6UZm55/+EB0=
+github.com/richardlehane/mscfb v1.0.7/go.mod h1:pe0+IUIc0AHh0+teNzBlJCtSyZdFOGgV4ZK9bsoV+Jo=
+github.com/richardlehane/msoleps v1.0.6 h1:9BvkpjvD+iUBalUY4esMwv6uBkfOip/Lzvd93jvR9gg=
+github.com/richardlehane/msoleps v1.0.6/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
+github.com/rogpeppe/go-internal v1.15.0 h1:D0RCU5rMAp+SpgkiNdrjfJ+LX4J1M32V2NeCY7EJ6hc=
+github.com/rogpeppe/go-internal v1.15.0/go.mod h1:DrUVZyrJU+txYW5/1kwtXQSMFio52ZOxX7yM1VHvnxs=
+github.com/rs/zerolog v1.35.1 h1:m7xQeoiLIiV0BCEY4Hs+j2NG4Gp2o2KPKmhnnLiazKI=
+github.com/rs/zerolog v1.35.1/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw=
github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
+github.com/shamaton/msgpack/v3 v3.2.0 h1:1q2Ms+MWmuRju+PuDMSFDB7p7621npeX4zprJN5Zck8=
+github.com/shamaton/msgpack/v3 v3.2.0/go.mod h1:sgBYvEiyz8JR1NC3yGRoPVME9xXovpnh3l/plW1nfRo=
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
-github.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo=
-github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs=
+github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w=
+github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=
+github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
+github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
+github.com/spiffe/go-spiffe/v2 v2.8.1 h1:eXZMLsu+3MLEPJyGJkolqtVrteZfQdUpOWj6LTiDl/E=
+github.com/spiffe/go-spiffe/v2 v2.8.1/go.mod h1:47Q0Q9/AqGha8QLHp+kxpH4Wca7X7EnOtlIJy3mxZ3U=
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo=
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
@@ -320,220 +336,177 @@ github.com/swaggo/swag v1.16.6 h1:qBNcx53ZaX+M5dxVyTrgQ0PJ/ACK+NzhwcbieTt+9yI=
github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4Xesg=
github.com/thedevsaddam/govalidator v1.9.10 h1:m3dLRbSZ5Hts3VUWYe+vxLMG+FdyQuWOjzTeQRiMCvU=
github.com/thedevsaddam/govalidator v1.9.10/go.mod h1:Ilx8u7cg5g3LXbSS943cx5kczyNuUn7LH/cK5MYuE90=
-github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/tiendc/go-deepcopy v1.7.1 h1:LnubftI6nYaaMOcaz0LphzwraqN8jiWTwm416sitff4=
-github.com/tiendc/go-deepcopy v1.7.1/go.mod h1:4bKjNC2r7boYOkD2IOuZpYjmlDdzjbpTRyCx+goBCJQ=
-github.com/uptrace/uptrace-go v1.38.0 h1:QdJfyQkaz7HNPbqM9OkaQ2L9jfdf0DpfZJv9em7YIgE=
-github.com/uptrace/uptrace-go v1.38.0/go.mod h1:SdE9nA+/y+SOIzatuIK2tZeYhoWgrAzAr08kJEquZyM=
+github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
+github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
+github.com/tidwall/match v1.2.0 h1:0pt8FlkOwjN2fPt4bIl4BoNxb98gGHN2ObFEDkrfZnM=
+github.com/tidwall/match v1.2.0/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
+github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
+github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
+github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
+github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
+github.com/tiendc/go-deepcopy v1.7.2 h1:Ut2yYR7W9tWjTQitganoIue4UGxZwCcJy3orjrrIj44=
+github.com/tiendc/go-deepcopy v1.7.2/go.mod h1:4bKjNC2r7boYOkD2IOuZpYjmlDdzjbpTRyCx+goBCJQ=
+github.com/tinylib/msgp v1.6.4 h1:mOwYbyYDLPj35mkA2BjjYejgJk9BuHxDdvRnb6v2ZcQ=
+github.com/tinylib/msgp v1.6.4/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA=
+github.com/uptrace/uptrace-go v1.43.0 h1:5QuCdyFJdWUEXx6Fr6sYfezdgO6n6lnkOvUTLlyQO7U=
+github.com/uptrace/uptrace-go v1.43.0/go.mod h1:ehDTIdtBSolg4Z0CCvg1C8yR6VX1YFDqBcg2KmsXWn0=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
-github.com/valyala/fasthttp v1.67.0 h1:tqKlJMUP6iuNG8hGjK/s9J4kadH7HLV4ijEcPGsezac=
-github.com/valyala/fasthttp v1.67.0/go.mod h1:qYSIpqt/0XNmShgo/8Aq8E3UYWVVwNS2QYmzd8WIEPM=
+github.com/valyala/fasthttp v1.72.0 h1:R7kYdoWhn1ye1fVpP+cDHDJwYm3NkwLliwgzJ/Abg7M=
+github.com/valyala/fasthttp v1.72.0/go.mod h1:zsbLTYqcpIktdQytlVBwIjY9La5d6bs990nBxWg8efk=
github.com/vanng822/css v1.0.1 h1:10yiXc4e8NI8ldU6mSrWmSWMuyWgPr9DZ63RSlsgDw8=
github.com/vanng822/css v1.0.1/go.mod h1:tcnB1voG49QhCrwq1W0w5hhGasvOg+VQp9i9H1rCM1w=
-github.com/vanng822/go-premailer v1.25.0 h1:hGHKfroCXrCDTyGVR8o4HCON5/HWvc7C1uocS+VnaZs=
-github.com/vanng822/go-premailer v1.25.0/go.mod h1:8WJKIPZtegxqSOA8+eDFx7QNesKmMYfGEIodLTJqrtM=
+github.com/vanng822/go-premailer v1.34.0 h1:CW7RUnjCfXrkuCbgC2wi/Cub7IwKslJWD/OkIBlcQUk=
+github.com/vanng822/go-premailer v1.34.0/go.mod h1:LGYI7ym6FQ7KcHN16LiQRF+tlan7qwhP1KEhpTINFpo=
+github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
+github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
+github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
-github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
-github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
+github.com/xdg-go/scram v1.2.0 h1:bYKF2AEwG5rqd1BumT4gAnvwU/M9nBp2pTSxeZw7Wvs=
+github.com/xdg-go/scram v1.2.0/go.mod h1:3dlrS0iBaWKYVt2ZfA4cj48umJZ+cAEbR6/SjLA88I8=
+github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
+github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
github.com/xuri/efp v0.0.1 h1:fws5Rv3myXyYni8uwj2qKjVaRP30PdjeYe2Y6FDsCL8=
github.com/xuri/efp v0.0.1/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
-github.com/xuri/excelize/v2 v2.10.0 h1:8aKsP7JD39iKLc6dH5Tw3dgV3sPRh8uRVXu/fMstfW4=
-github.com/xuri/excelize/v2 v2.10.0/go.mod h1:SC5TzhQkaOsTWpANfm+7bJCldzcnU/jrhqkTi/iBHBU=
+github.com/xuri/excelize/v2 v2.11.0 h1:HxaEFl6sRN2+8J5a8HaKq+0M4FsjBGMnWWtjOCPSG88=
+github.com/xuri/excelize/v2 v2.11.0/go.mod h1:jxFLbzaIwGQ5ufFNvYfUOHqXhfPaNmP14KWfmNz2Uak=
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 h1:+C0TIdyyYmzadGaL/HBLbf3WdLgC29pgyhTjAT/0nuE=
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
-github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM=
+github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
+github.com/yuin/goldmark v1.8.2 h1:kEGpgqJXdgbkhcOgBxkC0X0PmoPG1ZyoZ117rDVp4zE=
+github.com/yuin/goldmark v1.8.2/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg=
+github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs=
+github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s=
+go.mongodb.org/mongo-driver/v2 v2.8.0 h1:CxWDGQYY8QQwNjAl/aq2sfWakdnWZynnqJ9F4DhHbP8=
+go.mongodb.org/mongo-driver/v2 v2.8.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
-go.opentelemetry.io/contrib v1.38.0 h1:msaHYZ13HfLIbqXsGwZZQBg5zgxwumlZ1mCkXn3E7LM=
-go.opentelemetry.io/contrib v1.38.0/go.mod h1:4Vp7Az5Dez02V1lCi9OqLvSmSz0lbZu/O2r4XZsqwB0=
-go.opentelemetry.io/contrib/detectors/gcp v1.38.0 h1:ZoYbqX7OaA/TAikspPl3ozPI6iY6LiIY9I8cUfm+pJs=
-go.opentelemetry.io/contrib/detectors/gcp v1.38.0/go.mod h1:SU+iU7nu5ud4oCb3LQOhIZ3nRLj6FNVrKgtflbaf2ts=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg=
-go.opentelemetry.io/contrib/instrumentation/runtime v0.63.0 h1:PeBoRj6af6xMI7qCupwFvTbbnd49V7n5YpG6pg8iDYQ=
-go.opentelemetry.io/contrib/instrumentation/runtime v0.63.0/go.mod h1:ingqBCtMCe8I4vpz/UVzCW6sxoqgZB37nao91mLQ3Bw=
-go.opentelemetry.io/contrib/propagators/b3 v1.19.0 h1:ulz44cpm6V5oAeg5Aw9HyqGFMS6XM7untlMEhD7YzzA=
-go.opentelemetry.io/contrib/propagators/b3 v1.19.0/go.mod h1:OzCmE2IVS+asTI+odXQstRGVfXQ4bXv9nMBRK0nNyqQ=
-go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
-go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
-go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0 h1:QQqYw3lkrzwVsoEX0w//EhH/TCnpRdEenKBOOEIMjWc=
-go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.14.0/go.mod h1:gSVQcr17jk2ig4jqJ2DX30IdWH251JcNAecvrqTxH1s=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 h1:Oe2z/BCg5q7k4iXC3cqJxKYg0ieRiOqF0cecFYdPTwk=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0/go.mod h1:ZQM5lAJpOsKnYagGg/zV2krVqTtaVdYdDkhMoX6Oalg=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4=
-go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY=
-go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 h1:kJxSDN4SgWWTjG/hPp3O7LCGLcHXFlvS2/FFOrwL+SE=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0/go.mod h1:mgIOzS7iZeKJdeB8/NYHrJ48fdGc71Llo5bJ1J4DWUE=
-go.opentelemetry.io/otel/log v0.14.0 h1:2rzJ+pOAZ8qmZ3DDHg73NEKzSZkhkGIua9gXtxNGgrM=
-go.opentelemetry.io/otel/log v0.14.0/go.mod h1:5jRG92fEAgx0SU/vFPxmJvhIuDU9E1SUnEQrMlJpOno=
-go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
-go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
-go.opentelemetry.io/otel/oteltest v1.0.0-RC3 h1:MjaeegZTaX0Bv9uB9CrdVjOFM/8slRjReoWoV9xDCpY=
-go.opentelemetry.io/otel/oteltest v1.0.0-RC3/go.mod h1:xpzajI9JBRr7gX63nO6kAmImmYIAtuQblZ36Z+LfCjE=
-go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
-go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
-go.opentelemetry.io/otel/sdk/log v0.14.0 h1:JU/U3O7N6fsAXj0+CXz21Czg532dW2V4gG1HE/e8Zrg=
-go.opentelemetry.io/otel/sdk/log v0.14.0/go.mod h1:imQvII+0ZylXfKU7/wtOND8Hn4OpT3YUoIgqJVksUkM=
-go.opentelemetry.io/otel/sdk/log/logtest v0.14.0 h1:Ijbtz+JKXl8T2MngiwqBlPaHqc4YCaP/i13Qrow6gAM=
-go.opentelemetry.io/otel/sdk/log/logtest v0.14.0/go.mod h1:dCU8aEL6q+L9cYTqcVOk8rM9Tp8WdnHOPLiBgp0SGOA=
-go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
-go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
-go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
-go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
-go.opentelemetry.io/proto/otlp v1.8.0 h1:fRAZQDcAFHySxpJ1TwlA1cJ4tvcrw7nXl9xWWC8N5CE=
-go.opentelemetry.io/proto/otlp v1.8.0/go.mod h1:tIeYOeNBU4cvmPqpaji1P+KbB4Oloai8wN4rWzRrFF0=
+go.opentelemetry.io/contrib v1.44.0 h1:cVL0yu3uyrXkAmxonxvzYysIo5EZa8jKh3740MzxBzI=
+go.opentelemetry.io/contrib v1.44.0/go.mod h1:JYdNU7Pl/2ckKMGp8/G7zeyhEbtRmy9Q8bcrtv75Znk=
+go.opentelemetry.io/contrib/detectors/gcp v1.44.0 h1:NmLfL734pJhM0JKaYd2Y28+nY9dPRWYAAbxhRCrKXPw=
+go.opentelemetry.io/contrib/detectors/gcp v1.44.0/go.mod h1:tNAsgd8avTGke1+MndXlU5Cru4PQ9Ai/cCNWQv/ZJ/s=
+go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/v2/mongo/otelmongo v0.0.0-20260624193928-df9c7a836708 h1:s5k/FTgmE4Mj2jFG38Dj5TQgxDRMG92fRK3puTdMHew=
+go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/v2/mongo/otelmongo v0.0.0-20260624193928-df9c7a836708/go.mod h1:VgtIsrVXKo8KmG2sFvQazHcQ98P2FHQ+ZePXtpTPjqs=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 h1:2yEATaop1/a1I4psnSLgWVPLWwCzkqWakgJy7xTDVy0=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0/go.mod h1:D7J12YRapIekYyPWgGPlA/23pRmpSEZC5xJC/TTLI9U=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI=
+go.opentelemetry.io/contrib/instrumentation/runtime v0.69.0 h1:MtkMsuRo3zEXTTMALfyrszwCDZTkB6wolyPjbwFAdq0=
+go.opentelemetry.io/contrib/instrumentation/runtime v0.69.0/go.mod h1:FYTxnpsm+UPD0erZNq20GvnM8T2YQHiHtT2vokdpoac=
+go.opentelemetry.io/contrib/processors/minsev v0.16.1 h1:DYL02u57VGQjrG8c09i6Bx5R74h4XxLj75wEk5h8/DA=
+go.opentelemetry.io/contrib/processors/minsev v0.16.1/go.mod h1:VnF+kZnkagrTfTb2mV+6PTMAtPulgjpcUajm8sRk3tQ=
+go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU=
+go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc=
+go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.20.0 h1:owlhcJ3QO3X0YTDTCcDZ4V+6aVDkWbNmBoQ5NUp7Oww=
+go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.20.0/go.mod h1:MP4eemTiI9zC8fgg+DYynhYDYf3ba72S376TvP+Ye0Q=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.44.0 h1:RuynHbfU8JUEw7DyONgkVYg2SVtsoF28y0LGIr69jgA=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.44.0/go.mod h1:qZF+/lBs71APw8mlnEZcqZHMzqrYrsFiJOv83lX1OGo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 h1:4YsVu3B8+3qtWYYrsUYgn0OG78pN0rnNPRGX4SbokQI=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0/go.mod h1:+wnlSn0mD1ADVMe3v9Z/WIaiz6q6gL2J/ejaAmdmv80=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0 h1:lgh3PiVrRUWMLOVSkQicxzZll5NjF1r+AtsX1XRIHw0=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0/go.mod h1:5Cnhth3m/AgOeTgE3ex12pPmiu/gGtZit03kSzx9X7s=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.44.0 h1:hqxVTu/GtBF+vJ8d1fzW7fRxZFvgoDjWcxwwCaFDYpU=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.44.0/go.mod h1:z5fVEF4X5v0ESvlJqBrrFlBVoj5EQuefZpzsu7R+x5Q=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.44.0 h1:bl2S7Ubua0Nms+D/gAmznQTd4dxxMA93aKbcpKqiTCs=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.44.0/go.mod h1:L0hRV50XdVIODHUfWEqGRCXQvj2rV82STVo12FMFBU0=
+go.opentelemetry.io/otel/log v0.20.0 h1:/5i0vuHxCLWUfChWG41K9wkM0jafruPw9NU1/RCJirs=
+go.opentelemetry.io/otel/log v0.20.0/go.mod h1:wOcMcjsZpG8x7Bak7IhSi/lg8wscV2C1VdrKCLPlt0E=
+go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc=
+go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo=
+go.opentelemetry.io/otel/metric/x v0.66.0 h1:YkCrx1zLOChi9ZcZ6euupOcsgzbVlec7D/xoEU1+cTA=
+go.opentelemetry.io/otel/metric/x v0.66.0/go.mod h1:d1+BDj9t96do0/1LoU1ayfCv79ZgNE41qbhBvnMOBZk=
+go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58=
+go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0=
+go.opentelemetry.io/otel/sdk/log v0.20.0 h1:vM3xI7TQgKPiSghe6urZtAkyFY7SodrSpC83CffDFuY=
+go.opentelemetry.io/otel/sdk/log v0.20.0/go.mod h1:Knej2nmsTUzN79T2eeXdRsjjPcoxoq2pUyUHz9TFyyU=
+go.opentelemetry.io/otel/sdk/log/logtest v0.20.0 h1:OqdRZ1guyzamK3M6LlRsmGqRrjkHWw6WZOKKli5ELpg=
+go.opentelemetry.io/otel/sdk/log/logtest v0.20.0/go.mod h1:PuMIlm7zAt7c3z8zfOI5ox4iT1Z87We+PF6YoINux/M=
+go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI=
+go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA=
+go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk=
+go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE=
+go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g=
+go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk=
+go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
+go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
+go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo=
+go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
-golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
-golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
-golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
-golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
-golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b h1:18qgiDvlvH7kk8Ioa8Ov+K6xCi0GMvmGfGW0sgd/SYA=
-golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
-golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ=
-golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw=
+golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk=
+golang.org/x/image v0.38.0 h1:5l+q+Y9JDC7mBOMjo4/aPhMDcxEptsX+Tt3GgRQRPuE=
+golang.org/x/image v0.38.0/go.mod h1:/3f6vaXC+6CEanU4KJxbcUZyEePbyKbaLoDOe4ehFYY=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
-golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ=
+golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
-golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
-golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
-golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
-golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo=
-golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
+golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE=
+golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU=
+golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
+golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
-golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek=
+golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
-golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
+golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
+golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
-golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
-golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
-golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
-golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
-golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
-golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
-golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
-golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
+golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs=
+golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY=
+golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
+golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
-golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
-golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
-golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
+golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q=
+golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
-gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
-google.golang.org/api v0.256.0 h1:u6Khm8+F9sxbCTYNoBHg6/Hwv0N/i+V94MvkOSor6oI=
-google.golang.org/api v0.256.0/go.mod h1:KIgPhksXADEKJlnEoRa9qAII4rXcy40vfI8HRqcU964=
+gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
+gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
+google.golang.org/api v0.287.1 h1:LiyJx32VU3cwQfLchn/513qKhc25hq0pEANYJoWNnnI=
+google.golang.org/api v0.287.1/go.mod h1:lM2kYRzYUCBY91P9h6VF1PYmvhxii3O5hji37qRvIcY=
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
-google.golang.org/genproto v0.0.0-20251014184007-4626949a642f h1:vLd1CJuJOUgV6qijD7KT5Y2ZtC97ll4dxjTUappMnbo=
-google.golang.org/genproto v0.0.0-20251014184007-4626949a642f/go.mod h1:PI3KrSadr00yqfv6UDvgZGFsmLqeRIwt8x4p5Oo7CdM=
-google.golang.org/genproto/googleapis/api v0.0.0-20251014184007-4626949a642f h1:OiFuztEyBivVKDvguQJYWq1yDcfAHIID/FVrPR4oiI0=
-google.golang.org/genproto/googleapis/api v0.0.0-20251014184007-4626949a642f/go.mod h1:kprOiu9Tr0JYyD6DORrc4Hfyk3RFXqkQ3ctHEum3ZbM=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 h1:tRPGkdGHuewF4UisLzzHHr1spKw92qLM98nIzxbC0wY=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
-google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A=
-google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c=
+google.golang.org/genproto v0.0.0-20260622175928-b703f567277d h1:CP5omUq8AJTiWMrPKM1WRLJ7zZeXd9OPcQD3TbBNAyY=
+google.golang.org/genproto v0.0.0-20260622175928-b703f567277d/go.mod h1:DrwuGJgFSEVNpv3S5Q5VxhRTvdnjauw9GtvwVOEARfA=
+google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7 h1:jQ9p21COKWjP3VwuFrNRiiOTMh3mPpN45R7SLrH/HUU=
+google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7/go.mod h1:KqHwBx2upmfa1XSi1WuRvC+2VGCLtooKkfmyvRbUmqA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260630182238-925bb5da69e7 h1:eM/YSd5bBFagF51o1E745Ta7RwzpW0h+z+QDNZOgmQ8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260630182238-925bb5da69e7/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
+google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE=
+google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
-google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
+google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
+google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/stretchr/testify.v1 v1.2.2 h1:yhQC6Uy5CqibAIlk1wlusa/MJ3iAN49/BsR/dCCKz3M=
@@ -549,7 +522,7 @@ gorm.io/driver/postgres v1.6.0 h1:2dxzU8xJ+ivvqTRph34QX+WrRaJlmfyPqXmoGVjMBa4=
gorm.io/driver/postgres v1.6.0/go.mod h1:vUw0mrGgrTK+uPHEhAdV4sfFELrByKVGnaVRkXDhtWo=
gorm.io/driver/sqlite v1.6.0 h1:WHRRrIiulaPiPFmDcod6prc4l2VGVWHz80KspNsxSfQ=
gorm.io/driver/sqlite v1.6.0/go.mod h1:AO9V1qIQddBESngQUKWL9yoH93HIeA1X6V633rBwyT8=
-gorm.io/gorm v1.31.1 h1:7CA8FTFz/gRfgqgpeKIBcervUn3xSyPUmr6B2WXJ7kg=
-gorm.io/gorm v1.31.1/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs=
+gorm.io/gorm v1.31.2 h1:3o8FXNo9v9S858gil+3LlZA1LkCOzgb4g5BL64FgaCo=
+gorm.io/gorm v1.31.2/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs=
gorm.io/plugin/opentelemetry v0.1.16 h1:Kypj2YYAliJqkIczDZDde6P6sFMhKSlG5IpngMFQGpc=
gorm.io/plugin/opentelemetry v0.1.16/go.mod h1:P3RmTeZXT+9n0F1ccUqR5uuTvEXDxF8k2UpO7mTIB2Y=
diff --git a/api/pkg/cache/memory_cache.go b/api/pkg/cache/memory_cache.go
index 2e32bcffb..a5b0487d7 100644
--- a/api/pkg/cache/memory_cache.go
+++ b/api/pkg/cache/memory_cache.go
@@ -2,11 +2,10 @@ package cache
import (
"context"
- "fmt"
"time"
"github.com/NdoleStudio/httpsms/pkg/telemetry"
- "github.com/palantir/stacktrace"
+ "github.com/NdoleStudio/stacktrace"
ttlCache "github.com/patrickmn/go-cache"
)
@@ -31,7 +30,7 @@ func (cache *memoryCache) Get(ctx context.Context, key string) (value string, er
response, ok := cache.store.Get(key)
if !ok {
- return "", stacktrace.NewError(fmt.Sprintf("no item found in cache with key [%s]", key))
+ return "", stacktrace.NewErrorf("no item found in cache with key [%s]", key)
}
return response.(string), nil
diff --git a/api/pkg/cache/redis_cache.go b/api/pkg/cache/redis_cache.go
index 18a6a887b..46d9044bd 100644
--- a/api/pkg/cache/redis_cache.go
+++ b/api/pkg/cache/redis_cache.go
@@ -3,11 +3,10 @@ package cache
import (
"context"
"errors"
- "fmt"
"time"
"github.com/NdoleStudio/httpsms/pkg/telemetry"
- "github.com/palantir/stacktrace"
+ "github.com/NdoleStudio/stacktrace"
"github.com/redis/go-redis/v9"
)
@@ -32,10 +31,10 @@ func (cache *redisCache) Get(ctx context.Context, key string) (value string, err
response, err := cache.client.Get(ctx, key).Result()
if errors.Is(err, redis.Nil) {
- return "", stacktrace.Propagate(err, fmt.Sprintf("no item found in redis with key [%s]", key))
+ return "", stacktrace.Propagatef(err, "no item found in redis with key [%s]", key)
}
if err != nil {
- return "", stacktrace.Propagate(err, fmt.Sprintf("cannot get item in redis with key [%s]", key))
+ return "", stacktrace.Propagatef(err, "cannot get item in redis with key [%s]", key)
}
return response, nil
}
@@ -47,7 +46,7 @@ func (cache *redisCache) Set(ctx context.Context, key string, value string, ttl
err := cache.client.Set(ctx, key, value, ttl).Err()
if err != nil {
- return cache.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, "cannot set item in redis"))
+ return cache.tracer.WrapErrorSpan(span, stacktrace.Propagatef(err, "cannot set item in redis"))
}
return nil
}
diff --git a/api/pkg/di/config.go b/api/pkg/di/config.go
index 586934f98..0c6b86800 100644
--- a/api/pkg/di/config.go
+++ b/api/pkg/di/config.go
@@ -3,6 +3,7 @@ package di
import (
"log"
"os"
+ "strings"
"github.com/joho/godotenv"
)
@@ -23,3 +24,15 @@ func getEnvWithDefault(key, defaultValue string) string {
return value
}
+
+func splitCommaEnv(key, defaultValue string) []string {
+ value := getEnvWithDefault(key, defaultValue)
+ parts := strings.Split(value, ",")
+ result := make([]string, 0, len(parts))
+ for _, part := range parts {
+ if trimmed := strings.TrimSpace(part); trimmed != "" {
+ result = append(result, trimmed)
+ }
+ }
+ return result
+}
diff --git a/api/pkg/di/container.go b/api/pkg/di/container.go
index 07bce2c36..ad9a18858 100644
--- a/api/pkg/di/container.go
+++ b/api/pkg/di/container.go
@@ -4,25 +4,28 @@ import (
"context"
"crypto/tls"
"fmt"
+ "log"
"net/http"
"os"
"strconv"
+ "strings"
"time"
+ "cloud.google.com/go/compute/metadata"
+ "github.com/NdoleStudio/httpsms/docs"
plunk "github.com/NdoleStudio/plunk-go"
"github.com/pusher/pusher-http-go/v5"
- "github.com/NdoleStudio/httpsms/docs"
-
otelMetric "go.opentelemetry.io/otel/metric"
"github.com/dgraph-io/ristretto/v2"
- "github.com/gofiber/contrib/otelfiber"
+ otelfiber "github.com/gofiber/contrib/v3/otel"
"gorm.io/plugin/opentelemetry/tracing"
"github.com/NdoleStudio/httpsms/pkg/discord"
+ "cloud.google.com/go/storage"
mexporter "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric"
cloudtrace "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace"
"github.com/NdoleStudio/httpsms/pkg/cache"
@@ -34,8 +37,6 @@ import (
"github.com/NdoleStudio/go-otelroundtripper"
- "github.com/jinzhu/now"
-
"github.com/uptrace/uptrace-go/uptrace"
"github.com/NdoleStudio/httpsms/pkg/emails"
@@ -43,10 +44,13 @@ import (
cloudtasks "cloud.google.com/go/cloudtasks/apiv2"
"go.opentelemetry.io/otel"
+ "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"
+ "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
+ "go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/resource"
semconv "go.opentelemetry.io/otel/semconv/v1.10.0"
- "firebase.google.com/go/messaging"
+ axiomzerolog "github.com/axiomhq/axiom-go/adapters/zerolog"
"github.com/hirosassa/zerodriver"
"github.com/rs/zerolog"
"go.opentelemetry.io/otel/sdk/trace"
@@ -56,44 +60,46 @@ import (
"github.com/NdoleStudio/httpsms/pkg/middlewares"
"google.golang.org/api/option"
- "github.com/gofiber/fiber/v2/middleware/cors"
+ "github.com/gofiber/fiber/v3/middleware/compress"
+ "github.com/gofiber/fiber/v3/middleware/cors"
"github.com/NdoleStudio/httpsms/pkg/entities"
"github.com/NdoleStudio/httpsms/pkg/listeners"
"github.com/NdoleStudio/httpsms/pkg/repositories"
"github.com/NdoleStudio/httpsms/pkg/services"
- "github.com/gofiber/fiber/v2"
- fiberLogger "github.com/gofiber/fiber/v2/middleware/logger"
- "github.com/gofiber/swagger"
- "github.com/palantir/stacktrace"
+ "github.com/NdoleStudio/stacktrace"
+ swagger "github.com/gofiber/contrib/v3/swaggo"
+ "github.com/gofiber/fiber/v3"
+ fiberLogger "github.com/gofiber/fiber/v3/middleware/logger"
ttlCache "github.com/patrickmn/go-cache"
"gorm.io/gorm"
"github.com/NdoleStudio/httpsms/pkg/handlers"
"github.com/NdoleStudio/httpsms/pkg/telemetry"
"github.com/NdoleStudio/httpsms/pkg/validators"
+ mongoDriver "go.mongodb.org/mongo-driver/v2/mongo"
"gorm.io/driver/postgres"
gormLogger "gorm.io/gorm/logger"
)
// Container is used to resolve services at runtime
type Container struct {
- projectID string
- db *gorm.DB
- dedicatedDB *gorm.DB
- version string
- app *fiber.App
- eventDispatcher *services.EventDispatcher
- logger telemetry.Logger
+ projectID string
+ db *gorm.DB
+ dedicatedDB *gorm.DB
+ mongoDB *mongoDriver.Database
+ version string
+ app *fiber.App
+ eventDispatcher *services.EventDispatcher
+ logger telemetry.Logger
+ attachmentRepository repositories.AttachmentRepository
+ userRistrettoCache *ristretto.Cache[string, entities.AuthContext]
+ phoneRistrettoCache *ristretto.Cache[string, *entities.Phone]
+ inMemoryCache cache.Cache
}
// NewLiteContainer creates a Container without any routes or listeners
func NewLiteContainer() (container *Container) {
- // Set location to UTC
- now.DefaultConfig = &now.Config{
- TimeLocation: time.UTC,
- }
-
return &Container{
logger: logger(3).WithService(fmt.Sprintf("%T", container)),
}
@@ -101,11 +107,6 @@ func NewLiteContainer() (container *Container) {
// NewContainer creates a new dependency injection container
func NewContainer(projectID string, version string) (container *Container) {
- // Set location to UTC
- now.DefaultConfig = &now.Config{
- TimeLocation: time.UTC,
- }
-
container = &Container{
projectID: projectID,
version: version,
@@ -116,6 +117,7 @@ func NewContainer(projectID string, version string) (container *Container) {
container.RegisterMessageListeners()
container.RegisterMessageRoutes()
+ container.RegisterAttachmentRoutes()
container.RegisterBulkMessageRoutes()
container.RegisterMessageThreadRoutes()
@@ -125,9 +127,12 @@ func NewContainer(projectID string, version string) (container *Container) {
container.RegisterHeartbeatListeners()
container.RegisterUserRoutes()
+ container.RegisterMessageSendScheduleRoutes()
+ container.RegisterMessageSendScheduleListeners()
container.RegisterUserListeners()
container.RegisterPhoneRoutes()
+ container.RegisterPhoneListeners()
container.RegisterEventRoutes()
@@ -170,19 +175,30 @@ func (container *Container) App() (app *fiber.App) {
app = fiber.New()
+ // Health check endpoint registered before middleware for reliable Docker health checks
+ app.Get("/health", func(c fiber.Ctx) error {
+ return c.SendStatus(fiber.StatusOK)
+ })
+
+ app.Use(compress.New(compress.Config{
+ Level: compress.LevelBestCompression,
+ }))
+
if os.Getenv("USE_HTTP_LOGGER") == "true" {
app.Use(fiberLogger.New())
}
app.Use(otelfiber.Middleware())
- app.Use(cors.New(
- cors.Config{
- AllowOrigins: getEnvWithDefault("CORS_ALLOW_ORIGINS", "*"),
- AllowHeaders: getEnvWithDefault("CORS_ALLOW_HEADERS", "*"),
- AllowMethods: getEnvWithDefault("CORS_ALLOW_METHODS", "GET,POST,PUT,DELETE,OPTIONS"),
- AllowCredentials: false,
- ExposeHeaders: getEnvWithDefault("CORS_EXPOSE_HEADERS", "*"),
- }),
+ app.Use(
+ cors.New(
+ cors.Config{
+ AllowOrigins: splitCommaEnv("CORS_ALLOW_ORIGINS", "*"),
+ AllowHeaders: splitCommaEnv("CORS_ALLOW_HEADERS", "*"),
+ AllowMethods: splitCommaEnv("CORS_ALLOW_METHODS", "GET,POST,PUT,DELETE,OPTIONS"),
+ AllowCredentials: false,
+ ExposeHeaders: splitCommaEnv("CORS_EXPOSE_HEADERS", "*"),
+ },
+ ),
)
app.Use(middlewares.HTTPRequestLogger(container.Tracer(), container.Logger()))
app.Use(middlewares.BearerAuth(container.Logger(), container.Tracer(), container.FirebaseAuthClient()))
@@ -228,6 +244,10 @@ func (container *Container) GormLogger() gormLogger.Interface {
)
}
+func (container *Container) connect(dsn string, config *gorm.Config) (db *gorm.DB, err error) {
+ return gorm.Open(postgres.Open(dsn), config)
+}
+
// DedicatedDB creates an instance of gorm.DB if it has not been created already
func (container *Container) DedicatedDB() (db *gorm.DB) {
container.logger.Debug(fmt.Sprintf("creating %T", db))
@@ -242,36 +262,50 @@ func (container *Container) DedicatedDB() (db *gorm.DB) {
config = &gorm.Config{Logger: container.GormLogger()}
}
- db, err := gorm.Open(postgres.Open(os.Getenv("DATABASE_URL_DEDICATED")), config)
+ db, err := container.connect(os.Getenv("DATABASE_URL_DEDICATED"), config)
if err != nil {
container.logger.Fatal(err)
}
- sqlDB, err := db.DB()
- if err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot get sql.DB from GORM"))
+ if err = db.Use(tracing.NewPlugin()); err != nil {
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot use GORM tracing plugin"))
}
- sqlDB.SetMaxOpenConns(2)
- sqlDB.SetConnMaxLifetime(time.Hour)
-
- if err = db.Use(tracing.NewPlugin()); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot use GORM tracing plugin"))
+ container.dedicatedDB = db
+ if os.Getenv("DATABASE_MIGRATION_SKIP") != "" {
+ container.logger.Debug(fmt.Sprintf("skipping migrations for [%T]", db))
+ return container.dedicatedDB
}
container.logger.Debug(fmt.Sprintf("Running migrations for dedicated [%T]", db))
if err = db.AutoMigrate(&entities.Heartbeat{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.Heartbeat{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.Heartbeat{}))
}
if err = db.AutoMigrate(&entities.HeartbeatMonitor{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.HeartbeatMonitor{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.HeartbeatMonitor{}))
}
- container.dedicatedDB = db
return container.dedicatedDB
}
+// MongoDB creates a *mongo.Database connection to MongoDB Atlas
+func (container *Container) MongoDB() *mongoDriver.Database {
+ if container.mongoDB != nil {
+ return container.mongoDB
+ }
+
+ container.logger.Debug("creating MongoDB *mongo.Database connection")
+
+ db, err := repositories.NewMongoDB(os.Getenv("MONGODB_URI"))
+ if err != nil {
+ container.logger.Fatal(err)
+ }
+
+ container.mongoDB = db
+ return container.mongoDB
+}
+
// DBWithoutMigration creates an instance of gorm.DB if it has not been created already
func (container *Container) DBWithoutMigration() (db *gorm.DB) {
if container.db != nil {
@@ -280,9 +314,9 @@ func (container *Container) DBWithoutMigration() (db *gorm.DB) {
container.logger.Debug(fmt.Sprintf("creating %T", db))
- config := &gorm.Config{TranslateError: true}
- if isLocal() {
- config.Logger = container.GormLogger()
+ config := &gorm.Config{
+ TranslateError: true,
+ Logger: container.GormLogger(),
}
db, err := gorm.Open(postgres.Open(os.Getenv("DATABASE_URL")), config)
@@ -292,7 +326,7 @@ func (container *Container) DBWithoutMigration() (db *gorm.DB) {
container.db = db
if err = db.Use(tracing.NewPlugin()); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot use GORM tracing plugin"))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot use GORM tracing plugin"))
}
return container.db
}
@@ -305,9 +339,9 @@ func (container *Container) DB() (db *gorm.DB) {
container.logger.Debug(fmt.Sprintf("creating %T", db))
- config := &gorm.Config{TranslateError: true}
- if isLocal() {
- config.Logger = container.GormLogger()
+ config := &gorm.Config{
+ TranslateError: true,
+ Logger: container.GormLogger(),
}
db, err := gorm.Open(postgres.Open(os.Getenv("DATABASE_URL")), config)
@@ -317,55 +351,67 @@ func (container *Container) DB() (db *gorm.DB) {
container.db = db
if err = db.Use(tracing.NewPlugin()); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot use GORM tracing plugin"))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot use GORM tracing plugin"))
+ }
+
+ if os.Getenv("DATABASE_MIGRATION_SKIP") != "" {
+ container.logger.Debug(fmt.Sprintf("skipping migrations for [%T]", db))
+ return container.db
}
container.logger.Debug(fmt.Sprintf("Running migrations for %T", db))
// This prevents a bug in the Gorm AutoMigrate where it tries to delete this no existent constraints
- db.Exec(`
+ // This is only applicable to PROD on cockroachDB
+ if os.Getenv("DATABASE_MIGRATION_CONSTRAINT_FIX") == "1" {
+ db.Exec(`
ALTER TABLE users ADD CONSTRAINT IF NOT EXISTS uni_users_api_key CHECK (api_key IS NOT NULL);
ALTER TABLE phone_api_keys ADD CONSTRAINT IF NOT EXISTS uni_phone_api_keys_api_key CHECK (api_key IS NOT NULL);
ALTER TABLE discords ADD CONSTRAINT IF NOT EXISTS uni_discords_server_id CHECK (server_id IS NOT NULL);`)
+ }
if err = db.AutoMigrate(&entities.Message{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.Message{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.Message{}))
}
if err = db.AutoMigrate(&entities.MessageThread{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.MessageThread{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.MessageThread{}))
}
if err = db.AutoMigrate(&entities.User{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.User{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.User{}))
+ }
+
+ if err = db.AutoMigrate(&entities.MessageSendSchedule{}); err != nil {
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.MessageSendSchedule{}))
}
if err = db.AutoMigrate(&entities.Phone{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.Phone{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.Phone{}))
}
if err = db.AutoMigrate(&entities.PhoneNotification{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.PhoneNotification{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.PhoneNotification{}))
}
if err = db.AutoMigrate(&entities.BillingUsage{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.BillingUsage{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.BillingUsage{}))
}
if err = db.AutoMigrate(&entities.Webhook{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.Webhook{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.Webhook{}))
}
if err = db.AutoMigrate(&entities.Discord{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.Discord{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.Discord{}))
}
if err = db.AutoMigrate(&entities.Integration3CX{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.Integration3CX{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.Integration3CX{}))
}
if err = db.AutoMigrate(&entities.PhoneAPIKey{}); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot migrate %T", &entities.PhoneAPIKey{})))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot migrate %T", &entities.PhoneAPIKey{}))
}
return container.db
@@ -374,19 +420,23 @@ ALTER TABLE discords ADD CONSTRAINT IF NOT EXISTS uni_discords_server_id CHECK (
// FirebaseApp creates a new instance of firebase.App
func (container *Container) FirebaseApp() (app *firebase.App) {
container.logger.Debug(fmt.Sprintf("creating %T", app))
+
app, err := firebase.NewApp(context.Background(), nil, option.WithCredentialsJSON(container.FirebaseCredentials()))
if err != nil {
- msg := "cannot initialize firebase application"
- container.logger.Fatal(stacktrace.Propagate(err, msg))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot initialize firebase application"))
}
return app
}
-// InMemoryCache creates a new instance of the in memory cache.Cache
+// InMemoryCache returns the shared in-memory cache.Cache, creating it on the first call.
func (container *Container) InMemoryCache() cache.Cache {
+ if container.inMemoryCache != nil {
+ return container.inMemoryCache
+ }
container.logger.Debug("creating an in memory cache")
c := ttlCache.New(time.Hour, time.Hour*2)
- return cache.NewMemoryCache(container.Tracer(), c)
+ container.inMemoryCache = cache.NewMemoryCache(container.Tracer(), c)
+ return container.inMemoryCache
}
// Cache creates a new instance of cache.Cache
@@ -394,22 +444,24 @@ func (container *Container) Cache() cache.Cache {
container.logger.Debug("creating cache.Cache")
opt, err := redis.ParseURL(os.Getenv("REDIS_URL"))
if err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, fmt.Sprintf("cannot parse redis url [%s]", os.Getenv("REDIS_URL"))))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot parse redis url [%s]", os.Getenv("REDIS_URL")))
}
- opt.TLSConfig = &tls.Config{
- MinVersion: tls.VersionTLS12,
+ if strings.HasPrefix(os.Getenv("REDIS_URL"), "rediss://") {
+ opt.TLSConfig = &tls.Config{
+ MinVersion: tls.VersionTLS12,
+ }
}
redisClient := redis.NewClient(opt)
// Enable tracing instrumentation.
if err = redisotel.InstrumentTracing(redisClient); err != nil {
- container.logger.Error(stacktrace.Propagate(err, "cannot instrument redis tracing"))
+ container.logger.Error(stacktrace.Propagatef(err, "cannot instrument redis tracing"))
}
// Enable metrics instrumentation.
if err = redisotel.InstrumentMetrics(redisClient); err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot instrument redis metrics"))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot instrument redis metrics"))
}
return cache.NewRedisCache(container.Tracer(), redisClient)
@@ -420,8 +472,7 @@ func (container *Container) FirebaseAuthClient() (client *auth.Client) {
container.logger.Debug(fmt.Sprintf("creating %T", client))
authClient, err := container.FirebaseApp().Auth(context.Background())
if err != nil {
- msg := "cannot initialize firebase auth client"
- container.logger.Fatal(stacktrace.Propagate(err, msg))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot initialize firebase auth client"))
}
return authClient
}
@@ -432,7 +483,7 @@ func (container *Container) CloudTasksClient() (client *cloudtasks.Client) {
client, err := cloudtasks.NewClient(context.Background(), option.WithCredentialsJSON(container.FirebaseCredentials()))
if err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot initialize cloud tasks client"))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot initialize cloud tasks client"))
}
return client
@@ -483,15 +534,26 @@ func (container *Container) CloudTaskEventsQueue() (queue services.PushQueue) {
)
}
-// FirebaseMessagingClient creates a new instance of messaging.Client
-func (container *Container) FirebaseMessagingClient() (client *messaging.Client) {
- container.logger.Debug(fmt.Sprintf("creating %T", client))
+// FCMClient creates the appropriate FCM client based on configuration.
+// When FCM_ENDPOINT is set, it returns an EmulatorFCMClient that sends
+// notifications directly to the phone emulator via HTTP.
+// Otherwise, it returns a FirebaseFCMClient that uses the real Firebase SDK.
+func (container *Container) FCMClient() services.FCMClient {
+ if fcmEndpoint := os.Getenv("FCM_ENDPOINT"); fcmEndpoint != "" {
+ container.logger.Info(fmt.Sprintf("using emulator FCM client with endpoint: %s", fcmEndpoint))
+ return services.NewEmulatorFCMClient(
+ container.HTTPClient("emulator_fcm"),
+ fcmEndpoint,
+ container.Logger(),
+ )
+ }
+
+ container.logger.Debug("creating FirebaseFCMClient")
messagingClient, err := container.FirebaseApp().Messaging(context.Background())
if err != nil {
- msg := "cannot initialize firebase messaging client"
- container.logger.Fatal(stacktrace.Propagate(err, msg))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot initialize firebase messaging client"))
}
- return messagingClient
+ return services.NewFirebaseFCMClient(messagingClient)
}
// FirebaseCredentials returns firebase credentials as bytes.
@@ -517,6 +579,7 @@ func (container *Container) MessageHandlerValidator() (validator *validators.Mes
container.Tracer(),
container.PhoneService(),
container.TurnstileTokenValidator(),
+ container.Cache(),
)
}
@@ -539,6 +602,7 @@ func (container *Container) BulkMessageHandlerValidator() (validator *validators
container.Tracer(),
container.PhoneService(),
container.UserService(),
+ container.Cache(),
)
}
@@ -639,6 +703,7 @@ func (container *Container) PhoneHandlerValidator() (validator *validators.Phone
return validators.NewPhoneHandlerValidator(
container.Logger(),
container.Tracer(),
+ container.MessageSendScheduleService(),
)
}
@@ -648,6 +713,7 @@ func (container *Container) UserHandlerValidator() (validator *validators.UserHa
return validators.NewUserHandlerValidator(
container.Logger(),
container.Tracer(),
+ container.UserService(),
)
}
@@ -679,7 +745,7 @@ func (container *Container) Float64Histogram(name, unit, description string) ote
)
histogram, err := meter.Float64Histogram(name, otelMetric.WithUnit(unit), otelMetric.WithDescription(description))
if err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot create float64 histogram"))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot create float64 histogram"))
}
return histogram
}
@@ -726,6 +792,48 @@ func (container *Container) PhoneRepository() (repository repositories.PhoneRepo
)
}
+// MessageSendScheduleRepository creates a new instance of repositories.MessageSendScheduleRepository
+func (container *Container) MessageSendScheduleRepository() repositories.MessageSendScheduleRepository {
+ container.logger.Debug("creating GORM repositories.MessageSendScheduleRepository")
+ return repositories.NewGormMessageSendScheduleRepository(
+ container.Logger(),
+ container.Tracer(),
+ container.DB(),
+ )
+}
+
+// MessageSendScheduleService creates a new instance of services.MessageSendScheduleService
+func (container *Container) MessageSendScheduleService() *services.MessageSendScheduleService {
+ container.logger.Debug("creating services.MessageSendScheduleService")
+ return services.NewMessageSendScheduleService(
+ container.Logger(),
+ container.Tracer(),
+ container.MessageSendScheduleRepository(),
+ container.EventDispatcher(),
+ )
+}
+
+// MessageSendScheduleHandlerValidator creates a new instance of validators.MessageSendScheduleHandlerValidator
+func (container *Container) MessageSendScheduleHandlerValidator() *validators.MessageSendScheduleHandlerValidator {
+ container.logger.Debug("creating validators.MessageSendScheduleHandlerValidator")
+ return validators.NewMessageSendScheduleHandlerValidator(
+ container.Logger(),
+ container.Tracer(),
+ )
+}
+
+// MessageSendScheduleHandler creates a new instance of handlers.MessageSendScheduleHandler
+func (container *Container) MessageSendScheduleHandler() *handlers.MessageSendScheduleHandler {
+ container.logger.Debug("creating handlers.MessageSendScheduleHandler")
+ return handlers.NewMessageSendScheduleHandler(
+ container.Logger(),
+ container.Tracer(),
+ container.MessageSendScheduleHandlerValidator(),
+ container.MessageSendScheduleService(),
+ container.EntitlementService(),
+ )
+}
+
// BillingUsageRepository creates a new instance of repositories.BillingUsageRepository
func (container *Container) BillingUsageRepository() (repository repositories.BillingUsageRepository) {
container.logger.Debug("creating GORM repositories.BillingUsageRepository")
@@ -736,6 +844,17 @@ func (container *Container) BillingUsageRepository() (repository repositories.Bi
)
}
+// EntitlementService creates a new instance of services.EntitlementService
+func (container *Container) EntitlementService() *services.EntitlementService {
+ container.logger.Debug("creating services.EntitlementService")
+ return services.NewEntitlementService(
+ container.Logger(),
+ container.Tracer(),
+ os.Getenv("ENTITLEMENT_ENABLED") == "true",
+ container.UserRepository(),
+ )
+}
+
// DiscordRepository creates a new instance of repositories.DiscordRepository
func (container *Container) DiscordRepository() (repository repositories.DiscordRepository) {
container.logger.Debug("creating GORM repositories.DiscordRepository")
@@ -778,12 +897,22 @@ func (container *Container) MessageThreadRepository() (repository repositories.M
// HeartbeatMonitorRepository creates a new instance of repositories.HeartbeatMonitorRepository
func (container *Container) HeartbeatMonitorRepository() (repository repositories.HeartbeatMonitorRepository) {
- container.logger.Debug("creating GORM repositories.HeartbeatMonitorRepository")
- return repositories.NewGormHeartbeatMonitorRepository(
- container.Logger(),
- container.Tracer(),
- container.DedicatedDB(),
- )
+ switch os.Getenv("HEARTBEAT_DB_BACKEND") {
+ case "mongodb":
+ container.logger.Debug("creating MongoDB repositories.HeartbeatMonitorRepository")
+ return repositories.NewMongoHeartbeatMonitorRepository(
+ container.Logger(),
+ container.Tracer(),
+ container.MongoDB(),
+ )
+ default:
+ container.logger.Debug("creating GORM repositories.HeartbeatMonitorRepository")
+ return repositories.NewGormHeartbeatMonitorRepository(
+ container.Logger(),
+ container.Tracer(),
+ container.DedicatedDB(),
+ )
+ }
}
// HeartbeatService creates a new instance of services.HeartbeatService
@@ -866,7 +995,6 @@ func (container *Container) HTTPRoundTripper(name string) http.RoundTripper {
otelroundtripper.WithName(name),
otelroundtripper.WithParent(container.RetryHTTPRoundTripper()),
otelroundtripper.WithMeter(otel.GetMeterProvider().Meter(container.projectID)),
- otelroundtripper.WithAttributes(container.OtelResources(container.version, container.projectID).Attributes()...),
)
}
@@ -876,7 +1004,6 @@ func (container *Container) HTTPRoundTripperWithoutRetry(name string) http.Round
return otelroundtripper.New(
otelroundtripper.WithName(name),
otelroundtripper.WithMeter(otel.GetMeterProvider().Meter(container.projectID)),
- otelroundtripper.WithAttributes(container.OtelResources(container.version, container.projectID).Attributes()...),
)
}
@@ -886,7 +1013,7 @@ func (container *Container) OtelResources(version string, namespace string) *res
semconv.SchemaURL,
semconv.ServiceNameKey.String(namespace),
semconv.ServiceVersionKey.String(version),
- semconv.ServiceInstanceIDKey.String(hostName()),
+ semconv.ServiceInstanceIDKey.String(instanceID()),
semconv.DeploymentEnvironmentKey.String(os.Getenv("ENV")),
)
}
@@ -934,6 +1061,7 @@ func (container *Container) UserService() (service *services.UserService) {
container.LemonsqueezyClient(),
container.EventDispatcher(),
container.FirebaseAuthClient(),
+ container.HTTPClient("lemonsqueezy"),
)
}
@@ -980,6 +1108,7 @@ func (container *Container) MessageThreadService() (service *services.MessageThr
container.Logger(),
container.Tracer(),
container.MessageThreadRepository(),
+ container.PhoneRepository(),
container.EventDispatcher(),
)
}
@@ -1069,6 +1198,20 @@ func (container *Container) RegisterMessageListeners() {
}
}
+// RegisterMessageSendScheduleListeners registers event listeners for listeners.MessageSendScheduleListener
+func (container *Container) RegisterMessageSendScheduleListeners() {
+ container.logger.Debug(fmt.Sprintf("registering listeners for %T", listeners.MessageSendScheduleListener{}))
+ _, routes := listeners.NewMessageSendScheduleListener(
+ container.Logger(),
+ container.Tracer(),
+ container.MessageSendScheduleService(),
+ )
+
+ for event, handler := range routes {
+ container.EventDispatcher().Subscribe(event, handler)
+ }
+}
+
// LemonsqueezyService creates a new instance of services.LemonsqueezyService
func (container *Container) LemonsqueezyService() (service *services.LemonsqueezyService) {
container.logger.Debug(fmt.Sprintf("creating %T", service))
@@ -1113,6 +1256,7 @@ func (container *Container) PhoneAPIKeyHandler() (handler *handlers.PhoneAPIKeyH
container.Tracer(),
container.PhoneAPIKeyHandlerValidator(),
container.PhoneAPIKeyService(),
+ container.EntitlementService(),
)
}
@@ -1362,12 +1506,26 @@ func (container *Container) RegisterPhoneAPIKeyListeners() {
}
}
+// RegisterPhoneListeners registers event listeners for listeners.PhoneListener
+func (container *Container) RegisterPhoneListeners() {
+ container.logger.Debug(fmt.Sprintf("registering listeners for %T", listeners.PhoneListener{}))
+ _, routes := listeners.NewPhoneListener(
+ container.Logger(),
+ container.Tracer(),
+ container.PhoneService(),
+ )
+
+ for event, handler := range routes {
+ container.EventDispatcher().Subscribe(event, handler)
+ }
+}
+
// RegisterWebsocketListeners registers event listeners for listeners.WebsocketListener
func (container *Container) RegisterWebsocketListeners() {
container.logger.Debug(fmt.Sprintf("registering listeners for %T", listeners.WebsocketListener{}))
if os.Getenv("PUSHER_SECRET") == "" {
- container.logger.Warn(stacktrace.NewError("skipping websocket listeners because the PUSHER_SECRET env variable is not set"))
+ container.logger.Warn(stacktrace.NewErrorf("skipping websocket listeners because the PUSHER_SECRET env variable is not set"))
return
}
@@ -1405,9 +1563,63 @@ func (container *Container) MessageService() (service *services.MessageService)
container.MessageRepository(),
container.EventDispatcher(),
container.PhoneService(),
+ container.AttachmentRepository(),
+ container.APIBaseURL(),
+ )
+}
+
+// AttachmentRepository creates a cached AttachmentRepository based on configuration
+func (container *Container) AttachmentRepository() repositories.AttachmentRepository {
+ if container.attachmentRepository != nil {
+ return container.attachmentRepository
+ }
+
+ bucket := os.Getenv("GCS_BUCKET_NAME")
+ if bucket != "" {
+ container.logger.Debug("creating GoogleCloudStorageAttachmentRepository")
+ client, err := storage.NewClient(context.Background(), option.WithAuthCredentialsJSON(option.ServiceAccount, container.FirebaseCredentials()))
+ if err != nil {
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot create GCS client"))
+ }
+ container.attachmentRepository = repositories.NewGoogleCloudStorageAttachmentRepository(
+ container.Logger(),
+ container.Tracer(),
+ client,
+ bucket,
+ )
+ } else {
+ container.logger.Debug("creating MemoryAttachmentRepository (GCS_BUCKET_NAME not set)")
+ container.attachmentRepository = repositories.NewMemoryAttachmentRepository(
+ container.Logger(),
+ container.Tracer(),
+ )
+ }
+
+ return container.attachmentRepository
+}
+
+// APIBaseURL returns the API base URL derived from EVENTS_QUEUE_ENDPOINT
+func (container *Container) APIBaseURL() string {
+ endpoint := os.Getenv("EVENTS_QUEUE_ENDPOINT")
+ return strings.TrimSuffix(endpoint, "/v1/events")
+}
+
+// AttachmentHandler creates a new AttachmentHandler
+func (container *Container) AttachmentHandler() (handler *handlers.AttachmentHandler) {
+ container.logger.Debug(fmt.Sprintf("creating %T", handler))
+ return handlers.NewAttachmentHandler(
+ container.Logger(),
+ container.Tracer(),
+ container.AttachmentRepository(),
)
}
+// RegisterAttachmentRoutes registers routes for the /attachments prefix
+func (container *Container) RegisterAttachmentRoutes() {
+ container.logger.Debug(fmt.Sprintf("registering %T routes", &handlers.AttachmentHandler{}))
+ container.AttachmentHandler().RegisterRoutes(container.App())
+}
+
// PhoneAPIKeyService creates a new instance of services.PhoneAPIKeyService
func (container *Container) PhoneAPIKeyService() (service *services.PhoneAPIKeyService) {
container.logger.Debug(fmt.Sprintf("creating %T", service))
@@ -1425,9 +1637,10 @@ func (container *Container) NotificationService() (service *services.PhoneNotifi
return services.NewNotificationService(
container.Logger(),
container.Tracer(),
- container.FirebaseMessagingClient(),
+ container.FCMClient(),
container.PhoneRepository(),
container.PhoneNotificationRepository(),
+ container.MessageSendScheduleRepository(),
container.EventDispatcher(),
)
}
@@ -1435,8 +1648,8 @@ func (container *Container) NotificationService() (service *services.PhoneNotifi
// RegisterMessageRoutes registers routes for the /messages prefix
func (container *Container) RegisterMessageRoutes() {
container.logger.Debug(fmt.Sprintf("registering %T routes", &handlers.MessageHandler{}))
- container.MessageHandler().RegisterRoutes(container.App(), container.AuthenticatedMiddleware())
container.MessageHandler().RegisterPhoneAPIKeyRoutes(container.App(), container.PhoneAPIKeyMiddleware(), container.AuthenticatedMiddleware())
+ container.MessageHandler().RegisterRoutes(container.App(), container.AuthenticatedMiddleware())
}
// RegisterBulkMessageRoutes registers routes for the /bulk-messages prefix
@@ -1483,6 +1696,12 @@ func (container *Container) RegisterUserRoutes() {
container.UserHandler().RegisterRoutes(container.App(), container.AuthenticatedMiddleware())
}
+// RegisterMessageSendScheduleRoutes registers routes for the /send-schedules prefix
+func (container *Container) RegisterMessageSendScheduleRoutes() {
+ container.logger.Debug(fmt.Sprintf("registering %T routes", &handlers.MessageSendScheduleHandler{}))
+ container.MessageSendScheduleHandler().RegisterRoutes(container.App(), container.AuthenticatedMiddleware())
+}
+
// RegisterEventRoutes registers routes for the /events prefix
func (container *Container) RegisterEventRoutes() {
container.logger.Debug(fmt.Sprintf("registering %T routes", &handlers.EventsHandler{}))
@@ -1507,12 +1726,22 @@ func (container *Container) RegisterSwaggerRoutes() {
// HeartbeatRepository registers a new instance of repositories.HeartbeatRepository
func (container *Container) HeartbeatRepository() repositories.HeartbeatRepository {
- container.logger.Debug("creating GORM repositories.HeartbeatRepository")
- return repositories.NewGormHeartbeatRepository(
- container.Logger(),
- container.Tracer(),
- container.DedicatedDB(),
- )
+ switch os.Getenv("HEARTBEAT_DB_BACKEND") {
+ case "mongodb":
+ container.logger.Debug("creating MongoDB repositories.HeartbeatRepository")
+ return repositories.NewMongoHeartbeatRepository(
+ container.Logger(),
+ container.Tracer(),
+ container.MongoDB(),
+ )
+ default:
+ container.logger.Debug("creating GORM repositories.HeartbeatRepository")
+ return repositories.NewGormHeartbeatRepository(
+ container.Logger(),
+ container.Tracer(),
+ container.DedicatedDB(),
+ )
+ }
}
// UserRepository registers a new instance of repositories.UserRepository
@@ -1527,36 +1756,44 @@ func (container *Container) UserRepository() repositories.UserRepository {
}
// PhoneRistrettoCache creates an in-memory *ristretto.Cache[string, *entities.Phone]
-func (container *Container) PhoneRistrettoCache() (cache *ristretto.Cache[string, *entities.Phone]) {
- container.logger.Debug(fmt.Sprintf("creating %T", cache))
+func (container *Container) PhoneRistrettoCache() *ristretto.Cache[string, *entities.Phone] {
+ if container.phoneRistrettoCache != nil {
+ return container.phoneRistrettoCache
+ }
+ container.logger.Debug(fmt.Sprintf("creating %T", container.phoneRistrettoCache))
ristrettoCache, err := ristretto.NewCache[string, *entities.Phone](&ristretto.Config[string, *entities.Phone]{
MaxCost: 5000,
NumCounters: 5000 * 10,
BufferItems: 64,
})
if err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot create user ristretto cache"))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot create phone ristretto cache"))
}
- return ristrettoCache
+ container.phoneRistrettoCache = ristrettoCache
+ return container.phoneRistrettoCache
}
// UserRistrettoCache creates an in-memory *ristretto.Cache[string, entities.AuthContext]
-func (container *Container) UserRistrettoCache() (cache *ristretto.Cache[string, entities.AuthContext]) {
- container.logger.Debug(fmt.Sprintf("creating %T", cache))
+func (container *Container) UserRistrettoCache() *ristretto.Cache[string, entities.AuthContext] {
+ if container.userRistrettoCache != nil {
+ return container.userRistrettoCache
+ }
+ container.logger.Debug(fmt.Sprintf("creating %T", container.userRistrettoCache))
ristrettoCache, err := ristretto.NewCache[string, entities.AuthContext](&ristretto.Config[string, entities.AuthContext]{
MaxCost: 5000,
NumCounters: 5000 * 10,
BufferItems: 64,
})
if err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot create user ristretto cache"))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot create user ristretto cache"))
}
+ container.userRistrettoCache = ristrettoCache
return ristrettoCache
}
// InitializeTraceProvider initializes the open telemetry trace provider
func (container *Container) InitializeTraceProvider() func() {
- return container.initializeUptraceProvider(container.version, container.projectID)
+ return container.initializeAxiomTraceProvider(container.version, container.projectID)
}
func (container *Container) initializeGoogleTraceProvider(version string, namespace string) func() {
@@ -1564,7 +1801,7 @@ func (container *Container) initializeGoogleTraceProvider(version string, namesp
traceExporter, err := cloudtrace.New(cloudtrace.WithProjectID(os.Getenv("GCP_PROJECT_ID")))
if err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot create cloud trace traceExporter"))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot create cloud trace traceExporter"))
}
tp := trace.NewTracerProvider(
@@ -1576,7 +1813,7 @@ func (container *Container) initializeGoogleTraceProvider(version string, namesp
metricExporter, err := mexporter.New(mexporter.WithProjectID(os.Getenv("GCP_PROJECT_ID")))
if err != nil {
- container.logger.Fatal(stacktrace.Propagate(err, "cannot create cloud metric traceExporter"))
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot create cloud metric traceExporter"))
}
meterProvider := metric.NewMeterProvider(
@@ -1587,10 +1824,69 @@ func (container *Container) initializeGoogleTraceProvider(version string, namesp
return func() {
if err = metricExporter.Shutdown(context.Background()); err != nil {
- container.logger.Error(stacktrace.Propagate(err, "cannot shutdown cloud metric metric exporter"))
+ container.logger.Error(stacktrace.Propagatef(err, "cannot shutdown cloud metric metric exporter"))
}
if err = traceExporter.Shutdown(context.Background()); err != nil {
- container.logger.Error(stacktrace.Propagate(err, "cannot shutdown cloud trace trace exporter"))
+ container.logger.Error(stacktrace.Propagatef(err, "cannot shutdown cloud trace trace exporter"))
+ }
+ }
+}
+
+func (container *Container) initializeAxiomTraceProvider(version string, namespace string) func() {
+ container.logger.Debug("initializing axiom trace provider")
+
+ traceHeaders := map[string]string{
+ "Authorization": "Bearer " + os.Getenv("AXIOM_TOKEN"),
+ "X-Axiom-Dataset": os.Getenv("AXIOM_DATASET_EVENTS"),
+ }
+
+ traceExporter, err := otlptracehttp.New(
+ context.Background(),
+ otlptracehttp.WithEndpoint("us-east-1.aws.edge.axiom.co"),
+ otlptracehttp.WithHeaders(traceHeaders),
+ )
+ if err != nil {
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot create axiom OTLP trace exporter"))
+ }
+
+ tp := trace.NewTracerProvider(
+ trace.WithBatcher(traceExporter),
+ trace.WithSampler(trace.AlwaysSample()),
+ trace.WithResource(container.OtelResources(version, namespace)),
+ )
+ otel.SetTracerProvider(tp)
+
+ otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(
+ propagation.TraceContext{},
+ propagation.Baggage{},
+ ))
+
+ metricHeaders := map[string]string{
+ "Authorization": "Bearer " + os.Getenv("AXIOM_TOKEN"),
+ "X-Axiom-Dataset": os.Getenv("AXIOM_DATASET_METRICS"),
+ }
+
+ metricExporter, err := otlpmetrichttp.New(
+ context.Background(),
+ otlpmetrichttp.WithEndpoint("us-east-1.aws.edge.axiom.co"),
+ otlpmetrichttp.WithHeaders(metricHeaders),
+ )
+ if err != nil {
+ container.logger.Fatal(stacktrace.Propagatef(err, "cannot create axiom OTLP metric exporter"))
+ }
+
+ meterProvider := metric.NewMeterProvider(
+ metric.WithReader(metric.NewPeriodicReader(metricExporter)),
+ metric.WithResource(container.OtelResources(version, namespace)),
+ )
+ otel.SetMeterProvider(meterProvider)
+
+ return func() {
+ if err := tp.Shutdown(context.Background()); err != nil {
+ container.logger.Error(stacktrace.Propagatef(err, "cannot shutdown axiom trace provider"))
+ }
+ if err := meterProvider.Shutdown(context.Background()); err != nil {
+ container.logger.Error(stacktrace.Propagatef(err, "cannot shutdown axiom meter provider"))
}
}
}
@@ -1616,8 +1912,8 @@ func (container *Container) initializeUptraceProvider(version string, namespace
func logger(skipFrameCount int) telemetry.Logger {
fields := map[string]string{
- "pid": strconv.Itoa(os.Getpid()),
- "hostname": hostName(),
+ string(semconv.ServiceInstanceIDKey): instanceID(),
+ string(semconv.DeploymentEnvironmentKey): os.Getenv("ENV"),
}
return telemetry.NewZerologLogger(
@@ -1632,48 +1928,47 @@ func logDriver(skipFrameCount int) *zerodriver.Logger {
if isLocal() {
return consoleLogger(skipFrameCount)
}
- return jsonLogger(skipFrameCount)
+ return axiomLogger(skipFrameCount)
}
-func jsonLogger(skipFrameCount int) *zerodriver.Logger {
- logLevel := zerolog.DebugLevel
- zerolog.SetGlobalLevel(logLevel)
-
- // See: https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#LogSeverity
- logLevelSeverity := map[zerolog.Level]string{
- zerolog.TraceLevel: "DEFAULT",
- zerolog.DebugLevel: "DEBUG",
- zerolog.InfoLevel: "INFO",
- zerolog.WarnLevel: "WARNING",
- zerolog.ErrorLevel: "ERROR",
- zerolog.PanicLevel: "CRITICAL",
- zerolog.FatalLevel: "CRITICAL",
- }
-
- zerolog.LevelFieldName = "severity"
- zerolog.LevelFieldMarshalFunc = func(l zerolog.Level) string {
- return logLevelSeverity[l]
+func axiomLogger(skipFrameCount int) *zerodriver.Logger {
+ axiomWriter, err := axiomzerolog.New(
+ axiomzerolog.SetLevels([]zerolog.Level{zerolog.TraceLevel, zerolog.DebugLevel, zerolog.InfoLevel, zerolog.WarnLevel, zerolog.ErrorLevel, zerolog.PanicLevel, zerolog.FatalLevel, zerolog.NoLevel}),
+ axiomzerolog.SetDataset(os.Getenv("AXIOM_DATASET_EVENTS")),
+ )
+ if err != nil {
+ log.Fatal(stacktrace.Propagatef(err, "cannot create axiom zerolog writer"))
}
- zerolog.TimestampFieldName = "time"
- zerolog.TimeFieldFormat = time.RFC3339Nano
- zl := zerolog.New(os.Stderr).With().Timestamp().CallerWithSkipFrameCount(skipFrameCount).Logger()
+ zl := zerolog.New(axiomWriter).With().Timestamp().CallerWithSkipFrameCount(skipFrameCount).Logger()
return &zerodriver.Logger{Logger: &zl}
}
-func hostName() string {
+func instanceID() string {
h, err := os.Hostname()
if err != nil {
h = strconv.Itoa(os.Getpid())
}
+ if metadata.OnGCE() {
+ return getGCEInstanceID(h)
+ }
return h
}
+func getGCEInstanceID(hostname string) string {
+ instanceID, err := metadata.InstanceIDWithContext(context.Background())
+ if err != nil {
+ return hostname
+ }
+ return instanceID
+}
+
func consoleLogger(skipFrameCount int) *zerodriver.Logger {
l := zerolog.New(
zerolog.ConsoleWriter{
Out: os.Stderr,
- }).With().Timestamp().CallerWithSkipFrameCount(skipFrameCount).Logger()
+ },
+ ).With().Timestamp().CallerWithSkipFrameCount(skipFrameCount).Logger()
return &zerodriver.Logger{
Logger: &l,
}
diff --git a/api/pkg/emails/event_payload_formatter.go b/api/pkg/emails/event_payload_formatter.go
new file mode 100644
index 000000000..0a8638540
--- /dev/null
+++ b/api/pkg/emails/event_payload_formatter.go
@@ -0,0 +1,128 @@
+package emails
+
+import (
+ "bytes"
+ "encoding/json"
+ "html"
+ "html/template"
+ "strings"
+)
+
+const (
+ eventPayloadCodeBlockStyle = "margin:0;padding:12px;border:1px solid #D0D7DE;border-radius:6px;background:#F6F8FA;color:#24292F;font-family:Consolas,Monaco,'Courier New',monospace;font-size:13px;line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;"
+ jsonKeyStyle = "color:#0550AE;font-weight:600;"
+ jsonStringStyle = "color:#0A3069;"
+ jsonNumberStyle = "color:#953800;"
+ jsonLiteralStyle = "color:#8250DF;"
+)
+
+func formatEventPayload(payload string) (string, template.HTML) {
+ formattedPayload, isJSON := indentEventPayloadJSON(payload)
+ content := html.EscapeString(formattedPayload)
+ if isJSON {
+ content = highlightEventPayloadJSON(formattedPayload)
+ }
+
+ // #nosec G203 -- every dynamic payload token is escaped before the static wrapper is added.
+ richPayload := template.HTML(`` + content + ` `)
+ return formattedPayload, richPayload
+}
+
+func indentEventPayloadJSON(payload string) (string, bool) {
+ var formatted bytes.Buffer
+ if err := json.Indent(&formatted, []byte(payload), "", " "); err != nil {
+ return payload, false
+ }
+
+ return formatted.String(), true
+}
+
+func highlightEventPayloadJSON(payload string) string {
+ var highlighted strings.Builder
+ highlighted.Grow(len(payload))
+
+ for index := 0; index < len(payload); {
+ switch {
+ case payload[index] == '"':
+ end := eventPayloadJSONStringEnd(payload, index)
+ style := jsonStringStyle
+ if eventPayloadNextNonSpace(payload, end) == ':' {
+ style = jsonKeyStyle
+ }
+ writeEventPayloadToken(&highlighted, style, payload[index:end])
+ index = end
+ case payload[index] == '-' || isEventPayloadDigit(payload[index]):
+ end := index + 1
+ // json.Indent already validated this as JSON, so this continuation set only sees JSON number bytes.
+ for end < len(payload) && isEventPayloadNumberCharacter(payload[end]) {
+ end++
+ }
+ writeEventPayloadToken(&highlighted, jsonNumberStyle, payload[index:end])
+ index = end
+ case strings.HasPrefix(payload[index:], "true"):
+ writeEventPayloadToken(&highlighted, jsonLiteralStyle, "true")
+ index += len("true")
+ case strings.HasPrefix(payload[index:], "false"):
+ writeEventPayloadToken(&highlighted, jsonLiteralStyle, "false")
+ index += len("false")
+ case strings.HasPrefix(payload[index:], "null"):
+ writeEventPayloadToken(&highlighted, jsonLiteralStyle, "null")
+ index += len("null")
+ default:
+ highlighted.WriteString(html.EscapeString(payload[index : index+1]))
+ index++
+ }
+ }
+
+ return highlighted.String()
+}
+
+func eventPayloadJSONStringEnd(payload string, start int) int {
+ escaped := false
+ for index := start + 1; index < len(payload); index++ {
+ switch {
+ case escaped:
+ escaped = false
+ case payload[index] == '\\':
+ escaped = true
+ case payload[index] == '"':
+ return index + 1
+ }
+ }
+
+ return len(payload)
+}
+
+func eventPayloadNextNonSpace(payload string, start int) byte {
+ for index := start; index < len(payload); index++ {
+ switch payload[index] {
+ case ' ', '\n', '\r', '\t':
+ continue
+ default:
+ return payload[index]
+ }
+ }
+
+ return 0
+}
+
+func isEventPayloadDigit(value byte) bool {
+ return value >= '0' && value <= '9'
+}
+
+func isEventPayloadNumberCharacter(value byte) bool {
+ return isEventPayloadDigit(value) ||
+ value == '-' ||
+ value == '+' ||
+ value == '.' ||
+ value == 'e' ||
+ value == 'E'
+}
+
+func writeEventPayloadToken(builder *strings.Builder, style string, token string) {
+ builder.WriteString(``)
+ builder.WriteString(html.EscapeString(token))
+ builder.WriteString(` `)
+}
diff --git a/api/pkg/emails/event_payload_formatter_test.go b/api/pkg/emails/event_payload_formatter_test.go
new file mode 100644
index 000000000..9617ebb0e
--- /dev/null
+++ b/api/pkg/emails/event_payload_formatter_test.go
@@ -0,0 +1,113 @@
+package emails
+
+import (
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestFormatEventPayloadIndentsAndHighlightsJSON(t *testing.T) {
+ payload := `{"message":"hello","count":2,"ratio":1.5,"enabled":true,"disabled":false,"missing":null,"nested":{"value":"ok"}}`
+
+ plain, rich := formatEventPayload(payload)
+ html := string(rich)
+
+ assert.Equal(t, `{
+ "message": "hello",
+ "count": 2,
+ "ratio": 1.5,
+ "enabled": true,
+ "disabled": false,
+ "missing": null,
+ "nested": {
+ "value": "ok"
+ }
+}`, plain)
+ assert.Contains(t, html, `"message" `)
+ assert.Contains(t, html, `"hello" `)
+ assert.Contains(t, html, `2 `)
+ assert.Contains(t, html, `1.5 `)
+ assert.Contains(t, html, `true `)
+ assert.Contains(t, html, `false `)
+ assert.Contains(t, html, `null `)
+ assert.Contains(t, html, `white-space:pre-wrap`)
+}
+
+func TestFormatEventPayloadEscapesPayloadHTML(t *testing.T) {
+ plain, rich := formatEventPayload(`{"message":"&"}`)
+ html := string(rich)
+
+ assert.Contains(t, plain, `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+- [ ] **Step 2: Create website layout**
+
+```vue
+
+
+
+
+
+
+
+
+
+
+
+
+ httpSMS
+
+
+
+
+ Pricing
+
+
+ Blog
+
+
+ Login
+
+
+ Get Started
+ For Free
+
+
+ Dashboard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ httpSMS
+
+
+ Made With in Tallinn
+
+
+
+
+
+
+
+
+
+
+
+ Resources
+
+
+
+ Developers
+
+
+
+ Legal
+
+
+
+
+
+
+
+```
+
+- [ ] **Step 3: Create error layout**
+
+```vue
+
+
+
+
+
+
+
+ {{ error.statusCode }}
+ {{ error.message }}
+ Go Home
+
+
+
+
+```
+
+- [ ] **Step 4: Commit**
+
+```bash
+git add -A
+git commit -m "feat(web): port layouts to Nuxt 4 with Vuetify 4"
+```
+
+---
+
+## Task 13: Port Components — Toast, LoadingDashboard, LoadingButton, BackButton
+
+**Files:**
+- Create: `web/app/components/Toast.vue`
+- Create: `web/app/components/LoadingDashboard.vue`
+- Create: `web/app/components/LoadingButton.vue`
+- Create: `web/app/components/BackButton.vue`
+
+**IMPORTANT:** Call `vuetify-mcp-get_component_api_by_version` for v-snackbar, v-btn, v-progress-circular, v-icon, v-container, v-row, v-col before writing these.
+
+- [ ] **Step 1: Create Toast.vue**
+
+```vue
+
+
+
+
+
+
+
+ {{ notificationsStore.notification.message }}
+
+
+ Close
+
+
+
+
+```
+
+- [ ] **Step 2: Create LoadingDashboard.vue**
+
+```vue
+
+
+
+
+
+
+
+
+
+
+ Loading the httpSMS dashboard
+
+
+
+
+
+
+
+```
+
+- [ ] **Step 3: Create LoadingButton.vue**
+
+```vue
+
+
+
+
+
+
+
+
+
+
+```
+
+- [ ] **Step 4: Create BackButton.vue**
+
+```vue
+
+
+
+
+
+
+ Go Back
+
+
+```
+
+- [ ] **Step 5: Commit**
+
+```bash
+git add -A
+git commit -m "feat(web): port Toast, LoadingDashboard, LoadingButton, BackButton components"
+```
+
+---
+
+## Task 14: Port Components — CopyButton, FixedHeader, BlogAuthorBio, BlogInfo, NuxtLogo
+
+**Files:**
+- Create: `web/app/components/CopyButton.vue`
+- Create: `web/app/components/FixedHeader.vue`
+- Create: `web/app/components/BlogAuthorBio.vue`
+- Create: `web/app/components/BlogInfo.vue`
+- Create: `web/app/components/NuxtLogo.vue`
+
+**IMPORTANT:** Call `vuetify-mcp-get_component_api_by_version` for each Vuetify component used.
+
+- [ ] **Step 1: Create CopyButton.vue**
+
+```vue
+
+
+
+
+
+
+ {{ copyText }}
+
+
+```
+
+- [ ] **Step 2: Create FixedHeader.vue**
+
+```vue
+
+
+
+
+
+
+
+
+
+
+ HTTP SMS
+
+
+
+ Get Started
+ For Free
+
+
+
+
+
+
+```
+
+- [ ] **Step 3: Create BlogAuthorBio.vue**
+
+```vue
+
+
+
+
+
+
+```
+
+- [ ] **Step 4: Create BlogInfo.vue**
+
+```vue
+
+
+
+
+
+
+
+ httpSMS
+
+
+ httpSMS is an
+ open source
+ application that converts your android phone into an SMS gateway so you
+ can send and receive SMS messages using a simple HTTP API.
+
+
+
+ Documentation
+
+
+
+```
+
+- [ ] **Step 5: Create NuxtLogo.vue (minimal placeholder)**
+
+```vue
+
+
+
+
+```
+
+- [ ] **Step 6: Commit**
+
+```bash
+git add -A
+git commit -m "feat(web): port CopyButton, FixedHeader, BlogAuthorBio, BlogInfo, NuxtLogo"
+```
+
+---
+
+## Task 15: Port Components — FirebaseAuth, MessageThread, MessageThreadHeader
+
+**Files:**
+- Create: `web/app/components/FirebaseAuth.vue`
+- Create: `web/app/components/MessageThread.vue`
+- Create: `web/app/components/MessageThreadHeader.vue`
+
+**IMPORTANT:** Call `vuetify-mcp-get_component_api_by_version` for v-select, v-list, v-list-item, v-menu, v-tooltip, v-sheet, v-progress-linear before writing.
+
+- [ ] **Step 1: Create FirebaseAuth.vue**
+
+This component uses FirebaseUI which must be loaded client-side only. In Nuxt 4, wrap with `` or use `.client.vue` suffix.
+
+```vue
+
+
+
+
+
+
+```
+
+- [ ] **Step 2: Create MessageThread.vue**
+
+Port from the existing component. This is a larger component — read the full source from the backup branch and rewrite using `
+
+
+
+
+
+ Archived Messages
+
+
+
+
+
+ Start sending messages
+
+
+
+
+ New Message
+
+
+
+
+
+
+```
+
+Note: The full MessageThread.vue content should be ported from the backup branch. The pattern above shows the migration approach.
+
+- [ ] **Step 3: Create MessageThreadHeader.vue**
+
+```vue
+
+
+
+
+
+
+
+
+
+
+
+ {{ phoneCountry(phonesStore.owner) }}
+
+
+
+
+
+
+
+
+ Last Heartbeat
+ {{ humanizeTime(phonesStore.heartbeat.timestamp) }} ago
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ threadsStore.archivedThreads ? 'Unarchived' : 'Archived' }}
+
+
+
+
+ New Message
+
+
+
+ Bulk Messages
+
+
+
+ Search Messages
+
+
+
+ Settings
+
+
+
+ Phone API Keys
+
+
+
+ Install App
+
+
+
+ Usage & Billing
+
+
+
+ Logout
+
+
+
+
+
+```
+
+- [ ] **Step 4: Commit**
+
+```bash
+git add -A
+git commit -m "feat(web): port FirebaseAuth, MessageThread, MessageThreadHeader components"
+```
+
+---
+
+## Task 16: Port Pages — Login & Index (Homepage)
+
+**Files:**
+- Create: `web/app/pages/login.vue`
+- Create: `web/app/pages/index.vue`
+
+**IMPORTANT:** Call `vuetify-mcp-get_component_api_by_version` for all Vuetify components used. Port from the backup branch source, converting class-based syntax to `&"}`)
+ html := string(rich)
+
+ assert.Contains(t, plain, `
+```
+
+**After (Vue 3):**
+```vue
+
+```
+
+#### Vuetify Breakpoints: `$vuetify.breakpoint` → `useDisplay()`
+
+**Before:**
+```vue
+
+```
+
+**After:**
+```vue
+
+
+
+
+```
+
+#### State: Vuex → Pinia
+
+**Before:**
+```ts
+this.$store.dispatch('loadPhones', true)
+this.$store.getters.getAuthUser
+```
+
+**After:**
+```ts
+const phonesStore = usePhonesStore()
+await phonesStore.loadPhones(true)
+phonesStore.authUser
+```
+
+#### Firebase: `this.$fire.auth` → VueFire composables
+
+**Before:**
+```ts
+await this.$fire.auth.currentUser?.getIdToken()
+```
+
+**After:**
+```ts
+import { useCurrentUser } from 'vuefire'
+const user = useCurrentUser()
+const token = await user.value?.getIdToken()
+```
+
+#### Dynamic Routes: `_id` → `[id]`
+
+- `pages/threads/_id/index.vue` → `pages/threads/[id]/index.vue`
+- `pages/heartbeats/_id.vue` → `pages/heartbeats/[id].vue`
+
+### Vuetify 4 Breaking Changes to Address
+
+Using the Vuetify MCP for each component, the key changes are:
+
+1. **CSS Layers** — mandatory in v4; adjust any custom style overrides
+2. **Theme** — default is now "system" (we want dark, configure explicitly)
+3. **Typography** — MD2 → MD3 type scale (text-h1 → text-display-large, etc.)
+4. **Breakpoints** — reduced default sizes (restore v3 values via config)
+5. **Elevation** — 25 levels → 6 levels (MD3)
+6. **VBtn** — no default uppercase, grid → flex layout
+7. **VSnackbar** — removed multi-line prop
+8. **VSelect** — "item" slot → "internalItem"
+9. **Grid** — v-row/v-col overhauled
+10. **CSS Reset** — mostly removed, add selective resets
+
+### Vuetify MCP Usage Per Component
+
+For EVERY component/page being migrated, the implementation must:
+1. Call `vuetify-mcp-get_component_api_by_version` for each Vuetify component used
+2. Call `vuetify-mcp-get_v4_breaking_changes` filtered by relevant category
+3. Apply the correct v4 API (props, slots, events) based on MCP output
+4. Verify no deprecated props/events remain
+
+### Pinia Store Design
+
+Split the monolithic Vuex store into domain stores:
+
+| Store | Responsibility |
+|-------|---------------|
+| `auth.ts` | Firebase auth state, user profile, onAuthStateChanged |
+| `messages.ts` | Messages CRUD, search |
+| `threads.ts` | Message threads, current thread |
+| `phones.ts` | Phone list, heartbeats, polling |
+| `billing.ts` | Usage, subscription, payments |
+| `notifications.ts` | Toast/snackbar queue |
+| `app.ts` | App metadata, polling state, runtime config |
+
+### Plugin Migrations
+
+| Old Plugin | New Approach |
+|-----------|-------------|
+| `plugins/axios.ts` | `composables/useApi.ts` using `$fetch` with auth header |
+| `plugins/filters.ts` | `utils/filters.ts` (import explicitly or app.config globalProperties) |
+| `plugins/vue-glow.ts` | `plugins/vue-glow.client.ts` (client-only plugin) |
+| `plugins/chart.ts` | `plugins/chart.client.ts` (client-only plugin) |
+| `plugins/errors.ts` | `utils/errors.ts` |
+| `plugins/bag.ts` | `utils/bag.ts` |
+| `plugins/capitalize.ts` | `utils/capitalize.ts` |
+| `plugins/veutify.ts` | `plugins/vuetify.ts` (createVuetify setup) |
+
+## Migration Order (Tasks)
+
+### Phase 1: Scaffold & Configuration
+1. Initialize fresh Nuxt 4 project in `web/` (backup old code)
+2. Install dependencies (vuetify, pinia, nuxt-vuefire, sass, @mdi/js, pusher-js, etc.)
+3. Configure `nuxt.config.ts` (SSG, runtime config, modules)
+4. Set up Vuetify plugin with dark theme, restored breakpoints, MDI SVG icons
+5. Set up nuxt-vuefire with Firebase config
+6. Configure TypeScript strictly
+
+### Phase 2: Foundation
+7. Port `shared/types/` (API models — mostly copy)
+8. Port `utils/` (errors, filters, bag, capitalize)
+9. Create `composables/useApi.ts` (replace Axios plugin)
+10. Create `composables/useAuth.ts` (Firebase auth helpers)
+
+### Phase 3: State Management
+11. Create Pinia store: `stores/auth.ts`
+12. Create Pinia store: `stores/notifications.ts`
+13. Create Pinia store: `stores/app.ts`
+14. Create Pinia store: `stores/phones.ts`
+15. Create Pinia store: `stores/messages.ts`
+16. Create Pinia store: `stores/threads.ts`
+17. Create Pinia store: `stores/billing.ts`
+
+### Phase 4: Layouts & Middleware
+18. Port `middleware/auth.ts`
+19. Port `middleware/guest.ts`
+20. Port `layouts/default.vue` (with Vuetify MCP)
+21. Port `layouts/website.vue` (with Vuetify MCP)
+22. Port `layouts/error.vue` (with Vuetify MCP)
+23. Create `app.vue`
+
+### Phase 5: Components (use Vuetify MCP for each)
+24. Port `components/Toast.vue`
+25. Port `components/LoadingDashboard.vue`
+26. Port `components/LoadingButton.vue`
+27. Port `components/BackButton.vue`
+28. Port `components/CopyButton.vue`
+29. Port `components/FixedHeader.vue`
+30. Port `components/BlogAuthorBio.vue`
+31. Port `components/BlogInfo.vue`
+32. Port `components/NuxtLogo.vue`
+33. Port `components/FirebaseAuth.vue`
+34. Port `components/MessageThread.vue`
+35. Port `components/MessageThreadHeader.vue`
+
+### Phase 6: Pages (use Vuetify MCP for each)
+36. Port `pages/index.vue` (homepage)
+37. Port `pages/login.vue`
+38. Port `pages/threads/index.vue`
+39. Port `pages/threads/[id]/index.vue`
+40. Port `pages/messages/index.vue`
+41. Port `pages/search-messages/index.vue`
+42. Port `pages/bulk-messages/index.vue`
+43. Port `pages/settings/index.vue`
+44. Port `pages/billing/index.vue`
+45. Port `pages/heartbeats/[id].vue`
+46. Port `pages/phone-api-keys/index.vue`
+47. Port `pages/privacy-policy/index.vue`
+48. Port `pages/terms-and-conditions/index.vue`
+49. Port `pages/blog/index.vue`
+50. Port `pages/blog/how-to-send-sms-messages-from-excel.vue`
+51. Port `pages/blog/grant-send-and-read-sms-permissions-on-android.vue`
+52. Port `pages/blog/forward-incoming-sms-from-phone-to-webhook.vue`
+53. Port `pages/blog/end-to-end-encryption-to-sms-messages.vue`
+54. Port `pages/blog/send-bulk-sms-from-csv-file-with-no-code.vue`
+55. Port `pages/blog/send-sms-from-android-phone-with-python.vue`
+56. Port `pages/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier.vue`
+
+### Phase 7: Final Setup
+57. Port static assets (`public/`)
+58. Port environment files (`.env`, `.env.production`)
+59. Update Dockerfile and nginx.conf
+60. Update sitemap configuration
+61. Configure highlight.js (nuxt-highlightjs or manual)
+
+### Phase 8: Verification (EVERY component and page)
+62. Verify `app.vue` renders
+63. Verify `layouts/default.vue` renders correctly
+64. Verify `layouts/website.vue` renders correctly
+65. Verify `layouts/error.vue` renders correctly
+66. Verify `components/Toast.vue` renders correctly
+67. Verify `components/LoadingDashboard.vue` renders correctly
+68. Verify `components/LoadingButton.vue` renders correctly
+69. Verify `components/BackButton.vue` renders correctly
+70. Verify `components/CopyButton.vue` renders correctly
+71. Verify `components/FixedHeader.vue` renders correctly
+72. Verify `components/BlogAuthorBio.vue` renders correctly
+73. Verify `components/BlogInfo.vue` renders correctly
+74. Verify `components/NuxtLogo.vue` renders correctly
+75. Verify `components/FirebaseAuth.vue` renders correctly
+76. Verify `components/MessageThread.vue` renders correctly
+77. Verify `components/MessageThreadHeader.vue` renders correctly
+78. Verify `pages/index.vue` renders correctly
+79. Verify `pages/login.vue` renders correctly
+80. Verify `pages/threads/index.vue` renders correctly
+81. Verify `pages/threads/[id]/index.vue` renders correctly
+82. Verify `pages/messages/index.vue` renders correctly
+83. Verify `pages/search-messages/index.vue` renders correctly
+84. Verify `pages/bulk-messages/index.vue` renders correctly
+85. Verify `pages/settings/index.vue` renders correctly
+86. Verify `pages/billing/index.vue` renders correctly
+87. Verify `pages/heartbeats/[id].vue` renders correctly
+88. Verify `pages/phone-api-keys/index.vue` renders correctly
+89. Verify `pages/privacy-policy/index.vue` renders correctly
+90. Verify `pages/terms-and-conditions/index.vue` renders correctly
+91. Verify `pages/blog/index.vue` renders correctly
+92. Verify all blog subpages render correctly
+93. Run `pnpm build` (static generation) successfully
+94. Verify no TypeScript errors (`pnpm typecheck`)
+95. Verify lint passes (`pnpm lint`)
+
+## Verification Strategy
+
+Each verification task in Phase 8 means:
+1. Start the dev server (`pnpm dev`)
+2. Navigate to the page/route in question
+3. Confirm no console errors, no hydration mismatches
+4. Confirm visual layout matches intent (Vuetify components render, dark theme active, responsive breakpoints work)
+5. For interactive components (forms, modals, auth), confirm basic interactions work
+
+The build verification (`pnpm build`) confirms all pages can be statically generated without errors.
+
+## Risk Mitigations
+
+- **Backup old code**: Keep old `web/` contents in a branch before starting
+- **Incremental porting**: Each file is ported and verified before moving to the next
+- **Vuetify MCP**: Use for every Vuetify component to catch breaking changes
+- **Restored breakpoints**: Keep v2/v3 breakpoint values to minimize layout drift
+- **CSS Reset compatibility**: Add selective reset CSS to maintain existing spacing behavior
diff --git a/docs/superpowers/specs/2026-06-24-login-last-used-badge-design.md b/docs/superpowers/specs/2026-06-24-login-last-used-badge-design.md
new file mode 100644
index 000000000..f264a926c
--- /dev/null
+++ b/docs/superpowers/specs/2026-06-24-login-last-used-badge-design.md
@@ -0,0 +1,75 @@
+# Login "Last Used" Badge — Design
+
+## Problem
+
+The login page (`web/app/pages/login.vue` → `web/app/components/FirebaseAuth.vue`)
+offers three authentication methods: Continue with Google, Continue with GitHub,
+and Continue with email. Returning users don't get any hint about which method
+they used last, so they may pick the wrong provider and end up creating a second
+account or failing to sign in.
+
+## Goal
+
+Show a small "Last Used" badge on the button corresponding to the login method
+the user most recently used successfully on this device, so they can quickly pick
+the right one next time.
+
+## Scope
+
+Single component change: `web/app/components/FirebaseAuth.vue`. No API, store, or
+backend changes.
+
+## Approach
+
+### Storage
+
+- Persist the last successful method in `localStorage` under the key
+ `httpsms_last_login_method`.
+- Value is one of `'google' | 'github' | 'email'`.
+- The value is written only **after a successful login** (inside `onSuccess`),
+ never on click/attempt.
+
+### Recording the method
+
+- `onSuccess(user)` is currently shared by all three flows. Extend it to
+ `onSuccess(user, method)` where `method` is `'google' | 'github' | 'email'`.
+ - `signInWithGoogle` → `onSuccess(result.user, 'google')`
+ - `signInWithGithub` → `onSuccess(result.user, 'github')`
+ - `submitEmail` → `onSuccess(result.user, 'email')`
+- Inside `onSuccess`, write the method to `localStorage` before redirecting.
+
+### Reading the method
+
+- A reactive `lastUsedMethod = ref(null)`.
+- Populated in `onMounted` from `localStorage` (client-only, SSR-safe; the
+ component is already rendered inside `` on the login page).
+
+### Display
+
+- Each of the three method buttons gets `class="position-relative"`.
+- A floating `v-chip` is rendered in the top-right corner of the matching button:
+ - Vuetify `v-chip` with `label`, `size="x-small"`, `color="primary"`.
+ - `class="position-absolute"` pinned to the top-right corner (slightly
+ overlapping), text `Last Used`.
+ - Shown via `v-if="lastUsedMethod === 'google'"` (and `'github'`, `'email'`
+ respectively).
+
+### Edge cases
+
+- The email button is hidden once the inline email form opens
+ (`v-if="!showEmailForm"`), so its badge hides with it automatically. No extra
+ handling needed.
+- An unknown/empty stored value shows no badge anywhere.
+- `localStorage` access is guarded (wrapped in try/catch or `onMounted` only) so
+ it never runs during SSR.
+
+## Testing
+
+- Manual verification: sign in with each method, confirm the badge appears on the
+ correct button on the next visit to the login page.
+- Confirm no SSR/hydration errors (badge logic runs client-side only).
+
+## Out of scope
+
+- Syncing the preference across devices.
+- Remembering the specific email address used.
diff --git a/docs/superpowers/specs/2026-07-05-affiliates-landing-page-design.md b/docs/superpowers/specs/2026-07-05-affiliates-landing-page-design.md
new file mode 100644
index 000000000..312033520
--- /dev/null
+++ b/docs/superpowers/specs/2026-07-05-affiliates-landing-page-design.md
@@ -0,0 +1,109 @@
+# Affiliates Landing Page — Design
+
+**Date:** 2026-07-05
+**Component:** `web/` (Nuxt 4 SPA, Vuetify 4)
+
+## Goal
+
+Create a marketing landing page at `/affiliates` that convinces people to join the
+httpSMS affiliate program, and replace the current external "Affiliates" footer link
+(`https://httpsms.lemonsqueezy.com/affiliates`) with a `NuxtLink` to this new internal page.
+
+All primary calls-to-action link to the LemonSqueezy affiliate signup:
+`https://affiliates.lemonsqueezy.com/programs/httpsms` (opens in a new tab).
+
+## Files
+
+- **New:** `web/app/pages/affiliates/index.vue` — the landing page.
+- **Edit:** `web/app/layouts/website.vue` — change the footer "Affiliates" link from the
+ external `` to
+ ``, keeping the existing `mdiShieldStar` warning icon and
+ `text-white text-decoration-none footer-link` classes.
+
+## Conventions to follow
+
+- `
+
+
+
+
+
+ {{ notificationsStore.notification.message }}
+
+
+ Close
+
+
+
+
diff --git a/web/app/components/BackButton.vue b/web/app/components/BackButton.vue
new file mode 100644
index 000000000..94ca0f625
--- /dev/null
+++ b/web/app/components/BackButton.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+ Go Back
+
+
diff --git a/web/app/components/BillingDateOrdinal.vue b/web/app/components/BillingDateOrdinal.vue
new file mode 100644
index 000000000..05efadec9
--- /dev/null
+++ b/web/app/components/BillingDateOrdinal.vue
@@ -0,0 +1,15 @@
+
+
+
+ {{ parts.leading }}{{ parts.suffix }} {{ parts.trailing }}
+
diff --git a/web/app/components/BlogAuthorBio.vue b/web/app/components/BlogAuthorBio.vue
new file mode 100644
index 000000000..0051e4d66
--- /dev/null
+++ b/web/app/components/BlogAuthorBio.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
diff --git a/web/app/components/BlogInfo.vue b/web/app/components/BlogInfo.vue
new file mode 100644
index 000000000..d1eac607a
--- /dev/null
+++ b/web/app/components/BlogInfo.vue
@@ -0,0 +1,14 @@
+
+
+
+
+ {{ props.date }}
+ •
+ {{ props.readTime }}
+
+
diff --git a/web/app/components/BlogSidebar.vue b/web/app/components/BlogSidebar.vue
new file mode 100644
index 000000000..81111cac1
--- /dev/null
+++ b/web/app/components/BlogSidebar.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+ httpSMS
+
+
+ httpSMS is an
+ open source
+ application that converts your android phone into an SMS gateway so you
+ can send and receive SMS messages using a simple HTTP API.
+
+
+
+ Documentation
+
+
+
diff --git a/web/app/components/CopyButton.vue b/web/app/components/CopyButton.vue
new file mode 100644
index 000000000..ca3c30c21
--- /dev/null
+++ b/web/app/components/CopyButton.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+ {{ copyText }}
+
+
diff --git a/web/app/components/FirebaseAuth.vue b/web/app/components/FirebaseAuth.vue
new file mode 100644
index 000000000..5f783e07c
--- /dev/null
+++ b/web/app/components/FirebaseAuth.vue
@@ -0,0 +1,533 @@
+
+
+
+
+
+
+ Last Used
+
+
+ Continue with Google
+
+
+
+
+ Last Used
+
+
+ Continue with GitHub
+
+
+
+
+ Last Used
+
+
+ Continue with email
+
+
+
+
+
+
+ Enter your email address to reset your password
+
+
+
+ {{ generalError }}
+
+
+ Send Reset Link
+
+
+
+
+ Check your email for password reset instructions
+
+
+
+ Back to Sign In
+
+
+
+
+
+
+
+
+
+ {{ generalError }}
+
+
+ Forgot Password?
+
+
+ {{ isSignUp ? 'Sign Up' : 'Sign In' }}
+
+
+ {{
+ isSignUp ? 'Already have an account? Sign In' : 'No account? Sign Up'
+ }}
+
+
+
+
+ By continuing, you are indicating that you accept our
+
+ Terms of Service
+
+ and
+
+ Privacy Policy.
+
+
+
+
+
diff --git a/web/app/components/FixedHeader.vue b/web/app/components/FixedHeader.vue
new file mode 100644
index 000000000..b1311f23c
--- /dev/null
+++ b/web/app/components/FixedHeader.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+ HTTP SMS
+
+
+
+ Get Started
+ For Free
+
+
+
+
+
+
diff --git a/web/app/components/LoadingButton.vue b/web/app/components/LoadingButton.vue
new file mode 100644
index 000000000..3b67d9875
--- /dev/null
+++ b/web/app/components/LoadingButton.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
diff --git a/web/components/LoadingDashboard.vue b/web/app/components/LoadingDashboard.vue
similarity index 61%
rename from web/components/LoadingDashboard.vue
rename to web/app/components/LoadingDashboard.vue
index 556c749f7..93997aeec 100644
--- a/web/components/LoadingDashboard.vue
+++ b/web/app/components/LoadingDashboard.vue
@@ -1,21 +1,23 @@
+
+
-
+
-
+
@@ -26,15 +28,9 @@
size="160"
class="mt-8"
color="primary"
- >
+ />
-
-
diff --git a/web/app/components/MessageThread.vue b/web/app/components/MessageThread.vue
new file mode 100644
index 000000000..2a9834317
--- /dev/null
+++ b/web/app/components/MessageThread.vue
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+ Archived Messages
+
+
+
+ Start sending messages
+
+
+
+ New Message
+
+
+
+
+ Install the mobile app on your Android phone to start sending messages.
+ You can also
+ message us on Discord
+ to help set things up.
+
+
+
+ Download App
+
+
+
+
+
+
+ {{
+ mdiAccount
+ }}
+ {{
+ thread.contact.substring(0, 1)
+ }}
+
+
+ {{
+ formatPhoneNumber(thread.contact)
+ }}
+
+ {{ thread.last_message_content }}
+
+
+
+
+ {{ threadDate(thread.order_timestamp) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/components/MessageThreadHeader.vue b/web/app/components/MessageThreadHeader.vue
new file mode 100644
index 000000000..1e1a81eb2
--- /dev/null
+++ b/web/app/components/MessageThreadHeader.vue
@@ -0,0 +1,211 @@
+
+
+
+
+
+
+
+
+
+
+ {{ phoneCountry(phonesStore.owner) }}
+
+
+
+
+
+
+
+
+ Last Heartbeat
+ {{ humanizeTime(phonesStore.heartbeat.timestamp) }} ago
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ threadsStore.archivedThreads ? 'Unarchived' : 'Archived' }}
+
+
+
+
+ New Message
+
+
+
+ Bulk Messages
+
+
+
+ Search Messages
+
+
+
+ Settings
+
+
+
+ Phone API Keys
+
+
+
+ Download App
+
+
+
+ Usage & Billing
+
+
+
+ Logout
+
+
+
+
+
diff --git a/web/app/components/NuxtLogo.vue b/web/app/components/NuxtLogo.vue
new file mode 100644
index 000000000..66daa93fe
--- /dev/null
+++ b/web/app/components/NuxtLogo.vue
@@ -0,0 +1,3 @@
+
+
+
diff --git a/web/app/components/RedirectPromptPopover.vue b/web/app/components/RedirectPromptPopover.vue
new file mode 100644
index 000000000..c2de18200
--- /dev/null
+++ b/web/app/components/RedirectPromptPopover.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+ Skip this page next time?
+
+
+
+
+
+
+ Always open dashboard
+
+
+
+
diff --git a/web/app/composables/useApi.ts b/web/app/composables/useApi.ts
new file mode 100644
index 000000000..b69020c03
--- /dev/null
+++ b/web/app/composables/useApi.ts
@@ -0,0 +1,45 @@
+import type { $Fetch } from 'ofetch'
+
+let authToken: string | null = null
+let apiKey: string | null = null
+
+export function setAuthHeader(token: string | null) {
+ authToken = token
+}
+
+export function setApiKey(key: string | null) {
+ apiKey = key
+}
+
+function createApiFetch(): $Fetch {
+ const config = useRuntimeConfig()
+ const publicConfig = config.public as Record
+ const baseURL = publicConfig.apiBaseUrl
+
+ return $fetch.create({
+ baseURL,
+ headers: {
+ 'X-Client-Version': publicConfig.clientVersion || 'dev',
+ },
+ onRequest({ options }) {
+ const headers = new Headers(options.headers)
+ if (authToken) {
+ headers.set('Authorization', `Bearer ${authToken}`)
+ }
+ if (apiKey) {
+ headers.set('x-api-key', apiKey)
+ }
+ options.headers = headers
+ },
+ })
+}
+
+export function useApi() {
+ return { apiFetch: createApiFetch(), setAuthHeader, setApiKey }
+}
+
+export function useApiComposable() {
+ return {
+ useApi: createApiFetch,
+ }
+}
diff --git a/web/app/composables/useFilters.ts b/web/app/composables/useFilters.ts
new file mode 100644
index 000000000..c84157ea5
--- /dev/null
+++ b/web/app/composables/useFilters.ts
@@ -0,0 +1,25 @@
+import {
+ formatPhoneNumber,
+ phoneCountry,
+ formatTimestamp,
+ formatMoney,
+ formatDecimal,
+ formatBillingPeriod,
+ formatBillingPeriodDateOrdinal,
+ humanizeTime,
+} from '../utils/filters'
+import { capitalize } from '../utils/capitalize'
+
+export function useFilters() {
+ return {
+ formatPhoneNumber,
+ phoneCountry,
+ formatTimestamp,
+ formatMoney,
+ formatDecimal,
+ formatBillingPeriod,
+ formatBillingPeriodDateOrdinal,
+ humanizeTime,
+ capitalize,
+ }
+}
diff --git a/web/app/layouts/blank.vue b/web/app/layouts/blank.vue
new file mode 100644
index 000000000..a9edc5c6b
--- /dev/null
+++ b/web/app/layouts/blank.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/web/app/layouts/default.vue b/web/app/layouts/default.vue
new file mode 100644
index 000000000..47c901de3
--- /dev/null
+++ b/web/app/layouts/default.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/layouts/error.vue b/web/app/layouts/error.vue
new file mode 100644
index 000000000..c9b50eb2d
--- /dev/null
+++ b/web/app/layouts/error.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ {{ error.statusCode }}
+ {{ error.message }}
+ Go Home
+
+
+
+
diff --git a/web/app/layouts/website.vue b/web/app/layouts/website.vue
new file mode 100644
index 000000000..3b6565a5a
--- /dev/null
+++ b/web/app/layouts/website.vue
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+
+
+ httpSMS
+
+
+
+
+ Pricing
+
+
+ Blog
+
+
+ Login
+
+
+ Get Started
+ For Free
+
+
+
+ Dashboard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ httpSMS
+
+
+ Made With
+ in Tallinn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Resources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Developers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Legal
+
+
+
+
+
+
+
+
+
diff --git a/web/app/middleware/auth.ts b/web/app/middleware/auth.ts
new file mode 100644
index 000000000..33c9c9e2c
--- /dev/null
+++ b/web/app/middleware/auth.ts
@@ -0,0 +1,24 @@
+import { useAuthStore } from '../stores/auth'
+
+export default defineNuxtRouteMiddleware(async (to: { path: string }) => {
+ const authStore = useAuthStore()
+
+ if (!authStore.authStateChanged) {
+ await new Promise((resolve) => {
+ const stop = watch(
+ () => authStore.authStateChanged,
+ (changed) => {
+ if (changed) {
+ stop()
+ resolve()
+ }
+ },
+ { immediate: true },
+ )
+ })
+ }
+
+ if (authStore.authUser === null) {
+ return navigateTo({ path: '/login', query: { to: to.path } })
+ }
+})
diff --git a/web/app/middleware/guest.ts b/web/app/middleware/guest.ts
new file mode 100644
index 000000000..b1c4cc809
--- /dev/null
+++ b/web/app/middleware/guest.ts
@@ -0,0 +1,22 @@
+export default defineNuxtRouteMiddleware(async () => {
+ const authStore = useAuthStore()
+
+ if (!authStore.authStateChanged) {
+ await new Promise((resolve) => {
+ const stop = watch(
+ () => authStore.authStateChanged,
+ (changed) => {
+ if (changed) {
+ stop()
+ resolve()
+ }
+ },
+ { immediate: true },
+ )
+ })
+ }
+
+ if (authStore.authUser !== null) {
+ return navigateTo('/threads')
+ }
+})
diff --git a/web/app/middleware/redirectToThreads.ts b/web/app/middleware/redirectToThreads.ts
new file mode 100644
index 000000000..a605286fb
--- /dev/null
+++ b/web/app/middleware/redirectToThreads.ts
@@ -0,0 +1,11 @@
+import { STORAGE_KEY } from '~/stores/redirectPreference'
+
+export default defineNuxtRouteMiddleware(() => {
+ try {
+ if (localStorage.getItem(STORAGE_KEY) === 'true') {
+ return navigateTo('/threads', { replace: true })
+ }
+ } catch (error) {
+ console.error(error)
+ }
+})
diff --git a/web/app/pages/billing/index.vue b/web/app/pages/billing/index.vue
new file mode 100644
index 000000000..555bd129c
--- /dev/null
+++ b/web/app/pages/billing/index.vue
@@ -0,0 +1,794 @@
+
+
+
+
+
+
+
+
+
+ Account Usage
+
+
+
+
+
+
+ Current Plan
+
+
+
+
+
+ {{ plan.name }}
+
+ {{ plan.name }} → Free
+
+ {{ plan.name }}
+
+
+ Your next bill is for ${{ plan.price }} on
+ {{
+ new Date(
+ authStore.user.subscription_renews_at!,
+ ).toLocaleDateString()
+ }}
+
+
+ You are on the life time plan which costs
+ ${{ plan.price }}
+
+
+ You will be downgraded to the FREE plan on
+ {{
+ new Date(
+ authStore.user.subscription_ends_at!,
+ ).toLocaleDateString()
+ }}
+
+
+ {{ formatDecimal(totalMessages) }}/{{
+ formatDecimal(plan.messagesPerMonth)
+ }}
+ messages
+
+
+
+
+ Update Plan
+
+
+ Upgrade Plan
+
+
+
+
+
+ Cancel Plan
+
+
+
+
+
+ Are you sure you want to cancel your subscription?
+
+
+ You will be downgraded to the free plan at the end
+ of the current billing period on
+ {{
+ new Date(
+ authStore.user.subscription_renews_at!,
+ ).toLocaleDateString()
+ }}
+
+
+
+
+ Keep Subscription
+
+
+
+ Cancel Plan
+
+
+
+
+
+
+
+
+
+
+
+ Upgrade Plan
+
+
+
+
+
+
+
+ Pro Plan
+
+
+ Send and receive 5,000 to 20,000 messages per month
+
+
+
+ $10 /month
+
+
+
+
+
+
+
+
+
+
+
+ Enterprise Plan
+
+
+ Send and receive 50,000 to 200,000 messages per
+ month
+
+
+
+ $89 /month
+
+
+
+
+
+
+
+
+
+ Overview
+
+ This is the summary of the sent messages and received messages
+ from
+
+
+
+ to
+
+ .
+
+
+
+
+
+ {{ formatDecimal(billingStore.billingUsage.sent_messages) }}
+
+ Messages Sent
+
+
+
+
+
+ {{
+ formatDecimal(billingStore.billingUsage.received_messages)
+ }}
+
+ Messages Received
+
+
+
+
+
+
+
+ Subscription Payments
+
+
+ This is a list of your last 10 subscription payments made using
+ our payment provider
+
+ Lemon Squeezy .
+
+
+
+
+
+ ID
+ Timestamp
+ Status
+ Tax
+ Total
+
+
+
+
+
+ {{ payment.id }}
+
+ {{ formatTimestamp(payment.attributes.created_at) }}
+
+
+
+
+
+
+ {{ payment.attributes.status_formatted }}
+
+
+
+
+
+ {{ payment.attributes.status_formatted }}
+
+
+
+ {{ payment.attributes.tax_formatted }}
+
+
+ {{ payment.attributes.total_formatted }}
+
+
+
+
+ Invoice
+
+
+
+
+
+
+
+
+ Usage History
+
+ Summary of all the sent and received messages in the past 12
+ billing periods
+
+
+
+
+ Start Date
+ End Date
+
+ Sent
+ Messages
+
+
+ Received
+ Messages
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatDecimal(billingUsage.sent_messages) }}
+ {{ billingUsage.received_messages }}
+
+
+
+
+
+
+
+
+
+
+
+ Generate Invoice
+
+ Create an invoice for your
+ {{ selectedPayment?.attributes.total_formatted }} payment on
+ {{ formatTimestamp(selectedPayment?.attributes.created_at ?? '') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Download Invoice
+
+
+
+ Close
+
+
+
+
+
+
diff --git a/web/pages/blog/end-to-end-encryption-to-sms-messages.vue b/web/app/pages/blog/end-to-end-encryption-to-sms-messages.vue
similarity index 56%
rename from web/pages/blog/end-to-end-encryption-to-sms-messages.vue
rename to web/app/pages/blog/end-to-end-encryption-to-sms-messages.vue
index 729acdd94..5e7e0a6f9 100644
--- a/web/pages/blog/end-to-end-encryption-to-sms-messages.vue
+++ b/web/app/pages/blog/end-to-end-encryption-to-sms-messages.vue
@@ -1,21 +1,45 @@
+
+
-
-
-
+
+
+
Secure your conversations by encrypting your SMS messages end-to-end
-
- {{ postDate }}
- • {{ readTime }}
-
-
+
+
+
We have added support for end-to-end encryption for SMS messages so
that no one can see the content of the messages you send using httpSMS
except you.
@@ -36,10 +60,10 @@
>
encryption algorithm to encrypt and decrypt the messages.
- Setup your encryption key
+
+ Setup your encryption key
⬇️ Download and install App Settings page of the app.
-
- Encrypt your SMS message
+ src="/img/blog/end-to-end-encryption-to-sms-messages/encryption-key-android.png"
+ />
+
+ Encrypt your SMS message
We use the AES-256 encryption algorithm to encrypt the SMS messages.
This algorithm requires a an encryption key which is 256 bits to work
@@ -75,22 +97,22 @@
encrypting your message so you don't have to deal with creating the
initialization vector and encoding the payload yourself.
-
-
- {{
- mdiLanguageJavascript
- }}
+
+
+
+
Javascript
-
-
- {{ mdiLanguageGo }}
+
+
+
Go
-
-
-
-
-
-import HttpSms from "httpsms"
+
+
+
+
+ import HttpSms from "httpsms"
const client = new HttpSms("" /* API Key from https://httpsms.com/settings */);
@@ -99,13 +121,12 @@ const key = "Password123";
const encryptedMessage = client.cipher.encrypt(key, "This is a sample text message");
// The encrypted message looks like this, note that you will get a different encrypted message when you run this code on your computer
-// Qk3XGN5+Ax38Ig01m4AqaP6Y0b0wYpCXtx59sU23uVLWUU/c7axF7LozDg==
-
-
-
-
-
-import "github.com/NdoleStudio/httpsms-go"
+// Qk3XGN5+Ax38Ig01m4AqaP6Y0b0wYpCXtx59sU23uVLWUU/c7axF7LozDg==
+
+
+ import "github.com/NdoleStudio/httpsms-go"
client := htpsms.New(htpsms.WithAPIKey(""/* API Key from https://httpsms.com/settings */))
@@ -113,12 +134,11 @@ key := "Password123" // use the same key on the Android app
encryptedMessage := client.Cipher.Encrypt(key, "This is a test text message")
// The encrypted message looks like this, note that you will get a different encrypted message when you run this code on your computer
-// Qk3XGN5+Ax38Ig01m4AqaP6Y0b0wYpCXtx59sU23uVLWUU/c7axF7LozDg==
-
-
-
-
- Send an encrypted message
+// Qk3XGN5+Ax38Ig01m4AqaP6Y0b0wYpCXtx59sU23uVLWUU/c7axF7LozDg==
+
+
+
+ Send an encrypted message
After generating the encrypted message payload, you can send it
directly using the httpSMS API. Make sure to set
@@ -126,22 +146,22 @@ encryptedMessage := client.Cipher.Encrypt(key, "This is a test text message")
httpSMS knows that the message is encrypted and it will be decoded in
the Android app before sending to your recipient.
-
-
- {{
- mdiLanguageJavascript
- }}
+
+
+
+
Javascript
-
-
- {{ mdiLanguageGo }}
+
+
+
Go
-
-
-
-
-
-import HttpSms from "httpsms"
+
+
+
+
+ import HttpSms from "httpsms"
client.messages.postSend({
content: encryptedMessage,
@@ -149,66 +169,66 @@ client.messages.postSend({
encrypted: true,
to: '+18005550100',
})
-.then((message) => {
+.then((message) => {
console.log(message.id); // log the ID of the sent message
-});
-
-
-
-
-import "github.com/NdoleStudio/httpsms-go"
-
-client.Messages.Send(context.Background(), &httpsms.MessageSendParams{
+});
+
+
+ import "github.com/NdoleStudio/httpsms-go"
+
+client.Messages.Send(context.Background(), &httpsms.MessageSendParams{
Content: encryptedMessage,
From: "+18005550199",
To: "+18005550100",
Encrypted: true,
-})
-
-
-
-
+})
+
+
+
When you make the API request, the message will be decrypted before
sending to the recipient. This is a screenshot of the SMS message
which is sent to the recipient.
-
- Receiving an encrypted message
+ src="/img/blog/end-to-end-encryption-to-sms-messages/send-sms-message.png"
+ />
+
+
+ Receiving an encrypted message
+
When your android phone receives a new message, it will be encrypted
with the encryption Key on your Android phone before it is delivered
to your server's webhook endpoint. You can configure webhooks by
following
- this guide. this guide.
-
-
- {{
- mdiLanguageJavascript
- }}
+
+
+
+
Javascript
-
-
- {{ mdiLanguageGo }}
+
+
+
Go
-
-
-
-
-
-import HttpSms from "httpsms"
+
+
+
+
+ import HttpSms from "httpsms"
const client = new HttpSms("" /* API Key from https://httpsms.com/settings */);
@@ -238,13 +258,12 @@ const encryptedMessage = "bdmZ7n6JVf/ST+SoNlSaOGUL1DcL5705ETw8GAB4llYBgE9HOOL+Pu
const encryptionkey = "Password123" // use the same key on the Android app
const decryptedMessage = client.cipher.decrypt(encryptionkey, encryptedMessage)
-// This is a test text message
-
-
-
-
-
-import "github.com/NdoleStudio/httpsms-go"
+// This is a test text message
+
+
+ import "github.com/NdoleStudio/httpsms-go"
client := htpsms.New(htpsms.WithAPIKey(/* API Key from https://httpsms.com/settings */))
@@ -274,68 +293,27 @@ encryptedMessage = "bdmZ7n6JVf/ST+SoNlSaOGUL1DcL5705ETw8GAB4llYBgE9HOOL+Pu/h+w==
encryptionkey := "Password123" // use the same key on the Android app
decryptedMessage := client.Cipher.Decrypt(encryptionkey, encryptedMessage)
-// This is a test text message
-
-
-
-
- Conclusion
+// This is a test text message
+
+
+
+ Conclusion
Congratulations, you have successfully configured your Android phone
to send and receive SMS messages with end-to-end encryption. Don't
hesitate to contact us if you face any problems while following this
guide.
-
-
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
diff --git a/web/app/pages/blog/forward-incoming-sms-from-phone-to-webhook.vue b/web/app/pages/blog/forward-incoming-sms-from-phone-to-webhook.vue
new file mode 100644
index 000000000..d7f17c788
--- /dev/null
+++ b/web/app/pages/blog/forward-incoming-sms-from-phone-to-webhook.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+ How to forward a text message (SMS) from an android phone into your
+ webhook
+
+
+
+
+ You can now program your android phone to forward messages received on
+ your phone to your server and trigger powerful automations with tools
+ like Zapier and IFTTT. I created an open source application called
+ httpSMS
+ that helps you to set this up with ease
+
+
+ Step 1: Get your API_KEY
+
+ Create an account on the httpSMS web application and copy your API key
+ from the settings page.
+ https://httpsms.com/settings
+
+
+
+
+ Step 2: Install the httpSMS android app
+
+
+ ⬇️ Download and install
+ the httpSMS android app on your phone and sign in using your API KEY
+ which you copied above. This app listens for SMS messages received on
+ your android phone.
+
+
+
+ Step 3: Set up a webhook
+
+ Once the application has been installed, it will be listening for SMS
+ messages received on the android phone. You can configure the
+ application to sent this SMS message to your server URL using a
+ webhook. You can configure this URL under the settings page in the
+ httpSMS application
+ https://httpsms.com/settings
+
+
+
+ Conclusion
+
+ Congratulations, you have successfully set up SMS forwarding from your
+ Android phone to a webhook! This powerful automation tool can help you
+ streamline your business workflow and save you time and effort.
+
+
+ You can also trigger the httpSMS application to send an SMS a simple
+ API. You can find more information on the documentation page at
+ https://docs.httpsms.com
+
+ Until the next time✌️
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/blog/grant-send-and-read-sms-permissions-on-android.vue b/web/app/pages/blog/grant-send-and-read-sms-permissions-on-android.vue
new file mode 100644
index 000000000..0261aea9d
--- /dev/null
+++ b/web/app/pages/blog/grant-send-and-read-sms-permissions-on-android.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+ How to grant SMS permissions on Android 15+
+
+
+
+
+ In Android 15 (Vanilla Ice Cream), the
+ android.permission.SEND_SMS and
+ android.permission.RECEIVE_SMS permissions are now hard
+ restricted and cannot be granted
+ via the runtime permissions interface .
+
+
+
+ Granting the SEND_SMS and
+ RECEIVE_SMS permissions will allow an Android app to be
+ able to read and send SMS messages on your phone. Make sure you trust
+ the application before allowing these permissions.
+
+
+ Step1: Open App Info
+
+ Long press the icon of the android app which you want to grant the
+ permission and select "App info"
+
+
+
+
+ Step 2: Allow Restricted Permissions
+
+
+ On the App Info page, click on the menu button
+ and select the
+ "Allow restricted settings" option
+
+
+
+
+ Step 3: Allow SMS Permissions
+
+
+ Once you have allowed the restricted settings from step 2 above, You
+ can navigate to Permissions ➡️ SMS and tap the Allow button to
+ grant SMS permissions to the android app.
+
+
+
+ Conclusion
+
+ Congratulations, you have successfully configured SMS permissions on
+ your Android app. Don't hesitate to contact us if you face any
+ problems while following this guide.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/blog/how-to-send-sms-messages-from-excel.vue b/web/app/pages/blog/how-to-send-sms-messages-from-excel.vue
new file mode 100644
index 000000000..eb010ce00
--- /dev/null
+++ b/web/app/pages/blog/how-to-send-sms-messages-from-excel.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+ How to send SMS messages to multiple phone numbers from Excel
+
+
+
+
+ Send personalized SMS messages to multiple phone numbers for less than
+ $0.002 per SMS message. You can also configure every SMS
+ message in your Excel spreadsheet so they are unique for each
+ recipient phone number.
+
+
+ Prerequisites
+
+ Basic understanding of Microsoft Excel or Google Sheets.
+ An Android phone.
+
+
+ Step 1: Get your API Key
+
+ Create an account on
+ httpsms.com
+ and copy your API key from the settings page
+ https://httpsms.com/settings
+
+
+
+
+ Step 2: Install the httpSMS android app
+
+
+ ⬇️ Download and install
+ the httpSMS android app on your phone and sign in using your API KEY
+ which you copied above. This app listens for SMS messages received on
+ your android phone.
+
+
+ Make sure to enter your phone number in the international format e.g
+ +18005550199 when authenticating with the httpSMS Android app.
+
+
+
+ Step 3: Edit your Excel file
+
+ Download the
+ httpSMS Excel file template
+ and edit it with your favorite spreadsheet software e.g Excel, Google
+ Sheets, Open Office etc. Fill in the phone number which you registered
+ in httpSMS in the FromPhoneNumber column and fill in the
+ number of the recipient of the SMS in the
+ ToPhoneNumber column. Also add the SMS which you want to
+ send in the message in the Content column.
+
+
+ Make sure to use the correct FromPhoneNumber from step 2
+ above in your Excel file
+
+
+
+ Step 4: Send the SMS Messages
+
+ Visit the
+
+
+ Bulk Messages
+
+ page on httpSMS and upload your Excel file and send the your SMS
+ messages.
+
+
+
+
+ Don't hesitate to
+ contact us
+ if you face any issues sending bulk SMS messages from your Excel files
+ by following this tutorial.
+
+ Until the next time✌️
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/blog/index.vue b/web/app/pages/blog/index.vue
new file mode 100644
index 000000000..9516b43fb
--- /dev/null
+++ b/web/app/pages/blog/index.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+ Blog
+
+
+ Learn more about httpSMS through our blog!
+
+
+
+
+
+
+
+
+ {{ article.title }}
+
+ {{
+ article.date
+ }}
+ •
+ {{ article.readTime }}
+
+
+
+ {{ article.description }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/blog/send-bulk-sms-from-csv-file-with-no-code.vue b/web/app/pages/blog/send-bulk-sms-from-csv-file-with-no-code.vue
new file mode 100644
index 000000000..48a2aa4cc
--- /dev/null
+++ b/web/app/pages/blog/send-bulk-sms-from-csv-file-with-no-code.vue
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+ Send multiple SMS messages from a CSV file with no code
+
+
+
+
+ Send personalized SMS messages to your users in bulk using your
+ Android phone. The good news is, you don't have to write a single
+ piece of code, just upload your CSV file and we will take care of the
+ rest.
+
+
+ What is a CSV file
+
+ CSV is an abbreviation for comma-separated values. A CSV file allows
+ data to be saved in a table structured format using a comma
+ , to separate the various cells of a table and a new line
+ to separate the various rows in the table. CSV files can be used with
+ any spreadsheet program, such as Microsoft Excel, Open Office Calc, or
+ Google Sheets.
+
+
+ Prerequisites
+
+ Basic understanding of CSV files.
+ An Android phone.
+
+
+ Step 1: Get your API Key
+
+ Create an account on
+ httpsms.com
+ and copy your API key from the settings page
+ https://httpsms.com/settings
+
+
+
+
+ Step 2: Install the httpSMS android app
+
+
+ ⬇️ Download and install
+ the httpSMS android app on your phone and sign in using your API KEY
+ which you copied above. This app listens for SMS messages received on
+ your android phone.
+
+
+ Make sure to enter your phone number in the international format e.g
+ +18005550199 when authenticating with the httpSMS Android app.
+
+
+
+ Step 3: Edit your CSV file
+
+ Download the
+ httpSMS CSV file template
+ and edit it with your favorite spreadsheet software e.g Excel, Google
+ Sheets or even a text editor like notepad. Fill in the phone number
+ which you registered in httpSMS in the
+ FromPhoneNumber column and fill in the number of the
+ recipient of the SMS in the ToPhoneNumber column. Also
+ add the SMS which you want to send in the message in the
+ Content column.
+
+
+ Make sure to use the correct FromPhoneNumber from step 2
+ above in your CSV file
+
+
+
+ Step 4: Send the SMS Messages
+
+ Visit the
+
+
+ Bulk Messages
+
+ page on httpSMS and upload your CSV file and send the your SMS
+ messages.
+
+
+
+
+ Don't hesitate to
+ contact us
+ if you face any issues sending bulk SMS messages from your CSV files
+ by following this tutorial.
+
+ Until the next time✌️
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/blog/send-sms-from-android-phone-with-python.vue b/web/app/pages/blog/send-sms-from-android-phone-with-python.vue
new file mode 100644
index 000000000..72e68853b
--- /dev/null
+++ b/web/app/pages/blog/send-sms-from-android-phone-with-python.vue
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+ Send an SMS from your Android phone with Python
+
+
+
+
+ In an era dominated by social media, instant messaging apps, and
+ ever-evolving communication technologies, it's easy to overlook the
+ humble yet remarkably resilient Short Message Service (SMS). Since its
+ inception in the 1990s, SMS has stood the test of time, remaining one
+ of the most widely used and reliable means of mobile communication.
+
+
+ Whether you're a business owner looking to optimize your communication
+ strategy, a developer seeking to integrate SMS functionality into your
+ applications, or simply intrigued by the enduring charm of SMS, this
+ article will explain how to setup your Android phone to send SMS
+ messages.
+
+
+ Prerequisites
+
+ Basic understanding of Python.
+ An Android phone.
+
+ Python
+ installed on your computer.
+
+
+
+ Step 1: Get your API Key
+
+ Create an account on
+ httpsms.com
+ and copy your API key from the settings page
+ https://httpsms.com/settings
+
+
+
+
+ Step 2: Install the httpSMS android app
+
+
+ ⬇️ Download and install
+ the httpSMS android app on your phone and sign in using your API KEY
+ which you copied above. This app listens for SMS messages received on
+ your android phone.
+
+
+ Make sure to enter your phone number in the international format e.g
+ +18005550199 when authenticating with the httpSMS Android app.
+
+
+
+ Step 3: Writing the code
+
+ Now that you have setup your android phone correctly on httpSMS, you
+ can write the python code below in a new file named
+ send_sms.py. This code will send and SMS and after
+ running the script via your Android phone to the recipient phone
+ number specified in the payload.
+
+
+ Make sure to use the correct api_key from step 1 and also
+ use the correct to and from phone numbers in
+ the payload variable.
+
+ import requests
+import json
+
+api_key = "" # Get API Key from https://httpsms.com/settings
+
+url = 'https://api.httpsms.com/v1/messages/send'
+
+headers = {
+ 'x-api-key': api_key,
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+}
+
+payload = {
+ "content": "This is a sample text message sent via python",
+ "from": "+18005550199", # This is the phone number of your android phone
+ "to": "+18005550100" # This is the recipient phone number
+}
+
+response = requests.post(url, headers=headers, data=json.dumps(payload))
+
+print(json.dumps(response.json(), indent=4))
+
+ Run the code above with the command
+ python send_sms.py and check the phone specified in the
+ to field of the payload to verify that the
+ message has been received successfully.
+
+
+
+ Conclusion
+
+ Congratulations, you have successfully configured your android phone
+ to send SMS messages via python. You can now reuse this code to send
+ SMS messages from your python applications.
+
+
+ If you are also interested in forwarding incoming SMS from your
+ android phone to your server, checkout our
+ SMS forwarding guide.
+
+ Until the next time✌️
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier.vue b/web/app/pages/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier.vue
new file mode 100644
index 000000000..73214206b
--- /dev/null
+++ b/web/app/pages/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier.vue
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+ Send an SMS message when a new row is added to Google Sheets using
+ Zapier
+
+
+
+
+ Automate sending personalized SMS messages each time a new row is
+ added to your Google Sheets document using Zapier. You don't need to
+ write any code to make this happen and you can personalize the SMS
+ messages which are sent out.
+
+
+ Prerequisites
+
+ Basic understanding of Google Sheets.
+ Basic understanding of Zapier.
+
+ An account on
+ httpsms.com
+
+
+
+
+ Step 1: Create trigger on Zapier
+
+
+ Create a new Zap on Zapier and select Google Sheets as the trigger.
+ The event name should be "New Spreadsheet Row" if you want to
+ send an SMS message every time a new row is added to your Google
+ Sheets document.
+
+
+
+ On the Zap, select the Spreadsheet which you have on google
+ drive and make sure to select the correct Worksheet .
+
+
+ In the sample spreadsheet below, we are mimicking an e-commerce store.
+ The first column contains the name of the customer, the second column
+ is the name of the product which was bought and the third column is
+ the phone number of the customer who made the purchase. You can use
+ your own custom spreadsheet with your own set of columns.
+
+
+
+
+ Step 2: Create an action on Zapier
+
+
+ An action is what happens after the trigger. In this case, we want to
+ send an SMS message to the customer who made the purchase. Select
+ Webhooks By Zapier as the action app and select
+ Custom Request as the action event.
+
+
+
+ On the Action section in Zapier, set the Method to
+ Post. Set the URL to
+ https://api.httpsms.com/v1/messages/send. Set the
+ Data Pass-Through to false. In the Data
+ field, add the following JSON payload.
+
+ {
+ "content": "Hello [Name]\nThanks for ordering [Product] via our shopify store. Your order will be shipped today!",
+ "from": "+18005550199",
+ "to": "[ToPhoneNumber]"
+}
+
+ In the JSON message above, we are mimicking an e-commerce store. The
+ [Name] variable contains the name of the customer on the
+ spreadsheet. [Product] contains the name of the product
+ which was bought and [ToPhoneNumber] contains the phone
+ number of the customer who made the purchase. You can use your own
+ custom message with your own set of variables according to your
+ spreadsheet. Change the from field to the phone number
+ which you registered on httpsms.com.
+
+
+ On the headers section add a new header called
+ x-api-key and the value of this header should be your API
+ key on
+ httpsms.com
+ and you can copy your API key from the settings page
+ https://httpsms.com/settings .
+
+
+ Also add a new header called Content-Type and the value
+ of this header should be application/json
+
+
+ The final configuration of the action should look like the screenshot
+ below.
+
+
+
+ Conclusion
+
+ Publish your zap and you will automatically trigger httpsms to send an
+ SMS to your customer when ever you add a new row in the google sheet.
+ Don't hesitate to
+ contact us
+ if you face any issues configuring your zap to send SMS messages from
+ your Google Sheets by following this tutorial.
+
+ Until the next time✌️
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/bulk-messages/index.vue b/web/app/pages/bulk-messages/index.vue
new file mode 100644
index 000000000..26a0253cf
--- /dev/null
+++ b/web/app/pages/bulk-messages/index.vue
@@ -0,0 +1,273 @@
+
+
+
+
+
+
+
+
+
+
+ Bulk Messages
+
+
+
+
+
+
+ Bulk Messages
+
+ Fill in our bulk SMS
+ CSV template
+ or our
+ Excel template
+ and upload it here to send your SMS messages to multiple
+ recipients at once. You can also configure
+ send schedules
+ on your phone to make sure messages are sent out at specific times
+ of the day e.g
+ Mon - Fri 9am - 5pm.
+
+
+
+ {{ errorTitle }}
+
+
+
+
+
+
+
+
+ Bulk Message History
+
+ Your 10 most recent bulk SMS uploads are shown below, including a
+ delivery status breakdown for each batch. Click on a row to see
+ individual messages on the search page.
+
+
+
+
+
+ Name
+ Created At
+ Total
+ Pending
+ Scheduled
+ Sent
+ Delivered
+ Failed
+ Expired
+
+
+
+
+ {{ cleanName(order.request_id) }}
+
+ {{ formatTimestamp(order.created_at) }}
+
+ {{ order.total }}
+ {{ order.pending_count }}
+ {{ order.scheduled_count }}
+ {{ order.sent_count }}
+ {{ order.delivered_count }}
+ {{ order.failed_count }}
+ {{ order.expired_count }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/heartbeats/[id].vue b/web/app/pages/heartbeats/[id].vue
new file mode 100644
index 000000000..8a05d6944
--- /dev/null
+++ b/web/app/pages/heartbeats/[id].vue
@@ -0,0 +1,251 @@
+
+
+
+
+
+
+
+
+
+
+ Heartbeats
+
+ {{
+ formatPhoneNumber(phonesStore.owner)
+ }}
+
+
+
+
+
+
+ Every 15 minutes, the httpSMS app on your Android phone sends a
+ heartbeat event to the httpsms API to show that it is alive. The
+ reason for this is because the Android operating system sometimes
+ kills an application to save battery
+ https://dontkillmyapp.com .
+
+
+ If httpSMS doesn't get any heartbeat event in a 1-hour interval,
+ you will get an email notification about it so you can check if
+ there is an issue with your Android phone.
+
+
+
+
+
+
+
+
+
+
+
+ The table below shows the last 100 heartbeat events received from
+ the httpSMS app on your Android phone.
+
+
+
+
+ {{ formatInterval(item.interval) }}
+
+
+ {{ formatPhoneNumber(item.owner) }}
+
+
+ {{ formatTimestamp(item.timestamp) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/index.vue b/web/app/pages/index.vue
new file mode 100644
index 000000000..281745691
--- /dev/null
+++ b/web/app/pages/index.vue
@@ -0,0 +1,1191 @@
+
+
+
+
+
+
+
+
+
+ Save money by using your
+ phone to send and receive SMS messages via a simple programmable API
+ with end-to-end encryption.
+
+
+
+
+ Get Started
+
+
+
+ Live Demo
+
+
+
+ ⚡Trusted by 23,273+ users who send/receive more than
+ 500,000 messages per month.
+
+
+
+ Free to use
+
+ 100% Open Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bulk SMS
+
+
+ No code
+
+
+
+ Fill in our bulk SMS
+ CSV template
+ or our
+ excel template
+ and upload it on httpSMS to send SMS messages to up to 1,000
+ recipients at once without writing any code.
+
+
+
+ Integration Guide
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Integrations
+
+
+ No code
+
+
+
+ Connect your workflow with thousands of other apps with the
+ power of Zapier. For example you can setup an automation to send
+ personalized SMS messages each time someone makes an order from
+ your shopify store or each time a new row is added to a Google
+ spreadsheet.
+
+
+ Zapier Integration Guide
+
+
+
+
+
+
+
+
+
+
+
+
+
Webhooks
+
+ If you want to build advanced integrations, we support callback
+ URLs. The httpSMS platform can forward SMS messages received on
+ your Android phone to your server using a callback URL which you
+ provide.
+
+
+
+ Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
Control Sending
+
+ Send SMS messages without going over your mobile carrier
+ limitations. If you set a rate e.g 3 messages per minute, we
+ will queue up your messages and send them at a rate of 1 message
+ per 20 seconds.
+
+
+
+ Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
Monitoring
+
+ If your android phone goes offline for some reason and it can't
+ send SMS messages, we will send you a notification immediately.
+
+
+
+
+
+
+
+
+
+
+
+
+
Open Source
+
+ httpSMS is transparent and fully open source. The source code is
+ available on GitHub. Feel free to fork it, verify it or submit a
+ pull request.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Encryption 🔐
+
+ Take control of your privacy with our end-to-end encrypted SMS
+ feature. Safeguard your messages from prying eyes, ensuring
+ absolute confidentiality using the military grade
+ AES-256 encryption
+ algorithm.
+
+
+
+ Setup end-to-end encryption
+
+
+
+
+
+
+
+
+
+
+
+
+
Multiple Phones
+
+ Setup the httpSMS gateway Android app on multiple phones
+ independently and securely without sharing data under one
+ account by creating unique phone API keys.
+
+
+
+ Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
Schedule Text Messages
+
+ Control when your SMS will reach your recipients, allowing you
+ to perfectly time promotions, critical alerts etc by scheduling
+ your messages in advance.
+
+
+
+ Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Get Started
+
+
+
+
+
+
+
+
+
+ Step 1
+
+
+ Create an account
+
+ on httpsms.com and obtain your API key on the settings
+ page.
+
+
+
+
+
+ Step 2
+
+ Download
+ and install the companion android application on your
+ phone and sign in using your API Key.
+
+
+
+
+
+ Step 3
+
+ Start sending and receiving SMS messages using our rich
+ HTTP API. You can find the documentation on
+
+ {{ config.public.appDocumentationUrl }}
+
+
+
+
+
+
+
+
+
+
+
+ Javascript
+
+
+
+ PHP
+
+
+
+ Python
+
+
+
+ Go
+
+
+
+ Java
+
+
+
+ cURL
+
+
+
+ C#
+
+
+
+
+ import HttpSms from 'httpsms'
+
+const client = new HttpSms('' /* Get the API Key from https://httpsms.com/settings */);
+
+client.messages.postSend({
+ content: 'This is a sample text message',
+ from: '+18005550199', // Put the correct phone number here
+ to: '+18005550100', // Put the correct phone number here
+})
+.then((message) => {
+ console.log(message.id); // log the ID of the sent message
+})
+
+
+ <?php
+$apiKey = "Get API Key from https://httpsms.com/settings";
+
+$options = array(
+ 'http' => array(
+ 'method' => 'POST',
+ 'content' => json_encode( [
+ 'content' => 'This is a sample text message',
+ 'from' => "+18005550199",
+ 'to' => "+18005550100"
+ ]),
+ 'header'=> "Content-Type: application/json\r\n" .
+ "Accept: application/json\r\n" .
+ "x-api-key: $apiKey\r\n"
+ )
+);
+
+$context = stream_context_create( $options );
+$result = file_get_contents( "https://api.httpsms.com/v1/messages/send", false, $context );
+
+echo $result;
+
+
+ import requests
+import json
+
+api_key = "Get API Key from https://httpsms.com/settings"
+
+url = 'https://api.httpsms.com/v1/messages/send'
+
+headers = {
+ 'x-api-key': api_key,
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+}
+
+payload = {
+ "content": "This is a sample text message",
+ "from": "+18005550199",
+ "to": "+18005550100"
+}
+
+response = requests.post(url, headers=headers, data=json.dumps(payload))
+
+print(json.dumps(response.json(), indent=4))
+
+
+ import "github.com/NdoleStudio/httpsms-go"
+
+client := htpsms.New(htpsms.WithAPIKey(/* API Key from https://httpsms.com/settings */))
+
+client.Messages.Send(context.Background(), &httpsms.MessageSendParams{
+ Content: "This is a sample text message",
+ From: "+18005550199",
+ To: "+18005550100",
+})
+
+
+ var client = HttpClient.newHttpClient();
+var apiKey = "Get API Key from https://httpsms.com/settings";
+
+var payload = """
+ {
+ "content": "This is a sample text message",
+ "from": "+18005550199",
+ "to": "+18005550100"
+ }
+ """;
+
+var request = HttpRequest.newBuilder()
+ .uri(URI.create("https://api.httpsms.com/v1/messages/send"))
+ .header("accept", "application/json")
+ .header("Content-Type", "application/json")
+ .header("x-api-key", apiKey)
+ .POST(HttpRequest.BodyPublishers.ofString(payload))
+ .build();
+
+var response = client.send(request, HttpResponse.BodyHandlers.ofString());
+System.out.println(response.body());
+
+
+ curl --location --request POST 'https://api.httpsms.com/v1/messages/send' \
+--header 'x-api-key: Get API Key from https://httpsms.com/settings' \
+--header 'Content-Type: application/json' \
+--data-raw '{
+ "from": "+18005550199",
+ "to": "+18005550100",
+ "content": "This is a sample text message"
+}'
+
+
+ var client = new HttpClient();
+client.DefaultRequestHeaders.Add("x-api-key", ""/* Get API Key from https://httpsms.com/settings */);
+
+var response = await client.PostAsync(
+ "https://api.httpsms.com/v1/messages/send",
+ new StringContent(
+ JsonSerializer.Serialize(new {
+ from = "+18005550199",
+ To = "+18005550100",
+ Content = "This is a sample text message",
+ }),
+ Encoding.UTF8,
+ "application/json"
+ )
+);
+
+Console.WriteLine(await response.Content.ReadAsStringAsync());
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Pricing
+
+
+ Most of the httpSMS features are completely
+ free but if you want a little
+ extra, you can go pro
+
+
+
+ Monthly
+
+
+
+ Yearly
+
+
+ 2 months free
+
+
+
+
+
+
+
+
+
+ {{ pricingLabels[pricing] }}
+
+
+
+
+
+
+
+
+
+ Free
+
+ Try sending and receiving SMS on your hobby websites and
+ experiments.
+
+
+ $0
+
+
+ No credit card required
+
+ Get Started
+
+
+ Send or receive up to 200 SMS/month
+
+
+
+ Offline notifications for your phone
+
+
+
+ Forward received messages via webhook
+
+
+
+ Basic email support
+
+
+
+
+
+
+
+
+
+ Pro
+
+
+ Send and receive more SMS messages like a pro with advanced
+ features.
+
+
+ $10 /month
+
+
+ $100 /year
+
+
+ or $100 per year
+
+
+ or $8.33 per month
+
+ Try For Free
+
+
+ Send or receive up to 5,000 SMS/month
+
+
+
+ Offline notifications for your phone
+
+
+
+ Forward received messages via webhook
+
+
+
+ Priority support
+
+
+
+
+
+
+
+
+
+ {{ pricingLabels[pricing] }} Plan
+
+
+ Send and receive up to {{ planMessages }} SMS messages like a
+ power user.
+
+
+ ${{ planMonthlyPrice }} /month
+
+
+ ${{ planYearlyPrice }} /year
+
+
+ or ${{ planYearlyPrice }} per year
+
+
+ or ${{ planYearlyMonthlyPrice }} per month
+
+ Try For Free
+
+
+ Send or receive up to
+ {{ pricingLabels[pricing] }} SMS/month
+
+
+
+ Offline notifications for your phone
+
+
+
+ Forward received messages via webhook
+
+
+
+ Priority support
+
+
+
+
+
+
+
+
+ Feel free to contact us if
+ you need a bigger plan, or if you want us to install the httpSMS
+ API on your dedicated server. If you would still like to support
+ us, please donate via
+ GitHub Sponsors 💖
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ httpSMS is free platform which transforms your phone into an sms
+ server! It has no hard limit also. It is an
+ innovative idea, I have not seen such tech before. If you
+ have an sms active pack in your phone then good to go
+ with httpSMS.
+
+
+
+
+
+
+
+
+
+ "Outstanding product . Literally have been using this for
+ years since we don't have an sms gateways that can handle http
+ requests costing less than 50 cent per sms in my Country.
+ Love the product and the support! Great work Arnold!"
+
+
+
+
+
+
+
+
+
+
+
+
+ Frequently Asked Questions
+
+
+ If you still cannot find the answer to your question,
+ send us an email or ask in
+ our Discord channel.
+
+
+
+
+
+
+
+
+ Can I install the app on my iPhone?
+
+
+
+
+
+
+ The httpSMS application works only on Android phones at the
+ moment since Apple doesn't allow you to install a custom SMS
+ messaging app.
+
+
+
+
+
+ What's the minimum supported Android version?
+
+
+
+
+
+
+ The httpSMS Android app works from Android 9 (Pie) and above.
+ So you can install the application on your old Android phone
+ which you don't use anymore.
+
+
+
+
+
+ Can I send unlimited number of messages per month?
+
+
+
+
+
+
+ We do have packages that allow up to 200,000 SMS messages per
+ month but you can
+ send us an email if
+ you will like to send more messages so we create a custom plan
+ just for you.
+
+
+
+
+
+ Can I change the sender of the SMS message?
+
+
+
+
+
+
+ No you cannot. When you send an SMS message using the httpSMS
+ app it uses your SIM card to send the message so the recipient
+ will see your phone number as the sender of the SMS. You
+ cannot use your brand name as the sender ID.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/login.vue b/web/app/pages/login.vue
new file mode 100644
index 000000000..64da0ce5c
--- /dev/null
+++ b/web/app/pages/login.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+ Welcome
+
+
+ Join 23,273+ users who send/receive more than
+
+ 500,000 messages per month
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/messages/index.vue b/web/app/pages/messages/index.vue
new file mode 100644
index 000000000..0a6d53a99
--- /dev/null
+++ b/web/app/pages/messages/index.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+ New Message
+
+
+ {{ formatPhoneNumber(phonesStore.owner) }}
+
+
+
+
+
+
+
+ Enter the recipient's phone number and your message below, and
+ we'll deliver a real SMS it through your connected Android phone.
+ You can also text a short code like
+ 24273 without entering a full phone number.
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/phone-api-keys/index.vue b/web/app/pages/phone-api-keys/index.vue
new file mode 100644
index 000000000..27804cbde
--- /dev/null
+++ b/web/app/pages/phone-api-keys/index.vue
@@ -0,0 +1,524 @@
+
+
+
+
+
+
+
+
+
+ Phone API Keys
+
+
+
+
+
+
+
+
+ Phone API Keys
+
+
+
+ Create API Key
+
+
+
+ Documentation
+
+
+
+ If you have multiple phones, you can create unique phone API keys
+ for your different Android phones. These API keys can only be used
+ on the specific mobile phone when it calls the httpSMS server for
+ specific actions like sending heartbeats, registering received
+ messages, delivery reports etc. If you want to interact with the
+ full
+ httpSMS API , use the API key under your account settings page instead
+ https://httpsms.com/settings .
+
+
+
+
+ Name
+ Created At
+ Phone Numbers
+ Actions
+
+
+
+
+ {{ phoneApiKey.name }}
+ {{ formatTimestamp(phoneApiKey.created_at) }}
+
+
+
+ {{ formatPhoneNumber(phoneNumber) }}
+
+ Remove
+
+
+
+ -
+
+
+
+ View
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+ Create Phone API Key
+
+ After creating the API key you can use it to login to the httpSMS
+ Android app on your phone
+
+
+
+
+
+
+
+
+ CreatePhone API Key
+
+
+
+ Close
+
+
+
+
+
+
+
+ Phone API Key QR Code
+
+ Scan this QR code with the
+ httpSMS app
+ on your Android phone to login.
+
+
+
+
+
+
+
+
+
+ Close
+
+
+
+
+
+
+
+
+ Are you sure you want to delete the phone API Key?
+
+
+ You will have to logout and login again on the httpSMS Android
+ app on all of the phones which are currently using this API key.
+
+
+
+
+ Delete API Key
+
+
+ Close
+
+
+
+
+
+
+
+ Are you sure you want to remove this phone number from the Phone API
+ Key?
+
+
+ This will remove the
+ {{ formatPhoneNumber(activePhoneNumber) }} from your
+ phone API key. You will have to logout and login again on the
+ httpSMS Android app on the phone which is currently using this
+ API key.
+
+
+
+
+ Remove Phone from key
+
+
+
+ Close
+
+
+
+
+
+
+
+
diff --git a/web/pages/privacy-policy/index.vue b/web/app/pages/privacy-policy/index.vue
similarity index 71%
rename from web/pages/privacy-policy/index.vue
rename to web/app/pages/privacy-policy/index.vue
index 0e618d645..32c255e8a 100644
--- a/web/pages/privacy-policy/index.vue
+++ b/web/app/pages/privacy-policy/index.vue
@@ -1,9 +1,21 @@
+
+
-
-
-
- Privacy Policy
-
+
+
+
+ Privacy Policy
+
Ndole Studio built the httpSMS service as an open source project. This
SERVICE is provided by Ndole Studio and is intended for use as is.
This page is used to inform visitors regarding our policies with the
@@ -17,44 +29,41 @@
Conditions, which are accessible at httpSMS unless otherwise defined
in this Privacy Policy.
- Information Collection and Use
-
+
+
+ Information Collection and Use
+
+
For a better experience, while using our Service, we may require you
to provide us with certain personally identifiable information,
- including but not limited to email,full name. The information that we
+ including but not limited to email, full name. The information that we
request will be retained by us and used as described in this privacy
policy.
-
+
httpSMS does use third-party services that may collect information
used to identify you. Link to the privacy policy of third-party
- service providers used by httpSMS
+ service providers used by httpSMS:
-
+
- Log Data
-
+
+
Log Data
+
We want to inform you that whenever you use our Service, in a case of
an error in the app we collect data and information (through
third-party products) on your phone and computer called Log Data. This
Log Data may include information such as your device Internet Protocol
- (“IP”) address, device name, operating system version, the
+ ('IP') address, device name, operating system version, the
configuration of the app when utilizing our Service, the time and date
of your use of the Service, and other statistics.
- Cookies
-
+
+
Cookies
+
Cookies are files with a small amount of data that are commonly used
as anonymous unique identifiers. These are sent to your browser from
the websites that you visit and are stored on your device's internal
- memory. This Service does not use these “cookies” explicitly. However,
- the app may use third-party code and libraries that use “cookies” to
+ memory. This Service does not use these 'cookies' explicitly. However,
+ the app may use third-party code and libraries that use 'cookies' to
collect information and improve their services. You have the option to
either accept or refuse these cookies and know when a cookie is being
sent to your device. If you choose to refuse our cookies, you may not
be able to use some portions of this Service.
- Service Providers
-
+
+
Service Providers
+
We may employ third-party companies and individuals due to the
following reasons:
-
+
To facilitate our Service;
To provide the Service on our behalf;
To perform Service-related services; or
To assist us in analyzing how our Service is used.
-
+
We want to inform users of this Service that these third parties have
access to their Personal Information. The reason is to perform the
tasks assigned to them on our behalf. However, they are obligated not
to disclose or use the information for any other purpose.
- Security
-
+
+
Security
+
We value your trust in providing us your Personal Information, thus we
are striving to use commercially acceptable means of protecting it.
But remember that no method of transmission over the internet, or
method of electronic storage is 100% secure and reliable, and we
cannot guarantee its absolute security.
- Links to Other Sites
-
+
+
Links to Other Sites
+
This Service may contain links to other sites. If you click on a
third-party link, you will be directed to that site. Note that these
external sites are not operated by us. Therefore, we strongly advise
@@ -133,8 +145,9 @@
over and assume no responsibility for the content, privacy policies,
or practices of any third-party sites or services.
- Children’s Privacy
-
+
+
Children's Privacy
+
These Services do not address anyone under the age of 13. We do not
knowingly collect personally identifiable information from children
under 13 years of age. In the case we discover that a child under 13
@@ -143,16 +156,22 @@
that your child has provided us with personal information, please
contact us so that we will be able to do the necessary actions.
- Changes to This Privacy Policy
-
+
+
+ Changes to This Privacy Policy
+
+
We may update our Privacy Policy from time to time. Thus, you are
advised to review this page periodically for any changes. We will
notify you of any changes by posting the new Privacy Policy on this
page.
- This policy is effective as of 2022-10-09
- Contact Us
-
+
+ This policy is effective as of 2022-10-09
+
+
+ Contact Us
+
If you have any questions or suggestions about our Privacy Policy, do
not hesitate to contact us at
support@httpsms.com .
-
+
-
+
-
-
-
+
+
+
-
-
diff --git a/web/app/pages/search-messages/index.vue b/web/app/pages/search-messages/index.vue
new file mode 100644
index 000000000..485dae3b5
--- /dev/null
+++ b/web/app/pages/search-messages/index.vue
@@ -0,0 +1,657 @@
+
+
+
+
+
+
+
+
+
+
+ Search Messages
+
+
+
+
+
+
+ Search Messages
+
+ On this page, you can search all your messages by phone number,
+ message type, and message status and even using the content of the
+ SMS message. You will also be able to bulk delete messages and
+ even export your messages in a CSV file.
+
+
+
+ {{ errorTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SEARCH
+ Search Messages
+
+
+
+
+
+
+
+
+ Search Results
+
+
+
+
+
+ DELETE
+ Delete messages
+
+
+
+
+ Delete {{ selectedMessages.length }} selected
+ messages?
+
+
+ The messages will be deleted permanently from the httpSMS
+ server and cannot be recovered.
+
+
+
+ Delete Messages
+
+
+
+ Close
+
+
+
+
+
+
+
+
+ Resend Messages
+
+
+
+
+ Resend {{ selectedMessages.length }} selected
+ messages?
+
+
+ The selected messages will be queued for sending again using
+ the original sender, recipient, and content.
+
+
+
+ Resend Messages
+
+
+
+ Close
+
+
+
+
+
+
+
+ EXPORT
+ Export to CSV
+
+
+
+
+
+ {{ formatTimestamp(item.created_at) }}
+
+
+
+
+ missed call
+
+
+
+ inbound
+
+
+
+ outbound
+
+
+
+
+
+ Expired
+
+
+
+ Delivered
+
+
+
+ Received
+
+
+
+ Sent
+
+
+
+ Failed
+
+
+
+ {{ capitalize(item.status) }}
+
+
+
+ {{ item.content }}
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/settings/index.vue b/web/app/pages/settings/index.vue
new file mode 100644
index 000000000..1f381416b
--- /dev/null
+++ b/web/app/pages/settings/index.vue
@@ -0,0 +1,1904 @@
+
+
+
+
+
+
+
+
+
+ Settings
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ firebaseUser.displayName }}
+
+
+ {{ firebaseUser.email }}
+
+
+ Verify Email
+
+
+
+
+
+
+ API Key
+
+ Use your API Key in the x-api-key HTTP Header
+ when sending requests to
+ https://api.httpsms.com endpoints.
+
+
+
+
+
+
+
+
+
+ Show QR Code
+
+
+
+ API Key QR Code
+
+
+ Scan this QR code with the
+ httpSMS app
+ on your Android phone to login.
+
+
+
+
+ Close
+
+
+
+
Documentation
+
+
+
+
+
+ Rotate API Key
+
+
+
+ Are you sure you want to rotate your API Key?
+
+ You will have to logout and login again on the
+ httpSMS Android app with your new API key after you
+ rotate it.
+
+
+
+
+ Yes Rotate Key
+
+
+ Close
+
+
+
+
+
+
+
+ Webhooks
+
+
+ Webhooks allow us to send events to your server for example when
+ the android phone receives an SMS message we can forward the
+ message to your server.
+
+
+
+
+
+
+
+ ID
+ Callback URL
+ Events
+ Action
+
+
+
+
+ {{ webhook.id }}
+ {{ webhook.url }}
+
+ {{ event }}
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+
+ Add webhook
+
+ Documentation
+
+
+
+
+ Discord Integration
+
+
+ Send and receive SMS messages without leaving your discord server
+ with the httpSMS discord app using the
+ /httpsms command.
+
+
+
+
+
+
+
+ Name
+ Server ID
+ Channel ID
+ Action
+
+
+
+
+ {{ discord.name }}
+ {{ discord.server_id }}
+ {{ discord.incoming_channel_id }}
+
+
+
+ Edit
+
+
+
+
+
+
+
+ Add Discord Integration
+
+
+
+ Phones
+
+ List of mobile phones which are registered for sending and
+ receiving SMS messages.
+
+
+
+
+ ID
+ Phone Number
+ Retries
+ Rate
+ Updated At
+ Action
+
+
+
+
+ {{ phone.id }}
+
+ {{ useFilters().formatPhoneNumber(phone.phone_number) }}
+
+
+ {{ phone.max_send_attempts ? phone.max_send_attempts : 1 }}
+
+
+ {{ phone.messages_per_minute }}/min
+ Unlimited
+
+
+ {{ useFilters().formatTimestamp(phone.updated_at) }}
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+
+ Send Schedules
+
+
+ Create availability schedules and attach them to each phone.
+ Outgoing messages sent outside the schedule window are queued and
+ delivered when the schedule opens according to your
+ configured send rate .
+
+
+
+
+
+
+
+ Name
+ Timezone
+ Schedule
+ Action
+
+
+
+
+
+ {{ schedule.name }}
+
+
+ {{ schedule.timezone }}
+
+
+
+ {{ line[0] }}:
+ {{ line[1] }}
+
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+
+ Create Send Schedule
+
+ Documentation
+
+
+
+
+ Email Notifications
+
+
+ Manage the email notifications which you receive from httpSMS.
+ Feel free to turn on/off individual notifications anytime so you
+ don't get overloaded with emails
+
+
+
+
+
+
+
+ Save Notification Settings
+
+
+
+
+ Message Data Retention
+
+
+ Your messages are permanently deleted once they exceed the max
+ retention period below, counted from when the message was sent or
+ received. You can always delete your messages manually on the
+ message search page.
+
+
+
+
+
+ Delete Account
+
+
+ You cannot delete your account because you have an active
+ subscription on httpSMS.
+ Cancel your subscription
+ before deleting your account.
+
+
+ You can delete all your data on httpSMS by clicking the button
+ below. This action is irreversible and all your data will
+ be permanently deleted from the httpSMS database instantly and it
+ cannot be recovered.
+
+
+
+ Delete your Account
+
+
+
+ Delete your httpSMS account
+
+ Are you sure you want to delete your account? This action is
+ irreversible and all your data will be permanently
+ deleted from the httpSMS database instantly.
+
+
+
+
+ Delete My Account
+
+
+
+ Keep My account
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add a new
+ Edit
+ webhook
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ activeWebhook.id ? 'Update Webhook' : 'Save Webhook' }}
+
+
+
+
+ Delete
+
+ Close
+
+
+
+
+
+
+
+
+ Add a new
+ Edit
+ discord integration
+
+
+
+
+
+ Click the button below to add the httpSMS bot to your discord
+ server. You need to do this so we can have permission to send
+ and receive messages on your discord server.
+
+
+
+ Add Discord Bot
+
+
+
+
+
+
+
+
+
+
+ {{
+ activeDiscord.id
+ ? 'Update Discord Integration'
+ : 'Save Discord Integration'
+ }}
+
+
+
+
+ Delete
+
+ Close
+
+
+
+
+
+
+
+ Edit Phone
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Update Phone
+
+
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+ Create Message Send Schedule
+ Edit Message Send Schedule
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
–
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scheduleWindowError(day.value) }}
+
+
+
+
+
+
+
+
+ {{ activeSchedule.id ? 'Update Schedule' : 'Save Schedule' }}
+
+
+
+
+ Delete
+
+
+ Close
+
+
+
+
+
+
+
+
+ Delete schedule
+
+ Are you sure you want to delete {{ activeSchedule.name }} ? Phones attached to this schedule will no longer have schedule-based
+ restrictions.
+
+
+
+ Delete
+
+
+ Cancel
+
+
+
+
+
diff --git a/web/pages/terms-and-conditions/index.vue b/web/app/pages/terms-and-conditions/index.vue
similarity index 70%
rename from web/pages/terms-and-conditions/index.vue
rename to web/app/pages/terms-and-conditions/index.vue
index beb3979d0..abff79e80 100644
--- a/web/pages/terms-and-conditions/index.vue
+++ b/web/app/pages/terms-and-conditions/index.vue
@@ -1,144 +1,153 @@
+
+
-
-
-
- Terms and Conditions
-
+
+
+
+ Terms and Conditions
+
By downloading or using the app and using the HTTP SMS service, these
terms will automatically apply to you – you should make sure therefore
- that you read them carefully before using the app. You’re not allowed
+ that you read them carefully before using the app. You're not allowed
to copy or modify the app, any part of the app, or our trademarks in
- any way. You’re not allowed to attempt to extract the source code of
- the app, and you also shouldn’t try to translate the app into other
+ any way. You're not allowed to attempt to extract the source code of
+ the app, and you also shouldn't try to translate the app into other
languages or make derivative versions. The app itself, and all the
trademarks, copyright, database rights, and other intellectual
property rights related to it, still belong to Ndole Studio.
-
+
Ndole Studio is committed to ensuring that the app is as useful and
efficient as possible. For that reason, we reserve the right to make
changes to the app or to charge for its services, at any time and for
any reason. We will never charge you for the app or its services
- without making it very clear to you exactly what you’re paying for.
+ without making it very clear to you exactly what you're paying for.
-
+
The HTTP SMS app stores and processes personal data that you have
- provided to us, to provide our Service. It’s your responsibility to
+ provided to us, to provide our Service. It's your responsibility to
keep your phone and access to the app secure. We therefore recommend
that you do not jailbreak or root your phone, which is the process of
removing software restrictions and limitations imposed by the official
operating system of your device. It could make your phone vulnerable
- to malware/viruses/malicious programs, compromise your phone’s
- security features and it could mean that the HTTP SMS app won’t work
+ to malware/viruses/malicious programs, compromise your phone's
+ security features and it could mean that the HTTP SMS app won't work
properly or at all.
-
+
HTTP SMS does use third-party services that declare their Terms and
Conditions. Link to Terms and Conditions of third-party service
- providers used by the app
+ providers used by the app:
-
+
-
+
You should be aware that there are certain things that Ndole Studio
will not take responsibility for. Certain functions of the app will
require the app to have an active internet connection. The connection
can be Wi-Fi or provided by your mobile network provider, but Ndole
Studio cannot take responsibility for the app not working at full
- functionality if you don’t have access to Wi-Fi, and you don’t have
+ functionality if you don't have access to Wi-Fi, and you don't have
any of your data allowance left.
-
- If you’re using the app outside of an area with Wi-Fi, you should
+
+ If you're using the app outside of an area with Wi-Fi, you should
remember that the terms of the agreement with your mobile network
provider will still apply. As a result, you may be charged by your
mobile provider for the cost of data for the duration of the
connection while accessing the app, or other third-party charges. In
- using the app, you’re accepting responsibility for any such charges,
+ using the app, you're accepting responsibility for any such charges,
including roaming data charges if you use the app outside of your home
territory (i.e. region or country) without turning off data roaming.
- If you are not the bill payer for the device on which you’re using the
+ If you are not the bill payer for the device on which you're using the
app, please be aware that we assume that you have received permission
from the bill payer for using the app.
-
+
Along the same lines, Ndole Studio cannot always take responsibility
for the way you use the app i.e. You need to make sure that your
- device stays charged – if it runs out of battery and you can’t turn it
+ device stays charged – if it runs out of battery and you can't turn it
on to avail the Service, Ndole Studio cannot accept responsibility.
-
- With respect to Ndole Studio’s responsibility for your use of the app,
- when you’re using the app, it’s important to bear in mind that
+
+ With respect to Ndole Studio's responsibility for your use of the app,
+ when you're using the app, it's important to bear in mind that
although we endeavor to ensure that it is updated and correct at all
times, we do rely on third parties to provide information to us so
that we can make it available to you. Ndole Studio accepts no
liability for any loss, direct or indirect, you experience as a result
of relying wholly on this functionality of the app.
-
+
At some point, we may wish to update the app. The app is currently
- available on Android – the requirements for the system(and for any
+ available on Android – the requirements for the system (and for any
additional systems we decide to extend the availability of the app to)
- may change, and you’ll need to download the updates if you want to
+ may change, and you'll need to download the updates if you want to
keep using the app. Ndole Studio does not promise that it will always
update the app so that it is relevant to you and/or works with the
Android version that you have installed on your device. However, you
promise to always accept updates to the application when offered to
- you, We may also wish to stop providing the app, and may terminate use
+ you. We may also wish to stop providing the app, and may terminate use
of it at any time without giving notice of termination to you. Unless
we tell you otherwise, upon any termination, (a) the rights and
licenses granted to you in these terms will end; (b) you must stop
using the app, and (if needed) delete it from your device.
-
+
+
Changes to This Terms and Conditions
-
+
We may update our Terms and Conditions from time to time. Thus, you
are advised to review this page periodically for any changes. We will
notify you of any changes by posting the new Terms and Conditions on
this page.
- These terms and conditions are effective as of 2022-10-09
- Contact Us
-
+
+ These terms and conditions are effective as of 2022-10-09
+
+
+ Contact Us
+
If you have any questions or suggestions about our Terms and
Conditions, do not hesitate to contact us at
support@httpsms.com .
-
+
-
+
-
-
-
+
+
+
-
-
diff --git a/web/app/pages/threads/[id]/index.vue b/web/app/pages/threads/[id]/index.vue
new file mode 100644
index 000000000..73632a64c
--- /dev/null
+++ b/web/app/pages/threads/[id]/index.vue
@@ -0,0 +1,614 @@
+
+
+
+
+
+
+
+
+
+
+ {{ formatPhoneNumber(threadsStore.currentThread.contact) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ Archive
+
+
+
+
+
+ Unarchive
+
+
+
+
+
+ Delete Thread
+
+
+
+
+
+
+
+
+
+
+
+ {{ mdiAccount }}
+ {{
+ message.contact.substring(0, 1)
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Resend Message
+
+
+
+ Copy Message ID
+
+
+
+ Delete Message
+
+
+
+
+
+
+ {{
+ message.content
+ }}
+ Missed phone call
+
+
+
+
+
+
+ {{ formatAttachmentName(attachment) }}
+
+
+
+
+
+ {{ new Date(message.order_timestamp).toLocaleString() }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ message.failure_reason || message.status }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Resend Message
+
+
+
+ Copy Message ID
+
+
+
+ Delete Message
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/pages/threads/index.vue b/web/app/pages/threads/index.vue
new file mode 100644
index 000000000..03bd1ad50
--- /dev/null
+++ b/web/app/pages/threads/index.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/app/plugins/chart.client.ts b/web/app/plugins/chart.client.ts
new file mode 100644
index 000000000..3828cc424
--- /dev/null
+++ b/web/app/plugins/chart.client.ts
@@ -0,0 +1,29 @@
+import {
+ Chart as ChartJS,
+ CategoryScale,
+ LinearScale,
+ PointElement,
+ LineElement,
+ BarElement,
+ Title,
+ Tooltip,
+ Legend,
+ Filler,
+ TimeScale,
+} from 'chart.js'
+import 'chartjs-adapter-moment'
+
+export default defineNuxtPlugin(() => {
+ ChartJS.register(
+ CategoryScale,
+ LinearScale,
+ PointElement,
+ LineElement,
+ BarElement,
+ Title,
+ Tooltip,
+ Legend,
+ Filler,
+ TimeScale,
+ )
+})
diff --git a/web/app/plugins/firebase.client.ts b/web/app/plugins/firebase.client.ts
new file mode 100644
index 000000000..31f7c31a2
--- /dev/null
+++ b/web/app/plugins/firebase.client.ts
@@ -0,0 +1,47 @@
+import { initializeApp, getApps } from 'firebase/app'
+import type { FirebaseApp } from 'firebase/app'
+import { getAuth, onAuthStateChanged } from 'firebase/auth'
+import { useAuthStore } from '../stores/auth'
+
+export default defineNuxtPlugin(() => {
+ const config = useRuntimeConfig()
+ const publicConfig = config.public as Record
+
+ // Skip initialization if no API key is configured
+ if (!publicConfig.firebaseApiKey) {
+ console.warn(
+ '[firebase] No FIREBASE_API_KEY configured. Auth will not work.',
+ )
+ // Resolve auth readiness so route middleware doesn't hang forever.
+ useAuthStore().onAuthStateChanged(null)
+ return
+ }
+
+ const firebaseConfig = {
+ apiKey: publicConfig.firebaseApiKey,
+ authDomain: publicConfig.firebaseAuthDomain,
+ projectId: publicConfig.firebaseProjectId,
+ storageBucket: publicConfig.firebaseStorageBucket,
+ messagingSenderId: publicConfig.firebaseMessagingSenderId,
+ appId: publicConfig.firebaseAppId,
+ measurementId: publicConfig.firebaseMeasurementId,
+ }
+
+ // Initialise Firebase (only once)
+ const app: FirebaseApp =
+ getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0]!
+ const auth = getAuth(app)
+
+ // Listen for auth state changes and update the auth store
+ const authStore = useAuthStore()
+ onAuthStateChanged(auth, (user) => {
+ authStore.onAuthStateChanged(user)
+ })
+
+ return {
+ provide: {
+ firebaseApp: app,
+ firebaseAuth: auth,
+ },
+ }
+})
diff --git a/web/app/plugins/highlightjs.client.ts b/web/app/plugins/highlightjs.client.ts
new file mode 100644
index 000000000..cc22a3af0
--- /dev/null
+++ b/web/app/plugins/highlightjs.client.ts
@@ -0,0 +1,45 @@
+import hljs from 'highlight.js/lib/core'
+import javascript from 'highlight.js/lib/languages/javascript'
+import python from 'highlight.js/lib/languages/python'
+import php from 'highlight.js/lib/languages/php'
+import go from 'highlight.js/lib/languages/go'
+import java from 'highlight.js/lib/languages/java'
+import bash from 'highlight.js/lib/languages/bash'
+import csharp from 'highlight.js/lib/languages/csharp'
+import json from 'highlight.js/lib/languages/json'
+import 'highlight.js/styles/github-dark.css'
+
+hljs.registerLanguage('javascript', javascript)
+hljs.registerLanguage('python', python)
+hljs.registerLanguage('php', php)
+hljs.registerLanguage('go', go)
+hljs.registerLanguage('java', java)
+hljs.registerLanguage('bash', bash)
+hljs.registerLanguage('csharp', csharp)
+hljs.registerLanguage('json', json)
+
+export default defineNuxtPlugin((nuxtApp) => {
+ nuxtApp.vueApp.directive('highlight', {
+ mounted(el: HTMLElement) {
+ el.querySelectorAll('pre code').forEach((block) => {
+ hljs.highlightElement(block as HTMLElement)
+ })
+ },
+ updated(el: HTMLElement) {
+ el.querySelectorAll('pre code').forEach((block) => {
+ delete (block as HTMLElement).dataset.highlighted
+ hljs.highlightElement(block as HTMLElement)
+ })
+ },
+ })
+
+ // Override hljs background to use Vuetify surface variant
+ const style = document.createElement('style')
+ style.textContent = `
+ pre code.hljs {
+ background: transparent;
+ padding: 0;
+ }
+ `
+ document.head.appendChild(style)
+})
diff --git a/web/app/plugins/vPhoneInput.client.ts b/web/app/plugins/vPhoneInput.client.ts
new file mode 100644
index 000000000..1ebe1a95f
--- /dev/null
+++ b/web/app/plugins/vPhoneInput.client.ts
@@ -0,0 +1,18 @@
+import 'flag-icons/css/flag-icons.min.css'
+import 'v-phone-input/styles'
+import {
+ createVPhoneInput,
+ autocompletePhoneCountryInput,
+ VPhoneCountryFlagSvg,
+} from 'v-phone-input'
+import type { Plugin } from 'vue'
+
+export default defineNuxtPlugin((nuxtApp) => {
+ const vPhoneInput: Plugin = createVPhoneInput({
+ ...autocompletePhoneCountryInput,
+ countryDisplayComponent: VPhoneCountryFlagSvg,
+ validate: null,
+ })
+
+ nuxtApp.vueApp.use(vPhoneInput)
+})
diff --git a/web/app/plugins/vue-glow.client.ts b/web/app/plugins/vue-glow.client.ts
new file mode 100644
index 000000000..c517d001f
--- /dev/null
+++ b/web/app/plugins/vue-glow.client.ts
@@ -0,0 +1,5 @@
+export default defineNuxtPlugin(() => {
+ // vue-glow is a client-side only visual effect plugin
+ // In Nuxt 4 we handle this as a no-op placeholder
+ // since the original plugin had minimal functionality
+})
diff --git a/web/app/stores/app.ts b/web/app/stores/app.ts
new file mode 100644
index 000000000..2de45e226
--- /dev/null
+++ b/web/app/stores/app.ts
@@ -0,0 +1,46 @@
+import { defineStore } from 'pinia'
+
+export interface AppData {
+ url: string
+ name: string
+ env: string
+ appDownloadUrl: string
+ documentationUrl: string
+ githubUrl: string
+}
+
+export const useAppStore = defineStore('app', () => {
+ const config = useRuntimeConfig()
+ const polling = ref(false)
+
+ const appData = computed(() => {
+ const publicConfig = config.public as Record
+ let url = publicConfig.appUrl || ''
+ if (url.endsWith('/')) {
+ url = url.substring(0, url.length - 1)
+ }
+ return {
+ url,
+ env: publicConfig.appEnv,
+ appDownloadUrl: publicConfig.appDownloadUrl,
+ documentationUrl: publicConfig.appDocumentationUrl,
+ githubUrl: publicConfig.appGithubUrl,
+ name: publicConfig.appName,
+ }
+ })
+
+ const isLocal = computed(
+ () => (config.public as Record).appEnv === 'local',
+ )
+
+ function setPolling(value: boolean) {
+ polling.value = value
+ }
+
+ return {
+ polling,
+ appData,
+ isLocal,
+ setPolling,
+ }
+})
diff --git a/web/app/stores/auth.ts b/web/app/stores/auth.ts
new file mode 100644
index 000000000..53c0546d0
--- /dev/null
+++ b/web/app/stores/auth.ts
@@ -0,0 +1,120 @@
+import { defineStore } from 'pinia'
+import type { User as FirebaseUser } from 'firebase/auth'
+import { setAuthHeader, setApiKey } from '~/composables/useApi'
+import type { EntitiesUser } from '~~/shared/types/api'
+
+export interface AuthUser {
+ email: string | null
+ displayName: string | null
+ id: string
+}
+
+export const useAuthStore = defineStore('auth', () => {
+ const authStateChanged = ref(false)
+ const authUser = ref(null)
+ const user = ref(null)
+ const { apiFetch } = useApi()
+
+ async function setAuthUserAction(newUser: AuthUser | null | undefined) {
+ const userChanged = newUser?.id !== authUser.value?.id
+ authUser.value = newUser ?? null
+ authStateChanged.value = true
+
+ if (userChanged && newUser !== null) {
+ await Promise.all([loadUser(), loadPhones()])
+ }
+ }
+
+ async function onAuthStateChanged(firebaseUser: FirebaseUser | null) {
+ if (firebaseUser == null) {
+ authUser.value = null
+ user.value = null
+ authStateChanged.value = true
+ setApiKey('')
+ return
+ }
+ setAuthHeader(await firebaseUser.getIdToken())
+ const { uid, email, displayName } = firebaseUser
+ authUser.value = { id: uid, email, displayName }
+ authStateChanged.value = true
+ }
+
+ async function onIdTokenChanged(firebaseUser: FirebaseUser | null) {
+ if (firebaseUser == null) {
+ setApiKey('')
+ return
+ }
+ setAuthHeader(await firebaseUser.getIdToken())
+ }
+
+ async function loadUser() {
+ const response = await apiFetch<{ data: EntitiesUser }>('/v1/users/me')
+ user.value = response.data
+ }
+
+ async function updateUser(payload: { owner?: string; timezone?: string }) {
+ const phonesStore = usePhonesStore()
+ if (payload.owner) {
+ phonesStore.setOwner(payload.owner)
+ }
+
+ const activePhone = phonesStore.activePhone
+ if (!activePhone) return
+
+ const response = await apiFetch<{ data: EntitiesUser }>('/v1/users/me', {
+ method: 'PUT',
+ body: {
+ active_phone_id: activePhone.id,
+ timezone: payload.timezone ?? user.value?.timezone,
+ },
+ })
+
+ setApiKey(response.data.api_key)
+ user.value = response.data
+ }
+
+ async function deleteUserAccount(): Promise {
+ await apiFetch<{ message: string }>('/v1/users/me', {
+ method: 'DELETE',
+ })
+ return 'Your account has been deleted successfully'
+ }
+
+ async function rotateApiKey(userId: string): Promise {
+ const response = await apiFetch<{ data: EntitiesUser }>(
+ `/v1/users/${userId}/api-keys`,
+ {
+ method: 'DELETE',
+ },
+ )
+ user.value = response.data
+ setApiKey(response.data.api_key)
+ return response.data
+ }
+
+ function resetState() {
+ user.value = null
+ authUser.value = null
+ authStateChanged.value = true
+ setApiKey('')
+ }
+
+ function loadPhones() {
+ const phonesStore = usePhonesStore()
+ return phonesStore.loadPhones(false)
+ }
+
+ return {
+ authStateChanged,
+ authUser,
+ user,
+ setAuthUserAction,
+ onAuthStateChanged,
+ onIdTokenChanged,
+ loadUser,
+ updateUser,
+ deleteUserAccount,
+ rotateApiKey,
+ resetState,
+ }
+})
diff --git a/web/app/stores/billing.ts b/web/app/stores/billing.ts
new file mode 100644
index 000000000..6d5db82e5
--- /dev/null
+++ b/web/app/stores/billing.ts
@@ -0,0 +1,299 @@
+import { defineStore } from 'pinia'
+import type {
+ EntitiesBillingUsage,
+ EntitiesUser,
+ EntitiesWebhook,
+ EntitiesDiscord,
+ EntitiesMessageSendSchedule,
+ EntitiesPhoneAPIKey,
+ RequestsWebhookStore,
+ RequestsWebhookUpdate,
+ RequestsDiscordStore,
+ RequestsDiscordUpdate,
+ RequestsMessageSendScheduleStore,
+ RequestsUserNotificationUpdate,
+ RequestsUserPaymentInvoice,
+ ResponsesUserSubscriptionPaymentsResponse,
+} from '~~/shared/types/api'
+
+export const useBillingStore = defineStore('billing', () => {
+ const billingUsage = ref(null)
+ const billingUsageHistory = ref([])
+ const { apiFetch } = useApi()
+ const notificationsStore = useNotificationsStore()
+
+ async function loadBillingUsage() {
+ const response = await apiFetch<{ data: EntitiesBillingUsage }>(
+ '/v1/billing/usage',
+ )
+ billingUsage.value = response.data
+ }
+
+ async function loadBillingUsageHistory() {
+ const response = await apiFetch<{ data: EntitiesBillingUsage[] }>(
+ '/v1/billing/usage-history',
+ )
+ billingUsageHistory.value = response.data
+ }
+
+ async function getSubscriptionUpdateLink(): Promise {
+ const response = await apiFetch<{ data: string }>(
+ '/v1/users/subscription-update-url',
+ )
+ return response.data
+ }
+
+ async function cancelSubscription(): Promise {
+ const response = await apiFetch<{ message: string }>(
+ '/v1/users/subscription',
+ {
+ method: 'DELETE',
+ },
+ )
+ return response.message
+ }
+
+ async function indexSubscriptionPayments(): Promise {
+ const response = await apiFetch(
+ '/v1/users/subscription/payments',
+ { params: { limit: 100 } },
+ )
+ return response
+ }
+
+ async function generateSubscriptionPaymentInvoice(
+ subscriptionInvoiceId: string,
+ request: RequestsUserPaymentInvoice,
+ ): Promise {
+ const response = await apiFetch(
+ `/v1/users/subscription/invoices/${subscriptionInvoiceId}`,
+ {
+ method: 'POST',
+ body: request,
+ responseType: 'blob',
+ },
+ )
+
+ const pdfBlob = new Blob([response as Blob], { type: 'application/pdf' })
+ const url = window.URL.createObjectURL(pdfBlob)
+ const tempLink = document.createElement('a')
+ tempLink.href = url
+ tempLink.setAttribute('download', 'Invoice.pdf')
+ document.body.appendChild(tempLink)
+ tempLink.click()
+ document.body.removeChild(tempLink)
+ window.URL.revokeObjectURL(url)
+ }
+
+ // Webhooks
+ async function createWebhook(
+ payload: RequestsWebhookStore,
+ ): Promise {
+ const response = await apiFetch<{ data: EntitiesWebhook }>('/v1/webhooks', {
+ method: 'POST',
+ body: payload,
+ })
+ return response.data
+ }
+
+ async function getWebhooks(): Promise {
+ const response = await apiFetch<{ data: EntitiesWebhook[] }>(
+ '/v1/webhooks',
+ {
+ params: { limit: 100 },
+ },
+ )
+ return response.data
+ }
+
+ async function updateWebhook(
+ payload: RequestsWebhookUpdate & { id: string },
+ ): Promise {
+ const response = await apiFetch<{ data: EntitiesWebhook }>(
+ `/v1/webhooks/${payload.id}`,
+ {
+ method: 'PUT',
+ body: payload,
+ },
+ )
+ return response.data
+ }
+
+ async function deleteWebhook(id: string): Promise {
+ await apiFetch(`/v1/webhooks/${id}`, { method: 'DELETE' })
+ }
+
+ // Discord
+ async function createDiscord(
+ payload: RequestsDiscordStore,
+ ): Promise {
+ const response = await apiFetch<{ data: EntitiesDiscord }>(
+ '/v1/discord-integrations',
+ {
+ method: 'POST',
+ body: payload,
+ },
+ )
+ return response.data
+ }
+
+ async function getDiscordIntegrations(): Promise {
+ const response = await apiFetch<{ data: EntitiesDiscord[] }>(
+ '/v1/discord-integrations',
+ {
+ params: { limit: 100 },
+ },
+ )
+ return response.data
+ }
+
+ async function updateDiscordIntegration(
+ payload: RequestsDiscordUpdate & { id: string },
+ ): Promise {
+ const response = await apiFetch<{ data: EntitiesDiscord }>(
+ `/v1/discord-integrations/${payload.id}`,
+ {
+ method: 'PUT',
+ body: payload,
+ },
+ )
+ return response.data
+ }
+
+ async function deleteDiscordIntegration(id: string): Promise {
+ await apiFetch(`/v1/discord-integrations/${id}`, { method: 'DELETE' })
+ }
+
+ // Send Schedules
+ async function getSendSchedules(): Promise {
+ const response = await apiFetch<{ data: EntitiesMessageSendSchedule[] }>(
+ '/v1/send-schedules',
+ )
+ return response.data
+ }
+
+ async function createSendSchedule(
+ payload: RequestsMessageSendScheduleStore,
+ ): Promise {
+ const response = await apiFetch<{ data: EntitiesMessageSendSchedule }>(
+ '/v1/send-schedules',
+ {
+ method: 'POST',
+ body: payload,
+ },
+ )
+ return response.data
+ }
+
+ async function updateSendSchedule(
+ payload: RequestsMessageSendScheduleStore & { id: string },
+ ): Promise {
+ const response = await apiFetch<{ data: EntitiesMessageSendSchedule }>(
+ `/v1/send-schedules/${payload.id}`,
+ {
+ method: 'PUT',
+ body: payload,
+ },
+ )
+ return response.data
+ }
+
+ async function deleteSendSchedule(id: string): Promise {
+ await apiFetch(`/v1/send-schedules/${id}`, { method: 'DELETE' })
+ }
+
+ // Phone API Keys
+ async function storePhoneApiKey(name: string): Promise {
+ const response = await apiFetch<{
+ data: EntitiesPhoneAPIKey
+ message: string
+ }>('/v1/phone-api-keys', {
+ method: 'POST',
+ body: { name },
+ })
+ notificationsStore.addNotification({
+ message: response.message,
+ type: 'success',
+ })
+ return response.data
+ }
+
+ async function indexPhoneApiKeys(): Promise {
+ const response = await apiFetch<{ data: EntitiesPhoneAPIKey[] }>(
+ '/v1/phone-api-keys',
+ {
+ params: { limit: 100 },
+ },
+ )
+ return response.data
+ }
+
+ async function deletePhoneApiKey(id: string): Promise {
+ const response = await apiFetch<{ message: string }>(
+ `/v1/phone-api-keys/${id}`,
+ { method: 'DELETE' },
+ )
+ notificationsStore.addNotification({
+ message: response.message,
+ type: 'success',
+ })
+ }
+
+ async function deletePhoneFromPhoneApiKey(
+ phoneApiKeyId: string,
+ phoneId: string,
+ ): Promise {
+ const response = await apiFetch<{ message: string }>(
+ `/v1/phone-api-keys/${phoneApiKeyId}/phones/${phoneId}`,
+ { method: 'DELETE' },
+ )
+ notificationsStore.addNotification({
+ message: response.message,
+ type: 'success',
+ })
+ }
+
+ // Email notifications
+ async function saveEmailNotifications(
+ userId: string,
+ payload: RequestsUserNotificationUpdate,
+ ): Promise {
+ const authStore = useAuthStore()
+ const response = await apiFetch<{ data: EntitiesUser }>(
+ `/v1/users/${userId}/notifications`,
+ {
+ method: 'PUT',
+ body: payload,
+ },
+ )
+ authStore.user = response.data
+ }
+
+ return {
+ billingUsage,
+ billingUsageHistory,
+ loadBillingUsage,
+ loadBillingUsageHistory,
+ getSubscriptionUpdateLink,
+ cancelSubscription,
+ indexSubscriptionPayments,
+ generateSubscriptionPaymentInvoice,
+ createWebhook,
+ getWebhooks,
+ updateWebhook,
+ deleteWebhook,
+ createDiscord,
+ getDiscordIntegrations,
+ updateDiscordIntegration,
+ deleteDiscordIntegration,
+ getSendSchedules,
+ createSendSchedule,
+ updateSendSchedule,
+ deleteSendSchedule,
+ storePhoneApiKey,
+ indexPhoneApiKeys,
+ deletePhoneApiKey,
+ deletePhoneFromPhoneApiKey,
+ saveEmailNotifications,
+ }
+})
diff --git a/web/app/stores/messages.ts b/web/app/stores/messages.ts
new file mode 100644
index 000000000..abaf47b60
--- /dev/null
+++ b/web/app/stores/messages.ts
@@ -0,0 +1,95 @@
+import { defineStore } from 'pinia'
+import type { EntitiesMessage, EntitiesBulkMessage } from '~~/shared/types/api'
+import type { SearchMessagesRequest } from '~~/shared/types/message'
+import { getApiErrorMessage } from '~/utils/api-error'
+
+export type SIM = 'SIM1' | 'SIM2' | 'DEFAULT'
+
+export interface SendMessageRequest {
+ from: string
+ to: string
+ content: string
+ sim: SIM
+ request_id?: string
+}
+
+export const useMessagesStore = defineStore('messages', () => {
+ const { apiFetch } = useApi()
+ const notificationsStore = useNotificationsStore()
+
+ async function sendMessage(request: SendMessageRequest) {
+ try {
+ const response = await apiFetch<{ message: string }>(
+ '/v1/messages/send',
+ {
+ method: 'POST',
+ body: request,
+ },
+ )
+ notificationsStore.addNotification({
+ message: response.message,
+ type: 'success',
+ })
+ } catch (e: unknown) {
+ notificationsStore.addNotification({
+ message: getApiErrorMessage(e, 'Error while sending message'),
+ type: 'error',
+ })
+ }
+ const threadsStore = useThreadsStore()
+ await threadsStore.loadThreads()
+ }
+
+ async function deleteMessage(messageId: string) {
+ await apiFetch(`/v1/messages/${messageId}`, { method: 'DELETE' })
+ notificationsStore.addNotification({
+ message: 'The message has been deleted successfully',
+ type: 'success',
+ })
+ }
+
+ async function searchMessages(
+ payload: SearchMessagesRequest,
+ ): Promise {
+ const token = payload.token
+ const params = { ...payload }
+ delete params.token
+
+ const response = await apiFetch<{ data: EntitiesMessage[] }>(
+ '/v1/messages/search',
+ {
+ params,
+ headers: token ? { token } : undefined,
+ },
+ )
+ return response.data
+ }
+
+ async function sendBulkMessages(document: File): Promise {
+ const formData = new FormData()
+ formData.append('document', document)
+ const response = await apiFetch<{ message?: string }>('/v1/bulk-messages', {
+ method: 'POST',
+ body: formData,
+ })
+ notificationsStore.addNotification({
+ message: response.message ?? 'Bulk messages sent successfully',
+ type: 'success',
+ })
+ }
+
+ async function fetchBulkMessageOrders(): Promise {
+ const response = await apiFetch<{ data: EntitiesBulkMessage[] }>(
+ '/v1/bulk-messages',
+ )
+ return response.data ?? []
+ }
+
+ return {
+ sendMessage,
+ deleteMessage,
+ searchMessages,
+ sendBulkMessages,
+ fetchBulkMessageOrders,
+ }
+})
diff --git a/web/app/stores/notifications.ts b/web/app/stores/notifications.ts
new file mode 100644
index 000000000..0d721d382
--- /dev/null
+++ b/web/app/stores/notifications.ts
@@ -0,0 +1,45 @@
+import { defineStore } from 'pinia'
+
+export type NotificationType = 'error' | 'success' | 'info'
+
+export interface Notification {
+ message: string
+ timeout: number
+ active: boolean
+ type: NotificationType
+}
+
+export interface NotificationRequest {
+ message: string
+ type: NotificationType
+}
+
+const DEFAULT_TIMEOUT = 3000
+
+export const useNotificationsStore = defineStore('notifications', () => {
+ const notification = ref({
+ active: false,
+ message: '',
+ type: 'success',
+ timeout: DEFAULT_TIMEOUT,
+ })
+
+ function addNotification(request: NotificationRequest) {
+ notification.value = {
+ active: true,
+ message: request.message,
+ type: request.type,
+ timeout: Math.floor(Math.random() * 100) + DEFAULT_TIMEOUT,
+ }
+ }
+
+ function disableNotification() {
+ notification.value.active = false
+ }
+
+ return {
+ notification,
+ addNotification,
+ disableNotification,
+ }
+})
diff --git a/web/app/stores/phones.ts b/web/app/stores/phones.ts
new file mode 100644
index 000000000..276fe2928
--- /dev/null
+++ b/web/app/stores/phones.ts
@@ -0,0 +1,113 @@
+import { defineStore } from 'pinia'
+import type { EntitiesPhone, EntitiesHeartbeat } from '~~/shared/types/api'
+import { getApiErrorMessage } from '~/utils/api-error'
+
+export const usePhonesStore = defineStore('phones', () => {
+ const phones = ref([])
+ const owner = ref(null)
+ const heartbeat = ref(null)
+ const { apiFetch } = useApi()
+ const notificationsStore = useNotificationsStore()
+
+ const activePhone = computed(() => {
+ return phones.value.find((x) => x.phone_number === owner.value) ?? null
+ })
+
+ function setOwner(value: string) {
+ owner.value = value
+ }
+
+ async function loadPhones(force: boolean = false) {
+ if (phones.value.length > 0 && !force) return
+
+ const response = await apiFetch<{ data: EntitiesPhone[] }>('/v1/phones', {
+ params: { limit: 100 },
+ })
+ phones.value = response.data
+
+ const authStore = useAuthStore()
+ if (authStore.user?.active_phone_id) {
+ const phone = response.data.find(
+ (x) => x.id === authStore.user?.active_phone_id,
+ )
+ if (phone) {
+ owner.value = phone.phone_number
+ }
+ }
+
+ if (!owner.value && phones.value.length > 0) {
+ owner.value = phones.value[0]!.phone_number
+ }
+ }
+
+ async function deletePhone(phoneID: string) {
+ await apiFetch(`/v1/phones/${phoneID}`, { method: 'DELETE' })
+ await loadPhones(true)
+ }
+
+ async function updatePhone(phone: EntitiesPhone) {
+ try {
+ const response = await apiFetch<{ message: string }>('/v1/phones', {
+ method: 'PUT',
+ body: {
+ fcm_token: phone.fcm_token,
+ sim: phone.sim,
+ phone_number: phone.phone_number,
+ message_expiration_seconds: parseInt(
+ phone.message_expiration_seconds.toString(),
+ ),
+ missed_call_auto_reply: phone.missed_call_auto_reply,
+ max_send_attempts: parseInt(phone.max_send_attempts.toString()),
+ messages_per_minute: parseInt(phone.messages_per_minute.toString()),
+ message_send_schedule_id: phone.message_send_schedule_id ?? null,
+ unarchive_thread: phone.unarchive_thread ?? false,
+ },
+ })
+ notificationsStore.addNotification({
+ message: response.message,
+ type: 'success',
+ })
+ await loadPhones(true)
+ } catch (error: unknown) {
+ notificationsStore.addNotification({
+ message: getApiErrorMessage(error, 'Error while updating phone'),
+ type: 'error',
+ })
+ throw error
+ }
+ }
+
+ async function getHeartbeat(limit = 1): Promise {
+ const response = await apiFetch<{ data: EntitiesHeartbeat[] }>(
+ '/v1/heartbeats',
+ {
+ query: { limit, owner: owner.value },
+ },
+ )
+ if (response.data.length > 0) {
+ heartbeat.value = response.data[0]!
+ } else {
+ heartbeat.value = null
+ }
+ return response.data
+ }
+
+ function resetState() {
+ phones.value = []
+ owner.value = null
+ heartbeat.value = null
+ }
+
+ return {
+ phones,
+ owner,
+ heartbeat,
+ activePhone,
+ setOwner,
+ loadPhones,
+ deletePhone,
+ updatePhone,
+ getHeartbeat,
+ resetState,
+ }
+})
diff --git a/web/app/stores/redirectPreference.ts b/web/app/stores/redirectPreference.ts
new file mode 100644
index 000000000..030def894
--- /dev/null
+++ b/web/app/stores/redirectPreference.ts
@@ -0,0 +1,47 @@
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+
+export const STORAGE_KEY = 'httpsms_redirect_to_threads'
+
+function readFlag(): boolean {
+ try {
+ return localStorage.getItem(STORAGE_KEY) === 'true'
+ } catch (error) {
+ console.error(error)
+ return false
+ }
+}
+
+export const useRedirectPreferenceStore = defineStore(
+ 'redirectPreference',
+ () => {
+ const enabled = ref(readFlag())
+ const dismissedThisSession = ref(false)
+
+ function enable() {
+ try {
+ localStorage.setItem(STORAGE_KEY, 'true')
+ enabled.value = true
+ navigateTo('/threads', { replace: true })
+ } catch (error) {
+ console.error(error)
+ }
+ }
+
+ function dismiss() {
+ dismissedThisSession.value = true
+ }
+
+ function resetState() {
+ enabled.value = false
+ dismissedThisSession.value = false
+ try {
+ localStorage.removeItem(STORAGE_KEY)
+ } catch (error) {
+ console.error(error)
+ }
+ }
+
+ return { enabled, dismissedThisSession, enable, dismiss, resetState }
+ },
+)
diff --git a/web/app/stores/threads.ts b/web/app/stores/threads.ts
new file mode 100644
index 000000000..7e3002624
--- /dev/null
+++ b/web/app/stores/threads.ts
@@ -0,0 +1,168 @@
+import { defineStore } from 'pinia'
+import type {
+ EntitiesMessageThread,
+ EntitiesMessage,
+} from '~~/shared/types/api'
+
+export const useThreadsStore = defineStore('threads', () => {
+ const threads = ref([])
+ const threadId = ref(null)
+ const loadingThreads = ref(true)
+ const archivedThreads = ref(false)
+ const { apiFetch } = useApi()
+ const notificationsStore = useNotificationsStore()
+
+ const currentThread = computed(() => {
+ return threads.value.find((x) => x.id === threadId.value) ?? null
+ })
+
+ const hasThread = computed(
+ () => threadId.value != null && !loadingThreads.value,
+ )
+
+ function hasThreadId(id: string): boolean {
+ return threads.value.find((x) => x.id === id) !== undefined
+ }
+
+ function replaceThread(updatedThread: EntitiesMessageThread) {
+ const index = threads.value.findIndex(
+ (thread) => thread.id === updatedThread.id,
+ )
+ if (index !== -1) threads.value[index] = updatedThread
+ }
+
+ async function loadThreads() {
+ const phonesStore = usePhonesStore()
+ if (phonesStore.owner === null && phonesStore.phones.length === 0) {
+ loadingThreads.value = false
+ return
+ }
+
+ const response = await apiFetch<{ data: EntitiesMessageThread[] }>(
+ '/v1/message-threads',
+ {
+ params: {
+ owner: phonesStore.owner ?? phonesStore.phones[0]?.phone_number,
+ limit: 100,
+ is_archived: archivedThreads.value,
+ },
+ },
+ )
+
+ phonesStore.getHeartbeat().catch(console.error)
+ threads.value = [...response.data]
+ loadingThreads.value = false
+ }
+
+ async function loadThreadMessages(
+ id: string | null,
+ ): Promise {
+ threadId.value = id
+ const thread = currentThread.value
+ if (!thread) throw new Error(`Cannot find thread with id ${id}`)
+
+ const response = await apiFetch<{ data: EntitiesMessage[] }>(
+ '/v1/messages',
+ {
+ params: {
+ contact: thread.contact,
+ owner: thread.owner,
+ limit: 50,
+ },
+ },
+ )
+ return response.data
+ }
+
+ function setThreadId(id: string | null) {
+ threadId.value = id
+ }
+
+ function toggleArchive() {
+ archivedThreads.value = !archivedThreads.value
+ }
+
+ async function updateThread(payload: {
+ threadId: string
+ isArchived: boolean
+ }) {
+ await apiFetch(`/v1/message-threads/${payload.threadId}`, {
+ method: 'PUT',
+ body: { is_archived: payload.isArchived },
+ })
+ threads.value = threads.value.filter(
+ (thread) => thread.id !== payload.threadId,
+ )
+ threadId.value = null
+ notificationsStore.addNotification({
+ message: payload.isArchived ? 'Archived' : 'Unarchived',
+ type: 'success',
+ })
+ }
+
+ async function markThreadRead(threadId: string, force = false) {
+ const thread = threads.value.find((item) => item.id === threadId)
+ if (!thread) throw new Error(`Cannot find thread with id ${threadId}`)
+ if (!force && thread.is_read) return
+
+ try {
+ const response = await apiFetch<{ data: EntitiesMessageThread }>(
+ `/v1/message-threads/${threadId}`,
+ {
+ method: 'PUT',
+ body: { is_read: true },
+ },
+ )
+ replaceThread(response.data)
+ } catch (error) {
+ notificationsStore.addNotification({
+ message: 'The message thread could not be marked as read',
+ type: 'error',
+ })
+ try {
+ await loadThreads()
+ } catch (reloadError) {
+ throw new AggregateError(
+ [error, reloadError],
+ 'Could not mark the message thread as read or reload threads',
+ { cause: reloadError },
+ )
+ }
+ throw error
+ }
+ }
+
+ async function deleteThread(id: string) {
+ await apiFetch(`/v1/message-threads/${id}`, { method: 'DELETE' })
+ threadId.value = null
+ notificationsStore.addNotification({
+ message: 'The message thread has been deleted successfully',
+ type: 'success',
+ })
+ }
+
+ function resetState() {
+ threads.value = []
+ threadId.value = null
+ archivedThreads.value = false
+ loadingThreads.value = true
+ }
+
+ return {
+ threads,
+ threadId,
+ loadingThreads,
+ archivedThreads,
+ currentThread,
+ hasThread,
+ hasThreadId,
+ loadThreads,
+ loadThreadMessages,
+ setThreadId,
+ toggleArchive,
+ updateThread,
+ markThreadRead,
+ deleteThread,
+ resetState,
+ }
+})
diff --git a/web/app/types/nuxt-shims.d.ts b/web/app/types/nuxt-shims.d.ts
new file mode 100644
index 000000000..a70a892ea
--- /dev/null
+++ b/web/app/types/nuxt-shims.d.ts
@@ -0,0 +1,40 @@
+/**
+ * Type declarations for Nuxt auto-imports.
+ * These are normally generated in .nuxt/ by `nuxt prepare` but are provided
+ * here so that external static analysis tools (e.g. Codacy) can resolve types
+ * without running the Nuxt build pipeline.
+ */
+
+import type { $Fetch } from 'ofetch'
+import type { App } from 'vue'
+
+declare global {
+ // Nuxt composables
+ function useRuntimeConfig(): {
+ public: Record
+ [key: string]: unknown
+ }
+
+ // Nuxt fetch utility
+ const $fetch: $Fetch
+
+ // Nuxt plugin helper
+ function defineNuxtPlugin(
+ plugin: (nuxtApp: { vueApp: App }) => Record | undefined,
+ ): unknown
+
+ // Nuxt route middleware helper
+ function defineNuxtRouteMiddleware(
+ middleware: (to: {
+ path: string
+ query?: Record
+ }) => unknown,
+ ): unknown
+
+ // Nuxt navigation
+ function navigateTo(
+ to: string | { path: string; query?: Record },
+ ): unknown
+}
+
+export {}
diff --git a/web/app/utils/api-error.ts b/web/app/utils/api-error.ts
new file mode 100644
index 000000000..73934dd74
--- /dev/null
+++ b/web/app/utils/api-error.ts
@@ -0,0 +1,21 @@
+/**
+ * Shape of the error object thrown by ofetch/$fetch for failed API requests.
+ */
+export interface ApiError {
+ status?: number
+ data?: {
+ message?: string
+ data?: Record
+ }
+}
+
+export function toApiError(error: unknown): ApiError {
+ if (error !== null && typeof error === 'object') {
+ return error as ApiError
+ }
+ return {}
+}
+
+export function getApiErrorMessage(error: unknown, fallback: string): string {
+ return toApiError(error).data?.message ?? fallback
+}
diff --git a/web/plugins/bag.ts b/web/app/utils/bag.ts
similarity index 84%
rename from web/plugins/bag.ts
rename to web/app/utils/bag.ts
index 905b6a69b..73c46dd13 100644
--- a/web/plugins/bag.ts
+++ b/web/app/utils/bag.ts
@@ -1,20 +1,18 @@
export default class Bag {
private items = new Map>()
- serialize(): { [name: string]: Array } {
- const result = {}
+ serialize(): Record> {
+ const result: Record> = {}
this.items.forEach((value: T[], key) => {
- // @ts-ignore
result[key] = value
})
return result
}
- static fromObject(items: object): Bag {
+ static fromObject(items: Record>): Bag {
const result = new Bag()
Object.keys(items).forEach((key) => {
- // @ts-ignore
- result.addMany(key as K, items[key])
+ result.addMany(key, items[key])
})
return result
}
@@ -30,7 +28,6 @@ export default class Bag {
}
this.items.set(key, messages)
-
return this
}
diff --git a/web/plugins/capitalize.ts b/web/app/utils/capitalize.ts
similarity index 52%
rename from web/plugins/capitalize.ts
rename to web/app/utils/capitalize.ts
index e8a2e446f..9944ef649 100644
--- a/web/plugins/capitalize.ts
+++ b/web/app/utils/capitalize.ts
@@ -1,9 +1,8 @@
-export default function (value: string | null) {
+export function capitalize(value: string | null): string {
if (!value) {
return ''
}
-
- value = value.toString()
-
return value.charAt(0).toUpperCase() + value.slice(1)
}
+
+export default capitalize
diff --git a/web/app/utils/countries.ts b/web/app/utils/countries.ts
new file mode 100644
index 000000000..d5419ca1b
--- /dev/null
+++ b/web/app/utils/countries.ts
@@ -0,0 +1,335 @@
+export type SelectOption = {
+ title: string
+ value: string
+}
+
+export const countries: SelectOption[] = [
+ { title: 'Afghanistan', value: 'AF' },
+ { title: 'Åland Islands', value: 'AX' },
+ { title: 'Albania', value: 'AL' },
+ { title: 'Algeria', value: 'DZ' },
+ { title: 'American Samoa', value: 'AS' },
+ { title: 'Andorra', value: 'AD' },
+ { title: 'Angola', value: 'AO' },
+ { title: 'Anguilla', value: 'AI' },
+ { title: 'Antarctica', value: 'AQ' },
+ { title: 'Antigua and Barbuda', value: 'AG' },
+ { title: 'Argentina', value: 'AR' },
+ { title: 'Armenia', value: 'AM' },
+ { title: 'Aruba', value: 'AW' },
+ { title: 'Australia', value: 'AU' },
+ { title: 'Austria', value: 'AT' },
+ { title: 'Azerbaijan', value: 'AZ' },
+ { title: 'Bahamas', value: 'BS' },
+ { title: 'Bahrain', value: 'BH' },
+ { title: 'Bangladesh', value: 'BD' },
+ { title: 'Barbados', value: 'BB' },
+ { title: 'Belarus', value: 'BY' },
+ { title: 'Belgium', value: 'BE' },
+ { title: 'Belize', value: 'BZ' },
+ { title: 'Benin', value: 'BJ' },
+ { title: 'Bermuda', value: 'BM' },
+ { title: 'Bhutan', value: 'BT' },
+ { title: 'Bolivia', value: 'BO' },
+ { title: 'Bonaire', value: 'BQ' },
+ { title: 'Bosnia and Herzegovina', value: 'BA' },
+ { title: 'Botswana', value: 'BW' },
+ { title: 'Bouvet Island', value: 'BV' },
+ { title: 'Brazil', value: 'BR' },
+ { title: 'British Indian Ocean', value: 'IO' },
+ { title: 'Brunei Darussalam', value: 'BN' },
+ { title: 'Bulgaria', value: 'BG' },
+ { title: 'Burkina Faso', value: 'BF' },
+ { title: 'Burundi', value: 'BI' },
+ { title: 'Cabo Verde', value: 'CV' },
+ { title: 'Cambodia', value: 'KH' },
+ { title: 'Cameroon', value: 'CM' },
+ { title: 'Canada', value: 'CA' },
+ { title: 'Cayman Islands', value: 'KY' },
+ { title: 'Central African Republic', value: 'CF' },
+ { title: 'Chad', value: 'TD' },
+ { title: 'Chile', value: 'CL' },
+ { title: 'China', value: 'CN' },
+ { title: 'Christmas Island', value: 'CX' },
+ { title: 'Cocos (Keeling) Islands', value: 'CC' },
+ { title: 'Colombia', value: 'CO' },
+ { title: 'Comoros', value: 'KM' },
+ { title: 'Congo', value: 'CG' },
+ { title: 'Congo', value: 'CD' },
+ { title: 'Cook Islands', value: 'CK' },
+ { title: 'Costa Rica', value: 'CR' },
+ { title: "Côte d'Ivoire", value: 'CI' },
+ { title: 'Cuba', value: 'CU' },
+ { title: 'Curaçao', value: 'CW' },
+ { title: 'Cyprus', value: 'CY' },
+ { title: 'Czechia', value: 'CZ' },
+ { title: 'Denmark', value: 'DK' },
+ { title: 'Djibouti', value: 'DJ' },
+ { title: 'Dominica', value: 'DM' },
+ { title: 'Dominican Republic', value: 'DO' },
+ { title: 'Ecuador', value: 'EC' },
+ { title: 'Egypt', value: 'EG' },
+ { title: 'El Salvador', value: 'SV' },
+ { title: 'Equatorial Guinea', value: 'GQ' },
+ { title: 'Eritrea', value: 'ER' },
+ { title: 'Estonia', value: 'EE' },
+ { title: 'Eswatini', value: 'SZ' },
+ { title: 'Ethiopia', value: 'ET' },
+ { title: 'Falkland Islands', value: 'FK' },
+ { title: 'Faroe Islands', value: 'FO' },
+ { title: 'Fiji', value: 'FJ' },
+ { title: 'Finland', value: 'FI' },
+ { title: 'France', value: 'FR' },
+ { title: 'French Guiana', value: 'GF' },
+ { title: 'French Polynesia', value: 'PF' },
+ { title: 'French Southern Territories', value: 'TF' },
+ { title: 'Gabon', value: 'GA' },
+ { title: 'Gambia', value: 'GM' },
+ { title: 'Georgia', value: 'GE' },
+ { title: 'Germany', value: 'DE' },
+ { title: 'Ghana', value: 'GH' },
+ { title: 'Gibraltar', value: 'GI' },
+ { title: 'Greece', value: 'GR' },
+ { title: 'Greenland', value: 'GL' },
+ { title: 'Grenada', value: 'GD' },
+ { title: 'Guadeloupe', value: 'GP' },
+ { title: 'Guam', value: 'GU' },
+ { title: 'Guatemala', value: 'GT' },
+ { title: 'Guernsey', value: 'GG' },
+ { title: 'Guinea', value: 'GN' },
+ { title: 'Guinea-Bissau', value: 'GW' },
+ { title: 'Guyana', value: 'GY' },
+ { title: 'Haiti', value: 'HT' },
+ { title: 'Heard Island and McDonald Islands', value: 'HM' },
+ { title: 'Holy See', value: 'VA' },
+ { title: 'Honduras', value: 'HN' },
+ { title: 'Hong Kong', value: 'HK' },
+ { title: 'Hungary', value: 'HU' },
+ { title: 'Iceland', value: 'IS' },
+ { title: 'India', value: 'IN' },
+ { title: 'Indonesia', value: 'ID' },
+ { title: 'Iran', value: 'IR' },
+ { title: 'Iraq', value: 'IQ' },
+ { title: 'Ireland', value: 'IE' },
+ { title: 'Isle of Man', value: 'IM' },
+ { title: 'Israel', value: 'IL' },
+ { title: 'Italy', value: 'IT' },
+ { title: 'Jamaica', value: 'JM' },
+ { title: 'Japan', value: 'JP' },
+ { title: 'Jersey', value: 'JE' },
+ { title: 'Jordan', value: 'JO' },
+ { title: 'Kazakhstan', value: 'KZ' },
+ { title: 'Kenya', value: 'KE' },
+ { title: 'Kiribati', value: 'KI' },
+ { title: 'North Korea', value: 'KP' },
+ { title: 'South Korea', value: 'KR' },
+ { title: 'Kuwait', value: 'KW' },
+ { title: 'Kyrgyzstan', value: 'KG' },
+ { title: "Lao People's Democratic Republic", value: 'LA' },
+ { title: 'Latvia', value: 'LV' },
+ { title: 'Lebanon', value: 'LB' },
+ { title: 'Lesotho', value: 'LS' },
+ { title: 'Liberia', value: 'LR' },
+ { title: 'Libya', value: 'LY' },
+ { title: 'Liechtenstein', value: 'LI' },
+ { title: 'Lithuania', value: 'LT' },
+ { title: 'Luxembourg', value: 'LU' },
+ { title: 'Macao', value: 'MO' },
+ { title: 'Madagascar', value: 'MG' },
+ { title: 'Malawi', value: 'MW' },
+ { title: 'Malaysia', value: 'MY' },
+ { title: 'Maldives', value: 'MV' },
+ { title: 'Mali', value: 'ML' },
+ { title: 'Malta', value: 'MT' },
+ { title: 'Marshall Islands', value: 'MH' },
+ { title: 'Martinique', value: 'MQ' },
+ { title: 'Mauritania', value: 'MR' },
+ { title: 'Mauritius', value: 'MU' },
+ { title: 'Mayotte', value: 'YT' },
+ { title: 'Mexico', value: 'MX' },
+ { title: 'Micronesia', value: 'FM' },
+ { title: 'Moldova', value: 'MD' },
+ { title: 'Monaco', value: 'MC' },
+ { title: 'Mongolia', value: 'MN' },
+ { title: 'Montenegro', value: 'ME' },
+ { title: 'Montserrat', value: 'MS' },
+ { title: 'Morocco', value: 'MA' },
+ { title: 'Mozambique', value: 'MZ' },
+ { title: 'Myanmar', value: 'MM' },
+ { title: 'Namibia', value: 'NA' },
+ { title: 'Nauru', value: 'NR' },
+ { title: 'Nepal', value: 'NP' },
+ { title: 'Netherlands', value: 'NL' },
+ { title: 'New Caledonia', value: 'NC' },
+ { title: 'New Zealand', value: 'NZ' },
+ { title: 'Nicaragua', value: 'NI' },
+ { title: 'Niger', value: 'NE' },
+ { title: 'Nigeria', value: 'NG' },
+ { title: 'Niue', value: 'NU' },
+ { title: 'Norfolk Island', value: 'NF' },
+ { title: 'North Macedonia', value: 'MK' },
+ { title: 'Northern Mariana Islands', value: 'MP' },
+ { title: 'Norway', value: 'NO' },
+ { title: 'Oman', value: 'OM' },
+ { title: 'Pakistan', value: 'PK' },
+ { title: 'Palau', value: 'PW' },
+ { title: 'Panama', value: 'PA' },
+ { title: 'Papua New Guinea', value: 'PG' },
+ { title: 'Paraguay', value: 'PY' },
+ { title: 'Peru', value: 'PE' },
+ { title: 'Philippines', value: 'PH' },
+ { title: 'Pitcairn', value: 'PN' },
+ { title: 'Poland', value: 'PL' },
+ { title: 'Portugal', value: 'PT' },
+ { title: 'Puerto Rico', value: 'PR' },
+ { title: 'Qatar', value: 'QA' },
+ { title: 'Réunion', value: 'RE' },
+ { title: 'Romania', value: 'RO' },
+ { title: 'Russian Federation', value: 'RU' },
+ { title: 'Rwanda', value: 'RW' },
+ { title: 'Saint Barthélemy', value: 'BL' },
+ { title: 'Saint Helena, Ascension and Tristan da Cunha', value: 'SH' },
+ { title: 'Saint Kitts and Nevis', value: 'KN' },
+ { title: 'Saint Lucia', value: 'LC' },
+ { title: 'Saint Martin (French part)', value: 'MF' },
+ { title: 'Saint Pierre and Miquelon', value: 'PM' },
+ { title: 'Saint Vincent and the Grenadines', value: 'VC' },
+ { title: 'Samoa', value: 'WS' },
+ { title: 'San Marino', value: 'SM' },
+ { title: 'Sao Tome and Principe', value: 'ST' },
+ { title: 'Saudi Arabia', value: 'SA' },
+ { title: 'Senegal', value: 'SN' },
+ { title: 'Serbia', value: 'RS' },
+ { title: 'Seychelles', value: 'SC' },
+ { title: 'Sierra Leone', value: 'SL' },
+ { title: 'Singapore', value: 'SG' },
+ { title: 'Slovakia', value: 'SK' },
+ { title: 'Slovenia', value: 'SI' },
+ { title: 'Solomon Islands', value: 'SB' },
+ { title: 'Somalia', value: 'SO' },
+ { title: 'South Africa', value: 'ZA' },
+ { title: 'South Georgia and the South Sandwich Islands', value: 'GS' },
+ { title: 'South Sudan', value: 'SS' },
+ { title: 'Spain', value: 'ES' },
+ { title: 'Sri Lanka', value: 'LK' },
+ { title: 'Sudan', value: 'SD' },
+ { title: 'Suriname', value: 'SR' },
+ { title: 'Svalbard and Jan Mayen', value: 'SJ' },
+ { title: 'Sweden', value: 'SE' },
+ { title: 'Switzerland', value: 'CH' },
+ { title: 'Syrian Arab Republic', value: 'SY' },
+ { title: 'Taiwan, Province of China', value: 'TW' },
+ { title: 'Tajikistan', value: 'TJ' },
+ { title: 'Tanzania, United Republic of', value: 'TZ' },
+ { title: 'Thailand', value: 'TH' },
+ { title: 'Timor-Leste', value: 'TL' },
+ { title: 'Togo', value: 'TG' },
+ { title: 'Tokelau', value: 'TK' },
+ { title: 'Tonga', value: 'TO' },
+ { title: 'Trinidad and Tobago', value: 'TT' },
+ { title: 'Tunisia', value: 'TN' },
+ { title: 'Turkey', value: 'TR' },
+ { title: 'Turkmenistan', value: 'TM' },
+ { title: 'Turks and Caicos Islands', value: 'TC' },
+ { title: 'Tuvalu', value: 'TV' },
+ { title: 'Uganda', value: 'UG' },
+ { title: 'Ukraine', value: 'UA' },
+ { title: 'United Arab Emirates', value: 'AE' },
+ { title: 'United Kingdom', value: 'GB' },
+ { title: 'United States', value: 'US' },
+ { title: 'United States Minor Outlying Islands', value: 'UM' },
+ { title: 'Uruguay', value: 'UY' },
+ { title: 'Uzbekistan', value: 'UZ' },
+ { title: 'Vanuatu', value: 'VU' },
+ { title: 'Venezuela', value: 'VE' },
+ { title: 'Viet Nam', value: 'VN' },
+ { title: 'Virgin Islands (British)', value: 'VG' },
+ { title: 'Virgin Islands (U.S.)', value: 'VI' },
+ { title: 'Wallis and Futuna', value: 'WF' },
+ { title: 'Western Sahara', value: 'EH' },
+ { title: 'Yemen', value: 'YE' },
+ { title: 'Zambia', value: 'ZM' },
+ { title: 'Zimbabwe', value: 'ZW' },
+]
+
+const usStates: SelectOption[] = [
+ { title: 'Alabama', value: 'AL' },
+ { title: 'Alaska', value: 'AK' },
+ { title: 'Arizona', value: 'AZ' },
+ { title: 'Arkansas', value: 'AR' },
+ { title: 'California', value: 'CA' },
+ { title: 'Colorado', value: 'CO' },
+ { title: 'Connecticut', value: 'CT' },
+ { title: 'Delaware', value: 'DE' },
+ { title: 'Florida', value: 'FL' },
+ { title: 'Georgia', value: 'GA' },
+ { title: 'Hawaii', value: 'HI' },
+ { title: 'Idaho', value: 'ID' },
+ { title: 'Illinois', value: 'IL' },
+ { title: 'Indiana', value: 'IN' },
+ { title: 'Iowa', value: 'IA' },
+ { title: 'Kansas', value: 'KS' },
+ { title: 'Kentucky', value: 'KY' },
+ { title: 'Louisiana', value: 'LA' },
+ { title: 'Maine', value: 'ME' },
+ { title: 'Maryland', value: 'MD' },
+ { title: 'Massachusetts', value: 'MA' },
+ { title: 'Michigan', value: 'MI' },
+ { title: 'Minnesota', value: 'MN' },
+ { title: 'Mississippi', value: 'MS' },
+ { title: 'Missouri', value: 'MO' },
+ { title: 'Montana', value: 'MT' },
+ { title: 'Nebraska', value: 'NE' },
+ { title: 'Nevada', value: 'NV' },
+ { title: 'New Hampshire', value: 'NH' },
+ { title: 'New Jersey', value: 'NJ' },
+ { title: 'New Mexico', value: 'NM' },
+ { title: 'New York', value: 'NY' },
+ { title: 'North Carolina', value: 'NC' },
+ { title: 'North Dakota', value: 'ND' },
+ { title: 'Ohio', value: 'OH' },
+ { title: 'Oklahoma', value: 'OK' },
+ { title: 'Oregon', value: 'OR' },
+ { title: 'Pennsylvania', value: 'PA' },
+ { title: 'Rhode Island', value: 'RI' },
+ { title: 'South Carolina', value: 'SC' },
+ { title: 'South Dakota', value: 'SD' },
+ { title: 'Tennessee', value: 'TN' },
+ { title: 'Texas', value: 'TX' },
+ { title: 'Utah', value: 'UT' },
+ { title: 'Vermont', value: 'VT' },
+ { title: 'Virginia', value: 'VA' },
+ { title: 'Washington', value: 'WA' },
+ { title: 'West Virginia', value: 'WV' },
+ { title: 'Wisconsin', value: 'WI' },
+ { title: 'Wyoming', value: 'WY' },
+ { title: 'District of Columbia', value: 'DC' },
+]
+
+const canadaProvinces: SelectOption[] = [
+ { title: 'Alberta', value: 'AB' },
+ { title: 'British Columbia', value: 'BC' },
+ { title: 'Manitoba', value: 'MB' },
+ { title: 'New Brunswick', value: 'NB' },
+ { title: 'Newfoundland and Labrador', value: 'NL' },
+ { title: 'Nova Scotia', value: 'NS' },
+ { title: 'Ontario', value: 'ON' },
+ { title: 'Prince Edward Island', value: 'PE' },
+ { title: 'Quebec', value: 'QC' },
+ { title: 'Saskatchewan', value: 'SK' },
+ { title: 'Northwest Territories', value: 'NT' },
+ { title: 'Nunavut', value: 'NU' },
+ { title: 'Yukon', value: 'YT' },
+]
+
+export function getStateOptions(country: string): SelectOption[] {
+ if (country === 'US') {
+ return usStates
+ }
+ if (country === 'CA') {
+ return canadaProvinces
+ }
+ return []
+}
+
+export default countries
diff --git a/web/plugins/errors.ts b/web/app/utils/errors.ts
similarity index 54%
rename from web/plugins/errors.ts
rename to web/app/utils/errors.ts
index d956f7854..b72bfbf38 100644
--- a/web/plugins/errors.ts
+++ b/web/app/utils/errors.ts
@@ -1,6 +1,5 @@
-import { AxiosError } from 'axios'
-import Bag from '@/plugins/bag'
-import capitalize from '@/plugins/capitalize'
+import Bag from '~/utils/bag'
+import { capitalize } from '~/utils/capitalize'
export class ErrorMessages extends Bag {}
@@ -22,19 +21,26 @@ const sanitize = (key: string, values: Array): Array => {
})
}
-export const getErrorMessages = (error: AxiosError): ErrorMessages => {
+interface AxiosLikeError {
+ response?: {
+ data?: { data?: Record }
+ status?: number
+ }
+}
+
+export const getErrorMessages = (error: AxiosLikeError): ErrorMessages => {
const errors = new ErrorMessages()
if (
error === null ||
- typeof (error.response?.data as any)?.data !== 'object' ||
- (error.response?.data as any)?.data === null ||
+ typeof error.response?.data?.data !== 'object' ||
+ error.response?.data?.data === null ||
error.response?.status !== 422
) {
return errors
}
- Object.keys((error.response?.data as any).data).forEach((key: string) => {
- errors.addMany(key, sanitize(key, (error.response?.data as any).data[key]))
+ Object.keys(error.response.data.data).forEach((key: string) => {
+ errors.addMany(key, sanitize(key, error.response!.data!.data![key]))
})
return errors
diff --git a/web/app/utils/filters.ts b/web/app/utils/filters.ts
new file mode 100644
index 000000000..5ed17d175
--- /dev/null
+++ b/web/app/utils/filters.ts
@@ -0,0 +1,105 @@
+import { intervalToDuration, formatDuration } from 'date-fns'
+import { parsePhoneNumber, isValidPhoneNumber } from 'libphonenumber-js'
+
+export function formatPhoneNumber(value: string): string {
+ if (!value || typeof value !== 'string') {
+ return value ?? ''
+ }
+ if (!isValidPhoneNumber(value)) {
+ return value
+ }
+ const phoneNumber = parsePhoneNumber(value)
+ if (phoneNumber) {
+ return phoneNumber.formatInternational()
+ }
+ return value
+}
+
+export function phoneCountry(value: string): string {
+ const phoneNumber = parsePhoneNumber(value)
+ if (phoneNumber && phoneNumber.country) {
+ const regionNames = new Intl.DisplayNames(undefined, { type: 'region' })
+ return regionNames.of(phoneNumber.country) ?? 'Earth'
+ }
+ return 'Earth'
+}
+
+export function formatTimestamp(value: string): string {
+ return new Date(value).toLocaleString()
+}
+
+export function formatMoney(value: string | number): string {
+ return new Intl.NumberFormat('en-US', {
+ style: 'currency',
+ currency: 'USD',
+ }).format(typeof value === 'string' ? parseInt(value) : value)
+}
+
+export function formatDecimal(value: string | number): string {
+ return new Intl.NumberFormat('en-US', {
+ style: 'decimal',
+ }).format(typeof value === 'string' ? parseInt(value) : value)
+}
+
+export function formatBillingPeriod(value: string): string {
+ return new Date(value).toLocaleDateString('en-US', {
+ year: 'numeric',
+ month: 'long',
+ })
+}
+
+export function formatBillingPeriodDateOrdinal(value: string): string {
+ const date = new Date(value)
+ const day = date.getDate()
+ const month = date.toLocaleDateString('en-US', { month: 'long' })
+ const year = date.getFullYear()
+
+ const suffix =
+ day % 10 === 1 && day !== 11
+ ? 'st'
+ : day % 10 === 2 && day !== 12
+ ? 'nd'
+ : day % 10 === 3 && day !== 13
+ ? 'rd'
+ : 'th'
+
+ return `${month} ${day}${suffix} ${year}`
+}
+
+export interface BillingPeriodDateOrdinalParts {
+ leading: string
+ suffix: string
+ trailing: string
+}
+
+export function formatBillingPeriodDateOrdinalParts(
+ value: string,
+): BillingPeriodDateOrdinalParts {
+ const date = new Date(value)
+ const day = date.getDate()
+ const month = date.toLocaleDateString('en-US', { month: 'long' })
+ const year = date.getFullYear()
+
+ const suffix =
+ day % 10 === 1 && day !== 11
+ ? 'st'
+ : day % 10 === 2 && day !== 12
+ ? 'nd'
+ : day % 10 === 3 && day !== 13
+ ? 'rd'
+ : 'th'
+
+ return { leading: `${month} ${day}`, suffix, trailing: ` ${year}` }
+}
+
+export function humanizeTime(value: string): string {
+ const durations = intervalToDuration({
+ start: new Date(value),
+ end: new Date(),
+ })
+ return formatDuration(durations)
+}
+
+export function startsWithLetter(value: string): boolean {
+ return /^[a-zA-Z]/.test(value)
+}
diff --git a/web/assets/variables.scss b/web/assets/variables.scss
deleted file mode 100644
index f60e6090d..000000000
--- a/web/assets/variables.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-// Ref: https://github.com/nuxt-community/vuetify-module#customvariables
-//
-// The variables you want to modify
-// $font-size-root: 20px;
diff --git a/web/commitlint.config.js b/web/commitlint.config.mjs
similarity index 72%
rename from web/commitlint.config.js
rename to web/commitlint.config.mjs
index 98ee7dfc2..d179c6900 100644
--- a/web/commitlint.config.js
+++ b/web/commitlint.config.mjs
@@ -1,3 +1,3 @@
-module.exports = {
+export default {
extends: ['@commitlint/config-conventional'],
}
diff --git a/web/components/BackButton.vue b/web/components/BackButton.vue
deleted file mode 100644
index 58b43d0c3..000000000
--- a/web/components/BackButton.vue
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
- {{ mdiArrowLeft }}
- Go Back
-
-
-
-
diff --git a/web/components/BlogAuthorBio.vue b/web/components/BlogAuthorBio.vue
deleted file mode 100644
index 576192931..000000000
--- a/web/components/BlogAuthorBio.vue
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
diff --git a/web/components/BlogInfo.vue b/web/components/BlogInfo.vue
deleted file mode 100644
index b49b1a351..000000000
--- a/web/components/BlogInfo.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
- httpSMS
-
-
- httpSMS is an
- open source
- application that converts your android phone into an SMS gateway so you
- can send and receive SMS messages using a simple HTTP API.
-
-
- {{ mdiBookOpenVariant }}
- Documentation
-
-
-
-
-
diff --git a/web/components/CopyButton.vue b/web/components/CopyButton.vue
deleted file mode 100644
index 20a94a5f2..000000000
--- a/web/components/CopyButton.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
- {{ mdiContentCopy }}
- {{ copyText }}
-
-
-
-
diff --git a/web/components/FirebaseAuth.vue b/web/components/FirebaseAuth.vue
deleted file mode 100644
index 365cfcc8d..000000000
--- a/web/components/FirebaseAuth.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
diff --git a/web/components/FixedHeader.vue b/web/components/FixedHeader.vue
deleted file mode 100644
index f3936a796..000000000
--- a/web/components/FixedHeader.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
- HTTP SMS
-
-
-
- Get Started
- For Free
-
-
-
-
-
-
-
diff --git a/web/components/LoadingButton.vue b/web/components/LoadingButton.vue
deleted file mode 100644
index 2cd5c17ac..000000000
--- a/web/components/LoadingButton.vue
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
- {{ icon }}
-
-
-
-
-
diff --git a/web/components/MessageThread.vue b/web/components/MessageThread.vue
deleted file mode 100644
index 0f0f222b9..000000000
--- a/web/components/MessageThread.vue
+++ /dev/null
@@ -1,175 +0,0 @@
-
-
-
-
- Archived Messages
-
-
-
-
-
- Start sending messages
-
-
-
-
- {{ mdiPlus }}
-
- New Message
-
-
-
-
- Install the mobile app on your android phone to start sending messages.
- You can also
- message us on Discord
- to help set things up.
-
-
-
- {{ mdiDownload }}
-
- Install App
-
-
-
-
-
-
-
- {{ mdiAccount }}
-
-
-
- {{ thread.contact | phoneNumber }}
-
-
- {{ thread.last_message_content }}
-
-
-
-
- {{ threadDate(thread.order_timestamp) }}
-
- {{ mdiAlert }}
-
- {{ mdiCheckAll }}
-
-
- {{ mdiCheckAll }}
-
-
- {{ mdiCheck }}
-
-
- {{ mdiAlert }}
-
-
-
-
-
-
-
-
-
-
diff --git a/web/components/MessageThreadHeader.vue b/web/components/MessageThreadHeader.vue
deleted file mode 100644
index 6cbee07aa..000000000
--- a/web/components/MessageThreadHeader.vue
+++ /dev/null
@@ -1,316 +0,0 @@
-
-
-
-
-
-
-
-
- {{ $store.getters.getOwner | phoneCountry }}
-
-
-
-
- {{ mdiBatteryCharging }}
- {{ mdiCircle }}
-
-
- Last Heartbeat
- {{ $store.getters.getHeartbeat.timestamp | humanizeTime }} ago
-
-
-
-
-
-
-
- {{ mdiDotsVertical }}
-
-
-
-
-
-
-
- {{ mdiPackageDown }}
-
-
- {{ mdiPackageUp }}
-
-
-
-
-
- Archived
-
-
- Unarchived
-
-
-
-
-
-
- {{ mdiPlus }}
-
-
-
-
- New Message
-
-
-
-
-
-
- {{ mdiCommentTextMultipleOutline }}
-
-
-
-
- Bulk Messages
-
-
-
-
-
-
- {{ mdiMagnify }}
-
-
-
-
- Search Messages
-
-
-
-
-
-
- {{ mdiAccountCog }}
-
-
-
-
- Settings
-
-
-
-
-
-
- {{ mdiCellphoneKey }}
-
-
-
-
- Phone API Keys
-
-
-
-
-
-
- {{ mdiDownload }}
-
-
-
-
- Install App
-
-
-
-
-
-
- {{ mdiFinance }}
-
-
-
-
- Usage & Billing
-
-
-
-
-
-
- {{ mdiLogout }}
-
-
-
-
- Logout
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/components/NuxtLogo.vue b/web/components/NuxtLogo.vue
deleted file mode 100644
index f038904c4..000000000
--- a/web/components/NuxtLogo.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/components/Toast.vue b/web/components/Toast.vue
deleted file mode 100644
index 067a0f883..000000000
--- a/web/components/Toast.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
- {{ mdiCheck }}
-
-
- {{ mdiInformation }}
-
- {{ notification.message }}
-
-
- Close
-
-
-
-
-
-
diff --git a/web/eslint.config.mjs b/web/eslint.config.mjs
new file mode 100644
index 000000000..80b0605ae
--- /dev/null
+++ b/web/eslint.config.mjs
@@ -0,0 +1,13 @@
+import withNuxt from './.nuxt/eslint.config.mjs'
+import eslintConfigPrettier from 'eslint-config-prettier'
+
+export default withNuxt(eslintConfigPrettier).append({
+ name: 'httpsms/link-checker-overrides',
+ rules: {
+ // Links to static download assets in /public (e.g. /templates/*.xlsx) are
+ // valid at runtime but are not Nuxt routes, so the static ESLint checks
+ // false-positive on them. The build-time link checker still validates links.
+ 'link-checker/valid-route': 'off',
+ 'link-checker/valid-sitemap-link': 'off',
+ },
+})
diff --git a/web/jest.config.js b/web/jest.config.js
deleted file mode 100644
index ce9b8f172..000000000
--- a/web/jest.config.js
+++ /dev/null
@@ -1,19 +0,0 @@
-module.exports = {
- moduleNameMapper: {
- '^@/(.*)$': '/$1',
- '^~/(.*)$': '/$1',
- '^vue$': 'vue/dist/vue.common.js',
- },
- moduleFileExtensions: ['ts', 'js', 'vue', 'json'],
- transform: {
- '^.+\\.ts$': 'ts-jest',
- '^.+\\.js$': 'babel-jest',
- '.*\\.(vue)$': 'vue-jest',
- },
- collectCoverage: true,
- collectCoverageFrom: [
- '/components/**/*.vue',
- '/pages/**/*.vue',
- ],
- testEnvironment: 'jsdom',
-}
diff --git a/web/layouts/default.vue b/web/layouts/default.vue
deleted file mode 100644
index 1c2049e55..000000000
--- a/web/layouts/default.vue
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/layouts/error.vue b/web/layouts/error.vue
deleted file mode 100644
index 6834bd8e3..000000000
--- a/web/layouts/error.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
- {{ pageNotFound }}
-
-
- {{ otherError }}
-
- Home page
-
-
-
-
-
-
diff --git a/web/layouts/website.vue b/web/layouts/website.vue
deleted file mode 100644
index 00bd0ed56..000000000
--- a/web/layouts/website.vue
+++ /dev/null
@@ -1,365 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- httpSMS
-
-
-
-
- Pricing
-
-
- Blog
-
-
- Login
-
-
- Get Started
- For Free
-
-
- Dashboard
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- httpSMS
-
-
- Made With {{ mdiHeart }} in
- Tallinn
-
-
-
-
- {{ mdiTwitter }}
-
-
- {{ mdiGithub }}
-
-
-
-
-
-
-
-
-
-
- Resources
-
-
-
- Developers
-
-
-
- Legal
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/middleware/auth.ts b/web/middleware/auth.ts
deleted file mode 100644
index 9ed9aa8e5..000000000
--- a/web/middleware/auth.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Context, Middleware } from '@nuxt/types'
-
-const authMiddleware: Middleware = (context: Context) => {
- if (context.store.getters.getAuthUser === null) {
- context.redirect('/login', { to: context.route.path })
- }
-}
-
-export default authMiddleware
diff --git a/web/middleware/guest.ts b/web/middleware/guest.ts
deleted file mode 100644
index d7033821f..000000000
--- a/web/middleware/guest.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Context, Middleware } from '@nuxt/types'
-
-const guestMiddleware: Middleware = (context: Context) => {
- if (context.store.getters.getAuthUser !== null) {
- context.redirect('/threads')
- }
-}
-
-export default guestMiddleware
diff --git a/web/models/api.ts b/web/models/api.ts
deleted file mode 100644
index 7b2d542f6..000000000
--- a/web/models/api.ts
+++ /dev/null
@@ -1,638 +0,0 @@
-/* eslint-disable */
-/* tslint:disable */
-// @ts-nocheck
-/*
- * ---------------------------------------------------------------
- * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
- * ## ##
- * ## AUTHOR: acacode ##
- * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
- * ---------------------------------------------------------------
- */
-
-export interface EntitiesBillingUsage {
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- created_at: string
- /** @example "2022-01-31T23:59:59+00:00" */
- end_timestamp: string
- /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
- id: string
- /** @example 465 */
- received_messages: number
- /** @example 321 */
- sent_messages: number
- /** @example "2022-01-01T00:00:00+00:00" */
- start_timestamp: string
- /** @example 0 */
- total_cost: number
- /** @example "2022-06-05T14:26:10.303278+03:00" */
- updated_at: string
- /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
- user_id: string
-}
-
-export interface EntitiesDiscord {
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- created_at: string
- /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
- id: string
- /** @example "1095780203256627291" */
- incoming_channel_id: string
- /** @example "Game Server" */
- name: string
- /** @example "1095778291488653372" */
- server_id: string
- /** @example "2022-06-05T14:26:10.303278+03:00" */
- updated_at: string
- /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
- user_id: string
-}
-
-export interface EntitiesHeartbeat {
- /** @example true */
- charging: boolean
- /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
- id: string
- /** @example "+18005550199" */
- owner: string
- /** @example "2022-06-05T14:26:01.520828+03:00" */
- timestamp: string
- /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
- user_id: string
- /** @example "344c10f" */
- version: string
-}
-
-export interface EntitiesMessage {
- /** @example false */
- can_be_polled: boolean
- /** @example "+18005550100" */
- contact: string
- /** @example "This is a sample text message" */
- content: string
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- created_at: string
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- delivered_at: string
- /** @example false */
- encrypted: boolean
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- expired_at: string
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- failed_at: string
- /** @example "UNKNOWN" */
- failure_reason: string
- /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
- id: string
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- last_attempted_at: string
- /** @example 1 */
- max_send_attempts: number
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- order_timestamp: string
- /** @example "+18005550199" */
- owner: string
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- received_at: string
- /** @example "153554b5-ae44-44a0-8f4f-7bbac5657ad4" */
- request_id: string
- /** @example "2022-06-05T14:26:01.520828+03:00" */
- request_received_at: string
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- scheduled_at: string
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- scheduled_send_time: string
- /** @example 0 */
- send_attempt_count: number
- /**
- * SendDuration is the number of nanoseconds from when the request was received until when the mobile phone send the message
- * @example 133414
- */
- send_time: number
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- sent_at: string
- /**
- * SIM is the SIM card to use to send the message
- * * SMS1: use the SIM card in slot 1
- * * SMS2: use the SIM card in slot 2
- * * DEFAULT: used the default communication SIM card
- * @example "DEFAULT"
- */
- sim: string
- /** @example "pending" */
- status: string
- /** @example "mobile-terminated" */
- type: string
- /** @example "2022-06-05T14:26:10.303278+03:00" */
- updated_at: string
- /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
- user_id: string
-}
-
-export interface EntitiesMessageThread {
- /** @example "indigo" */
- color: string
- /** @example "+18005550100" */
- contact: string
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- created_at: string
- /** @example "32343a19-da5e-4b1b-a767-3298a73703ca" */
- id: string
- /** @example false */
- is_archived: boolean
- /** @example "This is a sample message content" */
- last_message_content: string
- /** @example "32343a19-da5e-4b1b-a767-3298a73703ca" */
- last_message_id: string
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- order_timestamp: string
- /** @example "+18005550199" */
- owner: string
- /** @example "PENDING" */
- status: string
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- updated_at: string
- /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
- user_id: string
-}
-
-export interface EntitiesPhone {
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- created_at: string
- /** @example "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....." */
- fcm_token: string
- /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
- id: string
- /**
- * MaxSendAttempts determines how many times to retry sending an SMS message
- * @example 2
- */
- max_send_attempts: number
- /** MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired. */
- message_expiration_seconds: number
- /** @example 1 */
- messages_per_minute: number
- /** @example "This phone cannot receive calls. Please send an SMS instead." */
- missed_call_auto_reply: string
- /** @example "+18005550199" */
- phone_number: string
- /** SIM card that received the message */
- sim: string
- /** @example "2022-06-05T14:26:10.303278+03:00" */
- updated_at: string
- /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
- user_id: string
-}
-
-export interface EntitiesPhoneAPIKey {
- /** @example "pk_DGW8NwQp7mxKaSZ72Xq9v67SLqSbWQvckzzmK8D6rvd7NywSEkdMJtuxKyEkYnCY" */
- api_key: string
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- created_at: string
- /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
- id: string
- /** @example "Business Phone Key" */
- name: string
- /** @example ["[32343a19-da5e-4b1b-a767-3298a73703cb","32343a19-da5e-4b1b-a767-3298a73703cc]"] */
- phone_ids: string[]
- /** @example ["[+18005550199","+18005550100]"] */
- phone_numbers: string[]
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- updated_at: string
- /** @example "user@gmail.com" */
- user_email: string
- /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
- user_id: string
-}
-
-export interface EntitiesUser {
- /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
- active_phone_id: string
- /** @example "x-api-key" */
- api_key: string
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- created_at: string
- /** @example "name@email.com" */
- email: string
- /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
- id: string
- /** @example true */
- notification_heartbeat_enabled: boolean
- /** @example true */
- notification_message_status_enabled: boolean
- /** @example true */
- notification_newsletter_enabled: boolean
- /** @example true */
- notification_webhook_enabled: boolean
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- subscription_ends_at: string
- /** @example "8f9c71b8-b84e-4417-8408-a62274f65a08" */
- subscription_id: string
- /** @example "free" */
- subscription_name: string
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- subscription_renews_at: string
- /** @example "on_trial" */
- subscription_status: string
- /** @example "Europe/Helsinki" */
- timezone: string
- /** @example "2022-06-05T14:26:10.303278+03:00" */
- updated_at: string
-}
-
-export interface EntitiesWebhook {
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- created_at: string
- /** @example ["[message.phone.received]"] */
- events: string[]
- /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
- id: string
- /** @example ["[+18005550199","+18005550100]"] */
- phone_numbers: string[]
- /** @example "DGW8NwQp7mxKaSZ72Xq9v67SLqSbWQvckzzmK8D6rvd7NywSEkdMJtuxKyEkYnCY" */
- signing_key: string
- /** @example "2022-06-05T14:26:10.303278+03:00" */
- updated_at: string
- /** @example "https://example.com" */
- url: string
- /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
- user_id: string
-}
-
-export interface RequestsDiscordStore {
- incoming_channel_id: string
- name: string
- server_id: string
-}
-
-export interface RequestsDiscordUpdate {
- incoming_channel_id: string
- name: string
- server_id: string
-}
-
-export interface RequestsHeartbeatStore {
- charging: boolean
- phone_numbers: string[]
-}
-
-export interface RequestsMessageBulkSend {
- /** @example "This is a sample text message" */
- content: string
- /**
- * Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app
- * @example false
- */
- encrypted: boolean
- /** @example "+18005550199" */
- from: string
- /**
- * RequestID is an optional parameter used to track a request from the client's perspective
- * @example "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
- */
- request_id?: string
- /** @example ["+18005550100","+18005550100"] */
- to: string[]
-}
-
-export interface RequestsMessageCallMissed {
- /** @example "+18005550199" */
- from: string
- /** @example "SIM1" */
- sim: string
- /** @example "2022-06-05T14:26:09.527976+03:00" */
- timestamp: string
- /** @example "+18005550100" */
- to: string
-}
-
-export interface RequestsMessageEvent {
- /**
- * EventName is the type of event
- * * SENT: is emitted when a message is sent by the mobile phone
- * * FAILED: is event is emitted when the message could not be sent by the mobile phone
- * * DELIVERED: is event is emitted when a delivery report has been received by the mobile phone
- * @example "SENT"
- */
- event_name: string
- /** Reason is the exact error message in case the event is an error */
- reason: string
- /**
- * Timestamp is the time when the event was emitted, Please send the timestamp in UTC with as much precision as possible
- * @example "2022-06-05T14:26:09.527976+03:00"
- */
- timestamp: string
-}
-
-export interface RequestsMessageReceive {
- /** @example "This is a sample text message received on a phone" */
- content: string
- /**
- * Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app
- * @example false
- */
- encrypted: boolean
- /** @example "+18005550199" */
- from: string
- /**
- * SIM card that received the message
- * @example "SIM1"
- */
- sim: string
- /**
- * Timestamp is the time when the event was emitted, Please send the timestamp in UTC with as much precision as possible
- * @example "2022-06-05T14:26:09.527976+03:00"
- */
- timestamp: string
- /** @example "+18005550100" */
- to: string
-}
-
-export interface RequestsMessageSend {
- /** @example "This is a sample text message" */
- content: string
- /**
- * Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app
- * @example false
- */
- encrypted: boolean
- /** @example "+18005550199" */
- from: string
- /**
- * RequestID is an optional parameter used to track a request from the client's perspective
- * @example "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
- */
- request_id?: string
- /**
- * SendAt is an optional parameter used to schedule a message to be sent at a later time
- * @example "2022-06-05T14:26:09.527976+03:00"
- */
- send_at?: string
- /** @example "+18005550100" */
- to: string
-}
-
-export interface RequestsMessageThreadUpdate {
- /** @example true */
- is_archived: boolean
-}
-
-export interface RequestsPhoneAPIKeyStoreRequest {
- /** @example "My Phone API Key" */
- name: string
-}
-
-export interface RequestsPhoneFCMToken {
- /** @example "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....." */
- fcm_token: string
- /** @example "[+18005550199]" */
- phone_number: string
- /**
- * SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot
- * @example "SIM1"
- */
- sim: string
-}
-
-export interface RequestsPhoneUpsert {
- /** @example "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....." */
- fcm_token: string
- /**
- * MaxSendAttempts is the number of attempts when sending an SMS message to handle the case where the phone is offline.
- * @example 2
- */
- max_send_attempts: number
- /**
- * MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired.
- * @example 12345
- */
- message_expiration_seconds: number
- /** @example 1 */
- messages_per_minute: number
- /** @example "e.g. This phone cannot receive calls. Please send an SMS instead." */
- missed_call_auto_reply: string
- /** @example "+18005550199" */
- phone_number: string
- /**
- * SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot
- * @example "SIM1"
- */
- sim: string
-}
-
-export interface RequestsUserNotificationUpdate {
- /** @example true */
- heartbeat_enabled: boolean
- /** @example true */
- message_status_enabled: boolean
- /** @example true */
- newsletter_enabled: boolean
- /** @example true */
- webhook_enabled: boolean
-}
-
-export interface RequestsUserUpdate {
- /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
- active_phone_id: string
- /** @example "Europe/Helsinki" */
- timezone: string
-}
-
-export interface RequestsWebhookStore {
- events: string[]
- /** @example ["+18005550100","+18005550100"] */
- phone_numbers: string[]
- signing_key: string
- url: string
-}
-
-export interface RequestsWebhookUpdate {
- events: string[]
- /** @example ["+18005550100","+18005550100"] */
- phone_numbers: string[]
- signing_key: string
- url: string
-}
-
-export interface ResponsesBadRequest {
- /** @example "The request body is not a valid JSON string" */
- data: string
- /** @example "The request isn't properly formed" */
- message: string
- /** @example "error" */
- status: string
-}
-
-export interface ResponsesBillingUsageResponse {
- data: EntitiesBillingUsage
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesBillingUsagesResponse {
- data: EntitiesBillingUsage[]
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesDiscordResponse {
- data: EntitiesDiscord
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesDiscordsResponse {
- data: EntitiesDiscord[]
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesHeartbeatResponse {
- data: EntitiesHeartbeat
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesHeartbeatsResponse {
- data: EntitiesHeartbeat[]
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesInternalServerError {
- /** @example "We ran into an internal error while handling the request." */
- message: string
- /** @example "error" */
- status: string
-}
-
-export interface ResponsesMessageResponse {
- data: EntitiesMessage
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesMessageThreadsResponse {
- data: EntitiesMessageThread[]
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesMessagesResponse {
- data: EntitiesMessage[]
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesNoContent {
- /** @example "action performed successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesNotFound {
- /** @example "cannot find message with ID [32343a19-da5e-4b1b-a767-3298a73703ca]" */
- message: string
- /** @example "error" */
- status: string
-}
-
-export interface ResponsesOkString {
- data: string
- /** @example "Request handled successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesPhoneAPIKeyResponse {
- data: EntitiesPhoneAPIKey
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesPhoneAPIKeysResponse {
- data: EntitiesPhoneAPIKey[]
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesPhoneResponse {
- data: EntitiesPhone
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesPhonesResponse {
- data: EntitiesPhone[]
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesUnauthorized {
- /** @example "Make sure your API key is set in the [X-API-Key] header in the request" */
- data: string
- /** @example "You are not authorized to carry out this request." */
- message: string
- /** @example "error" */
- status: string
-}
-
-export interface ResponsesUnprocessableEntity {
- data: Record
- /** @example "validation errors while sending message" */
- message: string
- /** @example "error" */
- status: string
-}
-
-export interface ResponsesUserResponse {
- data: EntitiesUser
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesWebhookResponse {
- data: EntitiesWebhook
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
-
-export interface ResponsesWebhooksResponse {
- data: EntitiesWebhook[]
- /** @example "item created successfully" */
- message: string
- /** @example "success" */
- status: string
-}
diff --git a/web/models/billing.ts b/web/models/billing.ts
deleted file mode 100644
index 37730e06c..000000000
--- a/web/models/billing.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export interface BillingUsage {
- id: string
- start_timestamp: string
- end_timestamp: string
- user_id: string
- sent_messages: number
- received_messages: number
- total_cost: number
- created_at: string
-}
diff --git a/web/models/heartbeat.ts b/web/models/heartbeat.ts
deleted file mode 100644
index 276693282..000000000
--- a/web/models/heartbeat.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export interface Heartbeat {
- id: string
- owner: string
- charging: boolean
- timestamp: string
-}
diff --git a/web/models/message-thread.ts b/web/models/message-thread.ts
deleted file mode 100644
index cabc3fee8..000000000
--- a/web/models/message-thread.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export interface MessageThread {
- color: string
- contact: string
- created_at: string
- id: string
- last_message_content: string
- last_message_id: string
- is_archived: boolean
- order_timestamp: string
- owner: string
- updated_at: string
-}
diff --git a/web/models/message.ts b/web/models/message.ts
deleted file mode 100644
index 353066481..000000000
--- a/web/models/message.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-export interface Message {
- contact: string
- content: string
- created_at: string
- failure_reason: string
- id: string
- last_attempted_at: string | null
- order_timestamp: string
- owner: string
- received_at: string | null
- request_received_at: string | null
- send_time: number | null
- sent_at: string
- status: string
- type: string
- updated_at: string
-}
-
-export interface SearchMessagesRequest {
- owners: string[]
- types: string[]
- statuses: string[]
- query: string
- sort_by: string
- token?: string
- sort_descending: boolean
- skip: number
- limit: number
-}
diff --git a/web/models/user.ts b/web/models/user.ts
deleted file mode 100644
index 8e615deb7..000000000
--- a/web/models/user.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export interface User {
- id: string
- email: string
- api_key: string
- active_phone_id: string | null
- subscription_ends_at: string
- /** @example "8f9c71b8-b84e-4417-8408-a62274f65a08" */
- subscription_id: string
- /** @example "free" */
- subscription_name: string
- /** @example "2022-06-05T14:26:02.302718+03:00" */
- subscription_renews_at: string | null
- /** @example "on_trial" */
- subscription_status: string
- created_at: string
- updated_at: string
-}
diff --git a/web/nginx.conf b/web/nginx.conf
index 979fe8027..a66ccfd7d 100644
--- a/web/nginx.conf
+++ b/web/nginx.conf
@@ -1,9 +1,10 @@
server {
- listen 3000;
- server_name localhost;
- root /usr/share/nginx/html;
- index index.html index.htm;
-location / {
- try_files $uri $uri/ /index.html;
- }
+ listen 3000;
+ server_name localhost;
+ root /usr/share/nginx/html;
+ index index.html index.htm;
+
+ location / {
+ try_files $uri $uri/ /index.html;
+ }
}
diff --git a/web/nuxt.config.js b/web/nuxt.config.js
deleted file mode 100644
index 36ba81b9f..000000000
--- a/web/nuxt.config.js
+++ /dev/null
@@ -1,170 +0,0 @@
-export default {
- // Target: https://go.nuxtjs.dev/config-target
- target: 'static',
-
- // Global page headers: https://go.nuxtjs.dev/config-head
- head: {
- titleTemplate: '%s',
- title: 'Convert your android phone into an SMS gateway - httpSMS',
- htmlAttrs: {
- lang: 'en',
- },
- script: [
- {
- hid: 'integrations',
- src: '/integrations.js',
- async: true,
- defer: true,
- },
- {
- hid: 'lemonsqueezy',
- src: 'https://lmsqueezy.com/affiliate.js',
- async: true,
- defer: true,
- },
- {
- hid: 'cloudflare',
- src: 'https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit',
- },
- ],
- meta: [
- { charset: 'utf-8' },
- { name: 'viewport', content: 'width=device-width, initial-scale=1' },
- {
- hid: 'description',
- name: 'description',
- content:
- 'Use your android phone to send and receive SMS messages using a simple HTTP API.',
- },
- { name: 'format-detection', content: 'telephone=no' },
- { hid: 'twitter:site', name: 'twitter:site', content: '@NdoleStudio' },
- {
- hid: 'twitter:card',
- name: 'twitter:card',
- content: 'summary_large_image',
- },
- {
- hid: 'og:title',
- name: 'og:title',
- content: 'Convert your android phone into an SMS gateway - httpSMS',
- },
- {
- hid: 'og:description',
- name: 'og:description',
- content:
- 'Use your android phone to send and receive SMS messages using a simple HTTP API.',
- },
- {
- hid: 'og:image',
- name: 'og:image',
- content: 'https://httpsms.com/header.png',
- },
- ],
- link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }],
- },
-
- // Global CSS: https://go.nuxtjs.dev/config-css
- css: [],
-
- // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
- plugins: [
- '~/plugins/filters.ts',
- { src: '~/plugins/vue-glow', ssr: false },
- { src: '~/plugins/chart', ssr: false },
- ],
-
- // Auto import components: https://go.nuxtjs.dev/config-components
- components: true,
-
- // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
- buildModules: [
- // https://go.nuxtjs.dev/typescript
- '@nuxt/typescript-build',
- // https://go.nuxtjs.dev/stylelint
- '@nuxtjs/stylelint-module',
- // https://go.nuxtjs.dev/vuetify
- '@nuxtjs/vuetify',
- ],
-
- // Modules: https://go.nuxtjs.dev/config-modules
- modules: [
- // Simple usage
- '@nuxtjs/dotenv',
- [
- '@nuxtjs/firebase',
- {
- config: {
- apiKey: process.env.FIREBASE_API_KEY,
- authDomain: process.env.FIREBASE_AUTH_DOMAIN,
- projectId: process.env.FIREBASE_PROJECT_ID,
- storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
- messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
- appId: process.env.FIREBASE_APP_ID,
- measurementId: process.env.FIREBASE_MEASUREMENT_ID,
- },
- services: {
- analytics: true,
- auth: {
- persistence: 'local', // default
- initialize: {
- onAuthStateChangedAction: 'onAuthStateChanged',
- onIdTokenChangedAction: 'onIdTokenChanged',
- subscribeManually: false,
- },
- ssr: false,
- },
- },
- },
- ],
- // Simple Usage
- [
- 'nuxt-highlightjs',
- {
- style: 'androidstudio',
- },
- ],
- '@nuxtjs/sitemap', // always put it at the end
- ],
-
- // Vuetify module configuration: https://go.nuxtjs.dev/config-vuetify
- vuetify: {
- treeShake: true,
- customVariables: ['~/assets/variables.scss'],
- defaultAssets: {
- icons: 'mdiSvg',
- },
- theme: {
- dark: true,
- },
- },
-
- sitemap: {
- hostname: 'https://httpsms.com',
- gzip: true,
- trailingSlash: true,
- exclude: [
- '/messages',
- '/settings',
- '/threads**',
- '/billing',
- '/bulk-messages',
- ],
- },
-
- publicRuntimeConfig: {
- checkoutURL: process.env.CHECKOUT_URL,
- enterpriseCheckoutURL: process.env.ENTERPRISE_CHECKOUT_URL,
- cloudflareTurnstileSiteKey: process.env.CLOUDFLARE_TURNSTILE_SITE_KEY,
- pusherKey: process.env.PUSHER_KEY,
- pusherCluster: process.env.PUSHER_CLUSTER,
- },
-
- // Build Configuration: https://go.nuxtjs.dev/config-build
- build: {
- transpile: ['chart.js', 'vue-chartjs'],
- },
-
- server: {
- port: 3000,
- },
-}
diff --git a/web/nuxt.config.ts b/web/nuxt.config.ts
new file mode 100644
index 000000000..1ee80e734
--- /dev/null
+++ b/web/nuxt.config.ts
@@ -0,0 +1,202 @@
+// https://nuxt.com/docs/api/configuration/nuxt-config
+export default defineNuxtConfig({
+ compatibilityDate: '2025-01-01',
+
+ ssr: false,
+
+ modules: [
+ '@nuxt/eslint',
+ 'vuetify-nuxt-module',
+ '@pinia/nuxt',
+ '@nuxtjs/google-fonts',
+ '@nuxtjs/seo',
+ ],
+
+ googleFonts: {
+ families: {
+ Roboto: [100, 300, 400, 500, 700, 900],
+ },
+ display: 'swap',
+ download: true,
+ },
+
+ css: ['vuetify/styles'],
+
+ site: {
+ url: process.env.APP_URL || 'https://httpsms.com',
+ name: process.env.APP_NAME || 'httpSMS',
+ description:
+ 'Turn your Android phone into an SMS gateway. Send and receive text messages worldwide with a simple HTTP API — no SMS provider or short code required.',
+ defaultLocale: 'en',
+ },
+
+ // Authenticated app routes that should never appear in search engines or the
+ // sitemap. The marketing/blog/legal pages remain public and indexable.
+ robots: {
+ disallow: [
+ '/messages',
+ '/threads',
+ '/settings',
+ '/billing',
+ '/bulk-messages',
+ '/heartbeats',
+ '/phone-api-keys',
+ '/search-messages',
+ ],
+ },
+
+ sitemap: {
+ exclude: [
+ '/messages',
+ '/threads',
+ '/threads/**',
+ '/settings',
+ '/billing',
+ '/bulk-messages',
+ '/heartbeats/**',
+ '/phone-api-keys',
+ '/search-messages',
+ '/login',
+ ],
+ },
+
+ // The app ships as a client-rendered SPA (ssr: false) served statically, so
+ // runtime Satori OG-image generation is not available. Curated static OG
+ // images are set per page instead.
+ ogImage: {
+ enabled: false,
+ },
+
+ // Static download assets in /public are valid at runtime but are not Nuxt
+ // routes, so exclude them from link validation to avoid false positives.
+ linkChecker: {
+ excludeLinks: ['/templates/**'],
+ },
+
+ build: {
+ transpile: ['vuetify', 'chart.js', 'vue-chartjs', 'v-phone-input'],
+ },
+
+ vite: {
+ define: {
+ 'process.env.DEBUG': false,
+ },
+ optimizeDeps: {
+ include: [
+ '@mdi/js',
+ 'chartjs-adapter-moment',
+ 'date-fns',
+ 'firebase/app',
+ 'firebase/auth',
+ 'highlight.js/lib/core',
+ 'libphonenumber-js',
+ 'pusher-js',
+ 'qrcode',
+ ],
+ },
+ },
+
+ vuetify: {
+ vuetifyOptions: {
+ theme: {
+ defaultTheme: 'dark',
+ },
+ icons: {
+ defaultSet: 'mdi-svg',
+ },
+ },
+ },
+
+ runtimeConfig: {
+ public: {
+ apiBaseUrl: process.env.API_BASE_URL || 'http://localhost:8000',
+ clientVersion: process.env.GITHUB_SHA || 'dev',
+ appUrl: process.env.APP_URL || 'https://httpsms.com',
+ appName: process.env.APP_NAME || 'HTTP SMS',
+ appGithubUrl:
+ process.env.APP_GITHUB_URL || 'https://github.com/NdoleStudio/httpsms',
+ appDocumentationUrl:
+ process.env.APP_DOCUMENTATION_URL || 'https://docs.httpsms.com',
+ appDownloadUrl:
+ process.env.APP_DOWNLOAD_URL || 'https://apk.httpsms.com/HttpSms.apk',
+ appEnv: process.env.APP_ENV || 'production',
+ checkoutUrl: process.env.CHECKOUT_URL || '',
+ enterpriseCheckoutUrl: process.env.ENTERPRISE_CHECKOUT_URL || '',
+ cloudflareTurnstileSiteKey:
+ process.env.CLOUDFLARE_TURNSTILE_SITE_KEY || '',
+ pusherKey: process.env.PUSHER_KEY || '',
+ pusherCluster: process.env.PUSHER_CLUSTER || '',
+ firebaseApiKey: process.env.FIREBASE_API_KEY || '',
+ firebaseAuthDomain: process.env.FIREBASE_AUTH_DOMAIN || '',
+ firebaseProjectId: process.env.FIREBASE_PROJECT_ID || '',
+ firebaseStorageBucket: process.env.FIREBASE_STORAGE_BUCKET || '',
+ firebaseMessagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID || '',
+ firebaseAppId: process.env.FIREBASE_APP_ID || '',
+ firebaseMeasurementId: process.env.FIREBASE_MEASUREMENT_ID || '',
+ },
+ },
+
+ nitro: {
+ prerender: {
+ routes: [],
+ failOnError: false,
+ },
+ },
+
+ routeRules: {
+ '/messages': { robots: false },
+ '/threads': { robots: false },
+ '/threads/**': { robots: false },
+ '/settings': { robots: false },
+ '/billing': { robots: false },
+ '/bulk-messages': { robots: false },
+ '/heartbeats/**': { robots: false },
+ '/phone-api-keys': { robots: false },
+ '/search-messages': { robots: false },
+ },
+
+ app: {
+ head: {
+ titleTemplate: '%s',
+ title: 'Convert your android phone into an SMS gateway - httpSMS',
+ htmlAttrs: { lang: 'en' },
+ script: [
+ { src: '/integrations.js', async: true, defer: true },
+ {
+ src: 'https://lmsqueezy.com/affiliate.js',
+ async: true,
+ defer: true,
+ },
+ {
+ src: 'https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit',
+ },
+ ],
+ meta: [
+ { charset: 'utf-8' },
+ { name: 'viewport', content: 'width=device-width, initial-scale=1' },
+ {
+ name: 'description',
+ content:
+ 'Use your android phone to send and receive SMS messages using a simple HTTP API.',
+ },
+ { name: 'format-detection', content: 'telephone=no' },
+ { name: 'twitter:site', content: '@NdoleStudio' },
+ { name: 'twitter:card', content: 'summary_large_image' },
+ {
+ property: 'og:title',
+ content: 'Convert your android phone into an SMS gateway - httpSMS',
+ },
+ {
+ property: 'og:description',
+ content:
+ 'Use your android phone to send and receive SMS messages using a simple HTTP API.',
+ },
+ {
+ property: 'og:image',
+ content: 'https://httpsms.com/header.png',
+ },
+ ],
+ link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }],
+ },
+ },
+})
diff --git a/web/package.json b/web/package.json
index a92904884..bfec579c7 100644
--- a/web/package.json
+++ b/web/package.json
@@ -1,91 +1,66 @@
{
"name": "web",
- "version": "1.0.0",
+ "type": "module",
"private": true,
- "license": "AGPL-3.0-only",
"scripts": {
- "dev": "nuxt",
"build": "nuxt build",
- "start": "nuxt start",
+ "dev": "nuxt dev",
"generate": "nuxt generate",
- "lint:js": "eslint --ext \".js,.ts,.vue\" --ignore-path .gitignore .",
- "lint:style": "stylelint \"**/*.{css,scss,sass,html,vue}\" --ignore-path .gitignore",
+ "preview": "nuxt preview",
+ "postinstall": "nuxt prepare",
+ "prepare": "cd .. && husky web/.husky",
+ "api:models": "npx swagger-typescript-api generate -p ../api/docs/swagger.json -o ./shared/types -n api.ts --no-client",
+ "lint:js": "eslint .",
+ "lint:style": "stylelint \"**/*.{css,scss,sass,vue}\"",
"lint:prettier": "prettier --check .",
- "lint": "yarn lint:js && yarn lint:style && yarn lint:prettier",
- "lintfix": "prettier --write --list-different . && yarn lint:js --fix && yarn lint:style --fix",
- "api:models": "npx swagger-typescript-api generate -p ..\\api\\docs\\swagger.json -o ./models -n api.ts --no-client",
- "test": "jest"
+ "lint": "pnpm lint:js && pnpm lint:style && pnpm lint:prettier",
+ "lintfix": "prettier --write --list-different . && pnpm lint:js --fix && pnpm lint:style --fix",
+ "test": "echo 'No tests configured yet'"
},
"lint-staged": {
"*.{js,ts,vue}": "eslint --cache",
- "*.{css,scss,sass,html,vue}": "stylelint",
- "*.**": "prettier --check --ignore-unknown"
+ "*.{css,scss,sass,vue}": "stylelint",
+ "*": "prettier --check --ignore-unknown"
},
"dependencies": {
"@mdi/js": "^7.4.47",
- "@nuxtjs/dotenv": "^1.4.2",
- "@nuxtjs/firebase": "^8.2.2",
- "@nuxtjs/sitemap": "^2.4.0",
- "chart.js": "^4.5.0",
+ "@nuxtjs/google-fonts": "^3.2.0",
+ "@pinia/nuxt": "^0.11.3",
+ "chart.js": "^4.5.1",
"chartjs-adapter-moment": "^1.0.1",
- "core-js": "^3.45.1",
- "date-fns": "^2.30.0",
- "dotenv": "^17.2.1",
- "firebase": "^10.14.1",
- "firebaseui": "^6.1.0",
- "jest-environment-jsdom": "^30.2.0",
- "libphonenumber-js": "^1.12.9",
+ "date-fns": "^4.3.0",
+ "firebase": "^12.13.0",
+ "flag-icons": "^7.5.0",
+ "highlight.js": "^11.11.1",
+ "libphonenumber-js": "^1.13.3",
"moment": "^2.30.1",
- "nuxt": "^2.18.1",
- "nuxt-highlightjs": "^1.0.3",
- "pusher-js": "^8.4.0",
- "qrcode": "^1.5.0",
- "ufo": "^1.6.1",
- "vue": "^2.7.16",
- "vue-chartjs": "^5.3.2",
- "vue-class-component": "^7.2.6",
- "vue-glow": "^1.4.2",
- "vue-property-decorator": "^9.1.2",
- "vue-router": "^3.6.5",
- "vue-server-renderer": "2.7.16",
- "vue-template-compiler": "^2.7.16",
- "vuetify": "^2.7.2",
- "vuex": "^3.6.2",
- "webpack": "^5.102.0"
+ "nuxt": "^4.5.1",
+ "pinia": "^3.0.4",
+ "prettier": "^3.8.4",
+ "pusher-js": "^8.5.0",
+ "qrcode": "^1.5.4",
+ "sass": "^1.100.0",
+ "v-phone-input": "^7.0.0",
+ "vue": "^3.5.34",
+ "vue-chartjs": "^5.3.3",
+ "vue-router": "^5.0.7",
+ "vuetify": "^4.0.7"
},
"devDependencies": {
- "@babel/eslint-parser": "^7.27.5",
- "@commitlint/cli": "^20.1.0",
- "@commitlint/config-conventional": "^19.8.0",
- "@nuxt/types": "^2.18.1",
- "@nuxt/typescript-build": "^3.0.2",
- "@nuxtjs/eslint-config-typescript": "^12.1.0",
- "@nuxtjs/eslint-module": "^4.1.0",
- "@nuxtjs/stylelint-module": "^5.2.0",
- "@nuxtjs/vuetify": "^1.12.3",
- "@types/qrcode": "^1.5.5",
- "@vue/test-utils": "^1.3.6",
- "axios": "^0.30.2",
- "babel-core": "7.0.0-bridge.0",
- "babel-jest": "^30.2.0",
- "eslint": "^8.57.1",
+ "@commitlint/cli": "^21.0.2",
+ "@commitlint/config-conventional": "^21.0.2",
+ "@nuxt/eslint": "^1.16.0",
+ "@nuxtjs/seo": "^5.3.2",
+ "@types/qrcode": "^1.5.6",
+ "eslint": "^10.5.0",
"eslint-config-prettier": "^10.1.8",
- "eslint-plugin-nuxt": "^4.0.0",
- "eslint-plugin-vue": "^9.33.0",
- "highlight.js": "^11.11.1",
- "jest": "^30.2.0",
- "lint-staged": "^16.1.4",
- "node-fetch-native": "^1.6.7",
- "postcss-html": "^1.7.0",
- "prettier": "3.6.2",
- "stylelint": "^15.11.0",
- "stylelint-config-prettier": "^9.0.5",
- "stylelint-config-recommended-vue": "^1.5.0",
- "stylelint-config-standard": "^34.0.0",
- "ts-jest": "^29.4.4",
- "vue-client-only": "^2.1.0",
- "vue-jest": "^3.0.7",
- "vue-meta": "^2.4.0",
- "vue-no-ssr": "^1.1.1"
+ "husky": "^9.1.7",
+ "lint-staged": "^17.0.8",
+ "postcss-html": "^1.8.1",
+ "stylelint": "^17.13.0",
+ "stylelint-config-recommended-vue": "^1.6.1",
+ "stylelint-config-standard": "^40.0.0",
+ "typescript": "^5.9.3",
+ "vuetify-nuxt-module": "^0.19.5"
}
}
diff --git a/web/pages/billing/index.vue b/web/pages/billing/index.vue
deleted file mode 100644
index d17b7c9af..000000000
--- a/web/pages/billing/index.vue
+++ /dev/null
@@ -1,545 +0,0 @@
-
-
-
-
-
- {{ mdiArrowLeft }}
-
-
- Account Usage
-
-
-
-
-
-
- Current Plan
-
-
-
-
-
-
- {{ plan.name }}
- {{ plan.name }} →
- Free
- {{ plan.name }}
-
-
- Your next bill is for ${{ plan.price }} on
- {{
- new Date(
- $store.getters.getUser.subscription_renews_at,
- ).toLocaleDateString()
- }}
-
-
- You are on the life time plan which costs
- ${{ plan.price }}
-
-
- You will be downgraded to the FREE plan on
- {{
- new Date(
- $store.getters.getUser.subscription_ends_at,
- ).toLocaleDateString()
- }}
-
-
- {{ totalMessages }}/{{ plan.messagesPerMonth }} messages
-
-
-
-
- Update Plan
-
- Upgrade Plan
-
-
-
-
- Cancel Plan
-
-
-
-
-
- Are you sure you want to cancel your subscription?
-
-
- You will be downgraded to the free plan at the end
- of the current billing period on
- {{
- new Date(
- $store.getters.getUser.subscription_renews_at,
- ).toLocaleDateString()
- }}
-
-
-
-
- Keep Subscription
-
-
-
- Cancel Plan
-
-
-
-
-
-
-
-
-
- Upgrade Plan
-
-
-
-
-
-
-
-
- Pro - Monthly
-
- 5,000 messages monthly
-
-
- $10 /month
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pro - Yearly
- 2 months free
-
- 5,000 messages monthly
-
-
- $100 /year
-
-
-
-
-
-
-
-
-
-
-
-
-
- 100k - Monthly
-
-
- 100,000 messages monthly
-
-
-
- $175 /month
-
-
-
-
-
-
-
- Overview
-
- This is the summary of the sent messages and received messages in
- {{
- $store.getters.getBillingUsage.start_timestamp | billingPeriod
- }}.
-
-
-
-
-
- {{ $store.getters.getBillingUsage.sent_messages | decimal }}
-
- Messages Sent
-
-
-
-
-
-
- {{
- $store.getters.getBillingUsage.received_messages
- | decimal
- }}
-
-
- Messages Received
-
-
-
-
-
- {{ $store.getters.getBillingUsage.total_cost | money }}
-
- Total Cost
-
-
-
- Usage History
-
- Summary of all the sent and received messages in the past 12
- months
-
-
-
-
-
- Period
-
- Sent
- Messages
-
-
- Received
- Messages
-
-
- Total Cost
-
-
-
-
-
-
- {{ billingUsage.start_timestamp | billingPeriod }}
-
-
- {{ billingUsage.sent_messages | decimal }}
-
-
- {{ billingUsage.received_messages }}
-
-
- {{ billingUsage.total_cost | money }}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/blog/forward-incoming-sms-from-phone-to-webhook.vue b/web/pages/blog/forward-incoming-sms-from-phone-to-webhook.vue
deleted file mode 100644
index 18ecb2841..000000000
--- a/web/pages/blog/forward-incoming-sms-from-phone-to-webhook.vue
+++ /dev/null
@@ -1,195 +0,0 @@
-
-
-
-
-
-
- How to forward a text message (SMS) from an android phone into your
- webhook
-
-
- {{ postDate }}
- • {{ readTime }}
-
-
- You can now program your android phone to forward messages received on
- your phone to your server and trigger powerful automations with tools
- like Zapier and IFTTT. I created an open source application called
- httpSMS
- that helps you to set this up with ease
-
- Step 1: Get your API_KEY
-
- Create an account on the httpSMS web application and copy your API key
- from the settings page.
- https://httpsms.com/settings
-
-
-
-
- Step 2: Install the httpSMS android app
-
- Install the
- httpSMS
- android app on your phone and sign in using your API KEY which you
- copied above. This app listens for SMS messages received on your
- android phone. 👉
- https://github.com/NdoleStudio/httpsms/releases/latest/download/HttpSms.apk
-
-
- Step 3: Set up a webhook
-
- Once the application has been installed, it will be listening for SMS
- messages received on the android phone. You can configure the
- application to sent this SMS message to your server URL using a
- webhook. You can configure this URL under the settings page in the
- httpSMS application
- https://httpsms.com/settings
-
-
-
-
- Conclusion
-
- Congratulations, you have successfully set up SMS forwarding from your
- Android phone to a webhook! This powerful automation tool can help you
- streamline your business workflow and save you time and effort.
-
-
- You can also trigger the httpSMS application to send an SMS a simple
- API. You can find more information on the documentation page at
- https://docs.httpsms.com
-
- Until the next time✌️
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/blog/grant-send-and-read-sms-permissions-on-android.vue b/web/pages/blog/grant-send-and-read-sms-permissions-on-android.vue
deleted file mode 100644
index 72540fa06..000000000
--- a/web/pages/blog/grant-send-and-read-sms-permissions-on-android.vue
+++ /dev/null
@@ -1,144 +0,0 @@
-
-
-
-
-
- How to grant SMS permissions on Android 15+
-
-
- {{ postDate }}
- • {{ readTime }}
-
-
- In Android 15 (Vanilla Ice Cream), the
- android.permission.SEND_SMS and
- android.permission.RECEIVE_SMS permissions are now hard
- restricted and cannot be granted
- via the runtime permissions interface .
-
-
-
- Granting the SEND_SMS and
- RECEIVE_SMS permissions will allow an Android app to be
- able to read and send SMS messages on your phone. Make sure you trust
- the application before allowing these permissions.
-
- Step1: Open App Info
-
- Long press the icon of the android app which you want to grant the
- permission and select "App info"
-
-
- Step 2: Allow Restricted Permissions
-
- On the App Info page, click on the menu button
- {{ mdiDotsVertical }} and select the
- "Allow restricted settings" option
-
-
- Step 3: Allow SMS Permissions
-
- Once you have allowed the restricted settings from step 2 above, You
- can navigate to Permissions ➡️ SMS and tap the Allow button to
- grant SMS permissions to the android app.
-
-
- Conclusion
-
- Congratulations, you have successfully configured SMS permissions on
- your Android app. Don't hesitate to contact us if you face any
- problems while following this guide.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/blog/how-to-send-sms-messages-from-excel.vue b/web/pages/blog/how-to-send-sms-messages-from-excel.vue
deleted file mode 100644
index 9890d377c..000000000
--- a/web/pages/blog/how-to-send-sms-messages-from-excel.vue
+++ /dev/null
@@ -1,208 +0,0 @@
-
-
-
-
-
- How to send SMS messages to multiple phone numbers from Excel
-
-
- {{ postDate }}
- • {{ readTime }}
-
-
- Send personalized SMS messages to multiple phone numbers for less than
- $0.002 per SMS message. You can also configure every SMS
- message in your Excel spreadsheet so they are unique for each
- recipient phone number.
-
- Prerequisites
-
- Basic understanding of Microsoft Excel or Google Sheets.
- An Android phone.
-
- Step 1: Get your API Key
-
- Create an account on
- httpsms.com
- and copy your API key from the settings page
- https://httpsms.com/settings
-
-
-
-
-
- Step 2: Install the httpSMS android app
-
-
- ⬇️ Download and install
- the httpSMS android app on your phone and sign in using your API KEY
- which you copied above. This app listens for SMS messages received on
- your android phone.
-
-
- Make sure to enter your phone number in the international format e.g
- +18005550199 when authenticating with the httpSMS Android app.
-
-
- Step 3: Edit your Excel file
-
- Download the
- httpSMS Excel file template
- and edit it with your favorite spreadsheet software e.g Excel, Google
- Sheets, Open Office etc. Fill in the phone number which you registered
- in httpSMS in the FromPhoneNumber column and fill in the
- number of the recipient of the SMS in the
- ToPhoneNumber column. Also add the SMS which you want to
- send in the message in the Content column.
-
-
- Make sure to use the correct FromPhoneNumber from step 2
- above in your Excel file
-
-
- Step 3: Send the SMS Messages
-
- Visit the
- {{
- mdiCommentTextMultipleOutline
- }}
- Bulk Messages
- page on httpSMS and upload your Excel file and send the your SMS
- messages.
-
-
-
-
-
- Don't hesitate to
- contact us
- if you face any issues sending bulk SMS messages from your Excel files
- by following this tutorial.
-
- Until the next time✌️
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/blog/index.vue b/web/pages/blog/index.vue
deleted file mode 100644
index 992837b03..000000000
--- a/web/pages/blog/index.vue
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
-
-
-
-
- Blog
-
- Learn more about httpSMS through our blog!
-
-
-
-
-
-
-
-
- {{
- post.title
- }}
-
- {{
- post.date
- }}
- • {{ post.readTime }}
-
-
-
- {{ post.description }}
-
-
-
-
-
-
-
{{ post.authorName }}
-
- {{
- mdiTwitter
- }}
- {{ mdiGithub }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/blog/send-bulk-sms-from-csv-file-with-no-code.vue b/web/pages/blog/send-bulk-sms-from-csv-file-with-no-code.vue
deleted file mode 100644
index 76a81a0bd..000000000
--- a/web/pages/blog/send-bulk-sms-from-csv-file-with-no-code.vue
+++ /dev/null
@@ -1,217 +0,0 @@
-
-
-
-
-
- Send multiple SMS messages from a CSV file with no code
-
-
- {{ postDate }}
- • {{ readTime }}
-
-
- Send personalized SMS messages to your users in bulk using your
- Android phone. The good news is, you don't have to write a single
- piece of code, just upload your CSV file and we will take care of the
- rest.
-
- What is a CSV file
-
- CSV is an abbreviation for comma-separated values. A CSV file allows
- data to be saved in a table structured format using a comma
- , to separate the various cells of a table and a new line
- to separate the various rows in the table. CSV files can be used with
- any spreadsheet program, such as Microsoft Excel, Open Office Calc, or
- Google Sheets.
-
- Prerequisites
-
- Basic understanding of CSV files.
- An Android phone.
-
- Step 1: Get your API Key
-
- Create an account on
- httpsms.com
- and copy your API key from the settings page
- https://httpsms.com/settings
-
-
-
-
-
- Step 2: Install the httpSMS android app
-
-
- ⬇️ Download and install
- the httpSMS android app on your phone and sign in using your API KEY
- which you copied above. This app listens for SMS messages received on
- your android phone.
-
-
- Make sure to enter your phone number in the international format e.g
- +18005550199 when authenticating with the httpSMS Android app.
-
-
- Step 3: Edit your CSV file
-
- Download the
- httpSMS CSV file template
- and edit it with your favorite spreadsheet software e.g Excel, Google
- Sheets or even a text editor like notepad. Fill in the phone number
- which you registered in httpSMS in the
- FromPhoneNumber column and fill in the number of the
- recipient of the SMS in the ToPhoneNumber column. Also
- add the SMS which you want to send in the message in the
- Content column.
-
-
- Make sure to use the correct FromPhoneNumber from step 2
- above in your CSV file
-
-
- Step 3: Send the SMS Messages
-
- Visit the
- {{
- mdiCommentTextMultipleOutline
- }}
- Bulk Messages
- page on httpSMS and upload your CSV file and send the your SMS
- messages.
-
-
-
-
-
- Don't hesitate to
- contact us
- if you face any issues sending bulk SMS messages from your CSV files
- by following this tutorial.
-
- Until the next time✌️
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/blog/send-sms-from-android-phone-with-python.vue b/web/pages/blog/send-sms-from-android-phone-with-python.vue
deleted file mode 100644
index e01532a0f..000000000
--- a/web/pages/blog/send-sms-from-android-phone-with-python.vue
+++ /dev/null
@@ -1,234 +0,0 @@
-
-
-
-
-
-
- Send an SMS from your Android phone with Python
-
-
- {{ postDate }}
- • {{ readTime }}
-
-
- In an era dominated by social media, instant messaging apps, and
- ever-evolving communication technologies, it's easy to overlook the
- humble yet remarkably resilient Short Message Service (SMS). Since its
- inception in the 1990s, SMS has stood the test of time, remaining one
- of the most widely used and reliable means of mobile communication.
-
-
- Whether you're a business owner looking to optimize your communication
- strategy, a developer seeking to integrate SMS functionality into your
- applications, or simply intrigued by the enduring charm of SMS, this
- article will explain how to setup your Android phone to send SMS
- messages.
-
- Prerequisites
-
- Basic understanding of Python.
- An Android phone.
-
- Python
- installed on your computer.
-
-
- Step 1: Get your API Key
-
- Create an account on
- httpsms.com
- and copy your API key from the settings page
- https://httpsms.com/settings
-
-
-
-
-
- Step 2: Install the httpSMS android app
-
-
- ⬇️ Download and install
- the httpSMS android app on your phone and sign in using your API KEY
- which you copied above. This app listens for SMS messages received on
- your android phone.
-
-
- Make sure to enter your phone number in the international format e.g
- +18005550199 when authenticating with the httpSMS Android app.
-
-
- Step 3: Writing the code
-
- Now that you have setup your android phone correctly on httpSMS, you
- can write the python code below in a new file named
- send_sms.py. This code will send and SMS and after
- running the script via your Android phone to the recipient phone
- number specified in the payload.
-
-
- Make sure to use the correct api_key from step 1 and also
- use the correct to and from phone numbers in
- the payload variable.
-
-
-import requests
-import json
-
-api_key = "" # Get API Key from https://httpsms.com/settings
-
-url = 'https://api.httpsms.com/v1/messages/send'
-
-headers = {
- 'x-api-key': api_key,
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
-}
-
-payload = {
- "content": "This is a sample text message sent via python",
- "from": "+18005550199", # This is the phone number of your android phone */
- "to": "+18005550100" # This is the recipient phone number */
-}
-
-response = requests.post(url, headers=headers, data=json.dumps(payload))
-
-print(json.dumps(response.json(), indent=4))
-
-
-
- Run the code above with the command
- python send_sms.py and check the phone specified in the
- to field of the payload to verify that the
- message has been received successfully.
-
-
- Conclusion
-
- Congratulations, you have successfully configured your android phone
- to send SMS messages via python. You can now reuse this code to send
- SMS messages from your python applications.
-
-
- If you are also interested in forwarding incoming SMS from your
- android phone to your server, checkout our
- SMS forwarding guide.
-
- Until the next time✌️
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier.vue b/web/pages/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier.vue
deleted file mode 100644
index c502662bd..000000000
--- a/web/pages/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier.vue
+++ /dev/null
@@ -1,242 +0,0 @@
-
-
-
-
-
- Send an SMS message when a new row is added to Google Sheets using
- Zapier
-
-
- {{ postDate }}
- • {{ readTime }}
-
-
- Automate sending personalized SMS messages each time a new row is
- added to your Google Sheets document using Zapier. You don't need to
- write any code to make this happen and you can personalize the SMS
- messages which are sent out.
-
- Prerequisites
-
- Basic understanding of Google Sheets.
- Basic understanding of Zapier.
-
- An account on
- httpsms.com
-
-
- Step 1: Create trigger on Zapier
-
- Create a new Zap on Zapier and select Google Sheets as the trigger.
- The event name should be "New Spreadsheet Row" if you want to
- send an SMS message every time a new row is added to your Google
- Sheets document.
-
-
-
-
-
- On the Zap, select the Spreadsheet which you have on google
- drive and make sure to select the correct Worksheet .
-
-
- In the sample spreadsheet below, we are mimicking an e-commerce store.
- The first column contains the name of the customer, the second column
- is the name of the product which was bought and the third column is
- the phone number of the customer who made the purchase. You can use
- your own custom spreadsheet with your own set of columns.
-
-
-
-
- Step 2: Create an action on Zapier
-
- An action is what happens after the trigger. In this case, we want to
- send an SMS message to the customer who made the purchase. Select
- Webhooks By Zapier as the action app and select
- Custom Request as the action event.
-
-
-
-
-
- On the Action section in Zapier, set the Method to
- Post. Set the URL to
- https://api.httpsms.com/v1/messages/send. Set the `Data
- Pass-Through` to false. In the Data field, add the
- following JSON payload.
-
-
-
-{
- "content": "Hello [Name]\nThanks for ordering [Product] via our shopify store. Your order will be shipped today!",
- "from": "+18005550199",
- "to": "[ToPhoneNumber]"
-}
-
-
-
- In the JSON message above, we are mimicking an e-commerce store. The
- [Name] variable contains the name of the customer on the
- spreadsheet. [Product] contains the name of the product
- which was bought and [ToPhoneNumber] contains the phone
- number of the customer who made the purchase. You can use your own
- custom message with your own set of variables according to your
- spreadsheet. Change the from field to the phone number
- which you registered on httpsms.com.
-
-
- On the headers section add a new header called
- x-api-key and the value of this header should be your API
- key on
- httpsms.com
- and you can copy your API key from the settings pagehttps://httpsms.com/settings .
-
-
- Also add a new header called Content-Type and the value
- of this header should be application/json
-
-
- The final configuration of the action should look like the screenshot
- below.
-
-
-
-
-
- Conclusion
-
- Publish your zap and you will automatically trigger httpsms to send an
- SMS to your customer when ever you add a new row in the google sheet.
- Don't hesitate to
- contact us
- if you face any issues configuring your zap to send SMS messages from
- your Google Sheets by following this tutorial.
-
- Until the next time✌️
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/bulk-messages/index.vue b/web/pages/bulk-messages/index.vue
deleted file mode 100644
index 5b8f20111..000000000
--- a/web/pages/bulk-messages/index.vue
+++ /dev/null
@@ -1,180 +0,0 @@
-
-
-
-
-
- {{ mdiArrowLeft }}
-
-
- Bulk Messages
-
-
-
-
-
-
- Bulk Messages
-
- Fill in our bulk SMS
- CSV template
- or our
- Excel template
- and upload it here to send your SMS messages to multiple
- recipients at once.
-
-
- {{ errorTitle }}
-
-
-
-
-
-
- {{ mdiSendCheck }}
- Send Bulk Messages
-
-
-
- I Need Help
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/heartbeats/_id.vue b/web/pages/heartbeats/_id.vue
deleted file mode 100644
index 6a53816ef..000000000
--- a/web/pages/heartbeats/_id.vue
+++ /dev/null
@@ -1,250 +0,0 @@
-
-
-
-
-
- {{ mdiArrowLeft }}
-
- Heartbeats
- {{ mdiCircle }}
- {{
- $store.getters.getOwner | phoneNumber
- }}
-
-
-
-
-
- Every 15 minutes, the httpSMS app on your Android phone sends a
- heartbeat event to the httpsms API to show that it is alive. The
- reason for this is because the Android operating system sometimes
- kills an application to save battery
- https://dontkillmyapp.com .
-
-
- If httpSMS doesn't get any heartbeat event in a 1-hour interval,
- you will get an email notification about it so you can check if
- there is an issue with your Android phone.
-
-
-
-
-
-
-
- The table below shows the last 100 heartbeat events received from
- the httpSMS app on your Android phone.
-
-
-
- {{ formatDuration(item.interval) }}
-
-
- {{ item.owner | phoneNumber }}
-
-
- {{ item.timestamp | timestamp }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/index.vue b/web/pages/index.vue
deleted file mode 100644
index 3889e88d2..000000000
--- a/web/pages/index.vue
+++ /dev/null
@@ -1,1146 +0,0 @@
-
-
-
-
-
-
-
- Save money by using your
- phone to send and receive SMS messages via a simple programmable API
- with end-to-end encryption.
-
-
-
- {{
- mdiSend
- }}
- Get Started
-
-
-
- {{ mdiCreation }}
-
- Live Demo
-
-
-
- ⚡Trusted by 13,195+ happy users who have sent or received
- more than 5,263,593+ messages.
-
-
-
- {{ mdiCheckCircle }}
-
- Free to use
-
- {{ mdiCheckCircle }}
-
- 100% Open Source
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Bulk SMS
-
- {{ mdiLabel }}
- No code
-
-
-
- Fill in our bulk SMS
- CSV template
- or our
- excel template
- and upload it on httpSMS to send SMS messages to up to 1,000
- recipients at once without writing any code.
-
-
- {{ mdiMicrosoftExcel }}
- Integration Guide
-
-
-
-
-
-
-
-
-
-
-
- Integrations
-
- {{ mdiLabel }}
- No code
-
-
-
- Connect your workflow with thousands of other apps with the
- power of Zapier. For example you can setup an automation to send
- personalized SMS messages each time someone makes an order from
- your shopify store or each time a new row is added to a Google
- spreadsheet.
-
-
- Zapier Integration Guide
-
-
-
-
-
-
-
-
-
-
-
Webhooks
-
- If you want to build advanced integrations, we support callback
- URLs. The httpSMS platform can forward SMS messages received on
- your Android phone to your server using a callback URL which you
- provide.
-
-
- {{ mdiWebhook }}
- Documentation
-
-
-
-
-
-
-
-
-
-
-
Control Sending
-
- Send SMS messages without going over your mobile carrier
- limitations. If you set a rate e.g 3 messages per minute, we
- will queue up your messages and send them at a rate of 1 message
- per 20 seconds.
-
-
- {{ mdiArrowRightThin }} Documentation
-
-
-
-
-
-
-
-
-
-
-
Monitoring
-
- If your android phone goes offline for some reason and it can't
- send SMS messages, we will send you a notification immediately.
-
-
-
-
-
-
-
-
-
-
-
Open Source
-
- httpSMS is transparent and fully open source. The source code is
- available on GitHub. Feel free to fork it, verify it or submit a
- pull request.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Encryption 🔐
-
- Take control of your privacy with our end-to-end encrypted SMS
- feature. Safeguard your messages from prying eyes, ensuring
- absolute confidentiality using the military grade
- AES-256 encryption
- algorithm.
-
-
Setup end-to-end encryption
-
-
-
-
-
-
-
-
-
-
Multiple Phones
-
- Setup the httpSMS gateway Android app on multiple phones
- independently and securely without sharing data under one
- account by creating unique phone API keys.
-
-
- {{ mdiCellphoneKey }} Documentation
-
-
-
-
-
-
-
-
-
-
-
Schedule Text Messages
-
- Control when your SMS will reach your recipients, allowing you
- to perfectly time promotions, critical alerts etc by scheduling
- your messages in advance.
-
- {{ mdiClockOutline }} Documentation
-
-
-
-
-
-
-
-
-
-
-
- Get Started
-
-
-
-
-
-
-
-
-
- Step 1
-
-
- Create an account
-
- on httpsms.com and obtain you API key on the settings
- page.
-
-
-
-
-
- Step 2
-
- Download
- and install the companion android application on your
- phone and sign in using your API Key.
-
-
-
-
-
- Step 3
-
- Start sending and receiving SMS messages using our rich
- HTTP API. You can find the documentation on
-
- {{ $store.getters.getAppData.documentationUrl }}
-
-
-
-
-
-
-
-
-
-
- {{
- mdiLanguageJavascript
- }}
- Javascript
-
-
- {{
- mdiLanguagePhp
- }}
- PHP
-
-
- {{
- mdiLanguagePython
- }}
- Python
-
-
- {{
- mdiLanguageGo
- }}
- Go
-
-
- {{
- mdiLanguageJava
- }}
- Java
-
-
- {{
- mdiPowershell
- }}
- cURL
-
-
- {{
- mdiLanguageCsharp
- }}
- c-sharp
-
-
-
-
-
-import HttpSms from 'httpsms'
-
-const client = new HttpSms('' /* Get the API Key from https://httpsms.com/settings */);
-
-client.messages.postSend({
- content: 'This is a sample text message',
- from: '+18005550199', // Put the correct phone number here
- to: '+18005550100', // Put the correct phone number here
-})
-.then((message) => {
- console.log(message.id); // log the ID of the sent message
-})
-
-
-
-
-
-<?php
-$apiKey = "Get API Key from https://httpsms.com/settings";
-
-$options = array(
- 'http' => array(
- 'method' => 'POST',
- 'content' => json_encode( [
- 'content' => 'This is a sample text message',
- 'from' => "+18005550199", // Put the correct phone number here
- 'to' => "+18005550100" // Put the correct phone number here
- ]),
- 'header'=> "Content-Type: application/json\r\n" .
- "Accept: application/json\r\n" .
- "x-api-key: $apiKey\r\n"
- )
-);
-
-$context = stream_context_create( $options );
-$result = file_get_contents( "https://api.httpsms.com/v1/messages/send", false, $context );
-
-echo $result;
-
-
-
-
-
-import requests
-import json
-
-api_key = "Get API Key from https://httpsms.com/settings"
-
-url = 'https://api.httpsms.com/v1/messages/send'
-
-headers = {
- 'x-api-key': api_key,
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
-}
-
-payload = {
- "content": "This is a sample text message",
- "from": "+18005550199",
- "to": "+18005550100"
-}
-
-response = requests.post(url, headers=headers, data=json.dumps(payload))
-
-print(json.dumps(response.json(), indent=4))
-
-
-
-
-
-import "github.com/NdoleStudio/httpsms-go"
-
-client := htpsms.New(htpsms.WithAPIKey(/* API Key from https://httpsms.com/settings */))
-
-client.Messages.Send(context.Background(), &httpsms.MessageSendParams{
- Content: "This is a sample text message",
- From: "+18005550199",
- To: "+18005550100",
-})
-
-
-
-
-
-var client = HttpClient.newHttpClient();
-var apiKey = "Get API Key from https://httpsms.com/settings";
-
-var payload = """
- {
- "content": "This is a sample text message",
- "from": "+18005550199",
- "to": "+18005550100"
- }
- """;
-
-var request = HttpRequest.newBuilder()
- .uri(URI.create("https://api.httpsms.com/v1/messages/send"))
- .header("accept", "application/json")
- .header("Content-Type", "application/json")
- .header("x-api-key", apiKey)
- .POST(HttpRequest.BodyPublishers.ofString(payload))
- .build();
-
-var response = client.send(request, HttpResponse.BodyHandlers.ofString());
-System.out.println(response.body());
-
-
-
-
-
-curl --location --request POST 'https://api.httpsms.com/v1/messages/send' \
---header 'x-api-key: Get API Key from https://httpsms.com/settings' \
---header 'Content-Type: application/json' \
---data-raw '{
- "from": "+18005550199",
- "to": "+18005550100",
- "content": "This is a sample text message"
-}'
-
-
-
-
-
-var client = new HttpClient();
-client.DefaultRequestHeaders.Add("x-api-key", ""/* Get API Key from https://httpsms.com/settings */);
-
-var response = await client.PostAsync(
- "https://api.httpsms.com/v1/messages/send",
- new StringContent(
- JsonSerializer.Serialize(new {
- from = "+18005550199",
- To = "+18005550100",
- Content = "This is a sample text message",
- }),
- Encoding.UTF8,
- "application/json"
- )
-);
-
-Console.WriteLine(await response.Content.ReadAsStringAsync());
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pricing
-
-
- Most of the httpSMS features are completely
- free but if you want a little
- extra, you can go pro
-
-
-
Monthly
-
-
- Yearly
-
-
- {{ mdiGift }}
-
- 2 months free
-
-
-
-
-
-
-
-
- {{ pricingLabels[pricing] }}
-
-
-
-
-
-
-
-
- Free
-
- Try sending and receiving SMS on your hobby websites and
- experiments.
-
-
- $0
-
- No credit card required
- Get Started
-
- {{
- mdiCheckCircle
- }} Send or receive up to 200 SMS/month
-
-
-
- {{ mdiCheckCircle }} Offline notifications for your phone
-
-
- {{
- mdiCheckCircle
- }} Forward received messages via webhook
-
-
- {{
- mdiCheckCircle
- }} Basic email support
-
-
-
-
-
-
-
- Pro
-
- Send and receive more SMS messages like a pro with advanced
- features.
-
-
- $10 /month
-
-
- $100 /year
-
-
- or $100 per year
-
-
- or $8.33 per month
-
- Try For Free
-
- {{
- mdiCheckCircle
- }} Send or receive up to 5,000 SMS/month
-
-
-
- {{ mdiCheckCircle }} Offline notifications for your phone
-
-
- {{
- mdiCheckCircle
- }} Forward received messages via webhook
-
-
- {{
- mdiCheckCircle
- }} Priority support
-
-
-
-
-
-
-
-
- {{ pricingLabels[pricing] }} Plan
-
-
- Send and receive up to {{ planMessages }} SMS messages like a
- power user.
-
-
- ${{ planMonthlyPrice }} /month
-
-
- ${{ planYearlyPrice }} /year
-
-
- or ${{ planYearlyPrice }} per year
-
-
- or ${{ planYearlyMonthlyPrice }} per month
-
- Try For Free
-
- {{
- mdiCheckCircle
- }} Send or receive up to
- {{ pricingLabels[pricing] }} SMS/month
-
-
-
- {{ mdiCheckCircle }} Offline notifications for your phone
-
-
- {{
- mdiCheckCircle
- }} Forward received messages via webhook
-
-
- {{
- mdiCheckCircle
- }} Priority support
-
-
-
-
-
-
-
-
- Feel free to contact us if
- you need a bigger plan, or if you want us to install the httpSMS
- API on your dedicated server. If would still like to support us,
- please donate via
- GitHub Sponsors
- ❤️
-
-
-
-
-
-
-
-
-
-
-
-
- "httpSMS is free platform which transforms your phone into an
- sms server! It has no hard limit also. It is an
- innovative idea, I have not seen such tech before. If you
- have an sms active pack in your phone then good to go
- with httpSMS."
-
-
-
-
-
-
-
-
-
- "Outstanding product . Literally have been using this for
- years since we don't have an sms gateways that can handle http
- requests costing less than 50 cent per sms in my Country.
- Love the product and the support! Great work Arnold!"
-
-
-
-
-
-
-
- Frequently Asked Questions
-
- If you still cannot find the answer to your question,
- send us an email or ask in
- our Discord channel.
-
-
-
-
-
-
-
-
- Can I install the app on my Iphone?
-
- {{ mdiMinus }}
- {{ mdiPlus }}
-
-
-
-
- The httpSMS application works only on Android phones at the
- moment since Apple doesn't allow you to install a custom SMS
- messaging app.
-
-
-
-
-
- What's the minimum supported Android version?
-
- {{ mdiMinus }}
- {{ mdiPlus }}
-
-
-
-
- The httpSMS Android app works from Android 9 (Pie) and above.
- So you can install the application on your old Android phone
- which you don't use anymore.
-
-
-
-
-
- Can I send unlimited number of messages per month?
-
- {{ mdiMinus }}
- {{ mdiPlus }}
-
-
-
-
- We do have packages that allow up to 100,000 SMS messages per
- month but you can can
- send us an email if
- you will like to send more messages so we create a custom plan
- just for you.
-
-
-
-
-
- Can I change the sender of the SMS message
-
- {{ mdiMinus }}
- {{ mdiPlus }}
-
-
-
-
- No you cannot. When you send an SMS message using the httpSMS
- app it uses your SIM card to send the message so the recipient
- will see your phone number as the sender of the SMS. You
- cannot use your brand name as the sender ID.
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/login.vue b/web/pages/login.vue
deleted file mode 100644
index 0012028f7..000000000
--- a/web/pages/login.vue
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
- Welcome
-
-
- Join 13,195+ happy users who have sent or
-
- received more than 5,263,593+ SMS messages
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/messages/index.vue b/web/pages/messages/index.vue
deleted file mode 100644
index a1a2a1541..000000000
--- a/web/pages/messages/index.vue
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
-
- {{ mdiArrowLeft }}
-
- New Message
- {{ mdiCircle }}
- {{ $store.getters.getOwner | phoneNumber }}
-
-
-
-
-
-
-
-
- {{ mdiSend }}
- Send Message
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/phone-api-keys/index.vue b/web/pages/phone-api-keys/index.vue
deleted file mode 100644
index dc19e75c4..000000000
--- a/web/pages/phone-api-keys/index.vue
+++ /dev/null
@@ -1,483 +0,0 @@
-
-
-
-
-
- {{ mdiArrowLeft }}
-
-
- Phone API Keys
-
-
-
-
-
-
-
-
-
Phone API Keys
-
- {{ mdiPlus }}
- Create API Key
-
-
-
- Create Phone API Key
- After creating the API key you can use it to login to the
- httpSMS Android app on your phone
-
-
-
-
-
-
- Create Key
-
- Close
-
-
-
-
- Documentation
-
-
- If you have multiple phones, you can create a unique phone API
- keys for your different Android phones. These API keys can only be
- used on the specific mobile phone when it calls the httpSMS server
- for specific actions like sending heartbeats, registering received
- messages, delivery reports etc. If you want to interact with the
- full
- httpSMS API , use the API key under your account settings page instead
- https://httpsms.com/settings .
-
-
-
-
-
- Name
- Created At
- Phone Numbers
- Actions
-
-
-
-
-
- {{ phoneApiKey.name }}
-
- {{ phoneApiKey.created_at | timestamp }}
-
-
-
- {{ phoneNumber | phoneNumber }}
-
- Remove
-
-
-
- -
-
-
-
- {{ mdiEye }} View
-
-
- {{ mdiDelete }} Delete
-
-
-
-
-
-
-
-
-
-
-
-
- Phone API Key QR Code
- Scan this QR code with the
- httpSMS app
- on your Android phone to login.
-
-
-
-
-
-
-
- Close
-
-
-
-
-
-
- Are you sure you want to delete the
- {{ activePhoneApiKey?.name }} API Key?
-
-
- You will have to logout and login again on the httpSMS Android
- app on all of the phones which are currently using this API key.
-
-
-
- {{ mdiDelete }}
- Delete API Key
-
-
- Close
-
-
-
-
-
-
- Are you sure you want to remove this phone number from the Phone API
- Key?
-
-
- This will remove the
- {{ activePhoneNumber | phoneNumber }} from your phone API
- key. You will have to logout and login again on the
- httpSMS Android app on the phone which is currently using this
- API key.
-
-
-
- {{ mdiDelete }}
- Remove Phone from key
-
-
-
- Close
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/search-messages/index.vue b/web/pages/search-messages/index.vue
deleted file mode 100644
index 9fd1f6676..000000000
--- a/web/pages/search-messages/index.vue
+++ /dev/null
@@ -1,531 +0,0 @@
-
-
-
-
-
- {{ mdiArrowLeft }}
-
-
- Search Messages
-
-
-
-
-
-
- Search Messages
-
- On this page, you can search all your messages by phone number,
- message type, and message status and even using the content of the
- SMS message. You will also be able to bulk delete messages and
- even export your messages in a CSV file.
-
-
- {{ errorTitle }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ mdiMagnify }}
- Search Messages
-
-
-
-
-
-
-
- Search Results
-
-
-
- {{ mdiDelete }}
- Delete messages
-
-
-
-
- Are you sure you want to delete the
- {{ selectedMessages.length }} selected messages?
-
-
- The messages will be deleted permanently from the httpSMS
- server and cannot be recovered.
-
-
-
- {{ mdiDelete }}
- Yes Delete Messages
-
-
- Close
-
-
-
-
-
- {{ mdiExport }}
- Export to CSV
-
-
-
-
-
- {{ props.item.created_at | timestamp }}
-
-
- {{ props.item.owner }}
-
-
- {{ props.item.contact }}
-
-
-
- {{ mdiCallMissed }}
- missed call
-
-
- {{ mdiCallReceived }}
- inbound
-
-
- {{ mdiCallMade }}
- outbound
-
-
-
-
- {{ mdiAlert }}
- Expired
-
-
-
- {{ mdiCheckAll }}
- Delivered
-
-
-
- {{ mdiCheckAll }}
- Received
-
-
-
- {{ mdiCheck }}
- Sent
-
-
-
- {{ mdiAlert }}
- Failed
-
-
-
- {{ mdiProgressCheck }}
- {{ props.item.status | capitalize }}
-
-
-
- {{ props.item.content }}
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/settings/index.vue b/web/pages/settings/index.vue
deleted file mode 100644
index 10cbf94ff..000000000
--- a/web/pages/settings/index.vue
+++ /dev/null
@@ -1,1292 +0,0 @@
-
-
-
-
-
- {{ mdiArrowLeft }}
-
-
- Settings
-
-
-
-
-
-
-
-
- {{ mdiAccountCircle }}
-
-
- {{ $fire.auth.currentUser.displayName }}
-
-
- {{ $fire.auth.currentUser.email }}
-
- {{ mdiShieldCheck }}
-
-
-
-
- API Key
-
- Use your API Key in the x-api-key HTTP Header when
- sending requests to
- https://api.httpsms.com endpoints.
-
-
-
-
-
-
-
-
- {{ mdiQrcode }}
- Show QR Code
-
-
-
- API Key QR Code
- Scan this QR code with the
- httpSMS app
- on your Android phone to login.
-
-
-
-
- Close
-
-
-
-
Documentation
-
-
-
-
- {{ mdiRefresh }}
- Rotate API Key
-
-
-
-
- Are you sure you want to rotate your API Key?
-
-
- You will have to logout and login again on the
- httpSMS Android app with your new API key after you
- rotate it.
-
-
-
- {{ mdiRefresh }}
- Yes Rotate Key
-
-
-
- Close
-
-
-
-
-
- Webhooks
-
- Webhooks allow us to send events to your server for example when
- the android phone receives an SMS message we can forward the
- message to your server.
-
-
-
-
-
-
-
-
-
- ID
-
- Callback URL
-
- Events
-
- Action
-
-
-
-
-
- {{ webhook.id }}
-
- {{ webhook.url }}
-
- {{ event }}
-
-
-
- {{ mdiSquareEditOutline }}
-
- Edit
-
-
-
-
-
-
-
-
-
- {{ mdiLinkVariant }}
- Add webhook
-
- Documentation
-
-
- Discord Integration
-
-
- Send and receive SMS messages without leaving your discord server
- with the httpSMS discord app using the
- /httpsms command.
-
-
-
-
-
-
-
-
- Name
- Server ID
- Channel ID
- Action
-
-
-
-
-
- {{ discord.name }}
-
-
- {{ discord.server_id }}
-
-
- {{ discord.incoming_channel_id }}
-
-
-
- {{ mdiSquareEditOutline }}
-
- Edit
-
-
-
-
-
-
-
-
-
- Add Discord
-
- Phones
-
- List of mobile phones which are registered for sending and
- receiving SMS messages.
-
-
-
-
-
-
- ID
-
- Phone Number
-
- Retries
-
- Rate
- Updated At
- Action
-
-
-
-
-
- {{ phone.id }}
-
- {{ phone.phone_number | phoneNumber }}
-
-
- {{
- phone.max_send_attempts ? phone.max_send_attempts : 1
- }}
-
-
-
- {{ phone.messages_per_minute }}/min
- Unlimited
-
-
- {{ phone.updated_at | timestamp }}
-
-
-
- {{ mdiSquareEditOutline }}
-
- Edit
-
-
-
-
-
-
-
-
- Email Notifications
-
-
- Manage the email notifications which you receive from httpSMS.
- Feel free to turn on/off individual notifications anytime so you
- don't get overloaded with emails
-
-
-
-
-
-
- {{ mdiContentSave }}
- Save Notification Settings
-
-
- Delete Account
-
-
- You cannot delete your account because you have an active
- subscription on httpSMS.
- Cancel your subscription
- before deleting your account.
-
-
- You can delete all your data on httpSMS by clicking the button
- below. This action is irreversible and all your data will
- be permanently deleted from the httpSMS database instantly and it
- cannot be recovered.
-
-
- {{ mdiDelete }}
- Delete your Account
-
-
-
- Delete your httpSMS account
-
- Are you sure you want to delete your account? This action is
- irreversible and all your data will be permanently
- deleted from the httpSMS database instantly.
-
-
-
- {{
- mdiDelete
- }}
- Delete My Account
-
-
-
- Keep My account
- Close
-
-
-
-
-
-
-
-
-
-
- Edit Phone
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ mdiContentSave }}
-
- Update
-
-
-
-
- {{ mdiDelete }}
-
- Delete
-
-
-
-
-
-
-
- Add a new
- Edit
- webhook
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Save Webhook
-
-
-
- {{ mdiContentSave }}
-
- Update Webhook
-
-
-
-
- {{ mdiDelete }}
-
- Delete
-
-
-
-
-
-
-
- Add a new
- Edit
- discord integration
-
-
-
-
-
- Click the button below to add the httpSMS bot to your discord
- server. You need to do this so we can have permission to send
- and receive messages on your discord server.
-
-
- {{ mdiConnection }}
- Add Discord Bot
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Save Discord Integration
-
-
-
- {{ mdiContentSave }}
-
- Update Discord Integration
-
-
-
-
- {{ mdiDelete }}
-
- Delete
-
-
-
-
-
-
-
-
diff --git a/web/pages/threads/_id/index.vue b/web/pages/threads/_id/index.vue
deleted file mode 100644
index a9216a9f0..000000000
--- a/web/pages/threads/_id/index.vue
+++ /dev/null
@@ -1,635 +0,0 @@
-
-
-
-
-
- {{ mdiArrowLeft }}
-
-
-
- {{ $store.getters.getThread.contact | phoneNumber }}
-
-
-
-
-
-
- {{ mdiDotsVertical }}
-
-
-
-
-
-
- {{ mdiPackageDown }}
-
-
-
-
- Archive
-
-
-
-
-
-
- {{ mdiPackageUp }}
-
-
-
-
- Unarchive
-
-
-
-
-
-
- {{ mdiDelete }}
-
-
-
- Delete Thread
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ mdiAccount }}
-
-
- {{ mdiCallMissed }}
-
-
-
-
- {{ mdiDotsVertical }}
-
-
-
-
-
-
- {{ mdiRefresh }}
-
-
-
- Resend Message
-
-
-
-
-
- {{ mdiContentCopy }}
-
-
-
- Copy Message ID
-
-
-
-
-
- {{ mdiDelete }}
-
-
-
- Delete Message
-
-
-
-
-
-
-
-
-
- {{
- message.content
- }}
- Missed phone call
-
-
-
-
- {{ new Date(message.order_timestamp).toLocaleString() }}
-
-
-
-
-
- {{ mdiAlert }}
-
-
- {{ mdiCheckAll }}
-
-
- {{ mdiCheck }}
-
-
- {{ mdiAlert }}
-
-
-
-
- {{
- message.failure_reason
- ? message.failure_reason
- : message.status
- }}
-
-
-
-
-
-
-
- {{ mdiDotsVertical }}
-
-
-
-
-
-
- {{ mdiRefresh }}
-
-
-
- Resend Message
-
-
-
-
-
- {{ mdiContentCopy }}
-
-
-
- Copy Message ID
-
-
-
-
-
- {{ mdiDelete }}
-
-
-
- Delete Message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ mdiSend }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/pages/threads/index.vue b/web/pages/threads/index.vue
deleted file mode 100644
index d057b1d63..000000000
--- a/web/pages/threads/index.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/plugins/axios.ts b/web/plugins/axios.ts
deleted file mode 100644
index 5bed06034..000000000
--- a/web/plugins/axios.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import axios from 'axios'
-
-const client = axios.create({
- baseURL: process.env.API_BASE_URL || 'http://localhost:8000',
- headers: {
- 'X-Client-Version': process.env.GITHUB_SHA || 'dev',
- },
-})
-
-export function setAuthHeader(token: string | null) {
- client.defaults.headers.common.Authorization = 'Bearer ' + token
-}
-
-export function setApiKey(apiKey: string | null) {
- client.defaults.headers.common['x-api-key'] = apiKey ?? ''
-}
-
-export default client
diff --git a/web/plugins/chart.ts b/web/plugins/chart.ts
deleted file mode 100644
index dcae67170..000000000
--- a/web/plugins/chart.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import Vue from 'vue'
-import { Bar } from 'vue-chartjs'
-import {
- Chart as ChartJS,
- Title,
- Tooltip,
- Legend,
- BarElement,
- CategoryScale,
- LinearScale,
- TimeSeriesScale,
- LineElement,
- PointElement,
- ArcElement,
- TimeScale,
-} from 'chart.js'
-
-ChartJS.register(
- Title,
- Tooltip,
- Legend,
- PointElement,
- BarElement,
- TimeScale,
- TimeSeriesScale,
- CategoryScale,
- LinearScale,
- LineElement,
- ArcElement,
-)
-
-Vue.component('BarChart', {
- extends: Bar,
-})
diff --git a/web/plugins/filters.ts b/web/plugins/filters.ts
deleted file mode 100644
index 2a7c1a99b..000000000
--- a/web/plugins/filters.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-import Vue from 'vue'
-import { intervalToDuration, formatDuration } from 'date-fns'
-import { parsePhoneNumber, isValidPhoneNumber } from 'libphonenumber-js'
-
-export const formatPhoneNumber = (value: string) => {
- if (!isValidPhoneNumber(value)) {
- return value
- }
- const phoneNumber = parsePhoneNumber(value)
- if (phoneNumber) {
- return phoneNumber.formatInternational()
- }
- return value
-}
-
-Vue.filter('phoneNumber', (value: string): string => {
- return formatPhoneNumber(value)
-})
-
-Vue.filter('phoneCountry', (value: string): string => {
- const phoneNumber = parsePhoneNumber(value)
- if (phoneNumber && phoneNumber.country) {
- // @ts-ignore
- const regionNames = new Intl.DisplayNames(undefined, { type: 'region' })
- return regionNames.of(phoneNumber.country) ?? 'earth'
- }
- return 'Earth'
-})
-
-Vue.filter('timestamp', (value: string): string => {
- return new Date(value).toLocaleString()
-})
-
-Vue.filter('money', (value: string): string => {
- return new Intl.NumberFormat('en-US', {
- style: 'currency',
- currency: 'USD',
- }).format(parseInt(value))
-})
-
-Vue.filter('decimal', (value: string): string => {
- return new Intl.NumberFormat('en-US', {
- style: 'decimal',
- }).format(parseInt(value))
-})
-
-Vue.filter('billingPeriod', (value: string): string => {
- const options = {
- year: 'numeric',
- month: 'long',
- }
- // @ts-ignore
- return new Date(value).toLocaleDateString('en-US', options)
-})
-
-Vue.filter('humanizeTime', (value: string): string => {
- const durations = intervalToDuration({
- start: new Date(),
- end: new Date(value),
- })
- return formatDuration(durations)
-})
-
-Vue.filter('capitalize', (value: string): string => {
- return value.charAt(0).toUpperCase() + value.slice(1)
-})
diff --git a/web/plugins/veutify.ts b/web/plugins/veutify.ts
deleted file mode 100644
index be8b07eb8..000000000
--- a/web/plugins/veutify.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import Vue from 'vue'
-import { Route } from 'vue-router'
-import { DataOptions } from 'vuetify'
-
-export type VForm = Vue & {
- validate: () => boolean
- resetValidation: () => boolean
- reset: () => void
-}
-
-export type FormInputType = string | null | File
-
-export type FormValidationRule = (value: FormInputType) => string | boolean
-
-export type FormValidationRules = Array
-
-export interface SelectItem {
- text: string
- value: string | number | boolean
-}
-
-export interface DatatableFooterProps {
- itemsPerPage: number
- itemsPerPageOptions: Array
-}
-
-export const DefaultFooterProps: DatatableFooterProps = {
- itemsPerPage: 100,
- itemsPerPageOptions: [10, 50, 100, 200],
-}
-
-export type ParseParamsResponse = {
- options: DataOptions
- query: string | null
-}
-
-export const parseFilterOptionsFromParams = (
- route: Route,
- options: DataOptions,
-): ParseParamsResponse => {
- let query = null
- Object.keys(route.query).forEach((value: string) => {
- if (value === 'itemsPerPage') {
- options.itemsPerPage = parseInt(
- (route.query[value] as string) ?? options.itemsPerPage.toString(),
- )
- }
-
- if (value === 'sortBy') {
- options.sortBy = [(route.query[value] as string) ?? options.sortBy[0]]
- }
-
- if (value === 'sortDesc') {
- options.sortDesc = [!(route.query[value] === 'false')]
- }
-
- if (value === 'page') {
- options.page = parseInt(
- (route.query[value] as string) ?? options.page.toString(),
- )
- }
- if (value === 'query') {
- query = route.query[value]
- }
- })
- return { options, query }
-}
diff --git a/web/plugins/vue-glow.ts b/web/plugins/vue-glow.ts
deleted file mode 100644
index 0b921d69d..000000000
--- a/web/plugins/vue-glow.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-// @ts-ignore
-import VueGlow from 'vue-glow'
-import Vue from 'vue'
-Vue.component('VueGlow', VueGlow)
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index e6addfc82..6110b30bf 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -11,2219 +11,2468 @@ importers:
'@mdi/js':
specifier: ^7.4.47
version: 7.4.47
- '@nuxtjs/dotenv':
- specifier: ^1.4.2
- version: 1.4.2
- '@nuxtjs/firebase':
- specifier: ^8.2.2
- version: 8.2.2(@firebase/app-types@0.9.2)(firebase@10.14.1)(nuxt@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.6.2)(typescript@4.9.5)(vue@2.7.16))
- '@nuxtjs/sitemap':
- specifier: ^2.4.0
- version: 2.4.0
+ '@nuxtjs/google-fonts':
+ specifier: ^3.2.0
+ version: 3.2.0(magicast@0.5.4)
+ '@pinia/nuxt':
+ specifier: ^0.11.3
+ version: 0.11.3(magicast@0.5.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))
chart.js:
- specifier: ^4.5.0
- version: 4.5.0
+ specifier: ^4.5.1
+ version: 4.5.1
chartjs-adapter-moment:
specifier: ^1.0.1
- version: 1.0.1(chart.js@4.5.0)(moment@2.30.1)
- core-js:
- specifier: ^3.45.1
- version: 3.45.1
+ version: 1.0.1(chart.js@4.5.1)(moment@2.30.1)
date-fns:
- specifier: ^2.30.0
- version: 2.30.0
- dotenv:
- specifier: ^17.2.1
- version: 17.2.1
+ specifier: ^4.3.0
+ version: 4.3.0
firebase:
- specifier: ^10.14.1
- version: 10.14.1
- firebaseui:
- specifier: ^6.1.0
- version: 6.1.0(firebase@10.14.1)
- jest-environment-jsdom:
- specifier: ^30.2.0
- version: 30.2.0
+ specifier: ^12.13.0
+ version: 12.13.0
+ flag-icons:
+ specifier: ^7.5.0
+ version: 7.5.0
+ highlight.js:
+ specifier: ^11.11.1
+ version: 11.11.1
libphonenumber-js:
- specifier: ^1.12.9
- version: 1.12.9
+ specifier: ^1.13.3
+ version: 1.13.3
moment:
specifier: ^2.30.1
version: 2.30.1
nuxt:
- specifier: ^2.18.1
- version: 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.6.2)(typescript@4.9.5)(vue@2.7.16)
- nuxt-highlightjs:
- specifier: ^1.0.3
- version: 1.0.3
+ specifier: ^4.5.1
+ version: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0)
+ pinia:
+ specifier: ^3.0.4
+ version: 3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3))
+ prettier:
+ specifier: ^3.8.4
+ version: 3.8.4
pusher-js:
- specifier: ^8.4.0
- version: 8.4.0
+ specifier: ^8.5.0
+ version: 8.5.0
qrcode:
- specifier: ^1.5.0
+ specifier: ^1.5.4
version: 1.5.4
- ufo:
- specifier: ^1.6.1
- version: 1.6.1
+ sass:
+ specifier: ^1.100.0
+ version: 1.100.0
+ v-phone-input:
+ specifier: ^7.0.0
+ version: 7.0.0(typescript@5.9.3)(vite-plugin-vuetify@2.1.3)(vue@3.5.34(typescript@5.9.3))
vue:
- specifier: ^2.7.16
- version: 2.7.16
+ specifier: ^3.5.34
+ version: 3.5.34(typescript@5.9.3)
vue-chartjs:
- specifier: ^5.3.2
- version: 5.3.2(chart.js@4.5.0)(vue@2.7.16)
- vue-class-component:
- specifier: ^7.2.6
- version: 7.2.6(vue@2.7.16)
- vue-glow:
- specifier: ^1.4.2
- version: 1.4.2
- vue-property-decorator:
- specifier: ^9.1.2
- version: 9.1.2(vue-class-component@7.2.6(vue@2.7.16))(vue@2.7.16)
+ specifier: ^5.3.3
+ version: 5.3.3(chart.js@4.5.1)(vue@3.5.34(typescript@5.9.3))
vue-router:
- specifier: ^3.6.5
- version: 3.6.5(vue@2.7.16)
- vue-server-renderer:
- specifier: 2.7.16
- version: 2.7.16
- vue-template-compiler:
- specifier: ^2.7.16
- version: 2.7.16
+ specifier: ^5.0.7
+ version: 5.0.7(@vue/compiler-sfc@3.5.41)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))
vuetify:
- specifier: ^2.7.2
- version: 2.7.2(vue@2.7.16)
- vuex:
- specifier: ^3.6.2
- version: 3.6.2(vue@2.7.16)
- webpack:
- specifier: ^5.102.0
- version: 5.102.0
+ specifier: ^4.0.7
+ version: 4.0.7(typescript@5.9.3)(vite-plugin-vuetify@2.1.3)(vue@3.5.34(typescript@5.9.3))
devDependencies:
- '@babel/eslint-parser':
- specifier: ^7.27.5
- version: 7.27.5(@babel/core@7.28.4)(eslint@8.57.1)
'@commitlint/cli':
- specifier: ^20.1.0
- version: 20.1.0(@types/node@24.6.2)(typescript@4.9.5)
+ specifier: ^21.0.2
+ version: 21.0.2(@types/node@25.9.1)(conventional-commits-parser@6.4.0)(typescript@5.9.3)
'@commitlint/config-conventional':
- specifier: ^19.8.0
- version: 19.8.0
- '@nuxt/types':
- specifier: ^2.18.1
- version: 2.18.1
- '@nuxt/typescript-build':
- specifier: ^3.0.2
- version: 3.0.2(@nuxt/types@2.18.1)(eslint@8.57.1)(typescript@4.9.5)(vue-template-compiler@2.7.16)(webpack@5.102.0)
- '@nuxtjs/eslint-config-typescript':
- specifier: ^12.1.0
- version: 12.1.0(eslint@8.57.1)(typescript@4.9.5)
- '@nuxtjs/eslint-module':
- specifier: ^4.1.0
- version: 4.1.0(eslint@8.57.1)(rollup@3.29.5)(vite@4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0))(webpack@5.102.0)
- '@nuxtjs/stylelint-module':
- specifier: ^5.2.0
- version: 5.2.0(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0))(webpack@5.102.0)
- '@nuxtjs/vuetify':
- specifier: ^1.12.3
- version: 1.12.3(vue@2.7.16)(webpack@5.102.0)
+ specifier: ^21.0.2
+ version: 21.0.2
+ '@nuxt/eslint':
+ specifier: ^1.16.0
+ version: 1.16.0(@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(@vue/compiler-sfc@3.5.41)(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxtjs/seo':
+ specifier: ^5.3.2
+ version: 5.3.2(cbbecbeff1ef288b5e7e848ce0fbb97f)
'@types/qrcode':
- specifier: ^1.5.5
- version: 1.5.5
- '@vue/test-utils':
- specifier: ^1.3.6
- version: 1.3.6(vue-template-compiler@2.7.16)(vue@2.7.16)
- axios:
- specifier: ^0.30.2
- version: 0.30.2
- babel-core:
- specifier: 7.0.0-bridge.0
- version: 7.0.0-bridge.0(@babel/core@7.28.4)
- babel-jest:
- specifier: ^30.2.0
- version: 30.2.0(@babel/core@7.28.4)
+ specifier: ^1.5.6
+ version: 1.5.6
eslint:
- specifier: ^8.57.1
- version: 8.57.1
+ specifier: ^10.5.0
+ version: 10.5.0(jiti@2.7.0)
eslint-config-prettier:
specifier: ^10.1.8
- version: 10.1.8(eslint@8.57.1)
- eslint-plugin-nuxt:
- specifier: ^4.0.0
- version: 4.0.0(eslint@8.57.1)
- eslint-plugin-vue:
- specifier: ^9.33.0
- version: 9.33.0(eslint@8.57.1)
- highlight.js:
- specifier: ^11.11.1
- version: 11.11.1
- jest:
- specifier: ^30.2.0
- version: 30.2.0(@types/node@24.6.2)
+ version: 10.1.8(eslint@10.5.0(jiti@2.7.0))
+ husky:
+ specifier: ^9.1.7
+ version: 9.1.7
lint-staged:
- specifier: ^16.1.4
- version: 16.1.4
- node-fetch-native:
- specifier: ^1.6.7
- version: 1.6.7
+ specifier: ^17.0.8
+ version: 17.0.8
postcss-html:
- specifier: ^1.7.0
- version: 1.7.0
- prettier:
- specifier: 3.6.2
- version: 3.6.2
+ specifier: ^1.8.1
+ version: 1.8.1
stylelint:
- specifier: ^15.11.0
- version: 15.11.0(typescript@4.9.5)
- stylelint-config-prettier:
- specifier: ^9.0.5
- version: 9.0.5(stylelint@15.11.0(typescript@4.9.5))
+ specifier: ^17.13.0
+ version: 17.13.0(typescript@5.9.3)
stylelint-config-recommended-vue:
- specifier: ^1.5.0
- version: 1.5.0(postcss-html@1.7.0)(stylelint@15.11.0(typescript@4.9.5))
+ specifier: ^1.6.1
+ version: 1.6.1(postcss-html@1.8.1)(stylelint@17.13.0(typescript@5.9.3))
stylelint-config-standard:
- specifier: ^34.0.0
- version: 34.0.0(stylelint@15.11.0(typescript@4.9.5))
- ts-jest:
- specifier: ^29.4.4
- version: 29.4.4(@babel/core@7.28.4)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.4))(jest-util@30.2.0)(jest@30.2.0(@types/node@24.6.2))(typescript@4.9.5)
- vue-client-only:
- specifier: ^2.1.0
- version: 2.1.0
- vue-jest:
- specifier: ^3.0.7
- version: 3.0.7(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(vue-template-compiler@2.7.16)(vue@2.7.16)
- vue-meta:
- specifier: ^2.4.0
- version: 2.4.0
- vue-no-ssr:
- specifier: ^1.1.1
- version: 1.1.1
+ specifier: ^40.0.0
+ version: 40.0.0(stylelint@17.13.0(typescript@5.9.3))
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+ vuetify-nuxt-module:
+ specifier: ^0.19.5
+ version: 0.19.5(magicast@0.5.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))
packages:
- '@aashutoshrathi/word-wrap@1.2.6':
- resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
- engines: {node: '>=0.10.0'}
-
- '@ampproject/remapping@2.2.1':
- resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
- engines: {node: '>=6.0.0'}
-
- '@asamuzakjp/css-color@3.2.0':
- resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
-
- '@babel/code-frame@7.22.13':
- resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==}
- engines: {node: '>=6.9.0'}
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
- '@babel/code-frame@7.23.5':
- resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
- engines: {node: '>=6.9.0'}
+ '@antfu/install-pkg@1.1.0':
+ resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
- '@babel/code-frame@7.24.7':
- resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==}
- engines: {node: '>=6.9.0'}
+ '@antfu/utils@8.1.1':
+ resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
- '@babel/code-frame@7.27.1':
- resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
- engines: {node: '>=6.9.0'}
+ '@apidevtools/json-schema-ref-parser@14.2.1':
+ resolution: {integrity: sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@types/json-schema': ^7.0.15
- '@babel/compat-data@7.24.7':
- resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==}
+ '@babel/code-frame@7.29.7':
+ resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.28.4':
- resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
+ '@babel/compat-data@7.29.7':
+ resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.24.7':
- resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==}
+ '@babel/core@7.29.7':
+ resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.28.4':
- resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
+ '@babel/generator@7.29.8':
+ resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==}
engines: {node: '>=6.9.0'}
- '@babel/eslint-parser@7.27.5':
- resolution: {integrity: sha512-HLkYQfRICudzcOtjGwkPvGc5nF1b4ljLZh1IRDj50lRZ718NAKVgQpIAUX8bfg6u/yuSKY3L7E0YzIV+OxrB8Q==}
- engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
- peerDependencies:
- '@babel/core': ^7.11.0
- eslint: ^7.5.0 || ^8.0.0 || ^9.0.0
+ '@babel/generator@8.0.0':
+ resolution: {integrity: sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==}
+ engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/generator@7.24.7':
- resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==}
- engines: {node: '>=6.9.0'}
+ '@babel/generator@8.0.0-rc.6':
+ resolution: {integrity: sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==}
+ engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/generator@7.28.3':
- resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
+ '@babel/helper-annotate-as-pure@7.29.7':
+ resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-annotate-as-pure@7.22.5':
- resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
+ '@babel/helper-compilation-targets@7.29.7':
+ resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==}
engines: {node: '>=6.9.0'}
- '@babel/helper-annotate-as-pure@7.24.7':
- resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==}
+ '@babel/helper-create-class-features-plugin@7.29.7':
+ resolution: {integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==}
engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
- '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7':
- resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==}
+ '@babel/helper-globals@7.29.7':
+ resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-compilation-targets@7.24.7':
- resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==}
+ '@babel/helper-member-expression-to-functions@7.29.7':
+ resolution: {integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-compilation-targets@7.27.2':
- resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+ '@babel/helper-module-imports@7.29.7':
+ resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==}
engines: {node: '>=6.9.0'}
- '@babel/helper-create-class-features-plugin@7.24.5':
- resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==}
+ '@babel/helper-module-transforms@7.29.7':
+ resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-create-class-features-plugin@7.24.7':
- resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==}
+ '@babel/helper-optimise-call-expression@7.29.7':
+ resolution: {integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- '@babel/helper-create-regexp-features-plugin@7.22.15':
- resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
+ '@babel/helper-plugin-utils@7.29.7':
+ resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- '@babel/helper-create-regexp-features-plugin@7.24.7':
- resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==}
+ '@babel/helper-replace-supers@7.29.7':
+ resolution: {integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-define-polyfill-provider@0.6.2':
- resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
- '@babel/helper-environment-visitor@7.22.20':
- resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-environment-visitor@7.24.7':
- resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-function-name@7.23.0':
- resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
+ '@babel/helper-skip-transparent-expression-wrappers@7.29.7':
+ resolution: {integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==}
engines: {node: '>=6.9.0'}
- '@babel/helper-function-name@7.24.7':
- resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==}
+ '@babel/helper-string-parser@7.29.7':
+ resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-globals@7.28.0':
- resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
- engines: {node: '>=6.9.0'}
+ '@babel/helper-string-parser@8.0.0':
+ resolution: {integrity: sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==}
+ engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/helper-hoist-variables@7.24.7':
- resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==}
- engines: {node: '>=6.9.0'}
+ '@babel/helper-string-parser@8.0.0-rc.6':
+ resolution: {integrity: sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==}
+ engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/helper-member-expression-to-functions@7.24.5':
- resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==}
+ '@babel/helper-validator-identifier@7.29.7':
+ resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-member-expression-to-functions@7.24.7':
- resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==}
- engines: {node: '>=6.9.0'}
+ '@babel/helper-validator-identifier@8.0.0-rc.6':
+ resolution: {integrity: sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==}
+ engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/helper-module-imports@7.24.7':
- resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==}
- engines: {node: '>=6.9.0'}
+ '@babel/helper-validator-identifier@8.0.4':
+ resolution: {integrity: sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==}
+ engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/helper-module-imports@7.27.1':
- resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+ '@babel/helper-validator-option@7.29.7':
+ resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-transforms@7.24.7':
- resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==}
+ '@babel/helpers@7.29.7':
+ resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==}
engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- '@babel/helper-module-transforms@7.28.3':
- resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@babel/parser@7.29.7':
+ resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
- '@babel/helper-optimise-call-expression@7.22.5':
- resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
- engines: {node: '>=6.9.0'}
+ '@babel/parser@7.29.8':
+ resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
- '@babel/helper-optimise-call-expression@7.24.7':
- resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==}
- engines: {node: '>=6.9.0'}
+ '@babel/parser@8.0.0-rc.6':
+ resolution: {integrity: sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==}
+ engines: {node: ^22.18.0 || >=24.11.0}
+ hasBin: true
- '@babel/helper-plugin-utils@7.27.1':
- resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
- engines: {node: '>=6.9.0'}
+ '@babel/parser@8.0.4':
+ resolution: {integrity: sha512-srpptsAkEbbNIC/q8nT7o+m6CQe8CJUTV/t7MYc9NnWlgYVtHOb7JH6SorxMhN0kuRJjVqXbKClG6xSbPtzz+g==}
+ engines: {node: ^22.18.0 || >=24.11.0}
+ hasBin: true
- '@babel/helper-remap-async-to-generator@7.24.7':
- resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==}
+ '@babel/plugin-syntax-jsx@7.29.7':
+ resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==}
engines: {node: '>=6.9.0'}
peerDependencies:
- '@babel/core': ^7.0.0
+ '@babel/core': ^7.0.0-0
- '@babel/helper-replace-supers@7.24.1':
- resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==}
+ '@babel/plugin-syntax-typescript@7.29.7':
+ resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==}
engines: {node: '>=6.9.0'}
peerDependencies:
- '@babel/core': ^7.0.0
+ '@babel/core': ^7.0.0-0
- '@babel/helper-replace-supers@7.24.7':
- resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==}
+ '@babel/plugin-transform-typescript@7.29.7':
+ resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==}
engines: {node: '>=6.9.0'}
peerDependencies:
- '@babel/core': ^7.0.0
+ '@babel/core': ^7.0.0-0
- '@babel/helper-simple-access@7.24.7':
- resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==}
+ '@babel/template@7.29.7':
+ resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-skip-transparent-expression-wrappers@7.22.5':
- resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
+ '@babel/traverse@7.29.8':
+ resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-skip-transparent-expression-wrappers@7.24.7':
- resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==}
+ '@babel/types@7.29.7':
+ resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-split-export-declaration@7.24.5':
- resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==}
+ '@babel/types@7.29.8':
+ resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-split-export-declaration@7.24.7':
- resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==}
- engines: {node: '>=6.9.0'}
+ '@babel/types@8.0.0-rc.6':
+ resolution: {integrity: sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw==}
+ engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/helper-string-parser@7.27.1':
- resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
- engines: {node: '>=6.9.0'}
+ '@babel/types@8.0.4':
+ resolution: {integrity: sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==}
+ engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/helper-validator-identifier@7.24.5':
- resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==}
- engines: {node: '>=6.9.0'}
+ '@bomb.sh/tab@0.0.19':
+ resolution: {integrity: sha512-dTRfo9Q9B+lbLG3JCu8a/AGQSfD2XXcFcnakQzVjSOX+VvR/s9zpsH8TlqV3iHqazniRn1Ypwd1hcRlXcu/4BA==}
+ hasBin: true
+ peerDependencies:
+ cac: ^6.7.14
+ citty: ^0.1.6 || ^0.2.0
+ commander: ^13.1.0 || ^14.0.0 || ^15.0.0
+ peerDependenciesMeta:
+ cac:
+ optional: true
+ citty:
+ optional: true
+ commander:
+ optional: true
- '@babel/helper-validator-identifier@7.27.1':
- resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
- engines: {node: '>=6.9.0'}
+ '@cacheable/memory@2.0.9':
+ resolution: {integrity: sha512-HdMx6DoGywB30vacDbBsITbIX4pgFqj1zsrV58jZBUw3klzkNoXhj7qOqAgledhxG7YZI5rBSJg7Zp8/VG0DuA==}
- '@babel/helper-validator-option@7.24.7':
- resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==}
- engines: {node: '>=6.9.0'}
+ '@cacheable/utils@2.4.1':
+ resolution: {integrity: sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==}
- '@babel/helper-validator-option@7.27.1':
- resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
- engines: {node: '>=6.9.0'}
+ '@capsizecss/unpack@4.0.1':
+ resolution: {integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==}
+ engines: {node: '>=18'}
- '@babel/helper-wrap-function@7.24.7':
- resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==}
- engines: {node: '>=6.9.0'}
+ '@clack/core@1.4.2':
+ resolution: {integrity: sha512-0Ty/1Gfm+Kb07sXcuESjyKfwEhSy4Ns1AgeEisHb/bDY5fWme0tTeTkU14T1Gmcs17YIjB/teiDe4uaCghbYqQ==}
+ engines: {node: '>= 20.12.0'}
- '@babel/helpers@7.24.7':
- resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==}
- engines: {node: '>=6.9.0'}
+ '@clack/core@1.4.3':
+ resolution: {integrity: sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==}
+ engines: {node: '>= 20.12.0'}
- '@babel/helpers@7.28.4':
- resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
- engines: {node: '>=6.9.0'}
+ '@clack/prompts@1.6.0':
+ resolution: {integrity: sha512-EYlRokl8szrP9Z25qT5aepMdBjzBvHF9ZEhzIiUBc9guz/T31EqRgvD0QSgZcpE93xiwrr+OkB4nz0BZyF6fSA==}
+ engines: {node: '>= 20.12.0'}
- '@babel/highlight@7.23.4':
- resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
- engines: {node: '>=6.9.0'}
+ '@clack/prompts@1.7.0':
+ resolution: {integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==}
+ engines: {node: '>= 20.12.0'}
- '@babel/highlight@7.24.7':
- resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==}
- engines: {node: '>=6.9.0'}
+ '@cloudflare/kv-asset-handler@0.4.2':
+ resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==}
+ engines: {node: '>=18.0.0'}
- '@babel/parser@7.24.0':
- resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==}
- engines: {node: '>=6.0.0'}
- hasBin: true
+ '@colordx/core@5.5.0':
+ resolution: {integrity: sha512-3PxTH8itZzltK0U9jTwVVnjLXvnDYuq3m+QXsHkENxWiPRh4WaoLcs1SQjqgZ55kS+QyirpH5BVwzP2gMVG6EQ==}
- '@babel/parser@7.28.0':
- resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
- engines: {node: '>=6.0.0'}
+ '@commitlint/cli@21.0.2':
+ resolution: {integrity: sha512-YMmfLbqBg+ZRvvmPhc+cilSQFrh/AgzVgCT1U/OifmUZEwPbvCtA8rN//YNaF9d5eoZphxVMGYtmwA2QgQORgg==}
+ engines: {node: '>=22.12.0'}
hasBin: true
- '@babel/parser@7.28.4':
- resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
- engines: {node: '>=6.0.0'}
- hasBin: true
+ '@commitlint/config-conventional@21.0.2':
+ resolution: {integrity: sha512-P/ZRhryQmkj0Z0dY9FOoRwe3xkwJyyAdtXwt01NT2kuZttcG2CNYp1q5Ci3u+nDT2jcbJRw2kt13Czl1qKNPfg==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7':
- resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@commitlint/config-validator@21.0.1':
+ resolution: {integrity: sha512-Zd2UFdndeMMaW2O96HK0tdfT4gOImUvidMpAd/pws2zZ4m1nrAZ/9b/v2JYuE8fs86GpXv9F7LNaIuCIWhY+pA==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7':
- resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@commitlint/ensure@21.0.1':
+ resolution: {integrity: sha512-jJ1037967wU7YN/xkv+iRlOBlmaOXPhPO5KQSqya6GyXzBlwuLzELBFao16DVg9dZyqmNrhewzwZ3SAibetHBQ==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7':
- resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.13.0
+ '@commitlint/execute-rule@21.0.1':
+ resolution: {integrity: sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7':
- resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@commitlint/format@21.0.1':
+ resolution: {integrity: sha512-ksmG2+cHGtuDPQQbhBbC4unwm444+6TiPw0d1bKf67hntgZqZ8E0g1MuYKUuyT5IH4IMmXZhKq22/Z3jBvtQIw==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-proposal-class-properties@7.18.6':
- resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
- engines: {node: '>=6.9.0'}
- deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/is-ignored@21.0.2':
+ resolution: {integrity: sha512-H5z4t8PC9tUsmZ/o+EptM3Nq8sTFtskAShdcqxCoyzklW5eaVT5xbrDAET2uypzir9Vsj4ZZmBtyKjYe2XqgeQ==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-proposal-decorators@7.24.7':
- resolution: {integrity: sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/lint@21.0.2':
+ resolution: {integrity: sha512-PnUmLYGeGLfW8oVatR9KpNxSHYAnJOEWlMZzfdeFOUq6WUrFx1fGQaWCWJqMoIll/xPM+GdfJV+tKHZVHhl0Fg==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6':
- resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
- engines: {node: '>=6.9.0'}
- deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/load@21.0.2':
+ resolution: {integrity: sha512-lwUE70hN0/qE/ZRROhbaX65ly/FF12DrqfReLCESo37M0OQCFAf2jRS+2tSCSORq+bm4Kdju7qNDj46uc1QzTA==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-proposal-optional-chaining@7.21.0':
- resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
- engines: {node: '>=6.9.0'}
- deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/message@21.0.2':
+ resolution: {integrity: sha512-5n4aqHGD/FNnom/D5L8i7cYtV+xjuXcBL832C3w9VglEsZzIsoHpJsvxzJ7cgiOsOdc/2jU4t5+7qMHh7GBX3g==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-proposal-private-methods@7.18.6':
- resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
- engines: {node: '>=6.9.0'}
- deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/parse@21.0.2':
+ resolution: {integrity: sha512-QVZJhGHTm+oiuWyEKOCTQ0ZM3mfJ0eGWFeHuj7WzSKEth+UukcCHac9GD8pgdFlg/qGkFWOtyaNd1T8REgagaw==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
- resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/read@21.0.2':
+ resolution: {integrity: sha512-BtsrnLVycSSKf4Q0gMch4giCj5NNlmcbhc8ra5vONgGtP2IjRDo33bEFtr5Pm+2N+5fXGWb2MksWPrspPfdhdw==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-proposal-private-property-in-object@7.21.11':
- resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==}
- engines: {node: '>=6.9.0'}
- deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/resolve-extends@21.0.1':
+ resolution: {integrity: sha512-0DhjYWL6uYrY16Efa032fYk3woGJDU4AGWiG1XXltT9AMUNYKyb5cIZU2ivbaMZ3+kKFqUjikD2cjh66Sbh/Sg==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-syntax-async-generators@7.8.4':
- resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/rules@21.0.2':
+ resolution: {integrity: sha512-k6tQ69Td7t2qUSIbik8D3TL1q3ZJpkEbV+yLogDzCRAdOxJm4ndhtBNREsLA1/puRfWvzS9eioF2w43WT+hHgQ==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-syntax-bigint@7.8.3':
- resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/to-lines@21.0.1':
+ resolution: {integrity: sha512-bd1BFII7p1EQZre9Kaj+kKaMFP3cFCdt21K7DItVux9XP5WjLgJ0/Uy1pJJh9aPwVJ6SKg62PxqlZaHI8hQAXw==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-syntax-class-properties@7.12.13':
- resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/top-level@21.0.2':
+ resolution: {integrity: sha512-s9KKM+e+mXgFeIh4n7KmOGAVT3mkJ3Fp1bBYHIK5pjeUwlEMzp/tZfb5u0Poa680AsQTXMEMRxZi1vQ9m2X5ug==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-syntax-class-static-block@7.14.5':
- resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@commitlint/types@21.0.1':
+ resolution: {integrity: sha512-4u7w8jcoCUFWhjWnASYzZHAP34OqOtuFBN87nQmFvqda03YU0T6z+yB4w0gSAMpekiRqqGk5rt+qSlW+a2vSEg==}
+ engines: {node: '>=22.12.0'}
- '@babel/plugin-syntax-decorators@7.24.7':
- resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==}
- engines: {node: '>=6.9.0'}
+ '@conventional-changelog/git-client@2.7.0':
+ resolution: {integrity: sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==}
+ engines: {node: '>=18'}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ conventional-commits-filter: ^5.0.0
+ conventional-commits-parser: ^6.4.0
+ peerDependenciesMeta:
+ conventional-commits-filter:
+ optional: true
+ conventional-commits-parser:
+ optional: true
- '@babel/plugin-syntax-dynamic-import@7.8.3':
- resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+ '@csstools/css-calc@3.2.1':
+ resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@csstools/css-parser-algorithms': ^4.0.0
+ '@csstools/css-tokenizer': ^4.0.0
- '@babel/plugin-syntax-export-namespace-from@7.8.3':
- resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+ '@csstools/css-parser-algorithms@4.0.0':
+ resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@csstools/css-tokenizer': ^4.0.0
- '@babel/plugin-syntax-import-assertions@7.24.7':
- resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==}
- engines: {node: '>=6.9.0'}
+ '@csstools/css-syntax-patches-for-csstree@1.1.5':
+ resolution: {integrity: sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ css-tree: ^3.2.1
+ peerDependenciesMeta:
+ css-tree:
+ optional: true
- '@babel/plugin-syntax-import-attributes@7.24.7':
- resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@csstools/css-tokenizer@4.0.0':
+ resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==}
+ engines: {node: '>=20.19.0'}
- '@babel/plugin-syntax-import-attributes@7.27.1':
- resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
- engines: {node: '>=6.9.0'}
+ '@csstools/media-query-list-parser@5.0.0':
+ resolution: {integrity: sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@csstools/css-parser-algorithms': ^4.0.0
+ '@csstools/css-tokenizer': ^4.0.0
- '@babel/plugin-syntax-import-meta@7.10.4':
- resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ '@csstools/selector-resolve-nested@4.0.0':
+ resolution: {integrity: sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ postcss-selector-parser: ^7.1.1
- '@babel/plugin-syntax-json-strings@7.8.3':
- resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ '@csstools/selector-specificity@6.0.0':
+ resolution: {integrity: sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ postcss-selector-parser: ^7.1.1
- '@babel/plugin-syntax-jsx@7.27.1':
- resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
- engines: {node: '>=6.9.0'}
+ '@devframes/hub@0.5.4':
+ resolution: {integrity: sha512-NZs5RFuNb6tjQd2JBsRYQT+OqE+z16Kg9/72HG4k+uJdzK90sAGtAjOwK8bsvav/9l85KGx4agfkgxnfbl313w==}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ devframe: 0.5.4
- '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
- resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@dxup/nuxt@0.5.6':
+ resolution: {integrity: sha512-uZjAFoocWtWHr7YP9jm6FqwI8kjX2QN9bjcncoZt0GS+zExIAP3Ewv6EqEUvVP7w9pjZE+T19QxLHeoacN/MNg==}
- '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
- resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@dxup/unimport@0.1.2':
+ resolution: {integrity: sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ==}
- '@babel/plugin-syntax-numeric-separator@7.10.4':
- resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/core@1.10.0':
+ resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
- '@babel/plugin-syntax-object-rest-spread@7.8.3':
- resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/core@1.11.1':
+ resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
- '@babel/plugin-syntax-optional-catch-binding@7.8.3':
- resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/runtime@1.10.0':
+ resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
- '@babel/plugin-syntax-optional-chaining@7.8.3':
- resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/runtime@1.11.1':
+ resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
- '@babel/plugin-syntax-private-property-in-object@7.14.5':
- resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/runtime@1.11.2':
+ resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==}
- '@babel/plugin-syntax-top-level-await@7.14.5':
- resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/wasi-threads@1.2.1':
+ resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
- '@babel/plugin-syntax-typescript@7.27.1':
- resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@emnapi/wasi-threads@1.2.2':
+ resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
- '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
- resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@es-joy/jsdoccomment@0.87.0':
+ resolution: {integrity: sha512-mFXZloZMzuJZXSHUmAFu/pXTk0ZJTJBluuAkrvbzidpTN8W6F2bpRFuedSH+85kbdlRLJqc+gfN+kD3JOLJK5g==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@babel/plugin-transform-arrow-functions@7.24.7':
- resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@es-joy/resolve.exports@1.2.0':
+ resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
+ engines: {node: '>=10'}
- '@babel/plugin-transform-async-generator-functions@7.24.7':
- resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/aix-ppc64@0.25.12':
+ resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
- '@babel/plugin-transform-async-to-generator@7.24.7':
- resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/aix-ppc64@0.27.7':
+ resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
- '@babel/plugin-transform-block-scoped-functions@7.24.7':
- resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/aix-ppc64@0.28.1':
+ resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
- '@babel/plugin-transform-block-scoping@7.24.7':
- resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/android-arm64@0.25.12':
+ resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
- '@babel/plugin-transform-class-properties@7.24.7':
- resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/android-arm64@0.27.7':
+ resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
- '@babel/plugin-transform-class-static-block@7.24.7':
- resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.12.0
+ '@esbuild/android-arm64@0.28.1':
+ resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
- '@babel/plugin-transform-classes@7.24.7':
- resolution: {integrity: sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/android-arm@0.25.12':
+ resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
- '@babel/plugin-transform-computed-properties@7.24.7':
- resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/android-arm@0.27.7':
+ resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
- '@babel/plugin-transform-destructuring@7.24.7':
- resolution: {integrity: sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/android-arm@0.28.1':
+ resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
- '@babel/plugin-transform-dotall-regex@7.24.7':
- resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/android-x64@0.25.12':
+ resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
- '@babel/plugin-transform-duplicate-keys@7.24.7':
- resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/android-x64@0.27.7':
+ resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
- '@babel/plugin-transform-dynamic-import@7.24.7':
- resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/android-x64@0.28.1':
+ resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
- '@babel/plugin-transform-exponentiation-operator@7.24.7':
- resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/darwin-arm64@0.25.12':
+ resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
- '@babel/plugin-transform-export-namespace-from@7.24.7':
- resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/darwin-arm64@0.27.7':
+ resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
- '@babel/plugin-transform-for-of@7.24.7':
- resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/darwin-arm64@0.28.1':
+ resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
- '@babel/plugin-transform-function-name@7.24.7':
- resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/darwin-x64@0.25.12':
+ resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
- '@babel/plugin-transform-json-strings@7.24.7':
- resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/darwin-x64@0.27.7':
+ resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
- '@babel/plugin-transform-literals@7.24.7':
- resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/darwin-x64@0.28.1':
+ resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
- '@babel/plugin-transform-logical-assignment-operators@7.24.7':
- resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/freebsd-arm64@0.25.12':
+ resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
- '@babel/plugin-transform-member-expression-literals@7.24.7':
- resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/freebsd-arm64@0.27.7':
+ resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
- '@babel/plugin-transform-modules-amd@7.24.7':
- resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/freebsd-arm64@0.28.1':
+ resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
- '@babel/plugin-transform-modules-commonjs@7.24.7':
- resolution: {integrity: sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/freebsd-x64@0.25.12':
+ resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
- '@babel/plugin-transform-modules-systemjs@7.24.7':
- resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/freebsd-x64@0.27.7':
+ resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
- '@babel/plugin-transform-modules-umd@7.24.7':
- resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/freebsd-x64@0.28.1':
+ resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
- '@babel/plugin-transform-named-capturing-groups-regex@7.24.7':
- resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@esbuild/linux-arm64@0.25.12':
+ resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
- '@babel/plugin-transform-new-target@7.24.7':
- resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-arm64@0.27.7':
+ resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
- '@babel/plugin-transform-nullish-coalescing-operator@7.24.7':
- resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-arm64@0.28.1':
+ resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
- '@babel/plugin-transform-numeric-separator@7.24.7':
- resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-arm@0.25.12':
+ resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
- '@babel/plugin-transform-object-rest-spread@7.24.7':
- resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-arm@0.27.7':
+ resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
- '@babel/plugin-transform-object-super@7.24.7':
- resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-arm@0.28.1':
+ resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
- '@babel/plugin-transform-optional-catch-binding@7.24.7':
- resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-ia32@0.25.12':
+ resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
- '@babel/plugin-transform-optional-chaining@7.24.7':
- resolution: {integrity: sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-ia32@0.27.7':
+ resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
- '@babel/plugin-transform-parameters@7.24.7':
- resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-ia32@0.28.1':
+ resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
- '@babel/plugin-transform-private-methods@7.24.7':
- resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-loong64@0.25.12':
+ resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
- '@babel/plugin-transform-private-property-in-object@7.24.7':
- resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-loong64@0.27.7':
+ resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
- '@babel/plugin-transform-property-literals@7.24.7':
- resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-loong64@0.28.1':
+ resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
- '@babel/plugin-transform-regenerator@7.24.7':
- resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-mips64el@0.25.12':
+ resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
- '@babel/plugin-transform-reserved-words@7.24.7':
- resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-mips64el@0.27.7':
+ resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
- '@babel/plugin-transform-runtime@7.24.7':
- resolution: {integrity: sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-mips64el@0.28.1':
+ resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
- '@babel/plugin-transform-shorthand-properties@7.24.7':
- resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-ppc64@0.25.12':
+ resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
- '@babel/plugin-transform-spread@7.24.7':
- resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-ppc64@0.27.7':
+ resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
- '@babel/plugin-transform-sticky-regex@7.24.7':
- resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-ppc64@0.28.1':
+ resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
- '@babel/plugin-transform-template-literals@7.24.7':
- resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-riscv64@0.25.12':
+ resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
- '@babel/plugin-transform-typeof-symbol@7.24.7':
- resolution: {integrity: sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-riscv64@0.27.7':
+ resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
- '@babel/plugin-transform-unicode-escapes@7.24.7':
- resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-riscv64@0.28.1':
+ resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
- '@babel/plugin-transform-unicode-property-regex@7.24.7':
- resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-s390x@0.25.12':
+ resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
- '@babel/plugin-transform-unicode-regex@7.24.7':
- resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-s390x@0.27.7':
+ resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
- '@babel/plugin-transform-unicode-sets-regex@7.24.7':
- resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
+ '@esbuild/linux-s390x@0.28.1':
+ resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
- '@babel/preset-env@7.24.7':
- resolution: {integrity: sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@esbuild/linux-x64@0.25.12':
+ resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
- '@babel/preset-modules@0.1.6-no-external-plugins':
- resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+ '@esbuild/linux-x64@0.27.7':
+ resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
- '@babel/regjsgen@0.8.0':
- resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
+ '@esbuild/linux-x64@0.28.1':
+ resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
- '@babel/runtime@7.24.5':
- resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/netbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
- '@babel/runtime@7.24.7':
- resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/netbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
- '@babel/standalone@7.23.1':
- resolution: {integrity: sha512-a4muOYz1qUaSoybuUKwK90mRG4sf5rBeUbuzpuGLzG32ZDE/Y2YEebHDODFJN+BtyOKi19hrLfq2qbNyKMx0TA==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/netbsd-arm64@0.28.1':
+ resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
- '@babel/standalone@7.24.7':
- resolution: {integrity: sha512-QRIRMJ2KTeN+vt4l9OjYlxDVXEpcor1Z6V7OeYzeBOw6Q8ew9oMTHjzTx8s6ClsZO7wVf6JgTRutihatN6K0yA==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/netbsd-x64@0.25.12':
+ resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
- '@babel/template@7.24.7':
- resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/netbsd-x64@0.27.7':
+ resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
- '@babel/template@7.27.2':
- resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/netbsd-x64@0.28.1':
+ resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
- '@babel/traverse@7.24.7':
- resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/openbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
- '@babel/traverse@7.28.4':
- resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/openbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
- '@babel/types@7.28.2':
- resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/openbsd-arm64@0.28.1':
+ resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
- '@babel/types@7.28.4':
- resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
- engines: {node: '>=6.9.0'}
+ '@esbuild/openbsd-x64@0.25.12':
+ resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
- '@bcoe/v8-coverage@0.2.3':
- resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+ '@esbuild/openbsd-x64@0.27.7':
+ resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
- '@commitlint/cli@20.1.0':
- resolution: {integrity: sha512-pW5ujjrOovhq5RcYv5xCpb4GkZxkO2+GtOdBW2/qrr0Ll9tl3PX0aBBobGQl3mdZUbOBgwAexEQLeH6uxL0VYg==}
- engines: {node: '>=v18'}
- hasBin: true
+ '@esbuild/openbsd-x64@0.28.1':
+ resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
- '@commitlint/config-conventional@19.8.0':
- resolution: {integrity: sha512-9I2kKJwcAPwMoAj38hwqFXG0CzS2Kj+SAByPUQ0SlHTfb7VUhYVmo7G2w2tBrqmOf7PFd6MpZ/a1GQJo8na8kw==}
- engines: {node: '>=v18'}
+ '@esbuild/openharmony-arm64@0.25.12':
+ resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
- '@commitlint/config-validator@20.0.0':
- resolution: {integrity: sha512-BeyLMaRIJDdroJuYM2EGhDMGwVBMZna9UiIqV9hxj+J551Ctc6yoGuGSmghOy/qPhBSuhA6oMtbEiTmxECafsg==}
- engines: {node: '>=v18'}
+ '@esbuild/openharmony-arm64@0.27.7':
+ resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
- '@commitlint/ensure@20.0.0':
- resolution: {integrity: sha512-WBV47Fffvabe68n+13HJNFBqiMH5U1Ryls4W3ieGwPC0C7kJqp3OVQQzG2GXqOALmzrgAB+7GXmyy8N9ct8/Fg==}
- engines: {node: '>=v18'}
+ '@esbuild/openharmony-arm64@0.28.1':
+ resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
- '@commitlint/execute-rule@20.0.0':
- resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==}
- engines: {node: '>=v18'}
+ '@esbuild/sunos-x64@0.25.12':
+ resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
- '@commitlint/format@20.0.0':
- resolution: {integrity: sha512-zrZQXUcSDmQ4eGGrd+gFESiX0Rw+WFJk7nW4VFOmxub4mAATNKBQ4vNw5FgMCVehLUKG2OT2LjOqD0Hk8HvcRg==}
- engines: {node: '>=v18'}
+ '@esbuild/sunos-x64@0.27.7':
+ resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
- '@commitlint/is-ignored@20.0.0':
- resolution: {integrity: sha512-ayPLicsqqGAphYIQwh9LdAYOVAQ9Oe5QCgTNTj+BfxZb9b/JW222V5taPoIBzYnAP0z9EfUtljgBk+0BN4T4Cw==}
- engines: {node: '>=v18'}
+ '@esbuild/sunos-x64@0.28.1':
+ resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
- '@commitlint/lint@20.0.0':
- resolution: {integrity: sha512-kWrX8SfWk4+4nCexfLaQT3f3EcNjJwJBsSZ5rMBw6JCd6OzXufFHgel2Curos4LKIxwec9WSvs2YUD87rXlxNQ==}
- engines: {node: '>=v18'}
+ '@esbuild/win32-arm64@0.25.12':
+ resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
- '@commitlint/load@20.1.0':
- resolution: {integrity: sha512-qo9ER0XiAimATQR5QhvvzePfeDfApi/AFlC1G+YN+ZAY8/Ua6IRrDrxRvQAr+YXUKAxUsTDSp9KXeXLBPsNRWg==}
- engines: {node: '>=v18'}
+ '@esbuild/win32-arm64@0.27.7':
+ resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
- '@commitlint/message@20.0.0':
- resolution: {integrity: sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==}
- engines: {node: '>=v18'}
+ '@esbuild/win32-arm64@0.28.1':
+ resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
- '@commitlint/parse@20.0.0':
- resolution: {integrity: sha512-j/PHCDX2bGM5xGcWObOvpOc54cXjn9g6xScXzAeOLwTsScaL4Y+qd0pFC6HBwTtrH92NvJQc+2Lx9HFkVi48cg==}
- engines: {node: '>=v18'}
+ '@esbuild/win32-ia32@0.25.12':
+ resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
- '@commitlint/read@20.0.0':
- resolution: {integrity: sha512-Ti7Y7aEgxsM1nkwA4ZIJczkTFRX/+USMjNrL9NXwWQHqNqrBX2iMi+zfuzZXqfZ327WXBjdkRaytJ+z5vNqTOA==}
- engines: {node: '>=v18'}
+ '@esbuild/win32-ia32@0.27.7':
+ resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
- '@commitlint/resolve-extends@20.1.0':
- resolution: {integrity: sha512-cxKXQrqHjZT3o+XPdqDCwOWVFQiae++uwd9dUBC7f2MdV58ons3uUvASdW7m55eat5sRiQ6xUHyMWMRm6atZWw==}
- engines: {node: '>=v18'}
+ '@esbuild/win32-ia32@0.28.1':
+ resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
- '@commitlint/rules@20.0.0':
- resolution: {integrity: sha512-gvg2k10I/RfvHn5I5sxvVZKM1fl72Sqrv2YY/BnM7lMHcYqO0E2jnRWoYguvBfEcZ39t+rbATlciggVe77E4zA==}
- engines: {node: '>=v18'}
+ '@esbuild/win32-x64@0.25.12':
+ resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
- '@commitlint/to-lines@20.0.0':
- resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==}
- engines: {node: '>=v18'}
+ '@esbuild/win32-x64@0.27.7':
+ resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
- '@commitlint/top-level@20.0.0':
- resolution: {integrity: sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==}
- engines: {node: '>=v18'}
+ '@esbuild/win32-x64@0.28.1':
+ resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
- '@commitlint/types@19.8.0':
- resolution: {integrity: sha512-LRjP623jPyf3Poyfb0ohMj8I3ORyBDOwXAgxxVPbSD0unJuW2mJWeiRfaQinjtccMqC5Wy1HOMfa4btKjbNxbg==}
- engines: {node: '>=v18'}
+ '@eslint-community/eslint-utils@4.9.1':
+ resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- '@commitlint/types@20.0.0':
- resolution: {integrity: sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==}
- engines: {node: '>=v18'}
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@csstools/cascade-layer-name-parser@1.0.12':
- resolution: {integrity: sha512-iNCCOnaoycAfcIot3v/orjkTol+j8+Z5xgpqxUpZSdqeaxCADQZtldHhlvzDipmi7OoWdcJUO6DRZcnkMSBEIg==}
- engines: {node: ^14 || ^16 || >=18}
+ '@eslint/compat@2.1.0':
+ resolution: {integrity: sha512-LgaSCymEpw7tF53xvDw9SNsraPb1IBHxpdABIOM0hW8UAlP8znrjYtuxfR58FSJ3L9BhwD+FaPRFQpZq84Nh6g==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
- '@csstools/css-parser-algorithms': ^2.7.0
- '@csstools/css-tokenizer': ^2.3.2
+ eslint: ^8.40 || 9 || 10
+ peerDependenciesMeta:
+ eslint:
+ optional: true
- '@csstools/color-helpers@4.2.1':
- resolution: {integrity: sha512-CEypeeykO9AN7JWkr1OEOQb0HRzZlPWGwV0Ya6DuVgFdDi6g3ma/cPZ5ZPZM4AWQikDpq/0llnGGlIL+j8afzw==}
- engines: {node: ^14 || ^16 || >=18}
+ '@eslint/config-array@0.23.5':
+ resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@csstools/color-helpers@5.1.0':
- resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
- engines: {node: '>=18'}
+ '@eslint/config-helpers@0.5.5':
+ resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@csstools/css-calc@1.2.3':
- resolution: {integrity: sha512-rlOh81K3CvtY969Od5b1h29YT6MpCHejMCURKrRrXFeCpz67HGaBNvBmWT5S7S+CKn+V7KJ+qxSmK8jNd/aZWA==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^2.7.0
- '@csstools/css-tokenizer': ^2.3.2
+ '@eslint/config-helpers@0.6.0':
+ resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@csstools/css-calc@1.2.4':
- resolution: {integrity: sha512-tfOuvUQeo7Hz+FcuOd3LfXVp+342pnWUJ7D2y8NUpu1Ww6xnTbHLpz018/y6rtbHifJ3iIEf9ttxXd8KG7nL0Q==}
- engines: {node: ^14 || ^16 || >=18}
+ '@eslint/config-inspector@3.0.4':
+ resolution: {integrity: sha512-qyb1cjiiwD2mlg5GJC4JiO/EOO/rvEtm+GgLtgJ054bu8ZPj6hK1PLCRzxOnBghlPKWVqSjs4i+fXoPkt488Yw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ hasBin: true
peerDependencies:
- '@csstools/css-parser-algorithms': ^2.7.1
- '@csstools/css-tokenizer': ^2.4.1
+ eslint: ^8.50.0 || ^9.0.0 || ^10.0.0
- '@csstools/css-calc@2.1.4':
- resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
- engines: {node: '>=18'}
+ '@eslint/core@1.2.1':
+ resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/js@10.0.1':
+ resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
+ eslint: ^10.0.0
+ peerDependenciesMeta:
+ eslint:
+ optional: true
+
+ '@eslint/object-schema@3.0.5':
+ resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/plugin-kit@0.7.2':
+ resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@csstools/css-color-parser@2.0.3':
- resolution: {integrity: sha512-Qqhb5I/gEh1wI4brf6Kmy0Xn4J1IqO8OTDKWGRsBYtL4bGkHcV9i0XI2Mmo/UYFtSRoXW/RmKTcMh6sCI433Cw==}
- engines: {node: ^14 || ^16 || >=18}
+ '@fingerprintjs/botd@2.0.0':
+ resolution: {integrity: sha512-yhuz23NKEcBDTHmGz/ULrXlGnbHenO+xZmVwuBkuqHUkqvaZ5TAA0kAgcRy4Wyo5dIBdkIf57UXX8/c9UlMLJg==}
+
+ '@firebase/ai@2.12.0':
+ resolution: {integrity: sha512-b+OL4vdyiSLZL/7dLd67V55CjKJvU9MpNmwnday7eA6GG2+J4iwUEsEHgw0/jKY3A41FfkF0SrnYFvtKbQZ65A==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- '@csstools/css-parser-algorithms': ^2.7.0
- '@csstools/css-tokenizer': ^2.3.2
+ '@firebase/app': 0.x
+ '@firebase/app-types': 0.x
- '@csstools/css-color-parser@3.1.0':
- resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==}
- engines: {node: '>=18'}
+ '@firebase/analytics-compat@0.2.28':
+ resolution: {integrity: sha512-lIAlqUUbBu93FJMlQfslryQtBwwzdzvp23ePC6FNgymXk6Ook5v4Uvc0vdutvoIeqmyA3LfP0ZeRFK8+11kOOQ==}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
+ '@firebase/app-compat': 0.x
- '@csstools/css-parser-algorithms@2.3.2':
- resolution: {integrity: sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/analytics-types@0.8.4':
+ resolution: {integrity: sha512-zQ+XTgkwH6CY/eUSHJRP7e4LxM30RCxlCmob5sy2axs25GE3Ny0XdgpDscMTHHQIGqWkxPXad4w2Mw9sCgT8zQ==}
+
+ '@firebase/analytics@0.10.22':
+ resolution: {integrity: sha512-8BSaq/QRGU1+xyi8L2PTLTJU7MH9aMA72RQdIxrbhWFauOZY9OXo8f2YDN/972xA8d588tlnNVEQ2Mo69pT9Ow==}
peerDependencies:
- '@csstools/css-tokenizer': ^2.2.1
+ '@firebase/app': 0.x
- '@csstools/css-parser-algorithms@2.7.0':
- resolution: {integrity: sha512-qvBMcOU/uWFCH/VO0MYe0AMs0BGMWAt6FTryMbFIKYtZtVnqTZtT8ktv5o718llkaGZWomJezJZjq3vJDHeJNQ==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/app-check-compat@0.4.3':
+ resolution: {integrity: sha512-L3AKIRTJxT9b7cDUH3OyV8gWTnmW3vYkwdzRsukWt4kbPBTct12xalnyvHDkm1lKkr+cQq/4uzBx1bOWsQ2ciw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- '@csstools/css-tokenizer': ^2.3.2
+ '@firebase/app-compat': 0.x
- '@csstools/css-parser-algorithms@3.0.5':
- resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
- engines: {node: '>=18'}
+ '@firebase/app-check-interop-types@0.3.4':
+ resolution: {integrity: sha512-zz3i6e13B8BfWiLy8MABtTh8aGIACgKbf9UVnyHcWs+yQzJXgQcl8A46b0zfaiJHdQ+niF0ouAfcpuf+3LMPQg==}
+
+ '@firebase/app-check-types@0.5.4':
+ resolution: {integrity: sha512-xV7JsIyzVr15aA7f3Pi0rB9gdBuVubs89FGA8VkRYA4g0l78poADgdfrScgf7NndSg9mm7cR7PJyY0+t22KaGw==}
+
+ '@firebase/app-check@0.11.3':
+ resolution: {integrity: sha512-aJ4DfubWfTO8/2vhEhIAizOoOmiycESTU32e+OUgbWcS/G3PA4Vxlr/9zaiN2wfUG2AptQ7DTvj00tyuFZP5Bg==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- '@csstools/css-tokenizer': ^3.0.4
+ '@firebase/app': 0.x
- '@csstools/css-tokenizer@2.2.1':
- resolution: {integrity: sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/app-compat@0.5.12':
+ resolution: {integrity: sha512-Pe513OBerK/CIBxz4/za9atd5MsZtd6DzHz4cmqkvkrcDWhQChAoHBpZ3McuZNuSP8YZiKwfX/J1frR07l15/w==}
+ engines: {node: '>=20.0.0'}
- '@csstools/css-tokenizer@2.3.2':
- resolution: {integrity: sha512-0xYOf4pQpAaE6Sm2Q0x3p25oRukzWQ/O8hWVvhIt9Iv98/uu053u2CGm/g3kJ+P0vOYTAYzoU8Evq2pg9ZPXtw==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/app-types@0.9.5':
+ resolution: {integrity: sha512-YevqTjvo7Iujsa9Dwowmd6dSoElhzmD63ZSrq6bzjvQ6POjYgNjOFHLmNIgJs48eNO093NCERibuFnxbfOvU7A==}
- '@csstools/css-tokenizer@3.0.4':
- resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
- engines: {node: '>=18'}
+ '@firebase/app@0.14.12':
+ resolution: {integrity: sha512-FT+HoNp1NdaZ/N26hCwV3WbxS1m6gTn3p2QRBQ3KH7YqyCQqJx0iT7126RgVk68/Rq+9DeL/zCFnHZ0C4u1nLQ==}
+ engines: {node: '>=20.0.0'}
- '@csstools/media-query-list-parser@2.1.12':
- resolution: {integrity: sha512-t1/CdyVJzOQUiGUcIBXRzTAkWTFPxiPnoKwowKW2z9Uj78c2bBWI/X94BeVfUwVq1xtCjD7dnO8kS6WONgp8Jw==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/auth-compat@0.6.6':
+ resolution: {integrity: sha512-KDJ/GAf/rt7galOpn3DRb2buFfGkZCsHTryKjXDG0eeRnok4+2B4nnkMOMdjRnPkElmcJv2Ao0vEA6kp5m98PQ==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- '@csstools/css-parser-algorithms': ^2.7.0
- '@csstools/css-tokenizer': ^2.3.2
+ '@firebase/app-compat': 0.x
- '@csstools/media-query-list-parser@2.1.5':
- resolution: {integrity: sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^2.3.2
- '@csstools/css-tokenizer': ^2.2.1
+ '@firebase/auth-interop-types@0.2.5':
+ resolution: {integrity: sha512-1Li/YuBDBAXcKv7BzY4U28gontUmAaw53sYiqbaVOMCFb2lFKK/c3CGMUWqtwe7+TXrl3poWnTCL5umYBg85Eg==}
- '@csstools/postcss-cascade-layers@4.0.6':
- resolution: {integrity: sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/auth-types@0.13.1':
+ resolution: {integrity: sha512-0c1Mnid0uMDfGJHeUS4zfvBa4/CedJXotGy/n/NZJnBjwiJawt0ZYU+wH2VAVLiRCEfG2ncCkAX3yd1/2nrB7g==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-types': 0.x
+ '@firebase/util': 1.x
- '@csstools/postcss-color-function@3.0.17':
- resolution: {integrity: sha512-hi6g5KHMvxpxf01LCVu5xnNxX5h2Vkn9aKRmspn2esWjWtshuTXVOavTjwvogA+Eycm9Rn21QTYNU+qbKw6IeQ==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/auth@1.13.1':
+ resolution: {integrity: sha512-/1nkKY/MicI+I9WWcx6R4NKs77AaW9NQ0IwsFdUBomWrW0/cXEmopfM2dtLm2oI1qG6z6vom3CXZDHJIJXoMuw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app': 0.x
+ '@react-native-async-storage/async-storage': ^2.2.0 || ^3.0.0
+ peerDependenciesMeta:
+ '@react-native-async-storage/async-storage':
+ optional: true
- '@csstools/postcss-color-mix-function@2.0.17':
- resolution: {integrity: sha512-Y65GHGCY1R+9+/5KrJjN7gAF1NZydng4AGknMggeUJIyo2ckLb4vBrlDmpIcHDdjQtV5631j1hxvalVTbpoiFw==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ '@firebase/component@0.7.3':
+ resolution: {integrity: sha512-wFofIaa2879ogD/WvkjYXJxRmfnL0scen6ORgaC3na1FNOR9ASIUANQdhqQcmWu/h77/pVHY7ch5flewa5Bcew==}
+ engines: {node: '>=20.0.0'}
- '@csstools/postcss-exponential-functions@1.0.8':
- resolution: {integrity: sha512-/4WHpu4MrCCsUWRaDreyBcdF+5xnudk1JJLg6aWREeMaSpr3vsD0eywmOXct3xUm28TCqKS//S86IlcDJJdzoQ==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/data-connect@0.7.0':
+ resolution: {integrity: sha512-ar9sNOJh5poQCSMSVlnVE8eo8+usTD1POWDCv65omkKUvnFMcdXaQ7J/e7WGKqJzcEMgiezSX/TZiKHZkItMbQ==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app': 0.x
- '@csstools/postcss-font-format-keywords@3.0.2':
- resolution: {integrity: sha512-E0xz2sjm4AMCkXLCFvI/lyl4XO6aN1NCSMMVEOngFDJ+k2rDwfr6NDjWljk1li42jiLNChVX+YFnmfGCigZKXw==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ '@firebase/database-compat@2.1.4':
+ resolution: {integrity: sha512-3pK35F1MAgmqFJQlf2nhQl44vtAXQO1uaCaQOEUI9kCRtLFqi7N+QRKR7lFZPg+xIZIyubgxQaxY69YgfZRZWg==}
+ engines: {node: '>=20.0.0'}
- '@csstools/postcss-gamut-mapping@1.0.10':
- resolution: {integrity: sha512-iPz4/cO8YiNjAYdtAiKGBdKZdFlAvDtUr2AgvAMxCa83e9MwTIKmsJZC3Frw7VYmkfknmdElEZr1FJU+PmB2PA==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ '@firebase/database-types@1.0.20':
+ resolution: {integrity: sha512-kegbOk/w8iU64pr0q6k2ItyNGjnQBMHFhwS7ohdWI4W+pc0/zhhdGXTdFj6X1oxItRjPoYOsSQmERgBkn/ihxw==}
- '@csstools/postcss-gradients-interpolation-method@4.0.18':
- resolution: {integrity: sha512-rZH7RnNYY911I/n8+DRrcri89GffptdyuFDGGj/UbxDISFirdR1uI/wcur9KYR/uFHXqrnJjrfi1cisfB7bL+g==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ '@firebase/database@1.1.3':
+ resolution: {integrity: sha512-XwWCa+E4TvNGpGwXrycLRNfdogADwFcvuhyow6wDWma9W54roaQIhe+4PM0KiLsIftBdSCGI7OKCXrdSRHbIhw==}
+ engines: {node: '>=20.0.0'}
- '@csstools/postcss-hwb-function@3.0.16':
- resolution: {integrity: sha512-nlC4D5xB7pomgR4kDZ1lqbVqrs6gxPqsM2OE5CkCn0EqCMxtqqtadtbK2dcFwzyujv3DL4wYNo+fgF4rJgLPZA==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/firestore-compat@0.4.9':
+ resolution: {integrity: sha512-NPtBuFr79BbIQJXFWhW4xFC6rBksK8/ewqCTYbbAYfZBDDx0/iHTUj4WpKi5D4d0Pn2Md/3T/e5V9379G5N/Zg==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-compat': 0.x
- '@csstools/postcss-ic-unit@3.0.6':
- resolution: {integrity: sha512-fHaU9C/sZPauXMrzPitZ/xbACbvxbkPpHoUgB9Kw5evtsBWdVkVrajOyiT9qX7/c+G1yjApoQjP1fQatldsy9w==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/firestore-types@3.0.4':
+ resolution: {integrity: sha512-jGn+JSS4X9zZsrfu7Yw66v5YRdOLD1oyQh4USR0xWl4CUqV/DA6bNIXRPpxH/cUl3iVTNiP6MN7g+EL42A4qfA==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-types': 0.x
+ '@firebase/util': 1.x
- '@csstools/postcss-initial@1.0.1':
- resolution: {integrity: sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/firestore@4.14.1':
+ resolution: {integrity: sha512-PouS0NJZ3NYOZE/tPDvXa8VUeJ10Ll//7jIdFvMYdhQkd/P3O7nlqhyoTmY0h8Xa9hxg+H0j6gxUytJcoZ9YOg==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app': 0.x
- '@csstools/postcss-is-pseudo-class@4.0.8':
- resolution: {integrity: sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/functions-compat@0.4.4':
+ resolution: {integrity: sha512-Be+MwhseVf/eFAZwGrFJGok6S7cmsLrAPK8MgyM8LjM0MewTsx2n01WOOca9jio1UsCZOJ0aVyQobnINcdNuIQ==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-compat': 0.x
- '@csstools/postcss-light-dark-function@1.0.6':
- resolution: {integrity: sha512-bu+cxKpcTrMDMkVCv7QURwKNPZEuXA3J0Udvz3HfmQHt4+OIvvfvDpTgejFXdOliCU4zK9/QdqebPcYneygZtg==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ '@firebase/functions-types@0.6.4':
+ resolution: {integrity: sha512-zV6kgqtduR4rUAdC/ilS7kmb93XD7bEZoJDlVBZqlOw2uGGGCNBQBuleww2rr0Ulr3L9o2TDjumEt68/l1f9DQ==}
- '@csstools/postcss-logical-float-and-clear@2.0.1':
- resolution: {integrity: sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/functions@0.13.4':
+ resolution: {integrity: sha512-oB5rpm2Emxn2+IS1gRelAeT/5tSZMwM/KhqC5LnJsmTNnS1ZDhD7ZMZNgCI8vchTW6PbaXIwEnpUryGuIQsNbg==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app': 0.x
- '@csstools/postcss-logical-overflow@1.0.1':
- resolution: {integrity: sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/installations-compat@0.2.22':
+ resolution: {integrity: sha512-C/zpAuTP5S9OgKSPvXRupw3hoY/JZSlA1wFjD/Sb7LIQE0FNbcMdO8Y4KXVEkjVzma/DDDDIAzxEXqKMAzc88w==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-compat': 0.x
- '@csstools/postcss-logical-overscroll-behavior@1.0.1':
- resolution: {integrity: sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/installations-types@0.5.4':
+ resolution: {integrity: sha512-U2eFapdHwjb43Vx9o+Pmj4dFfvcHEK1IirEFLqMtWrTHvmdrS3gBpBD1kmJk/9HjsOtoHZxJ2Paoe79e+L1ZPg==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-types': 0.x
- '@csstools/postcss-logical-resize@2.0.1':
- resolution: {integrity: sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/installations@0.6.22':
+ resolution: {integrity: sha512-ef6nn3GGQTdReCfotRMG77PJZu8CqEbiK5pEoBnM0gTu/Z9v0i/az2p3HABsa/1beQmmyh1OsOjf7P5+pgwdZw==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app': 0.x
- '@csstools/postcss-logical-viewport-units@2.0.10':
- resolution: {integrity: sha512-nGP0KanI/jXrUMpaIBz6mdy/vNs3d/cjbNYuoEc7lCdNkntmxZvwxC2zIKI8QzGWaYsh9jahozMVceZ0jNyjgg==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ '@firebase/logger@0.5.1':
+ resolution: {integrity: sha512-vZKLsqE1ABOy8OjQiE7cUTFn4gvaqlk88yp8N94Pk/sDpq61YqZGqmVFZTvOyflTwuYFcWirBdYGoJgbDaXKYQ==}
+ engines: {node: '>=20.0.0'}
- '@csstools/postcss-media-minmax@1.1.7':
- resolution: {integrity: sha512-AjLG+vJvhrN2geUjYNvzncW1TJ+vC4QrVPGrLPxOSJ2QXC94krQErSW4aXMj0b13zhvVWeqf2NHIOVQknqV9cg==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/messaging-compat@0.2.26':
+ resolution: {integrity: sha512-fn0XvWOfK4tsDLSipwJUW9Cp6ahWA6z+iJHxZ0pHp9MzMSUNQx85yuxZAuI7gkGXfqs7+DqEDHyyS7jDGswrmQ==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-compat': 0.x
- '@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.10':
- resolution: {integrity: sha512-DXae3i7OYJTejxcoUuf/AOIpy+6FWfGGKo/I3WefZI538l3k+ErU6V2xQOx/UmUXT2FDIdE1Ucl9JkZib2rEsA==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ '@firebase/messaging-interop-types@0.2.4':
+ resolution: {integrity: sha512-wrzITQq+xw5LtygX7O0fu43/k9ABQ4x5H9/sR5m1SbNnhIRI5xd3+raSNJaJkYC4BUhM9A4ZNSnyR2sjhxnb2Q==}
- '@csstools/postcss-nested-calc@3.0.2':
- resolution: {integrity: sha512-ySUmPyawiHSmBW/VI44+IObcKH0v88LqFe0d09Sb3w4B1qjkaROc6d5IA3ll9kjD46IIX/dbO5bwFN/swyoyZA==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/messaging@0.12.26':
+ resolution: {integrity: sha512-lHVTO9uLofymHVWkYeUtMddIPcmJvSzVbHRB88W6XKfxbcKF+p3QrfqKhDxremSB4NQjUla1Gwn7d9umSMmt/w==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app': 0.x
- '@csstools/postcss-normalize-display-values@3.0.2':
- resolution: {integrity: sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/performance-compat@0.2.25':
+ resolution: {integrity: sha512-q6NjTXpIPoFuUmCmMN/maCdTgzT6aExs9xZo+PxfVLj6uLVGvpyAD6XWjmcrb7jChsFBYbq7E5dyNDF7Zhy9kA==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-compat': 0.x
- '@csstools/postcss-oklab-function@3.0.17':
- resolution: {integrity: sha512-kIng3Xmw6NKUvD/eEoHGwbyDFXDsuzsVGtNo3ndgZYYqy+DLiD+3drxwRKiViE5LUieLB1ERczXpLVmpSw61eg==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ '@firebase/performance-types@0.2.4':
+ resolution: {integrity: sha512-kJSEk7b0uhpcPRyL4SQ/GPujLqk52XNKcXlnsKDbWGAb9vugcLvOU3u6zfEdwd+d8hWJb5S5ZizV1JFFI0nkKg==}
- '@csstools/postcss-progressive-custom-properties@3.2.0':
- resolution: {integrity: sha512-BZlirVxCRgKlE7yVme+Xvif72eTn1MYXj8oZ4Knb+jwaH4u3AN1DjbhM7j86RP5vvuAOexJ4JwfifYYKWMN/QQ==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/performance@0.7.12':
+ resolution: {integrity: sha512-fe7nV8teUU3OBHlMUZ9Lw4gLhCW2k4m5Uc3pfWGV+fl8uwJQBGp9Q3lqsJ+HSrFu3Q2pJyLAgrClPGSKyDeYgQ==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app': 0.x
- '@csstools/postcss-relative-color-syntax@2.0.17':
- resolution: {integrity: sha512-EVckAtG8bocItZflXLJ50Su+gwg/4Jhkz1BztyNsT0/svwS6QMAeLjyUA75OsgtejNWQHvBMWna4xc9LCqdjrQ==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/remote-config-compat@0.2.24':
+ resolution: {integrity: sha512-EWZTt6fJ7YmPHodQNsSxAIDZY2x8P5kRPvXAc5CmzzBm+NyPFhODbfDsNllDXDL8jlzp50bVWjDY+BXepZS9Mg==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-compat': 0.x
- '@csstools/postcss-scope-pseudo-class@3.0.1':
- resolution: {integrity: sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ '@firebase/remote-config-types@0.5.1':
+ resolution: {integrity: sha512-cX/1LT6KQwkXzck2eSzeKnuvXZCyr8qaPpDcikoJs7jmI+oBOXixpDLeDtWj1U6GNMkIoXrEDNoyT2Ypcyp5/A==}
- '@csstools/postcss-stepped-value-functions@3.0.9':
- resolution: {integrity: sha512-uAw1J8hiZ0mM1DLaziI7CP5oagSwDnS5kufuROGIJFzESYfTqNVS3b7FgDZto9AxXdkwI+Sn48+cvG8PwzGMog==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/remote-config@0.8.3':
+ resolution: {integrity: sha512-ggGKAaLy9YNOvpFoQZgm5p5SiFw3ZFtwti08dojnBQmQicpThTxvG5xZMSpCTYMj2o3gM/yK9CVd2w+kZub8YA==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app': 0.x
- '@csstools/postcss-text-decoration-shorthand@3.0.7':
- resolution: {integrity: sha512-+cptcsM5r45jntU6VjotnkC9GteFR7BQBfZ5oW7inLCxj7AfLGAzMbZ60hKTP13AULVZBdxky0P8um0IBfLHVA==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/storage-compat@0.4.3':
+ resolution: {integrity: sha512-gruVqjtUGX8tEoeNbaWXZm0Zfcfcb7fvmDmBxV8yPAbWvExRnZYLO2+qw9idxNE7BvPXt5csyjSYHy//dAizxw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-compat': 0.x
- '@csstools/postcss-trigonometric-functions@3.0.9':
- resolution: {integrity: sha512-rCAtKX3EsH91ZIHoxFzAAcMQeQCS+PsjzHl6fvsGXz/SV3lqzSmO7MWgFXyPktC2zjZXgOObAJ/2QkhMqVpgNg==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/storage-types@0.8.4':
+ resolution: {integrity: sha512-BT7cwxJOx8SWwlQfrlC+bD/Sk3Cw+1odCi8UZNFNWTVZoPsBnA5W+mqtZzVnvsdJpXCFGSGQ7R7vOR6dtM/BRA==}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app-types': 0.x
+ '@firebase/util': 1.x
- '@csstools/postcss-unset-value@3.0.1':
- resolution: {integrity: sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==}
- engines: {node: ^14 || ^16 || >=18}
+ '@firebase/storage@0.14.3':
+ resolution: {integrity: sha512-YX4/YL6P6/fufSSeGnVhjWddcIXbFq2cWIhMKFTZo1E/Rtcl2mJj/BYUQTwJfcE1Tl8un1FOya4L05jcSLN/Eg==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- postcss: ^8.4
+ '@firebase/app': 0.x
- '@csstools/selector-resolve-nested@1.1.0':
- resolution: {integrity: sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss-selector-parser: ^6.0.13
+ '@firebase/util@1.15.1':
+ resolution: {integrity: sha512-LUdM4Wg7YM9Pq/49nGYySJA0CSQEKnGffFzWV8+6gXN7mGxn+FL1IqvFbuZUtAQcfZgHYDwCE1wwlK7rB7gl2g==}
+ engines: {node: '>=20.0.0'}
- '@csstools/selector-specificity@3.0.0':
- resolution: {integrity: sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss-selector-parser: ^6.0.13
+ '@firebase/webchannel-wrapper@1.0.6':
+ resolution: {integrity: sha512-Vr/Mqu79dMwGRAyGbJ4uN4+BtXB3/mRTdzetD1daWNeG8QaWuzhhbG77GltO5c0yYmYls8i250iX73624GJd7Q==}
- '@csstools/selector-specificity@3.1.1':
- resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss-selector-parser: ^6.0.13
+ '@floating-ui/core@1.7.5':
+ resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
- '@csstools/utilities@1.0.0':
- resolution: {integrity: sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ '@floating-ui/core@1.8.0':
+ resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==}
- '@discoveryjs/json-ext@0.5.7':
- resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
- engines: {node: '>=10.0.0'}
+ '@floating-ui/dom@1.7.6':
+ resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
- '@emnapi/core@1.5.0':
- resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==}
+ '@floating-ui/dom@1.8.0':
+ resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==}
- '@emnapi/runtime@1.5.0':
- resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==}
+ '@floating-ui/utils@0.2.11':
+ resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
- '@emnapi/wasi-threads@1.1.0':
- resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+ '@floating-ui/utils@0.2.12':
+ resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==}
- '@esbuild/android-arm64@0.18.20':
- resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
+ '@floating-ui/vue@1.1.11':
+ resolution: {integrity: sha512-HzHKCNVxnGS35r9fCHBc3+uCnjw9IWIlCPL683cGgM9Kgj2BiAl8x1mS7vtvP6F9S/e/q4O6MApwSHj8hNLGfw==}
- '@esbuild/android-arm@0.18.20':
- resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
+ '@grpc/grpc-js@1.9.16':
+ resolution: {integrity: sha512-wE4Ut/olIzfKqp631XrG+wbF0v1vWFN4YL9FyXC2LJiG33DsV7PLzURjrCvY/6je2ntdRkeLpPDluzSRGaVltQ==}
+ engines: {node: ^8.13.0 || >=10.10.0}
- '@esbuild/android-x64@0.18.20':
- resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
+ '@grpc/proto-loader@0.7.15':
+ resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==}
+ engines: {node: '>=6'}
+ hasBin: true
- '@esbuild/darwin-arm64@0.18.20':
- resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
- engines: {node: '>=12'}
+ '@humanfs/core@0.19.2':
+ resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.8':
+ resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/types@0.15.0':
+ resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
+
+ '@iconify-json/carbon@1.2.24':
+ resolution: {integrity: sha512-b7u/eTWE3xFa7UXlRJBSEm6At1y6+F0P3imBEip5/8QeRzouxVjBf80Y2xnu1GYsFo9MYlHA0bZfxxMd5givfw==}
+
+ '@iconify/collections@1.0.705':
+ resolution: {integrity: sha512-JyUTM5/vqZfnUwtM18kh3nUB82A8QYHDLQj5zEZAvgR3hFdZvDhlH0LEdqOYKHWMTNW5l16EiiY2kstuw/EiTQ==}
+
+ '@iconify/types@2.0.0':
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+
+ '@iconify/utils@3.1.3':
+ resolution: {integrity: sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==}
+
+ '@iconify/vue@5.0.1':
+ resolution: {integrity: sha512-aumwwooJlFJ5H5qYWB6ZTAyM0C8hpfcSVLB9/a3qnH1GGvIJ+FEbpEs4s/HfErYe/M5qZeLjwmESR5fFm3lXEw==}
+ peerDependencies:
+ vue: '>=3.0.0'
+
+ '@img/colour@1.1.0':
+ resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
+ engines: {node: '>=18'}
+
+ '@img/sharp-darwin-arm64@0.35.3':
+ resolution: {integrity: sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==}
+ engines: {node: '>=20.9.0'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.18.20':
- resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
- engines: {node: '>=12'}
+ '@img/sharp-darwin-x64@0.35.3':
+ resolution: {integrity: sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==}
+ engines: {node: '>=20.9.0'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.18.20':
- resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
- engines: {node: '>=12'}
- cpu: [arm64]
+ '@img/sharp-freebsd-wasm32@0.35.3':
+ resolution: {integrity: sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==}
+ engines: {node: '>=20.9.0'}
os: [freebsd]
- '@esbuild/freebsd-x64@0.18.20':
- resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
- engines: {node: '>=12'}
+ '@img/sharp-libvips-darwin-arm64@1.3.2':
+ resolution: {integrity: sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-x64@1.3.2':
+ resolution: {integrity: sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==}
cpu: [x64]
- os: [freebsd]
+ os: [darwin]
- '@esbuild/linux-arm64@0.18.20':
- resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
- engines: {node: '>=12'}
+ '@img/sharp-libvips-linux-arm64@1.3.2':
+ resolution: {integrity: sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
- '@esbuild/linux-arm@0.18.20':
- resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
- engines: {node: '>=12'}
+ '@img/sharp-libvips-linux-arm@1.3.2':
+ resolution: {integrity: sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==}
cpu: [arm]
os: [linux]
+ libc: [glibc]
- '@esbuild/linux-ia32@0.18.20':
- resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
- engines: {node: '>=12'}
- cpu: [ia32]
+ '@img/sharp-libvips-linux-ppc64@1.3.2':
+ resolution: {integrity: sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==}
+ cpu: [ppc64]
os: [linux]
+ libc: [glibc]
- '@esbuild/linux-loong64@0.18.20':
- resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
- engines: {node: '>=12'}
- cpu: [loong64]
+ '@img/sharp-libvips-linux-riscv64@1.3.2':
+ resolution: {integrity: sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==}
+ cpu: [riscv64]
os: [linux]
+ libc: [glibc]
- '@esbuild/linux-mips64el@0.18.20':
- resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
- engines: {node: '>=12'}
- cpu: [mips64el]
+ '@img/sharp-libvips-linux-s390x@1.3.2':
+ resolution: {integrity: sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==}
+ cpu: [s390x]
os: [linux]
+ libc: [glibc]
- '@esbuild/linux-ppc64@0.18.20':
- resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
- engines: {node: '>=12'}
+ '@img/sharp-libvips-linux-x64@1.3.2':
+ resolution: {integrity: sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.3.2':
+ resolution: {integrity: sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-libvips-linuxmusl-x64@1.3.2':
+ resolution: {integrity: sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-linux-arm64@0.35.3':
+ resolution: {integrity: sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-arm@0.35.3':
+ resolution: {integrity: sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-ppc64@0.35.3':
+ resolution: {integrity: sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==}
+ engines: {node: '>=20.9.0'}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
- '@esbuild/linux-riscv64@0.18.20':
- resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
- engines: {node: '>=12'}
+ '@img/sharp-linux-riscv64@0.35.3':
+ resolution: {integrity: sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==}
+ engines: {node: '>=20.9.0'}
cpu: [riscv64]
os: [linux]
+ libc: [glibc]
- '@esbuild/linux-s390x@0.18.20':
- resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
- engines: {node: '>=12'}
+ '@img/sharp-linux-s390x@0.35.3':
+ resolution: {integrity: sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==}
+ engines: {node: '>=20.9.0'}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
- '@esbuild/linux-x64@0.18.20':
- resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
- engines: {node: '>=12'}
+ '@img/sharp-linux-x64@0.35.3':
+ resolution: {integrity: sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==}
+ engines: {node: '>=20.9.0'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
- '@esbuild/netbsd-x64@0.18.20':
- resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
+ '@img/sharp-linuxmusl-arm64@0.35.3':
+ resolution: {integrity: sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==}
+ engines: {node: '>=20.9.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@esbuild/openbsd-x64@0.18.20':
- resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
- engines: {node: '>=12'}
+ '@img/sharp-linuxmusl-x64@0.35.3':
+ resolution: {integrity: sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==}
+ engines: {node: '>=20.9.0'}
cpu: [x64]
- os: [openbsd]
+ os: [linux]
+ libc: [musl]
- '@esbuild/sunos-x64@0.18.20':
- resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
+ '@img/sharp-wasm32@0.35.3':
+ resolution: {integrity: sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==}
+ engines: {node: '>=20.9.0'}
- '@esbuild/win32-arm64@0.18.20':
- resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
- engines: {node: '>=12'}
+ '@img/sharp-webcontainers-wasm32@0.35.3':
+ resolution: {integrity: sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==}
+ engines: {node: '>=20.9.0'}
+ cpu: [wasm32]
+
+ '@img/sharp-win32-arm64@0.35.3':
+ resolution: {integrity: sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==}
+ engines: {node: '>=20.9.0'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.18.20':
- resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
- engines: {node: '>=12'}
+ '@img/sharp-win32-ia32@0.35.3':
+ resolution: {integrity: sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==}
+ engines: {node: ^20.9.0}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.18.20':
- resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
- engines: {node: '>=12'}
+ '@img/sharp-win32-x64@0.35.3':
+ resolution: {integrity: sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==}
+ engines: {node: '>=20.9.0'}
cpu: [x64]
os: [win32]
- '@eslint-community/eslint-utils@4.4.0':
- resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ '@internationalized/date@3.12.2':
+ resolution: {integrity: sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw==}
- '@eslint-community/eslint-utils@4.7.0':
- resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ '@internationalized/number@3.6.7':
+ resolution: {integrity: sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==}
- '@eslint-community/regexpp@4.9.0':
- resolution: {integrity: sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ '@ioredis/commands@1.10.0':
+ resolution: {integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==}
- '@eslint/eslintrc@2.1.4':
- resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
- '@eslint/js@8.57.1':
- resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@isaacs/fs-minipass@4.0.1':
+ resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
+ engines: {node: '>=18.0.0'}
- '@fastify/busboy@1.2.1':
- resolution: {integrity: sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q==}
- engines: {node: '>=14'}
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
- '@firebase/analytics-compat@0.2.14':
- resolution: {integrity: sha512-unRVY6SvRqfNFIAA/kwl4vK+lvQAL2HVcgu9zTrUtTyYDmtIt/lOuHJynBMYEgLnKm39YKBDhtqdapP2e++ASw==}
- peerDependencies:
- '@firebase/app-compat': 0.x
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
- '@firebase/analytics-types@0.8.2':
- resolution: {integrity: sha512-EnzNNLh+9/sJsimsA/FGqzakmrAUKLeJvjRHlg8df1f97NLUlFidk9600y0ZgWOp3CAxn6Hjtk+08tixlUOWyw==}
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
- '@firebase/analytics@0.10.8':
- resolution: {integrity: sha512-CVnHcS4iRJPqtIDc411+UmFldk0ShSK3OB+D0bKD8Ck5Vro6dbK5+APZpkuWpbfdL359DIQUnAaMLE+zs/PVyA==}
- peerDependencies:
- '@firebase/app': 0.x
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
- '@firebase/app-check-compat@0.3.15':
- resolution: {integrity: sha512-zFIvIFFNqDXpOT2huorz9cwf56VT3oJYRFjSFYdSbGYEJYEaXjLJbfC79lx/zjx4Fh+yuN8pry3TtvwaevrGbg==}
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@keyv/bigmap@1.3.1':
+ resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==}
+ engines: {node: '>= 18'}
peerDependencies:
- '@firebase/app-compat': 0.x
+ keyv: ^5.6.0
- '@firebase/app-check-interop-types@0.3.2':
- resolution: {integrity: sha512-LMs47Vinv2HBMZi49C09dJxp0QT5LwDzFaVGf/+ITHe3BlIhUiLNttkATSXplc89A2lAaeTqjgqVkiRfUGyQiQ==}
+ '@keyv/serialize@1.1.1':
+ resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==}
- '@firebase/app-check-types@0.5.2':
- resolution: {integrity: sha512-FSOEzTzL5bLUbD2co3Zut46iyPWML6xc4x+78TeaXMSuJap5QObfb+rVvZJtla3asN4RwU7elaQaduP+HFizDA==}
+ '@kurkle/color@0.3.4':
+ resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==}
- '@firebase/app-check@0.8.8':
- resolution: {integrity: sha512-O49RGF1xj7k6BuhxGpHmqOW5hqBIAEbt2q6POW0lIywx7emYtzPDeQI+ryQpC4zbKX646SoVZ711TN1DBLNSOQ==}
- peerDependencies:
- '@firebase/app': 0.x
+ '@kwsites/file-exists@1.1.1':
+ resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==}
- '@firebase/app-compat@0.2.43':
- resolution: {integrity: sha512-HM96ZyIblXjAC7TzE8wIk2QhHlSvksYkQ4Ukh1GmEenzkucSNUmUX4QvoKrqeWsLEQ8hdcojABeCV8ybVyZmeg==}
+ '@kwsites/promise-deferred@1.1.1':
+ resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
- '@firebase/app-types@0.8.1':
- resolution: {integrity: sha512-p75Ow3QhB82kpMzmOntv866wH9eZ3b4+QbUY+8/DA5Zzdf1c8Nsk8B7kbFpzJt4wwHMdy5LTF5YUnoTc1JiWkw==}
+ '@mapbox/node-pre-gyp@2.0.3':
+ resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==}
+ engines: {node: '>=18'}
+ hasBin: true
- '@firebase/app-types@0.9.2':
- resolution: {integrity: sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ==}
+ '@mdi/js@7.4.47':
+ resolution: {integrity: sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==}
- '@firebase/app@0.10.13':
- resolution: {integrity: sha512-OZiDAEK/lDB6xy/XzYAyJJkaDqmQ+BCtOEPLqFvxWKUz5JbBmej7IiiRHdtiIOD/twW7O5AxVsfaaGA/V1bNsA==}
+ '@napi-rs/lzma-linux-x64-gnu@1.5.1':
+ resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==}
+ engines: {node: ^22.20 || ^24.12 || >=25}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@firebase/auth-compat@0.5.14':
- resolution: {integrity: sha512-2eczCSqBl1KUPJacZlFpQayvpilg3dxXLy9cSMTKtQMTQSmondUtPI47P3ikH3bQAXhzKLOE+qVxJ3/IRtu9pw==}
+ '@napi-rs/wasm-runtime@1.1.4':
+ resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
peerDependencies:
- '@firebase/app-compat': 0.x
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
- '@firebase/auth-interop-types@0.1.7':
- resolution: {integrity: sha512-yA/dTveGGPcc85JP8ZE/KZqfGQyQTBCV10THdI8HTlP1GDvNrhr//J5jAt58MlsCOaO3XmC4DqScPBbtIsR/EA==}
+ '@napi-rs/wasm-runtime@1.1.6':
+ resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==}
peerDependencies:
- '@firebase/app-types': 0.x
- '@firebase/util': 1.x
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
- '@firebase/auth-interop-types@0.2.3':
- resolution: {integrity: sha512-Fc9wuJGgxoxQeavybiuwgyi+0rssr76b+nHpj+eGhXFYAdudMWyfBHvFL/I5fEHniUM/UQdFzi9VXJK2iZF7FQ==}
+ '@nodable/entities@2.2.0':
+ resolution: {integrity: sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg==}
- '@firebase/auth-types@0.12.2':
- resolution: {integrity: sha512-qsEBaRMoGvHO10unlDJhaKSuPn4pyoTtlQuP1ghZfzB6rNQPuhp/N/DcFZxm9i4v0SogjCbf9reWupwIvfmH6w==}
- peerDependencies:
- '@firebase/app-types': 0.x
- '@firebase/util': 1.x
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
- '@firebase/auth@1.7.9':
- resolution: {integrity: sha512-yLD5095kVgDw965jepMyUrIgDklD6qH/BZNHeKOgvu7pchOKNjVM+zQoOVYJIKWMWOWBq8IRNVU6NXzBbozaJg==}
+ '@nuxt/cli@3.37.0':
+ resolution: {integrity: sha512-Zj9NwHjEBzVrgezsgMFjpMhNqwNgROk9DzNi/dyfk1mCbXIRigV11br2xOl0Satek30bmv7oZAfMtCnDe6Ip0Q==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+ hasBin: true
peerDependencies:
- '@firebase/app': 0.x
- '@react-native-async-storage/async-storage': ^1.18.1
+ '@nuxt/schema': ^4.4.6
peerDependenciesMeta:
- '@react-native-async-storage/async-storage':
+ '@nuxt/schema':
optional: true
- '@firebase/component@0.5.21':
- resolution: {integrity: sha512-12MMQ/ulfygKpEJpseYMR0HunJdlsLrwx2XcEs40M18jocy2+spyzHHEwegN3x/2/BLFBjR5247Etmz0G97Qpg==}
-
- '@firebase/component@0.6.9':
- resolution: {integrity: sha512-gm8EUEJE/fEac86AvHn8Z/QW8BvR56TBw3hMW0O838J/1mThYQXAIQBgUv75EqlCZfdawpWLrKt1uXvp9ciK3Q==}
+ '@nuxt/devalue@2.0.2':
+ resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==}
- '@firebase/data-connect@0.1.0':
- resolution: {integrity: sha512-vSe5s8dY13ilhLnfY0eYRmQsdTbH7PUFZtBbqU6JVX/j8Qp9A6G5gG6//ulbX9/1JFOF1IWNOne9c8S/DOCJaQ==}
+ '@nuxt/devtools-kit@3.2.4':
+ resolution: {integrity: sha512-Yxy2Xgmq5hf3dQy983V0xh0OJV2mYwRZz9eVIGc3EaribdFGPDNGMMbYqX9qCty3Pbxn/bCF3J0UyPaNlHVayQ==}
peerDependencies:
- '@firebase/app': 0.x
-
- '@firebase/database-compat@0.2.10':
- resolution: {integrity: sha512-fK+IgUUqVKcWK/gltzDU+B1xauCOfY6vulO8lxoNTkcCGlSxuTtwsdqjGkFmgFRMYjXFWWJ6iFcJ/vXahzwCtA==}
-
- '@firebase/database-compat@1.0.8':
- resolution: {integrity: sha512-OpeWZoPE3sGIRPBKYnW9wLad25RaWbGyk7fFQe4xnJQKRzlynWeFBSRRAoLE2Old01WXwskUiucNqUUVlFsceg==}
-
- '@firebase/database-types@0.9.17':
- resolution: {integrity: sha512-YQm2tCZyxNtEnlS5qo5gd2PAYgKCy69tUKwioGhApCFThW+mIgZs7IeYeJo2M51i4LCixYUl+CvnOyAnb/c3XA==}
+ vite: '>=6.0'
- '@firebase/database-types@1.0.5':
- resolution: {integrity: sha512-fTlqCNwFYyq/C6W7AJ5OCuq5CeZuBEsEwptnVxlNPkWCo5cTTyukzAHRSO/jaQcItz33FfYrrFk1SJofcu2AaQ==}
+ '@nuxt/devtools-kit@3.4.1':
+ resolution: {integrity: sha512-6ltPm2yUW8GvDdf3VJna7+flLi+ej7xRfSr+S4ovevKt/CuPf9EqYOn1jW7Kw/U1MXt/71zkn+/O2vu3G6O9Hg==}
+ peerDependencies:
+ vite: '>=6.0'
- '@firebase/database@0.13.10':
- resolution: {integrity: sha512-KRucuzZ7ZHQsRdGEmhxId5jyM2yKsjsQWF9yv0dIhlxYg0D8rCVDZc/waoPKA5oV3/SEIoptF8F7R1Vfe7BCQA==}
+ '@nuxt/devtools-kit@4.0.0-alpha.3':
+ resolution: {integrity: sha512-ymp4jqS3hFfwRw8uDkv8cpu4kWvhQrX+S4jnA/oOc76s4AXf2HCZZJgrncKxh+txqi1NJj8nsQNBbaqRAo3g4w==}
+ peerDependencies:
+ vite: '>=6.0'
- '@firebase/database@1.0.8':
- resolution: {integrity: sha512-dzXALZeBI1U5TXt6619cv0+tgEhJiwlUtQ55WNZY7vGAjv7Q1QioV969iYwt1AQQ0ovHnEW0YW9TiBfefLvErg==}
+ '@nuxt/devtools-wizard@3.4.1':
+ resolution: {integrity: sha512-taGeuTnkHsZVjgD9r6NXvvHaBzB2j4mCgOmlmkz3ntsqgh1SJfmsD11Tmtl7FVAxJS8Wuvuzgt0GyTlADBW9Wg==}
+ hasBin: true
- '@firebase/firestore-compat@0.3.38':
- resolution: {integrity: sha512-GoS0bIMMkjpLni6StSwRJarpu2+S5m346Na7gr9YZ/BZ/W3/8iHGNr9PxC+f0rNZXqS4fGRn88pICjrZEgbkqQ==}
+ '@nuxt/devtools@3.4.1':
+ resolution: {integrity: sha512-20zZs6k/zAdi+PM7s1BwxE3hanZ+R1OGi5DWCKPyzSnhUUeeNebvWNgec7Rwnx6iKLkJfK4WFIZ+FL2QurG/ZQ==}
+ hasBin: true
peerDependencies:
- '@firebase/app-compat': 0.x
+ '@vitejs/devtools': '*'
+ vite: '>=6.0'
+ peerDependenciesMeta:
+ '@vitejs/devtools':
+ optional: true
- '@firebase/firestore-types@3.0.2':
- resolution: {integrity: sha512-wp1A+t5rI2Qc/2q7r2ZpjUXkRVPtGMd6zCLsiWurjsQpqPgFin3AhNibKcIzoF2rnToNa/XYtyWXuifjOOwDgg==}
+ '@nuxt/eslint-config@1.16.0':
+ resolution: {integrity: sha512-YWEqctFWoKOUTaHWXe6TaUgZ1ewN7jeKz/ni4JopxDGIQ8AIMMST6VMWryybHqbPzEfpx8sEcAAFGM4W4quYhQ==}
peerDependencies:
- '@firebase/app-types': 0.x
- '@firebase/util': 1.x
+ eslint: ^9.0.0 || ^10.0.0
+ eslint-plugin-format: '*'
+ peerDependenciesMeta:
+ eslint-plugin-format:
+ optional: true
- '@firebase/firestore@4.7.3':
- resolution: {integrity: sha512-NwVU+JPZ/3bhvNSJMCSzfcBZZg8SUGyzZ2T0EW3/bkUeefCyzMISSt/TTIfEHc8cdyXGlMqfGe3/62u9s74UEg==}
- engines: {node: '>=10.10.0'}
+ '@nuxt/eslint-plugin@1.16.0':
+ resolution: {integrity: sha512-vbX9EsJqTqIRwf3+sv9mJ/OtFKhH8o8NIbNF9Q6weQZY1MRf8jGEvLnjsyJa5VEEHl5TXSXsPcyrmIK58jsRpw==}
peerDependencies:
- '@firebase/app': 0.x
+ eslint: ^9.0.0 || ^10.0.0
- '@firebase/functions-compat@0.3.14':
- resolution: {integrity: sha512-dZ0PKOKQFnOlMfcim39XzaXonSuPPAVuzpqA4ONTIdyaJK/OnBaIEVs/+BH4faa1a2tLeR+Jy15PKqDRQoNIJw==}
+ '@nuxt/eslint@1.16.0':
+ resolution: {integrity: sha512-VlZBHG86xUY72pZMcZ98cDtsUj972vZ23Pd4wqpxMLgLJ3RtHxQke0vgD/6PZ6uJsRjh7CAUGpsp2+d26ZdaSA==}
peerDependencies:
- '@firebase/app-compat': 0.x
-
- '@firebase/functions-types@0.6.2':
- resolution: {integrity: sha512-0KiJ9lZ28nS2iJJvimpY4nNccV21rkQyor5Iheu/nq8aKXJqtJdeSlZDspjPSBBiHRzo7/GMUttegnsEITqR+w==}
+ eslint: ^9.0.0 || ^10.0.0
+ eslint-webpack-plugin: ^4.1.0
+ vite-plugin-eslint2: ^5.0.0
+ peerDependenciesMeta:
+ eslint-webpack-plugin:
+ optional: true
+ vite-plugin-eslint2:
+ optional: true
- '@firebase/functions@0.11.8':
- resolution: {integrity: sha512-Lo2rTPDn96naFIlSZKVd1yvRRqqqwiJk7cf9TZhUerwnPKgBzXy+aHE22ry+6EjCaQusUoNai6mU6p+G8QZT1g==}
- peerDependencies:
- '@firebase/app': 0.x
+ '@nuxt/fonts@0.14.0':
+ resolution: {integrity: sha512-4uXQl9fa5F4ibdgU8zomoOcyMdnwgdem+Pi8JEqeDYI5yPR32Kam6HnuRr47dTb97CstaepAvXPWQUUHMtjsFQ==}
- '@firebase/installations-compat@0.2.9':
- resolution: {integrity: sha512-2lfdc6kPXR7WaL4FCQSQUhXcPbI7ol3wF+vkgtU25r77OxPf8F/VmswQ7sgIkBBWtymn5ZF20TIKtnOj9rjb6w==}
- peerDependencies:
- '@firebase/app-compat': 0.x
+ '@nuxt/icon@2.3.1':
+ resolution: {integrity: sha512-ebx7Zp08eR0Mw3zFAh3aT+t5zC4RoI0Xf0wLEfbv23LIPUQ9fvxYpofNiNZdG9m96Fvc3pQu6v+NaCRbRYRRog==}
- '@firebase/installations-types@0.5.2':
- resolution: {integrity: sha512-que84TqGRZJpJKHBlF2pkvc1YcXrtEDOVGiDjovP/a3s6W4nlbohGXEsBJo0JCeeg/UG9A+DEZVDUV9GpklUzA==}
- peerDependencies:
- '@firebase/app-types': 0.x
+ '@nuxt/kit@3.21.6':
+ resolution: {integrity: sha512-5VOwxUcoM/z6w4c75hQrikHpY+TzjTLZQ+QnuO7KajyGx0IJBLVy1lw25oy79leF+GgyjJJO1cHfUfWeuEDCzA==}
+ engines: {node: '>=18.12.0'}
- '@firebase/installations@0.6.9':
- resolution: {integrity: sha512-hlT7AwCiKghOX3XizLxXOsTFiFCQnp/oj86zp1UxwDGmyzsyoxtX+UIZyVyH/oBF5+XtblFG9KZzZQ/h+dpy+Q==}
- peerDependencies:
- '@firebase/app': 0.x
+ '@nuxt/kit@4.4.6':
+ resolution: {integrity: sha512-AzsqBJeG7b3whIciyzkz4nBossEotM314KzKAptc8kH07ORBIR8Qh3QYKepo2YZwtxiDP2Y9aqzAztwpSEDHtw==}
+ engines: {node: '>=18.12.0'}
- '@firebase/logger@0.3.4':
- resolution: {integrity: sha512-hlFglGRgZEwoyClZcGLx/Wd+zoLfGmbDkFx56mQt/jJ0XMbfPqwId1kiPl0zgdWZX+D8iH+gT6GuLPFsJWgiGw==}
+ '@nuxt/kit@4.4.8':
+ resolution: {integrity: sha512-ZUlZ5iYfyfJFDPluhn6ZxFWcsuxWbLnZBc8w3MAROcQ4lYfZ+qFpALBLSNlpc0zhOa++33EE+5PEbOAdVIY+dw==}
+ engines: {node: '>=18.12.0'}
- '@firebase/logger@0.4.2':
- resolution: {integrity: sha512-Q1VuA5M1Gjqrwom6I6NUU4lQXdo9IAQieXlujeHZWvRt1b7qQ0KwBaNAjgxG27jgF9/mUwsNmO8ptBCGVYhB0A==}
+ '@nuxt/kit@4.5.1':
+ resolution: {integrity: sha512-xDXQspE2blxaZwxwGknL/BqaIbkLizl85Ov+pbSlPPd/rw2KjJGx88RHU5SwoQNwCiSC5hWZBnVAznIsq1xNHQ==}
+ engines: {node: '>=18.12.0'}
- '@firebase/messaging-compat@0.2.12':
- resolution: {integrity: sha512-pKsiUVZrbmRgdImYqhBNZlkKJbqjlPkVdQRZGRbkTyX4OSGKR0F/oJeCt1a8jEg5UnBp4fdVwSWSp4DuCovvEQ==}
+ '@nuxt/nitro-server@4.5.1':
+ resolution: {integrity: sha512-bYg+Rri9qLNiNnK70mvdghwwWtOEvlvBn3BnnEZWEFM8A51zM803Ltg+TwR6B6/1jdYOdZ6cnso4pvpCJuPlww==}
+ engines: {node: ^22.19.0 || ^24.11.0 || >=26.0.0}
peerDependencies:
- '@firebase/app-compat': 0.x
+ '@babel/plugin-proposal-decorators': ^7.25.0 || ^8.0.0
+ '@babel/plugin-syntax-typescript': ^7.25.0 || ^8.0.0
+ '@rollup/plugin-babel': ^6.0.0 || ^7.0.0
+ nuxt: ^4.5.1
+ peerDependenciesMeta:
+ '@babel/plugin-proposal-decorators':
+ optional: true
+ '@babel/plugin-syntax-typescript':
+ optional: true
+ '@rollup/plugin-babel':
+ optional: true
- '@firebase/messaging-interop-types@0.2.2':
- resolution: {integrity: sha512-l68HXbuD2PPzDUOFb3aG+nZj5KA3INcPwlocwLZOzPp9rFM9yeuI9YLl6DQfguTX5eAGxO0doTR+rDLDvQb5tA==}
+ '@nuxt/schema@4.5.1':
+ resolution: {integrity: sha512-RDdu0BBg9y+Eiyu95LUDJ57YrejJ5v1/VA2r5oBLYiiSiLrlVt33HN9ut4qSyUN8gRTOXnFADery8AyJpTjdWA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
- '@firebase/messaging@0.12.12':
- resolution: {integrity: sha512-6q0pbzYBJhZEtUoQx7hnPhZvAbuMNuBXKQXOx2YlWhSrlv9N1m0ZzlNpBbu/ItTzrwNKTibdYzUyaaxdWLg+4w==}
- peerDependencies:
- '@firebase/app': 0.x
+ '@nuxt/schema@4.5.2':
+ resolution: {integrity: sha512-h9g1kt9O2iU9nX6HDFu9gvwtpn+8oSJX0RSTWRBnEx/Pkz+WlOHtjuS0SbkTAXw5aT1+H1GysWVwNTjJfBY/0w==}
+ engines: {node: ^14.18.0 || >=16.10.0}
- '@firebase/performance-compat@0.2.9':
- resolution: {integrity: sha512-dNl95IUnpsu3fAfYBZDCVhXNkASE0uo4HYaEPd2/PKscfTvsgqFAOxfAXzBEDOnynDWiaGUnb5M1O00JQ+3FXA==}
+ '@nuxt/telemetry@2.8.0':
+ resolution: {integrity: sha512-zAwXY24KYvpLTmiV+osagd2EHkfs5IF+7oDZYTQoit5r0kPlwaCNlzHp5I/wUAWT4LBw6lG8gZ6bWidAdv/erQ==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
peerDependencies:
- '@firebase/app-compat': 0.x
+ '@nuxt/kit': '>=3.0.0'
- '@firebase/performance-types@0.2.2':
- resolution: {integrity: sha512-gVq0/lAClVH5STrIdKnHnCo2UcPLjJlDUoEB/tB4KM+hAeHUxWKnpT0nemUPvxZ5nbdY/pybeyMe8Cs29gEcHA==}
-
- '@firebase/performance@0.6.9':
- resolution: {integrity: sha512-PnVaak5sqfz5ivhua+HserxTJHtCar/7zM0flCX6NkzBNzJzyzlH4Hs94h2Il0LQB99roBqoE5QT1JqWqcLJHQ==}
+ '@nuxt/ui@4.9.0':
+ resolution: {integrity: sha512-ufcG2UsX6/SMqh/oa4pIKM5AHDDK1ZWRTe6f4+Y5/xFUh1TBD25o4eb35BGFap16Uy/iIow1ih8g8h8wcw1Wcg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
peerDependencies:
- '@firebase/app': 0.x
+ '@inertiajs/vue3': ^2.0.7 || ^3.0.0
+ '@internationalized/date': ^3.0.0
+ '@internationalized/number': ^3.0.0
+ '@nuxt/content': ^3.0.0
+ '@tiptap/core': ^3
+ '@tiptap/extension-bubble-menu': ^3
+ '@tiptap/extension-code': ^3
+ '@tiptap/extension-collaboration': ^3
+ '@tiptap/extension-drag-handle': ^3
+ '@tiptap/extension-drag-handle-vue-3': ^3
+ '@tiptap/extension-floating-menu': ^3
+ '@tiptap/extension-horizontal-rule': ^3
+ '@tiptap/extension-image': ^3
+ '@tiptap/extension-mention': ^3
+ '@tiptap/extension-node-range': ^3
+ '@tiptap/extension-placeholder': ^3
+ '@tiptap/markdown': ^3
+ '@tiptap/pm': ^3
+ '@tiptap/starter-kit': ^3
+ '@tiptap/suggestion': ^3
+ '@tiptap/vue-3': ^3
+ joi: ^18.0.0
+ superstruct: ^2.0.0
+ tailwindcss: ^4.0.0
+ typescript: ^5.6.3 || ^6.0.0
+ valibot: ^1.0.0
+ vue-router: ^4.5.0 || ^5.0.0
+ yup: ^1.7.0
+ zod: ^3.24.0 || ^4.0.0
+ peerDependenciesMeta:
+ '@inertiajs/vue3':
+ optional: true
+ '@internationalized/date':
+ optional: true
+ '@internationalized/number':
+ optional: true
+ '@nuxt/content':
+ optional: true
+ joi:
+ optional: true
+ superstruct:
+ optional: true
+ valibot:
+ optional: true
+ vue-router:
+ optional: true
+ yup:
+ optional: true
+ zod:
+ optional: true
- '@firebase/remote-config-compat@0.2.9':
- resolution: {integrity: sha512-AxzGpWfWFYejH2twxfdOJt5Cfh/ATHONegTd/a0p5flEzsD5JsxXgfkFToop+mypEL3gNwawxrxlZddmDoNxyA==}
+ '@nuxt/vite-builder@4.5.1':
+ resolution: {integrity: sha512-gHMqCZ4Fd9lvJ6FUh9qyzD5Sdx0UyM1pxV+wzjlQvBbX4NxvB16spMcNGUUnnV6nX2so3JJROXxghlKf7Uj6nw==}
+ engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0}
peerDependencies:
- '@firebase/app-compat': 0.x
+ '@babel/plugin-proposal-decorators': ^7.25.0 || ^8.0.0
+ '@babel/plugin-syntax-jsx': ^7.25.0 || ^8.0.0
+ nuxt: 4.5.1
+ rolldown: ^1.0.0
+ rollup-plugin-visualizer: ^6.0.0 || ^7.0.1
+ vue: ^3.3.4
+ peerDependenciesMeta:
+ '@babel/plugin-proposal-decorators':
+ optional: true
+ '@babel/plugin-syntax-jsx':
+ optional: true
+ rolldown:
+ optional: true
+ rollup-plugin-visualizer:
+ optional: true
- '@firebase/remote-config-types@0.3.2':
- resolution: {integrity: sha512-0BC4+Ud7y2aPTyhXJTMTFfrGGLqdYXrUB9sJVAB8NiqJswDTc4/2qrE/yfUbnQJhbSi6ZaTTBKyG3n1nplssaA==}
+ '@nuxtjs/color-mode@4.0.1':
+ resolution: {integrity: sha512-eiA7hWXi5zNHaYKyJFCGF6i0wFZtuvR7KDXZ6jiSvwxjCpRFwphrw0MOSmNfArTSSsT1wpW+/2H92cejeVfUlg==}
- '@firebase/remote-config@0.4.9':
- resolution: {integrity: sha512-EO1NLCWSPMHdDSRGwZ73kxEEcTopAxX1naqLJFNApp4hO8WfKfmEpmjxmP5TrrnypjIf2tUkYaKsfbEA7+AMmA==}
- peerDependencies:
- '@firebase/app': 0.x
+ '@nuxtjs/google-fonts@3.2.0':
+ resolution: {integrity: sha512-cGAjDJoeQ2jm6VJCo4AtSmKO6KjsbO9RSLj8q261fD0lMVNMZCxkCxBkg8L0/2Vfgp+5QBHWVXL71p1tiybJFw==}
- '@firebase/storage-compat@0.3.12':
- resolution: {integrity: sha512-hA4VWKyGU5bWOll+uwzzhEMMYGu9PlKQc1w4DWxB3aIErWYzonrZjF0icqNQZbwKNIdh8SHjZlFeB2w6OSsjfg==}
+ '@nuxtjs/robots@6.1.2':
+ resolution: {integrity: sha512-1jEoIfhxl2goQ7hHyG4SGLnypK+N3N4oNEL7eTE7vO21+2yXcYqNUCUtm9E3CVFHz3X5wKzv7O83XV4daH9Ygg==}
peerDependencies:
- '@firebase/app-compat': 0.x
+ zod: '>=3'
+ peerDependenciesMeta:
+ zod:
+ optional: true
- '@firebase/storage-types@0.8.2':
- resolution: {integrity: sha512-0vWu99rdey0g53lA7IShoA2Lol1jfnPovzLDUBuon65K7uKG9G+L5uO05brD9pMw+l4HRFw23ah3GwTGpEav6g==}
+ '@nuxtjs/seo@5.3.2':
+ resolution: {integrity: sha512-oRHLfEBCHS6C0resx71ffAAE7XZWYEMvOzuCiXVZfP0cahIl0AIQdgrrvmFso1bxITHmrVXz5Gr++K5kpyuZXw==}
peerDependencies:
- '@firebase/app-types': 0.x
- '@firebase/util': 1.x
+ nuxt: ^3.16.0 || ^4.0.0
- '@firebase/storage@0.13.2':
- resolution: {integrity: sha512-fxuJnHshbhVwuJ4FuISLu+/76Aby2sh+44ztjF2ppoe0TELIDxPW6/r1KGlWYt//AD0IodDYYA8ZTN89q8YqUw==}
+ '@nuxtjs/sitemap@8.2.2':
+ resolution: {integrity: sha512-5tnNu0yHsh7J++epvQt7SLIfmFYqmr3tGuIgsI3yooXBtlDNhXt1+0hp6FZ2b+PocFOsxU22c98zzeucwW0Ydw==}
+ engines: {node: '>=18.0.0'}
peerDependencies:
- '@firebase/app': 0.x
+ zod: '>=3'
+ peerDependenciesMeta:
+ zod:
+ optional: true
- '@firebase/util@1.10.0':
- resolution: {integrity: sha512-xKtx4A668icQqoANRxyDLBLz51TAbDP9KRfpbKGxiCAW346d0BeJe5vN6/hKxxmWwnZ0mautyv39JxviwwQMOQ==}
+ '@oxc-parser/binding-android-arm-eabi@0.132.0':
+ resolution: {integrity: sha512-KrLaPWa5c9Y7LkW+rKkaUE3y7DBDrQtaf7rlsSDfv6KAHUjgzAIRA761Lrrp6//Yd/Rlie/yEOt9YENCoJnOcw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
- '@firebase/util@1.7.3':
- resolution: {integrity: sha512-wxNqWbqokF551WrJ9BIFouU/V5SL1oYCGx1oudcirdhadnQRFH5v1sjgGL7cUV/UsekSycygphdrF2lxBxOYKg==}
+ '@oxc-parser/binding-android-arm-eabi@0.137.0':
+ resolution: {integrity: sha512-KDs+0VPdEmasOkpuJHW9V5WCF+cvYdMQv2Jd+aJXt+cxIx12NToRQRbXaRwUEDsZw+/jMk81Ve8ZFbjUkJTOwA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
- '@firebase/vertexai-preview@0.0.4':
- resolution: {integrity: sha512-EBSqyu9eg8frQlVU9/HjKtHN7odqbh9MtAcVz3WwHj4gLCLOoN9F/o+oxlq3CxvFrd3CNTZwu6d2mZtVlEInng==}
- engines: {node: '>=18.0.0'}
- peerDependencies:
- '@firebase/app': 0.x
- '@firebase/app-types': 0.x
+ '@oxc-parser/binding-android-arm-eabi@0.138.0':
+ resolution: {integrity: sha512-hSYAD+F9W2Qh8SETMqBsQRx6YHvB4z+i/i36shlC7tfdZQauMs4vf3G/EQwKOkNlN7rkTiKINvsNmQb9q2MWcQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
- '@firebase/webchannel-wrapper@1.0.1':
- resolution: {integrity: sha512-jmEnr/pk0yVkA7mIlHNnxCi+wWzOFUg0WyIotgkKAb2u1J7fAeDBcVNSTjTihbAYNusCLQdW5s9IJ5qwnEufcQ==}
+ '@oxc-parser/binding-android-arm64@0.132.0':
+ resolution: {integrity: sha512-SThDrSeamB/kG2+NxcJ5/wSLcV6dUqDknrPLqFYQ0ST/55mtBP4M7Q/f3QbubH6aAd11wpzZn/nwbVRSdobOpg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
- '@gar/promisify@1.1.3':
- resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
+ '@oxc-parser/binding-android-arm64@0.137.0':
+ resolution: {integrity: sha512-WhALNzfy3x/RfC6bsqX+csavuUY0yHHE7XfgPE5M542uhoBZUUoGTPG+nkMbGoG4+gcfss5s7urMyn5QBHu0sw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
- '@google-cloud/firestore@4.15.1':
- resolution: {integrity: sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==}
- engines: {node: '>=10.10.0'}
+ '@oxc-parser/binding-android-arm64@0.138.0':
+ resolution: {integrity: sha512-Ns5LLTp8cVyP8DsYqD482h0HE84xiGYRgtm7g4LtTinq209NAiMF768e/8r2NHaa0UMirS5mrT1m1VwiVmBi4Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
- '@google-cloud/paginator@3.0.7':
- resolution: {integrity: sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==}
- engines: {node: '>=10'}
+ '@oxc-parser/binding-darwin-arm64@0.132.0':
+ resolution: {integrity: sha512-Lc0f/TYoKBghE5/2Gsv7bLXk+TJZunx2Tf61X8hG4ARXdc8UYI26dCGccFSd1AyFbK3jfaNXtMnupggDbjPXdQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
- '@google-cloud/projectify@2.1.1':
- resolution: {integrity: sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==}
- engines: {node: '>=10'}
+ '@oxc-parser/binding-darwin-arm64@0.137.0':
+ resolution: {integrity: sha512-bFPr5hgmNMOMoyPTGtdsK4Ug21RovIPojRMgDDhSp1LtCnc/DkLwGONKjgRjszg677RlGnkYSviQ8hHaUPOVYA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
- '@google-cloud/promisify@2.0.4':
- resolution: {integrity: sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==}
- engines: {node: '>=10'}
+ '@oxc-parser/binding-darwin-arm64@0.138.0':
+ resolution: {integrity: sha512-Yka0m4YhKUHBIZufafSLAeO+DUrfHPtNXBlZSj7DxshquIl41x/a+i/MbRnbOy8heuLiYU1STa6h0FAAzT7Pbw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
- '@google-cloud/storage@5.20.5':
- resolution: {integrity: sha512-lOs/dCyveVF8TkVFnFSF7IGd0CJrTm91qiK6JLu+Z8qiT+7Ag0RyVhxZIWkhiACqwABo7kSHDm8FdH8p2wxSSw==}
- engines: {node: '>=10'}
+ '@oxc-parser/binding-darwin-x64@0.132.0':
+ resolution: {integrity: sha512-RG2eJIpf7C21z9HSSXFw1bTArdpKe7Y4fwcJTwRq1yCSe1vSavaN9GA1sm9KqzemTLAGVktQ+7qBTGp0vQeUZg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
- '@grpc/grpc-js@1.6.12':
- resolution: {integrity: sha512-JmvQ03OTSpVd9JTlj/K3IWHSz4Gk/JMLUTtW7Zb0KvO1LcOYGATh5cNuRYzCAeDR3O8wq+q8FZe97eO9MBrkUw==}
- engines: {node: ^8.13.0 || >=10.10.0}
+ '@oxc-parser/binding-darwin-x64@0.137.0':
+ resolution: {integrity: sha512-CL5dMm1asqXIDZHg14FLxj3Mc36w8PI7xCWh1uA4is6z8g2XrIILoTcQYOxDbwzuk34RDPX5IAGUxZr6LA9KAg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
- '@grpc/grpc-js@1.9.15':
- resolution: {integrity: sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==}
- engines: {node: ^8.13.0 || >=10.10.0}
+ '@oxc-parser/binding-darwin-x64@0.138.0':
+ resolution: {integrity: sha512-MWLUZZzmNRUqTWueZF27ncreaZ1wZ0gboWL2QMPxRQA2xgOmBPlGg2H9pAKJSPBlwEHcWa9TdWRiehAS+yls8w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
- '@grpc/proto-loader@0.6.13':
- resolution: {integrity: sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==}
- engines: {node: '>=6'}
- hasBin: true
+ '@oxc-parser/binding-freebsd-x64@0.132.0':
+ resolution: {integrity: sha512-wQIPntPLtJ8NcBpvKPbEv3NqzV6k8eP8tP/jE9Rg8HTg/j7urZGFSsTCPCW5k77Qfw2DM4vRvc9p3I4yq/Shvw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
- '@grpc/proto-loader@0.7.10':
- resolution: {integrity: sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==}
- engines: {node: '>=6'}
- hasBin: true
+ '@oxc-parser/binding-freebsd-x64@0.137.0':
+ resolution: {integrity: sha512-79h8rYGnSlKPGWo7mHr2ixO6ea7aW8B0CT965SZ8SLbNnCOH5aOYBTeVXUY6eMvEaiLyWr8Skuiugr5pDYgLGw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
- '@humanwhocodes/config-array@0.13.0':
- resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
- engines: {node: '>=10.10.0'}
- deprecated: Use @eslint/config-array instead
+ '@oxc-parser/binding-freebsd-x64@0.138.0':
+ resolution: {integrity: sha512-Vae5tzsrzZ/lCDVCZUMi/vzSiiHEgcOEfsyIfWOHmjZ2ji+gT+n96T757yX5/f7/7JIJuiannAHJKV5ARaF6ng==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
- '@humanwhocodes/module-importer@1.0.1':
- resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
- engines: {node: '>=12.22'}
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.132.0':
+ resolution: {integrity: sha512-PixKEpeSe3yxQWqNyOCBALRYc72+Tj7ILDofUl3iXo25cVOzLA6jHUhmOINRtWIPh7dbUie3QNeabwaQpZTw6w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
- '@humanwhocodes/object-schema@2.0.3':
- resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
- deprecated: Use @eslint/object-schema instead
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.137.0':
+ resolution: {integrity: sha512-ASgmlSimhGyr0lksgVIo6hibz1obnDq4qJbiMX/AzltfgPnanRrzG1Q+23g8ljOHOjv6dsznkUuCYL3gg0sY1Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.138.0':
+ resolution: {integrity: sha512-qkU8wv5mYexrCw0X4DHFgxGbRScwGLIIKUkHXU7xXEiLoMnQzELak2gujxfa9GFrlEgPjbyLUDFHWm67Zs38ng==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
- '@istanbuljs/load-nyc-config@1.1.0':
- resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
- engines: {node: '>=8'}
+ '@oxc-parser/binding-linux-arm-musleabihf@0.132.0':
+ resolution: {integrity: sha512-sCR+DzGHlyHKnbA2z9zWjTUhIo8Sy0enJl4RDsBwPmkxYynPatpwOAWe8W5127SlW0boqUWHGtr1NWn5UwIhXQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
- '@istanbuljs/schema@0.1.3':
- resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
- engines: {node: '>=8'}
+ '@oxc-parser/binding-linux-arm-musleabihf@0.137.0':
+ resolution: {integrity: sha512-AU2J9aa22Sx32wRGnDjybOU9TQXXQUud5sdUi+ZB0XxwM8aToWLweV+yA0wlQm0yIUVqljquqoHCYEq9II8gJQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
- '@jest/console@30.2.0':
- resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-arm-musleabihf@0.138.0':
+ resolution: {integrity: sha512-3HgULIvoDV7h2ZfVYzxQwOSOJnAjMwYmyUBzndNuLRGgBNI549ED0P6AGmN9y2TnSvrwJ+Q8zqdxqssMnGXitA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
- '@jest/core@30.2.0':
- resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- peerDependencies:
- node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
- peerDependenciesMeta:
- node-notifier:
- optional: true
+ '@oxc-parser/binding-linux-arm64-gnu@0.132.0':
+ resolution: {integrity: sha512-sQBix5P2cW+IpzTcCwYxnh9yALrKSIkKJThspBvMGcygSMnbzkSvhN7SfuX1hvBk8y1XEChsdkU3ET0V5DmzUw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@jest/diff-sequences@30.0.1':
- resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-arm64-gnu@0.137.0':
+ resolution: {integrity: sha512-GdEtiG89yMr7XkUGxifgodXEEm2f+xW2f9CpDjlgAnBOwhTmrpQMvhOGobLVKUyzf/qHBXW16smk5zbF3nZU6w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@jest/environment-jsdom-abstract@30.2.0':
- resolution: {integrity: sha512-kazxw2L9IPuZpQ0mEt9lu9Z98SqR74xcagANmMBU16X0lS23yPc0+S6hGLUz8kVRlomZEs/5S/Zlpqwf5yu6OQ==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- peerDependencies:
- canvas: ^3.0.0
- jsdom: '*'
- peerDependenciesMeta:
- canvas:
- optional: true
+ '@oxc-parser/binding-linux-arm64-gnu@0.138.0':
+ resolution: {integrity: sha512-pIonbH2p0KLCwz4CNPCi0xGqci4numpMQDCLJwLfsrEky7NUuByKDFhCjzE0E7vR3aj/lBjyMoTskHBo/qSg8g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@jest/environment@30.2.0':
- resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-arm64-musl@0.132.0':
+ resolution: {integrity: sha512-WozHg3Kc//8Sk756HXXgMbEAvqtG+Lzb9JOojwQzIGDtN78Az2dLttkb71akWYUF/8IgYfDSlfKh4Uot8is5Vw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@jest/expect-utils@30.2.0':
- resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-arm64-musl@0.137.0':
+ resolution: {integrity: sha512-EGJ+Bs8iXx8KBH8DQ5BLoEm5lnHaYjlh4/8j8vFhrr/6z4tqONy5BZDzLpKmmNWlN6Hlc5r8YOuBVHqZ9vRFEQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@jest/expect@30.2.0':
- resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-arm64-musl@0.138.0':
+ resolution: {integrity: sha512-cT5L1Xz/5m6Ga1hD3922gLc+fePOauJZJdApPTI/2Vu0EmYo62uHG9V5Dq65hhgU9TW10oDi2840y9cGdd7BIg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@jest/fake-timers@30.2.0':
- resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-ppc64-gnu@0.132.0':
+ resolution: {integrity: sha512-CmX/ulNBOEwWTyVRmcpYKAcAizW6+OjtLJgo7fXoL9OqQvjF4VER8tPomv44vwzfSCy1BHbsB0ZlZYzYJNj4cA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
- '@jest/get-type@30.1.0':
- resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-ppc64-gnu@0.137.0':
+ resolution: {integrity: sha512-vzFUQENy/fnbSe5DZWovq6tIBc1uhuMztanSW6rz1e9WdQE4gHwYuD7ZII6JnrJifd1R3RSoqiZbgRFlVL2tYQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
- '@jest/globals@30.2.0':
- resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-ppc64-gnu@0.138.0':
+ resolution: {integrity: sha512-hKy/vvejKk3LNE/FsRbekWejLa046//TnLWtSo7ur29NIsNbSIvnOVYIirSVC7fsd6NO8UFzwDdcoZfCyBvSBA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
- '@jest/pattern@30.0.1':
- resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-riscv64-gnu@0.132.0':
+ resolution: {integrity: sha512-j9oQS+hM90SdhviNGWbPgT4+Rlq+ac++q/zjgwPD1mVHgxHzATvoRGtDx0sXGmFOQ9J9YkwAhYGb5MAHL6TAsA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
- '@jest/reporters@30.2.0':
- resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- peerDependencies:
- node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
- peerDependenciesMeta:
- node-notifier:
- optional: true
+ '@oxc-parser/binding-linux-riscv64-gnu@0.137.0':
+ resolution: {integrity: sha512-SfVI14HBQs9gtLcUD5hTt5hsNbdrqSUNg9S8muN+LhVQ5nf1WwH3hAoK6B9NKgdYgWAQSXFXGiiBedQ4r/BKuw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
- '@jest/schemas@29.6.3':
- resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@oxc-parser/binding-linux-riscv64-gnu@0.138.0':
+ resolution: {integrity: sha512-bh6tjNGq0v0b9GAMu0pTv/YpTqepCFy0TIOtQHm8+41fZwLXTaB6xiEWVUSarNCXqc5kyzYcH6EOfwW1sJxJOw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
- '@jest/schemas@30.0.5':
- resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-riscv64-musl@0.132.0':
+ resolution: {integrity: sha512-bLz+Xi+Agnfmd7kWPEsSVwCn2k4EyIalZkNBcQ0OGIv9rqn8VgCPLNd03tM9mKX/5TdlvDXalz0q71BIrOPNqg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
- '@jest/snapshot-utils@30.2.0':
- resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-riscv64-musl@0.137.0':
+ resolution: {integrity: sha512-e7Ppy4FCIFNQxT/ikSeIWFoQ0l+N9vgtRBtLcyZXeolTzApyVoPqEXsYPrcdM/9i0Bwk8knvYd37vaEMxHyi6g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
- '@jest/source-map@30.0.1':
- resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-riscv64-musl@0.138.0':
+ resolution: {integrity: sha512-HhOkddcClSTtTxY10f/mACblKcQdxWy4lYYwX12G23j+S5eiJ5y1kpo1r7kKng+2bdnCBO+lCDWOVVc9kVl9+g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
- '@jest/test-result@30.2.0':
- resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-s390x-gnu@0.132.0':
+ resolution: {integrity: sha512-U6t2qbJU0ypTfyj9QV3W1Y6mITDTL8ai/OR6NUn85vyHthOvobKWgXzU4tu0EskSzlpuVFz1g0jFGulDIUKHxQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
- '@jest/test-sequencer@30.2.0':
- resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-s390x-gnu@0.137.0':
+ resolution: {integrity: sha512-Bho5qFwdhqsIFR7gipYEUlqvi3SRrY8sugxXig380MIaakBB1PyU9+7dBiBVScfImTNWhijUxdBwqrprGdq5WA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
- '@jest/transform@30.2.0':
- resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-s390x-gnu@0.138.0':
+ resolution: {integrity: sha512-5mi+wtbeJiEa4waGG88EcEGgJBBNJdDeIcayPPcrLNMXbCrgdtbb80q0Nrat7A8NglLUVzhuTAAp7K6PjmUO8Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
- '@jest/types@29.6.3':
- resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@oxc-parser/binding-linux-x64-gnu@0.132.0':
+ resolution: {integrity: sha512-WcEaSNHFk8yz5YFlQQAlhq6jOFmZBB/RKE7uzhyCIf+pF1Lmv9gUH4221mle2Gd9iHyWT3ySNph8yZgb1xYdWg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@jest/types@30.2.0':
- resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ '@oxc-parser/binding-linux-x64-gnu@0.137.0':
+ resolution: {integrity: sha512-36mGWtg7PyFzjJwGDkH6/F4o2nIDEoKXLPr/X/lwqklkomQwJJt1I5GJVmGhovUEmgPK5WAeAZMqlFCehwiy9Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@jridgewell/gen-mapping@0.3.13':
- resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+ '@oxc-parser/binding-linux-x64-gnu@0.138.0':
+ resolution: {integrity: sha512-ckbq3AMI7lI8AhQtE8KdqYRmzmzwKfCU12QN/PBKXO72PfWdvvZQN0hFShDX/XRNsPqjddLmvXaQMT3zfYtNlw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@jridgewell/gen-mapping@0.3.3':
- resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
- engines: {node: '>=6.0.0'}
+ '@oxc-parser/binding-linux-x64-musl@0.132.0':
+ resolution: {integrity: sha512-iQrV4iJzQgRwK3BWRmQl1C3C6g3wYpXN2WLdQdyR+efoUnncdShZAVp9OgcojtlD3MDRbuOMGG3SjxF4fL4nlQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@jridgewell/gen-mapping@0.3.5':
- resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
- engines: {node: '>=6.0.0'}
+ '@oxc-parser/binding-linux-x64-musl@0.137.0':
+ resolution: {integrity: sha512-/Jqx6+N7A44n2BdvUr7pXhVr2vFjs6WGH3unZRczwrfiH0H1zY0QwKQMG/dtRiTlKGDKGukznPT8lx84/oEsZg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@jridgewell/remapping@2.3.5':
- resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+ '@oxc-parser/binding-linux-x64-musl@0.138.0':
+ resolution: {integrity: sha512-JrCOzHO9BYEs5Xz5JHYBxSc/hYKxfXUj5QQb64sERSbkQot6+KEgMTOR2C9hLrhaqOui65OYcFyTTS+YxXDtnA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
+ '@oxc-parser/binding-openharmony-arm64@0.132.0':
+ resolution: {integrity: sha512-FWzmUGrZ6GUby4U7WIwcCtab6tdmlTO3xTRRKyb5kjIJVEiaUAT8animUG/nK8ZCA8gkRkPOTId4rl6uTqUmJQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
- '@jridgewell/set-array@1.1.2':
- resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
- engines: {node: '>=6.0.0'}
+ '@oxc-parser/binding-openharmony-arm64@0.137.0':
+ resolution: {integrity: sha512-9Uj0qHNNl+OgT1UTGwF7ixIXU6T1u2SbMidmgPy/h1h/fl2gRS6YpAxxY1gwHofcWjoTwkoMFd8xs5Vuj6GOFA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
- '@jridgewell/set-array@1.2.1':
- resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
- engines: {node: '>=6.0.0'}
+ '@oxc-parser/binding-openharmony-arm64@0.138.0':
+ resolution: {integrity: sha512-eASMMfOOIfLHkWJRPSu8llByvVRM+c1M/lh18KjsjELM3y10+7B5iBbbrht9LdtsJXQ+mRuP/lJ7UWe3Ok3ehw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
- '@jridgewell/source-map@0.3.11':
- resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
+ '@oxc-parser/binding-wasm32-wasi@0.132.0':
+ resolution: {integrity: sha512-TlbMppxJI5CjWDes0QaP6G3aneVg1yikBu5QYI+DUShF9WDL66ccgKFNNGmi/Wybtszw6hxwAvv76T4DaPKnHw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
- '@jridgewell/sourcemap-codec@1.5.5':
- resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+ '@oxc-parser/binding-wasm32-wasi@0.137.0':
+ resolution: {integrity: sha512-gW2vfkytNGgMVADiuzdvOfw0mWG9za20F/1fCJsif5aBMAvWJTSbpIXbIe0XkOe0VENk+PadpQ7cZgUy2sUJcA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
- '@jridgewell/trace-mapping@0.3.31':
- resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@oxc-parser/binding-wasm32-wasi@0.138.0':
+ resolution: {integrity: sha512-BnTCO87Iwc57NufXS7vcrkrmpN+daeCeYr1+/xgPT6HjwNs0lBmJYeFrcOs4WkNN8yscdd6Rc4FxWh3+59hAFw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
- '@jsonjoy.com/base64@1.1.2':
- resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
+ '@oxc-parser/binding-win32-arm64-msvc@0.132.0':
+ resolution: {integrity: sha512-RH/NbFjGKqdUAUi7Oh3LQPxUk2hsWFEEQ38HSnbRQT8QjBZFKqL1fMbmsB3N4jy/KPh9iX94+9dmkEMBBbambw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
- '@jsonjoy.com/json-pack@1.0.4':
- resolution: {integrity: sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
+ '@oxc-parser/binding-win32-arm64-msvc@0.137.0':
+ resolution: {integrity: sha512-x+pFANF0yL5uK/6T7lu6SlR5qid6sp//eZXKLq5iNsIE+EQg6EaS8/wsW7E91nXXjpnPhSoMOHXShSVhGRdn8w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
- '@jsonjoy.com/util@1.2.0':
- resolution: {integrity: sha512-4B8B+3vFsY4eo33DMKyJPlQ3sBMpPFUZK2dr3O3rXrOGKKbYG44J0XSFkDo1VOQiri5HFEhIeVvItjR2xcazmg==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
+ '@oxc-parser/binding-win32-arm64-msvc@0.138.0':
+ resolution: {integrity: sha512-+Zi47boD2wKNL0hOA47Vkwk6njMZ8sOsr4Geu/56EUtlooDh9crNOU41U6bXGS0UjC4Y72HtRA1iuB6qx1ARUw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
- '@kurkle/color@0.3.4':
- resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==}
+ '@oxc-parser/binding-win32-ia32-msvc@0.132.0':
+ resolution: {integrity: sha512-JUr4jQY9jxoIB/YTLXr6XofSi5xikj6p5/Ns1h0VOBDT0j1jKU+kMsv2xxv51RwnETcXpA1Yw/9oUAfcqfaqEA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
- '@mdi/js@7.4.47':
- resolution: {integrity: sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==}
+ '@oxc-parser/binding-win32-ia32-msvc@0.137.0':
+ resolution: {integrity: sha512-sQUqym80PFi6McRsIqfJrSu2JrSClEZIXXD+/FjAFoULEKzOPsldIdFBG96xdX8aVMzCNQ9792FPx3MfkEIrFA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
- '@napi-rs/wasm-runtime@0.2.12':
- resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
+ '@oxc-parser/binding-win32-ia32-msvc@0.138.0':
+ resolution: {integrity: sha512-SYcV674Wi2WuoBefUFgf0PBMNlZe5IF0YZ0TnP7DK+EusMVpEWq6iz+7r64svjAb7vjthzlas0FUCSlz8YkqYg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
- '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1':
- resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
+ '@oxc-parser/binding-win32-x64-msvc@0.132.0':
+ resolution: {integrity: sha512-2dapgHpA5X8DSXF4AU36hJWYf6zP0tKjMXFRAZFBD62pkevW/uhFDXoFH9Y/3Fd2EtDrw5ByNnR1wVE9X9y0SQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
- '@nodelib/fs.scandir@2.1.5':
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
+ '@oxc-parser/binding-win32-x64-msvc@0.137.0':
+ resolution: {integrity: sha512-2AsevxlvNN4WKxpEn3RtqD5zbqMaXF+T7JXblsP4gVuY+vC9dXS4ED/PwfRCliFqoeisYS3Iro4DHzxr0TEvVA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
- '@nodelib/fs.stat@2.0.5':
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
+ '@oxc-parser/binding-win32-x64-msvc@0.138.0':
+ resolution: {integrity: sha512-QZplnCxS4vPe4StAVBtvD2bW3pELlidf0Ek6iQ/HHiCjbEtrs5pFZZfLAoPhKLJyDzyxoGAdic9bSIYrJYTZcg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
- '@nodelib/fs.walk@1.2.8':
- resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
- engines: {node: '>= 8'}
+ '@oxc-project/types@0.132.0':
+ resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==}
- '@npmcli/fs@1.1.1':
- resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==}
+ '@oxc-project/types@0.137.0':
+ resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==}
- '@npmcli/move-file@1.1.2':
- resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==}
- engines: {node: '>=10'}
- deprecated: This functionality has been moved to @npmcli/fs
+ '@oxc-project/types@0.138.0':
+ resolution: {integrity: sha512-1a7ZKmrRTCoN1XMZ4L0PyyqrMnrNlLyPuOkdSX2MZg7IiIGRUyurNhAm73ptDOraoBcIordsIGKNPKUzy3ZmfA==}
- '@nuxt/babel-preset-app@2.18.1':
- resolution: {integrity: sha512-7AYAGVjykrvta7k+koMGbt6y6PTMwl74PX2i9Ubyc1VC9ewy9U/b6cW0gVJOR/ZJWPzaABAgVZC7N58PprUDfA==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@oxc-project/types@0.143.0':
+ resolution: {integrity: sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==}
- '@nuxt/builder@2.18.1':
- resolution: {integrity: sha512-hc4AUP3Nvov7jL0BEP7jFXt8zOfa6gt+y1kyoVvU1WHEVNcWnrGtRKvJuCwi1IwCVlx7Weh+luvHI4nzQwEeKg==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@parcel/watcher-android-arm64@2.5.6':
+ resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
- '@nuxt/cli@2.18.1':
- resolution: {integrity: sha512-ZOoDlE4Fw1Cum6oG8DVnb7B4ivovXySxdDI8vnIt49Ypx22pBGt5y2ErF7g+5TAxGMIHpyh7peJWJwYp88PqPA==}
- engines: {node: ^14.18.0 || >=16.10.0}
- hasBin: true
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
- '@nuxt/components@2.2.1':
- resolution: {integrity: sha512-r1LHUzifvheTnJtYrMuA+apgsrEJbxcgFKIimeXKb+jl8TnPWdV3egmrxBCaDJchrtY/wmHyP47tunsft7AWwg==}
- peerDependencies:
- consola: '*'
+ '@parcel/watcher-darwin-x64@2.5.6':
+ resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
- '@nuxt/config@2.18.1':
- resolution: {integrity: sha512-CTsUMFtNCJ6+7AkgMRz53zM9vxmsMYVJWBQOnikVzwFxm/jsWzjyXkp3pQb5/fNZuqR7qXmpUKIRtrdeUeN4JQ==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
- '@nuxt/core@2.18.1':
- resolution: {integrity: sha512-BFnKVH7caEdDrK04qQ2U9F4Rf4hV/BqqXBJiIeHp7vM9CLKjTL5/yhiognDw3SBefmSJkpOATx1HJl3XM8c4fg==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
- '@nuxt/devalue@2.0.2':
- resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==}
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
- '@nuxt/friendly-errors-webpack-plugin@2.6.0':
- resolution: {integrity: sha512-3IZj6MXbzlvUxDncAxgBMLQwGPY/JlNhy2i+AGyOHCAReR5HcBxYjVRBvyaKM9R3s5k4OODYKeHAbrToZH/47w==}
- engines: {node: '>=14.18.0', npm: '>=5.0.0'}
- peerDependencies:
- webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@nuxt/generator@2.18.1':
- resolution: {integrity: sha512-kZMfB5Ymvd/5ek+xfk2svQiMJWEAjZf5XNFTG+2WiNsitHb01Bo3W2QGidy+dwfuLtHoiOJkMovRlyAKWxTohg==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@nuxt/kit@3.12.2':
- resolution: {integrity: sha512-5kOqEzfc3FsAncjK2je7vuq4/QsR5ypViTnop52mlFLf0Ku1NMCrWCSWYowAh4P0yqTACMAZYa+HdRZHscU84g==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@nuxt/kit@3.7.4':
- resolution: {integrity: sha512-/S5abZL62BITCvC/TY3KWA6N721U1Osln3cQdBb56XHIeafZCBVqTi92Xb0o7ovl72mMRhrKwRu7elzvz9oT/g==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@nuxt/loading-screen@2.0.4':
- resolution: {integrity: sha512-xpEDAoRu75tLUYCkUJCIvJkWJSuwr8pqomvQ+fkXpSrkxZ/9OzlBFjAbVdOAWTMj4aV/LVQso4vcEdircKeFIQ==}
+ '@parcel/watcher-wasm@2.6.0':
+ resolution: {integrity: sha512-dtjbDxKSDPQ8AmA+pS4OFaHE1FKrjtGpLGBxw85uKFkRorjNbvDM/aFPgqosu40wprbp1xw2ZSxIKqghCUHe2w==}
+ engines: {node: '>= 10.0.0'}
+ bundledDependencies:
+ - napi-wasm
- '@nuxt/opencollective@0.4.0':
- resolution: {integrity: sha512-uUsxOcO2lFeotV+BGOwNLeau+U17mhpaCRhE7v8nJLdWJ2iErQXadl28HaHe6btuT8RD0LDSpvwCiKrHznDxUA==}
- engines: {node: '>=8.0.0', npm: '>=5.0.0'}
- hasBin: true
+ '@parcel/watcher-win32-arm64@2.5.6':
+ resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
- '@nuxt/schema@3.12.2':
- resolution: {integrity: sha512-IRBuOEPOIe1CANKnO2OUiqZ1Hp/0htPkLaigK7WT6ef/SdIFZUd68Tqqejqy2AFrbgU9G80k3U7eg2XUdaiQlQ==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@parcel/watcher-win32-ia32@2.5.6':
+ resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [ia32]
+ os: [win32]
- '@nuxt/schema@3.7.4':
- resolution: {integrity: sha512-q6js+97vDha4Fa2x2kDVEuokJr+CGIh1TY2wZp2PLZ7NhG3XEeib7x9Hq8XE8B6pD0GKBRy3eRPPOY69gekBCw==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@parcel/watcher-win32-x64@2.5.6':
+ resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
- '@nuxt/server@2.18.1':
- resolution: {integrity: sha512-4GHmgi1NS6uCL+3QzlxmHmEoKkejQKTDrKPtA16w8iw/8EBgCrAkvXukcIMxF7Of+IYi1I/duVmCyferxo7jyw==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@parcel/watcher@2.5.6':
+ resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==}
+ engines: {node: '>= 10.0.0'}
- '@nuxt/telemetry@1.5.0':
- resolution: {integrity: sha512-MhxiiYCFe0MayN2TvmpcsCV66zBePtrSVkFLJHwTFuneQ5Qma5x0NmCwdov7O4NSuTfgSZels9qPJh0zy0Kc4g==}
- hasBin: true
+ '@pinia/nuxt@0.11.3':
+ resolution: {integrity: sha512-7WVNHpWx4qAEzOlnyrRC88kYrwnlR/PrThWT0XI1dSNyUAXu/KBv9oR37uCgYkZroqP5jn8DfzbkNF3BtKvE9w==}
+ peerDependencies:
+ pinia: ^3.0.4
- '@nuxt/types@2.18.1':
- resolution: {integrity: sha512-PpReoV9oHCnSpB9WqemTUWmlH1kqFHC3Xe5LH904VvCl/3xLO2nGYcrHeZCMV5hXNWsDUyqDnd/2cQHmeqj5lA==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
- '@nuxt/typescript-build@3.0.2':
- resolution: {integrity: sha512-IFSznjafW5xm0XHg9Q9aHVW7i9J2pAYfyorh3ro3Pf0OnCbS0acmwBnp2juza+DqNhZa1DhNentmUsgiYp730g==}
- peerDependencies:
- '@nuxt/types': '>=2.13.1'
- typescript: 4.x || 5.x
+ '@polka/url@1.0.0-next.29':
+ resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
- '@nuxt/ui-templates@1.3.1':
- resolution: {integrity: sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA==}
+ '@poppinss/colors@4.1.6':
+ resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==}
- '@nuxt/utils@2.18.1':
- resolution: {integrity: sha512-aWeB8VMhtymo5zXUiQaohCu8IqJqENF9iCag3wyJpdhpNDVoghGUJAl0F6mQvNTJgQzseFtf4XKqTfvcgVzyGg==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@poppinss/dumper@0.7.0':
+ resolution: {integrity: sha512-0UTYalzk2t6S4rA2uHOz5bSSW2CHdv4vggJI6Alg90yvl0UgXs6XSXpH96OH+bRkX4J/06djv29pqXJ0lq5Kag==}
- '@nuxt/vue-app@2.18.1':
- resolution: {integrity: sha512-yxkunoTv6EVa42xM7qES0N1DNMo4UbP/s89L7HjqngQ4KzVWyyzK0qqJ9u3Gu4CabXhHFSquu11gtn+dylKyTA==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@poppinss/exception@1.2.3':
+ resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==}
- '@nuxt/vue-renderer@2.18.1':
- resolution: {integrity: sha512-Nl8/IbV+sTEWCczHKcjLbZrFO6y5fCcFxZwd6Opatcbr2z380abwpDf3a9UjnVW3wPEM+/xoy1/MBCLY3VmWcw==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@protobufjs/aspromise@1.1.2':
+ resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
- '@nuxt/webpack@2.18.1':
- resolution: {integrity: sha512-6EqbIoheLAJ0E7dfQB5ftOKL4d74N98dFMY3q89QTaoS9VXBFB5D1MLd27WuyfhChmzuHRwHfjaBW8QFdhjwew==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ '@protobufjs/base64@1.1.2':
+ resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
- '@nuxtjs/dotenv@1.4.2':
- resolution: {integrity: sha512-/3+Cw5qLNIQD8ZvXLJG1suxvfC4ltlUuYegOwirHrLrzptHh/+rCkBXrNbrz2qAiwc+/yK91XjZGGzNM1dFmCw==}
+ '@protobufjs/codegen@2.0.5':
+ resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==}
- '@nuxtjs/eslint-config-typescript@12.1.0':
- resolution: {integrity: sha512-l2fLouDYwdAvCZEEw7wGxOBj+i8TQcHFu3zMPTLqKuv1qu6WcZIr0uztkbaa8ND1uKZ9YPqKx6UlSOjM4Le69Q==}
- peerDependencies:
- eslint: ^8.48.0
+ '@protobufjs/eventemitter@1.1.1':
+ resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==}
- '@nuxtjs/eslint-config@12.0.0':
- resolution: {integrity: sha512-ewenelo75x0eYEUK+9EBXjc/OopQCvdkmYmlZuoHq5kub/vtiRpyZ/autppwokpHUq8tiVyl2ejMakoiHiDTrg==}
- peerDependencies:
- eslint: ^8.23.0
+ '@protobufjs/fetch@1.1.1':
+ resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==}
- '@nuxtjs/eslint-module@4.1.0':
- resolution: {integrity: sha512-lW9ozEjOrnU8Uot3GOAZ/0ThNAds0d6UAp9n46TNxcTvH/MOcAggGbMNs16c0HYT2HlyPQvXORCHQ5+9p87mmw==}
- peerDependencies:
- eslint: '>=7'
+ '@protobufjs/float@1.0.2':
+ resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
- '@nuxtjs/firebase@8.2.2':
- resolution: {integrity: sha512-j+kW0utwq23w71D0I4RyOc9/eYGe8WpsoI2GD9PT744rMWmj4MFHASjmgyDPk2KdZGxsknxUW6yq29aLd0E2ow==}
- peerDependencies:
- firebase: ^9.6.2
- nuxt: ^2.15.6
+ '@protobufjs/inquire@1.1.2':
+ resolution: {integrity: sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==}
- '@nuxtjs/sitemap@2.4.0':
- resolution: {integrity: sha512-TVgIYOtPp7KAfaUo76WRpGbO20j4D/xi/A7shFIGjARHs+FvfAWXNCtBT87dTwe/RoYzAsEKtijFFUTaSu5bUA==}
- engines: {node: '>=8.9.0', npm: '>=5.0.0'}
+ '@protobufjs/path@1.1.2':
+ resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
- '@nuxtjs/stylelint-module@5.2.0':
- resolution: {integrity: sha512-CMGZORt5fM1pK+5Xj3p2uajkK9DZ9Sja7jewXa8LZFNMjt7GIsKaoAvH4poCUMorhIVBS0lGQZ9BlRmg3MWxvg==}
- peerDependencies:
- stylelint: '>=13'
+ '@protobufjs/pool@1.1.0':
+ resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
- '@nuxtjs/vuetify@1.12.3':
- resolution: {integrity: sha512-6uVL3cfESMB00eVjJTNkyU4jvuPTGPn1yteo7lQTH6v+fxHcPaOgvzVYHIKSHIz1DecuOiB5c9b+YjsRP5+C8A==}
+ '@protobufjs/utf8@1.1.1':
+ resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==}
- '@nuxtjs/youch@4.2.3':
- resolution: {integrity: sha512-XiTWdadTwtmL/IGkNqbVe+dOlT+IMvcBu7TvKI7plWhVQeBCQ9iKhk3jgvVWFyiwL2yHJDlEwOM5v9oVES5Xmw==}
+ '@quansync/fs@1.0.0':
+ resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
- '@one-ini/wasm@0.1.1':
- resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
+ '@rolldown/binding-android-arm64@1.2.3':
+ resolution: {integrity: sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
- '@panva/asn1.js@1.0.0':
- resolution: {integrity: sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==}
- engines: {node: '>=10.13.0'}
+ '@rolldown/binding-darwin-arm64@1.2.3':
+ resolution: {integrity: sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
- '@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
+ '@rolldown/binding-darwin-x64@1.2.3':
+ resolution: {integrity: sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
- '@pkgr/core@0.2.9':
- resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
- engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ '@rolldown/binding-freebsd-x64@1.2.3':
+ resolution: {integrity: sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
- '@polka/url@1.0.0-next.23':
- resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==}
+ '@rolldown/binding-linux-arm-gnueabihf@1.2.3':
+ resolution: {integrity: sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
- '@protobufjs/aspromise@1.1.2':
- resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
+ '@rolldown/binding-linux-arm64-gnu@1.2.3':
+ resolution: {integrity: sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@protobufjs/base64@1.1.2':
- resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
+ '@rolldown/binding-linux-arm64-musl@1.2.3':
+ resolution: {integrity: sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.2.3':
+ resolution: {integrity: sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
- '@protobufjs/codegen@2.0.4':
- resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
+ '@rolldown/binding-linux-s390x-gnu@1.2.3':
+ resolution: {integrity: sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
- '@protobufjs/eventemitter@1.1.0':
- resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
+ '@rolldown/binding-linux-x64-gnu@1.2.3':
+ resolution: {integrity: sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@protobufjs/fetch@1.1.0':
- resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
+ '@rolldown/binding-linux-x64-musl@1.2.3':
+ resolution: {integrity: sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@protobufjs/float@1.0.2':
- resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
+ '@rolldown/binding-openharmony-arm64@1.2.3':
+ resolution: {integrity: sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
- '@protobufjs/inquire@1.1.0':
- resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
+ '@rolldown/binding-win32-arm64-msvc@1.2.3':
+ resolution: {integrity: sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
- '@protobufjs/path@1.1.2':
- resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
+ '@rolldown/binding-win32-x64-msvc@1.2.3':
+ resolution: {integrity: sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
- '@protobufjs/pool@1.1.0':
- resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
+ '@rolldown/pluginutils@1.0.1':
+ resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
- '@protobufjs/utf8@1.1.0':
- resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
+ '@rollup/plugin-alias@6.0.0':
+ resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ rollup: '>=4.0.0'
+ peerDependenciesMeta:
+ rollup:
+ optional: true
- '@rollup/pluginutils@4.2.1':
- resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
- engines: {node: '>= 8.0.0'}
+ '@rollup/plugin-commonjs@29.0.3':
+ resolution: {integrity: sha512-ZaOxZceP7SOUW7Lqw5IRVweSQYWaeIPnXIGLiB690EBA3FGJTO40EEr2L5yZplJWsgTCogILRSpcAe7+U0Otdg==}
+ engines: {node: '>=16.0.0 || 14 >= 14.17'}
+ peerDependencies:
+ rollup: ^2.68.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
- '@rollup/pluginutils@5.0.4':
- resolution: {integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==}
+ '@rollup/plugin-inject@5.0.5':
+ resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==}
engines: {node: '>=14.0.0'}
peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
- '@rollup/pluginutils@5.1.0':
- resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
+ '@rollup/plugin-json@6.1.0':
+ resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
@@ -2231,1116 +2480,1426 @@ packages:
rollup:
optional: true
- '@sinclair/typebox@0.27.8':
- resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+ '@rollup/plugin-node-resolve@16.0.3':
+ resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.78.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
- '@sinclair/typebox@0.34.41':
- resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==}
+ '@rollup/plugin-replace@6.0.3':
+ resolution: {integrity: sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
- '@sindresorhus/merge-streams@2.3.0':
- resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
- engines: {node: '>=18'}
+ '@rollup/plugin-terser@1.0.0':
+ resolution: {integrity: sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ rollup: ^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
- '@sinonjs/commons@3.0.1':
- resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
+ '@rollup/pluginutils@5.4.0':
+ resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
- '@sinonjs/fake-timers@13.0.5':
- resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==}
+ '@rollup/rollup-android-arm-eabi@4.62.4':
+ resolution: {integrity: sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==}
+ cpu: [arm]
+ os: [android]
- '@tootallnate/once@2.0.0':
- resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
- engines: {node: '>= 10'}
+ '@rollup/rollup-android-arm64@4.62.4':
+ resolution: {integrity: sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==}
+ cpu: [arm64]
+ os: [android]
- '@trysound/sax@0.2.0':
- resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
- engines: {node: '>=10.13.0'}
+ '@rollup/rollup-darwin-arm64@4.62.4':
+ resolution: {integrity: sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==}
+ cpu: [arm64]
+ os: [darwin]
- '@tybys/wasm-util@0.10.1':
- resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+ '@rollup/rollup-darwin-x64@4.62.4':
+ resolution: {integrity: sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==}
+ cpu: [x64]
+ os: [darwin]
- '@types/babel__core@7.20.5':
- resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+ '@rollup/rollup-freebsd-arm64@4.62.4':
+ resolution: {integrity: sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==}
+ cpu: [arm64]
+ os: [freebsd]
- '@types/babel__generator@7.27.0':
- resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+ '@rollup/rollup-freebsd-x64@4.62.4':
+ resolution: {integrity: sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==}
+ cpu: [x64]
+ os: [freebsd]
- '@types/babel__template@7.4.4':
- resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.62.4':
+ resolution: {integrity: sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
- '@types/babel__traverse@7.28.0':
- resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+ '@rollup/rollup-linux-arm-musleabihf@4.62.4':
+ resolution: {integrity: sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
- '@types/body-parser@1.19.3':
- resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==}
+ '@rollup/rollup-linux-arm64-gnu@4.62.4':
+ resolution: {integrity: sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@types/compression@1.7.5':
- resolution: {integrity: sha512-AAQvK5pxMpaT+nDvhHrsBhLSYG5yQdtkaJE1WYieSNY2mVFKAgmU4ks65rkZD5oqnGCFLyQpUr1CqI4DmUMyDg==}
+ '@rollup/rollup-linux-arm64-musl@4.62.4':
+ resolution: {integrity: sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@types/connect@3.4.38':
- resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+ '@rollup/rollup-linux-loong64-gnu@4.62.4':
+ resolution: {integrity: sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [glibc]
- '@types/conventional-commits-parser@5.0.1':
- resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==}
+ '@rollup/rollup-linux-loong64-musl@4.62.4':
+ resolution: {integrity: sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [musl]
- '@types/eslint-scope@3.7.7':
- resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
+ '@rollup/rollup-linux-ppc64-gnu@4.62.4':
+ resolution: {integrity: sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
- '@types/eslint@8.44.3':
- resolution: {integrity: sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==}
+ '@rollup/rollup-linux-ppc64-musl@4.62.4':
+ resolution: {integrity: sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [musl]
- '@types/eslint@9.6.1':
- resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
+ '@rollup/rollup-linux-riscv64-gnu@4.62.4':
+ resolution: {integrity: sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@rollup/rollup-linux-riscv64-musl@4.62.4':
+ resolution: {integrity: sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
- '@types/etag@1.8.3':
- resolution: {integrity: sha512-QYHv9Yeh1ZYSMPQOoxY4XC4F1r+xRUiAriB303F4G6uBsT3KKX60DjiogvVv+2VISVDuJhcIzMdbjT+Bm938QQ==}
+ '@rollup/rollup-linux-s390x-gnu@4.62.4':
+ resolution: {integrity: sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
- '@types/express-serve-static-core@4.17.37':
- resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==}
+ '@rollup/rollup-linux-x64-gnu@4.62.4':
+ resolution: {integrity: sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@types/express@4.17.18':
- resolution: {integrity: sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==}
+ '@rollup/rollup-linux-x64-musl@4.62.4':
+ resolution: {integrity: sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@types/file-loader@5.0.4':
- resolution: {integrity: sha512-aB4X92oi5D2nIGI8/kolnJ47btRM2MQjQS4eJgA/VnCD12x0+kP5v7b5beVQWKHLOcquwUXvv6aMt8PmMy9uug==}
+ '@rollup/rollup-openbsd-x64@4.62.4':
+ resolution: {integrity: sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==}
+ cpu: [x64]
+ os: [openbsd]
- '@types/html-minifier-terser@5.1.2':
- resolution: {integrity: sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==}
+ '@rollup/rollup-openharmony-arm64@4.62.4':
+ resolution: {integrity: sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==}
+ cpu: [arm64]
+ os: [openharmony]
- '@types/html-minifier-terser@7.0.2':
- resolution: {integrity: sha512-mm2HqV22l8lFQh4r2oSsOEVea+m0qqxEmwpc9kC1p/XzmjLWrReR9D/GRs8Pex2NX/imyEH9c5IU/7tMBQCHOA==}
+ '@rollup/rollup-win32-arm64-msvc@4.62.4':
+ resolution: {integrity: sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==}
+ cpu: [arm64]
+ os: [win32]
- '@types/http-errors@2.0.4':
- resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
+ '@rollup/rollup-win32-ia32-msvc@4.62.4':
+ resolution: {integrity: sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==}
+ cpu: [ia32]
+ os: [win32]
- '@types/istanbul-lib-coverage@2.0.6':
- resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+ '@rollup/rollup-win32-x64-gnu@4.62.4':
+ resolution: {integrity: sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==}
+ cpu: [x64]
+ os: [win32]
- '@types/istanbul-lib-report@3.0.3':
- resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
+ '@rollup/rollup-win32-x64-msvc@4.62.4':
+ resolution: {integrity: sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==}
+ cpu: [x64]
+ os: [win32]
- '@types/istanbul-reports@3.0.4':
- resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+ '@shikijs/core@4.3.1':
+ resolution: {integrity: sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==}
+ engines: {node: '>=20'}
- '@types/jsdom@21.1.7':
- resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
+ '@shikijs/engine-javascript@4.3.1':
+ resolution: {integrity: sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==}
+ engines: {node: '>=20'}
- '@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ '@shikijs/engine-oniguruma@4.3.1':
+ resolution: {integrity: sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==}
+ engines: {node: '>=20'}
- '@types/json5@0.0.29':
- resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ '@shikijs/langs@4.3.1':
+ resolution: {integrity: sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==}
+ engines: {node: '>=20'}
- '@types/jsonwebtoken@8.5.9':
- resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==}
+ '@shikijs/primitive@4.3.1':
+ resolution: {integrity: sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==}
+ engines: {node: '>=20'}
- '@types/less@3.0.6':
- resolution: {integrity: sha512-PecSzorDGdabF57OBeQO/xFbAkYWo88g4Xvnsx7LRwqLC17I7OoKtA3bQB9uXkY6UkMWCOsA8HSVpaoitscdXw==}
+ '@shikijs/themes@4.3.1':
+ resolution: {integrity: sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==}
+ engines: {node: '>=20'}
- '@types/long@4.0.2':
- resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==}
+ '@shikijs/types@4.3.1':
+ resolution: {integrity: sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==}
+ engines: {node: '>=20'}
- '@types/mime@1.3.3':
- resolution: {integrity: sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==}
+ '@shikijs/vscode-textmate@10.0.2':
+ resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
- '@types/minimist@1.2.3':
- resolution: {integrity: sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==}
+ '@simple-git/args-pathspec@1.0.3':
+ resolution: {integrity: sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA==}
- '@types/node@12.20.55':
- resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+ '@simple-git/argv-parser@1.1.1':
+ resolution: {integrity: sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw==}
- '@types/node@16.18.55':
- resolution: {integrity: sha512-Y1zz/LIuJek01+hlPNzzXQhmq/Z2BCP96j18MSXC0S0jSu/IG4FFxmBs7W4/lI2vPJ7foVfEB0hUVtnOjnCiTg==}
+ '@simple-libs/child-process-utils@1.0.2':
+ resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==}
+ engines: {node: '>=18'}
- '@types/node@20.8.0':
- resolution: {integrity: sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==}
+ '@simple-libs/stream-utils@1.2.0':
+ resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==}
+ engines: {node: '>=18'}
- '@types/node@24.6.2':
- resolution: {integrity: sha512-d2L25Y4j+W3ZlNAeMKcy7yDsK425ibcAOO2t7aPTz6gNMH0z2GThtwENCDc0d/Pw9wgyRqE5Px1wkV7naz8ang==}
+ '@sindresorhus/base62@1.0.0':
+ resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==}
+ engines: {node: '>=18'}
- '@types/normalize-package-data@2.4.2':
- resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==}
+ '@sindresorhus/is@7.2.0':
+ resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==}
+ engines: {node: '>=18'}
- '@types/optimize-css-assets-webpack-plugin@5.0.8':
- resolution: {integrity: sha512-n134DdmRVXTy0KKbgg3A/G02r2XJKJicYzbJYhdIO8rdYdzoMv6GNHjog2Oq1ttaCOhsYcPIA6Sn7eFxEGCM1A==}
+ '@sindresorhus/merge-streams@4.0.0':
+ resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
+ engines: {node: '>=18'}
- '@types/parse-json@4.0.0':
- resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
+ '@speed-highlight/core@1.2.23':
+ resolution: {integrity: sha512-iRoq6i6JDJP6Mt2A5JaPvzw0pgYHH6k92ij+yXiTrB7T2y9N789aWE3EHWj/5ztlJBokcCBja3iYLVdu5wgnkg==}
- '@types/pug@2.0.10':
- resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==}
+ '@standard-schema/spec@1.1.0':
+ resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
- '@types/qrcode@1.5.5':
- resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==}
+ '@stylistic/eslint-plugin@5.10.0':
+ resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^9.0.0 || ^10.0.0
- '@types/qs@6.9.8':
- resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==}
+ '@swc/helpers@0.5.23':
+ resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==}
- '@types/range-parser@1.2.5':
- resolution: {integrity: sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==}
+ '@tailwindcss/node@4.3.2':
+ resolution: {integrity: sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==}
- '@types/sax@1.2.7':
- resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==}
+ '@tailwindcss/oxide-android-arm64@4.3.2':
+ resolution: {integrity: sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [android]
- '@types/semver@7.5.3':
- resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==}
+ '@tailwindcss/oxide-darwin-arm64@4.3.2':
+ resolution: {integrity: sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [darwin]
- '@types/send@0.17.2':
- resolution: {integrity: sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==}
+ '@tailwindcss/oxide-darwin-x64@4.3.2':
+ resolution: {integrity: sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [darwin]
- '@types/serve-static@1.15.7':
- resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==}
+ '@tailwindcss/oxide-freebsd-x64@4.3.2':
+ resolution: {integrity: sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [freebsd]
- '@types/source-list-map@0.1.3':
- resolution: {integrity: sha512-I9R/7fUjzUOyDy6AFkehCK711wWoAXEaBi80AfjZt1lIkbe6AcXKd3ckQc3liMvQExWvfOeh/8CtKzrfUFN5gA==}
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2':
+ resolution: {integrity: sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==}
+ engines: {node: '>= 20'}
+ cpu: [arm]
+ os: [linux]
- '@types/stack-utils@2.0.3':
- resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
+ '@tailwindcss/oxide-linux-arm64-gnu@4.3.2':
+ resolution: {integrity: sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@types/strip-bom@3.0.0':
- resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==}
+ '@tailwindcss/oxide-linux-arm64-musl@4.3.2':
+ resolution: {integrity: sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@types/strip-json-comments@0.0.30':
- resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==}
+ '@tailwindcss/oxide-linux-x64-gnu@4.3.2':
+ resolution: {integrity: sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@types/tapable@1.0.9':
- resolution: {integrity: sha512-fOHIwZua0sRltqWzODGUM6b4ffZrf/vzGUmNXdR+4DzuJP42PMbM5dLKcdzlYvv8bMJ3GALOzkk1q7cDm2zPyA==}
+ '@tailwindcss/oxide-linux-x64-musl@4.3.2':
+ resolution: {integrity: sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@types/terser-webpack-plugin@4.2.1':
- resolution: {integrity: sha512-x688KsgQKJF8PPfv4qSvHQztdZNHLlWJdolN9/ptAGimHVy3rY+vHdfglQDFh1Z39h7eMWOd6fQ7ke3PKQcdyA==}
+ '@tailwindcss/oxide-wasm32-wasi@4.3.2':
+ resolution: {integrity: sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.3.2':
+ resolution: {integrity: sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [win32]
- '@types/tough-cookie@4.0.5':
- resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
+ '@tailwindcss/oxide-win32-x64-msvc@4.3.2':
+ resolution: {integrity: sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [win32]
- '@types/uglify-js@3.17.2':
- resolution: {integrity: sha512-9SjrHO54LINgC/6Ehr81NjAxAYvwEZqjUHLjJYvC4Nmr9jbLQCIZbWSvl4vXQkkmR1UAuaKDycau3O1kWGFyXQ==}
+ '@tailwindcss/oxide@4.3.2':
+ resolution: {integrity: sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==}
+ engines: {node: '>= 20'}
- '@types/webpack-bundle-analyzer@3.9.5':
- resolution: {integrity: sha512-QlyDyX7rsOIJHASzXWlih8DT9fR+XCG9cwIV/4pKrtScdHv4XFshdEf/7iiqLqG0lzWcoBdzG8ylMHQ5XLNixw==}
+ '@tailwindcss/postcss@4.3.2':
+ resolution: {integrity: sha512-rjVWYCa7Ngbi5AarT6k8TkxUG3Wl1QKzHdIZVsjZSzf36Jmo2IKZt/NHRAwly8oDkbBOH0YTu+CHuf9jPxMc+g==}
- '@types/webpack-hot-middleware@2.25.5':
- resolution: {integrity: sha512-/eRWWMgZteNzl17qLCRdRmtKPZuWy984b11Igz9+BAU5a99Hc2AJinnMohMPVahGRSHby4XwsnjlgIt9m0Ce3g==}
+ '@tailwindcss/vite@4.3.2':
+ resolution: {integrity: sha512-eHpMeX4JXfVNJDEcsouTeCBubJBTcTLigeaw/NTUW6PB5ATKKXdyonnXgTBX2VuRbjz1hjfz6C5XAhr52ImQXA==}
+ peerDependencies:
+ vite: ^5.2.0 || ^6 || ^7 || ^8
- '@types/webpack-sources@3.2.1':
- resolution: {integrity: sha512-iLC3Fsx62ejm3ST3PQ8vBMC54Rb3EoCprZjeJGI5q+9QjfDLGt9jeg/k245qz1G9AQnORGk0vqPicJFPT1QODQ==}
+ '@tanstack/table-core@8.21.3':
+ resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
+ engines: {node: '>=12'}
- '@types/webpack@4.41.38':
- resolution: {integrity: sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==}
+ '@tanstack/virtual-core@3.17.3':
+ resolution: {integrity: sha512-8Np/TFELpI0ySuJoVmjvOrQYXH/8sTX0Biv9szhFhY39xOdAAY+smrMxjxOum/ux3eM8MUJQsEJ0/R0UpvC8dw==}
- '@types/yargs-parser@21.0.3':
- resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
+ '@tanstack/vue-table@8.21.3':
+ resolution: {integrity: sha512-rusRyd77c5tDPloPskctMyPLFEQUeBzxdQ+2Eow4F7gDPlPOB1UnnhzfpdvqZ8ZyX2rRNGmqNnQWm87OI2OQPw==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ vue: '>=3.2'
- '@types/yargs@17.0.33':
- resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
+ '@tanstack/vue-virtual@3.13.31':
+ resolution: {integrity: sha512-wZMEoSf852jQqaf3Ika1J7PiBae6341LNy/2CxmIyn0XKDQXMuK41wVX+xp6G0yx8jyR95Ef+Tdr13DK7mbJtQ==}
+ peerDependencies:
+ vue: ^2.7.0 || ^3.0.0
- '@typescript-eslint/eslint-plugin@6.7.3':
- resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@tiptap/core@3.27.1':
+ resolution: {integrity: sha512-rV6Qn4wmC6BxfF+4mu6bqGWj9vA4oXXhsrpXaJL2uhjxeHAGofjwcHof2X84VYzeyXgdlsGmqKie4TAppVXZUQ==}
peerDependencies:
- '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
- eslint: ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ '@tiptap/pm': 3.27.1
- '@typescript-eslint/parser@6.7.3':
- resolution: {integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@tiptap/extension-blockquote@3.29.2':
+ resolution: {integrity: sha512-ca4OzKDh0yaxg2+Z56bC2QnWsNsFp2YMRfVig1PDXyMVFMNJpLcnhxgq/9btn+xYAlYrj8RymOeCTYREOR6Zjg==}
peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ '@tiptap/core': 3.29.2
+ '@tiptap/pm': 3.29.2
- '@typescript-eslint/scope-manager@6.7.3':
- resolution: {integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@tiptap/extension-bold@3.29.2':
+ resolution: {integrity: sha512-elYbGxJsYnBb4leqrcjdIJuiG380BcOgN+UUzvOv+qEjfGVzHodFOMBl3qnmD6urYHNu5/qQK2S0qSSRXKCLNQ==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
- '@typescript-eslint/type-utils@6.7.3':
- resolution: {integrity: sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@tiptap/extension-bubble-menu@3.27.1':
+ resolution: {integrity: sha512-j/j8Qp9Z5nViade2m7zjrO/CYH/Ca80Qj7aqo0eUaei6FZQ5izlF9o4XQU5EFMAutV6mwynsPUp8FVo5sCuYfw==}
peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ '@tiptap/core': 3.27.1
+ '@tiptap/pm': 3.27.1
- '@typescript-eslint/types@6.7.3':
- resolution: {integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@tiptap/extension-bullet-list@3.29.2':
+ resolution: {integrity: sha512-3bWcCUPbCHv0XttlMdnAtXLNYWx2pblByMgxmGsaP9FU0QnslGXty6A6gHCqI33ygRg1vrA6U5Wtpwbi5aKu5g==}
+ peerDependencies:
+ '@tiptap/extension-list': 3.29.2
- '@typescript-eslint/typescript-estree@6.7.3':
- resolution: {integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@tiptap/extension-code-block@3.29.2':
+ resolution: {integrity: sha512-w153ct8g6dLiPTdXQ6SOIMxX4SEo5Q50AmjdEEEcJ7ZcYUcde/ScSskLHfOYmyt5ZFAiyEwr121+pux+p3/oAQ==}
peerDependencies:
- typescript: '*'
+ '@tiptap/core': 3.29.2
+ '@tiptap/pm': 3.29.2
+
+ '@tiptap/extension-code@3.27.1':
+ resolution: {integrity: sha512-epOUpFfEmBzjvnqvjv2qHX7NAuLo5dlOGV690lWu+sAYMjibuJBeVvAiKPyFCfRCCTUxdbDB3jbaOA1yEcEJ7w==}
+ peerDependencies:
+ '@tiptap/core': 3.27.1
+
+ '@tiptap/extension-collaboration@3.27.1':
+ resolution: {integrity: sha512-Da7WeKNIaLsbcHBWlgexMgm5ygoA1mhRroFND1vweLNsWIPxvyjci7jrq/uDN1tSnpqMlJsdyW0tXzbVGYTpMw==}
+ peerDependencies:
+ '@tiptap/core': 3.27.1
+ '@tiptap/pm': 3.27.1
+ '@tiptap/y-tiptap': ^3.0.5
+ yjs: ^13
+
+ '@tiptap/extension-document@3.29.2':
+ resolution: {integrity: sha512-YUamvefLnsqu6124GavVTI7nqcFlQJ12ROB0oSwG69eSBZYNjg1tIs05LFrBxkwf4Xgqd6YzfJ9+FeG428RvzQ==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+
+ '@tiptap/extension-drag-handle-vue-3@3.27.1':
+ resolution: {integrity: sha512-ccVg6gsv1Tsf2Vio8t3xRSLBigr7INO11cF2VEI8K4A4JCE8ZrhOr5bMA76XHHwxejb/e5NE/tFhdLUjPnLS2g==}
+ peerDependencies:
+ '@tiptap/extension-drag-handle': 3.27.1
+ '@tiptap/pm': 3.27.1
+ '@tiptap/vue-3': 3.27.1
+ vue: ^3.0.0
+
+ '@tiptap/extension-drag-handle@3.27.1':
+ resolution: {integrity: sha512-DGzthoQEgPPbbwy/tY314AF1SV/1gIGQYlU/R6GWxegc7h/5/Qp1SopjguyuZwoO5BPwyBZXa9J/f58MeHQOWw==}
+ peerDependencies:
+ '@tiptap/core': 3.27.1
+ '@tiptap/extension-collaboration': 3.27.1
+ '@tiptap/extension-node-range': 3.27.1
+ '@tiptap/pm': 3.27.1
+ '@tiptap/y-tiptap': ^3.0.5
+
+ '@tiptap/extension-dropcursor@3.29.2':
+ resolution: {integrity: sha512-KKno7cU9r1HdR48CRrsDu69/1UjZdoslq/UcE+Kx+tdhAv/aljXMkRSNzGMrBNOBDmHRgS1+58zm21WQWdQzwA==}
+ peerDependencies:
+ '@tiptap/extensions': 3.29.2
+
+ '@tiptap/extension-floating-menu@3.27.1':
+ resolution: {integrity: sha512-BmJF1VqB7dSJkgAalrpVFj88WLhxKjcWPuWHOqf2ITrUU2832BhKLXKmxjWUy1gqV8PfNNVWtGfIERy7I0y0+Q==}
+ peerDependencies:
+ '@floating-ui/dom': ^1.0.0
+ '@tiptap/core': 3.27.1
+ '@tiptap/pm': 3.27.1
+
+ '@tiptap/extension-gapcursor@3.29.2':
+ resolution: {integrity: sha512-8Q39UR4/Tit759IeW9xZIe3NMwN11GsuA3FLheDyyGn7RrW02HD3HhUDlazE54Ki4HoosjFmChPlN4Ik2ubdRQ==}
+ peerDependencies:
+ '@tiptap/extensions': 3.29.2
+
+ '@tiptap/extension-hard-break@3.29.2':
+ resolution: {integrity: sha512-eUW3LN3fq8rXnjEUeI3D2QONYdLsU3yYQm4jxlErs2h4cfwrFjgf19VSUFVmm6LrFbbQ0OnDVPeVLL6iOwDw2w==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+
+ '@tiptap/extension-heading@3.29.2':
+ resolution: {integrity: sha512-6W4aIy70Mh7BNlbG9zZ5FBLhJhU2UUEzgZJ/jwYSCcB30o8McLxJSEjhtoHiX8R78Ah2/JzBGvIe5olZlbeE4A==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+
+ '@tiptap/extension-horizontal-rule@3.27.1':
+ resolution: {integrity: sha512-QlKE7qn5qMnIGVGhXQlvYedvLtNJ9z0dmit5w8vPb8tKzW4Spk6M7N2kruprrDA8GBwHfeR5wmF+njfUm34qxg==}
+ peerDependencies:
+ '@tiptap/core': 3.27.1
+ '@tiptap/pm': 3.27.1
+
+ '@tiptap/extension-image@3.27.1':
+ resolution: {integrity: sha512-+JTahgQT+NxiGjduaB3qJVyhU/wh4m3pVkht1Earioku2bm/apj5Lb8rSowa/NJYP3B+oQgV/V4YLw5dtDgBoA==}
+ peerDependencies:
+ '@tiptap/core': 3.27.1
+
+ '@tiptap/extension-italic@3.29.2':
+ resolution: {integrity: sha512-iH63V/5wsaMnY4Jz0+meaAGhaec4AiOzOduzl6ZZr5IyGhZ1kthyW84ELt0dyLI3hNceAUhaNWc+I7+vX0aoXA==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+
+ '@tiptap/extension-link@3.29.2':
+ resolution: {integrity: sha512-DcVer5SqrexKCEP6Ip1UPxJUMvcRCCItSv0wxoGytanrimBh2smvcg6X0DWnjlsi5H0updhyl+atYCmmQXUIXA==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+ '@tiptap/pm': 3.29.2
+
+ '@tiptap/extension-list-item@3.29.2':
+ resolution: {integrity: sha512-s8vBVHHFT0Qpu7CzAZ7S1kYmSiVaDvUNvMNcZUWnxj6VPfiwmx0eXd9FsjePrRCMoM5tFmPnhFTHDxY3D/eZeQ==}
+ peerDependencies:
+ '@tiptap/extension-list': 3.29.2
+
+ '@tiptap/extension-list-keymap@3.29.2':
+ resolution: {integrity: sha512-R+3k8OLnxdCH7Xy9ieOwUt5m2Je74u8mikothGmsYVO2Zyq48fIbmZ+X6RBPCu7DBOI2FIUhHEFbKQeDWvDNmA==}
+ peerDependencies:
+ '@tiptap/extension-list': 3.29.2
+
+ '@tiptap/extension-list@3.29.2':
+ resolution: {integrity: sha512-WPZ9BHAPT6QeIm1vdVkuoOWvy9a8/EZeJwV2VhU8LXyTAttvzyj4rsbbHyJWvYWlUSTt/QF2AZ2zhKo7u1w3/A==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+ '@tiptap/pm': 3.29.2
+
+ '@tiptap/extension-mention@3.27.1':
+ resolution: {integrity: sha512-QfaKdl8PET01JvEFrIjMcOC1iYrBm2tsZEn07J1AaCqClW9iWcg/nCAdkdFhVir1fC54SLuaui43xslBawQRFg==}
+ peerDependencies:
+ '@tiptap/core': 3.27.1
+ '@tiptap/pm': 3.27.1
+ '@tiptap/suggestion': 3.27.1
+
+ '@tiptap/extension-node-range@3.27.1':
+ resolution: {integrity: sha512-30OkvZA2+mtupOSihSyRyRAgoVP+RHXs0AT/2DCWc3NHwg+SHo/OrB/S5zsOW9p74Q+6V3hd1K3Nw6Qp9F9M0Q==}
+ peerDependencies:
+ '@tiptap/core': 3.27.1
+ '@tiptap/pm': 3.27.1
+
+ '@tiptap/extension-ordered-list@3.29.2':
+ resolution: {integrity: sha512-ndCunC+UsYOpkOtL7vGnDz21UNa45WUlcO9wMT1fbuYow2QnRhsuMlCWENXI52YPPARWuQ0RDgN7q6TaxPERBg==}
+ peerDependencies:
+ '@tiptap/extension-list': 3.29.2
+
+ '@tiptap/extension-paragraph@3.29.2':
+ resolution: {integrity: sha512-7qJj5YTr11vvjNgjDN1ypOfwTovc0QOCYcit/rskeuVgnmQZOZQzC/BbyKLLG7UGnpRLemU/mEGbW9pAqjAXkQ==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+
+ '@tiptap/extension-placeholder@3.27.1':
+ resolution: {integrity: sha512-lhcNDcczQ75yJOSywCHb58Hmtg1aPL/2TdYmeLPxVrP048D7rRs133sfONcgyyw0AvhnfmPOkHLTv3QtKSowhw==}
+ peerDependencies:
+ '@tiptap/extensions': 3.27.1
+
+ '@tiptap/extension-strike@3.29.2':
+ resolution: {integrity: sha512-aEvLAbddUQZ+FukCreV3q4G2HfNI+odE7E9U+wbq6XsSWKyo8/pDu1muz+TFKNre4blSMOQ3JQmw5UeHDKy+fg==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+
+ '@tiptap/extension-text@3.29.2':
+ resolution: {integrity: sha512-Ubko45JWWHe8glBt2PiGNF8hcbys/JNalFhiR7Y1X4iOOtAxAKJJxh3+eq+//NTlGuBPdWGp7zw8EEUp7anjKA==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+
+ '@tiptap/extension-underline@3.29.2':
+ resolution: {integrity: sha512-K7XwH/xS/5AIREWQ00VTEf/W5U0olp7j6wwit7cdd/8nHv6h6AGr1+iEApHKoLXWQZLfGQKzJlT9W61LAl+fHA==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+
+ '@tiptap/extensions@3.27.1':
+ resolution: {integrity: sha512-1Tdx9faw8k0/83V6X+xCDVhV8yElGt95JxeW3YMkKQJI56QdlPz0xOdJPlMiSGJKinPyVier+x9LJD/YZUZIaw==}
+ peerDependencies:
+ '@tiptap/core': 3.27.1
+ '@tiptap/pm': 3.27.1
+
+ '@tiptap/extensions@3.29.2':
+ resolution: {integrity: sha512-BCz+FCAChSYtUe4BFj97HEO+nSK+J7GxbJgZG4Hg7DT/gI+hRyeNndU8efiQAx3WGdzsFi3UxRpcF1tTQM7iMQ==}
+ peerDependencies:
+ '@tiptap/core': 3.29.2
+ '@tiptap/pm': 3.29.2
+
+ '@tiptap/markdown@3.27.1':
+ resolution: {integrity: sha512-4m2LZcj/uN0uLlGnXr3i7sfdxbQNNmeMn4wFyFrP2xpshcKPL5WujUAcqT2rgKfaDjKQ8gIK/GpgSQKuRENFwg==}
+ peerDependencies:
+ '@tiptap/core': 3.27.1
+ '@tiptap/pm': 3.27.1
+
+ '@tiptap/pm@3.27.1':
+ resolution: {integrity: sha512-Ffjx+vimmBU7zH/KrpXzJid3+pziCe/VL2aexSTP63cyQwKQ65LkFkCKaIsSpFdQQuakVZBGWjCA5RoBV852pw==}
+
+ '@tiptap/starter-kit@3.27.1':
+ resolution: {integrity: sha512-vfxRsqW8rCc0k4pzo0ilU3wobVi2wqVj88VZI2SlgZlNnUAkrDGDIAph7CTa9k9fshV+O1ivpEgPC5yC046jow==}
+
+ '@tiptap/suggestion@3.27.1':
+ resolution: {integrity: sha512-GNBPRav+lAfXzqmmUAS6ylRAn3G8JfsP6XosjoORxJIQJLx1ktDqwp6tm1Vgz9aGIM2TrBxLS1uBbI1Gb2/1VA==}
+ peerDependencies:
+ '@floating-ui/dom': ^1.0.0
+ '@tiptap/core': 3.27.1
+ '@tiptap/pm': 3.27.1
+
+ '@tiptap/vue-3@3.27.1':
+ resolution: {integrity: sha512-o5GB6hfUnyf9sCB306rHWmaIYRL+02ROX657EkuY8tEWKHMTuMjHWl2AqHMP47wz0W9DaMOJLvcPpYdAEKq3Mw==}
+ peerDependencies:
+ '@floating-ui/dom': ^1.0.0
+ '@tiptap/core': 3.27.1
+ '@tiptap/pm': 3.27.1
+ vue: ^3.0.0
+
+ '@tiptap/y-tiptap@3.0.6':
+ resolution: {integrity: sha512-kcGeVGKtq/cPGVseNKjtmtcY2WXUAEm1SqS5x0Smubj4nOCRyPiHg6kY4QuuZhmXjTK7hdo8chokkPUKWXPE9Q==}
+ engines: {node: '>=16.0.0', npm: '>=8.0.0'}
+ peerDependencies:
+ prosemirror-model: ^1.7.1
+ prosemirror-state: ^1.2.3
+ prosemirror-view: ^1.9.10
+ y-protocols: ^1.0.1
+ yjs: ^13.5.38
+
+ '@tybys/wasm-util@0.10.2':
+ resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==}
+
+ '@tybys/wasm-util@0.10.3':
+ resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==}
+
+ '@types/esrecurse@4.3.1':
+ resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
+
+ '@types/estree@1.0.9':
+ resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
+
+ '@types/hast@3.0.4':
+ resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+
+ '@types/jsesc@2.5.1':
+ resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+ '@types/node@25.9.1':
+ resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==}
+
+ '@types/qrcode@1.5.6':
+ resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==}
+
+ '@types/resolve@1.20.2':
+ resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
+
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+ '@types/web-bluetooth@0.0.20':
+ resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
+
+ '@types/web-bluetooth@0.0.21':
+ resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
+
+ '@typescript-eslint/eslint-plugin@8.62.0':
+ resolution: {integrity: sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.62.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/parser@8.62.0':
+ resolution: {integrity: sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/project-service@8.62.0':
+ resolution: {integrity: sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/scope-manager@8.62.0':
+ resolution: {integrity: sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/tsconfig-utils@8.62.0':
+ resolution: {integrity: sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/type-utils@8.62.0':
+ resolution: {integrity: sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/types@8.62.0':
+ resolution: {integrity: sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/typescript-estree@8.62.0':
+ resolution: {integrity: sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/utils@8.62.0':
+ resolution: {integrity: sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/visitor-keys@8.62.0':
+ resolution: {integrity: sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@ungap/structured-clone@1.3.2':
+ resolution: {integrity: sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==}
+
+ '@unhead/bundler@3.1.7':
+ resolution: {integrity: sha512-yJPDwKZ3NOSmzB1a4ea5MEbeaXBq9EvOcGnav46SsPnslE7jq7QKkx42UQzxJk0q6yFPGdCZbFae2IO1HTtLPA==}
+ peerDependencies:
+ '@unhead/cli': ^3.1.7
+ esbuild: '>=0.17.0'
+ lightningcss: '>=1.20.0'
+ rolldown: '>=1.0.0-beta.0'
+ unhead: ^3.1.7
+ vite: '>=6.4.2'
+ webpack: '>=5.0.0'
peerDependenciesMeta:
- typescript:
+ '@unhead/cli':
+ optional: true
+ esbuild:
+ optional: true
+ lightningcss:
+ optional: true
+ rolldown:
+ optional: true
+ vite:
+ optional: true
+ webpack:
+ optional: true
+
+ '@unhead/bundler@3.3.1':
+ resolution: {integrity: sha512-F9gEgqpUKqHFzOv+7Pgm3TbmXhUdLX+WjZiPAK/huLDzblzZmvAUE9vRDymWaOST7jqGT/tPKkwl2kqbgb3nPw==}
+ peerDependencies:
+ '@unhead/cli': ^3.3.1
+ '@vitejs/devtools-kit': ^0.4.1
+ esbuild: '>=0.17.0'
+ lightningcss: '>=1.20.0'
+ oxc-parser: '>=0.98.0'
+ rolldown: '>=1.0.0'
+ unhead: ^3.3.1
+ vite: '>=6.4.2'
+ webpack: '>=5.0.0'
+ peerDependenciesMeta:
+ '@unhead/cli':
+ optional: true
+ '@vitejs/devtools-kit':
+ optional: true
+ esbuild:
+ optional: true
+ lightningcss:
+ optional: true
+ oxc-parser:
+ optional: true
+ rolldown:
+ optional: true
+ vite:
+ optional: true
+ webpack:
optional: true
- '@typescript-eslint/utils@6.7.3':
- resolution: {integrity: sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@unhead/vue@2.1.17':
+ resolution: {integrity: sha512-pnC8x9HLV3qQXdvWfylUEU25uhfCAy3ly9nmpQz84j9py818DRfU8jOsQ5wjdWtxyU1vX/fW2udfm4jtxUK8Bg==}
peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
+ vue: '>=3.5.18'
- '@typescript-eslint/visitor-keys@6.7.3':
- resolution: {integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@unhead/vue@3.3.1':
+ resolution: {integrity: sha512-iS+eiE1NehbV/eF7wzR7UUuUVTv8fIphFOCekQvEMuPqfKPCB8f3wf7sgPgUngYX6mdgM6PmkGmaOQgTBxqwbw==}
+ peerDependencies:
+ vite: '>=6.4.2'
+ vue: '>=3.5.18'
+ webpack: '>=5.0.0'
+ peerDependenciesMeta:
+ vite:
+ optional: true
+ webpack:
+ optional: true
- '@ungap/structured-clone@1.2.0':
- resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+ '@unocss/config@66.7.4':
+ resolution: {integrity: sha512-xdIpeZv2l69GlvO2GjAMXXMnJ4LPI0J9OXIEsON6kSHJzZqL9Gbztqvt9L+3OXQsNCeduJF/Dm9JrNPSbpDqHw==}
- '@ungap/structured-clone@1.3.0':
- resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+ '@unocss/core@66.7.4':
+ resolution: {integrity: sha512-OGXh+RRsAgOrecTKRjUd4SepHR7W4v6zIf6pGtKyIIAIMnzcW/tU+afR1cDbhtb4efZMQhzaoAh3ncvkL8eEYA==}
- '@unrs/resolver-binding-android-arm-eabi@1.11.1':
- resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
+ '@unrs/resolver-binding-android-arm-eabi@1.12.2':
+ resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==}
cpu: [arm]
os: [android]
- '@unrs/resolver-binding-android-arm64@1.11.1':
- resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
+ '@unrs/resolver-binding-android-arm64@1.12.2':
+ resolution: {integrity: sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==}
cpu: [arm64]
os: [android]
- '@unrs/resolver-binding-darwin-arm64@1.11.1':
- resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
+ '@unrs/resolver-binding-darwin-arm64@1.12.2':
+ resolution: {integrity: sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==}
cpu: [arm64]
os: [darwin]
- '@unrs/resolver-binding-darwin-x64@1.11.1':
- resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
+ '@unrs/resolver-binding-darwin-x64@1.12.2':
+ resolution: {integrity: sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==}
cpu: [x64]
os: [darwin]
- '@unrs/resolver-binding-freebsd-x64@1.11.1':
- resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
+ '@unrs/resolver-binding-freebsd-x64@1.12.2':
+ resolution: {integrity: sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==}
cpu: [x64]
os: [freebsd]
- '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
- resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2':
+ resolution: {integrity: sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==}
cpu: [arm]
os: [linux]
- '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
- resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2':
+ resolution: {integrity: sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==}
cpu: [arm]
os: [linux]
- '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
- resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
+ '@unrs/resolver-binding-linux-arm64-gnu@1.12.2':
+ resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
- '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
- resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
+ '@unrs/resolver-binding-linux-arm64-musl@1.12.2':
+ resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==}
cpu: [arm64]
os: [linux]
+ libc: [musl]
+
+ '@unrs/resolver-binding-linux-loong64-gnu@1.12.2':
+ resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-loong64-musl@1.12.2':
+ resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [musl]
- '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
- resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2':
+ resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
- '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
- resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2':
+ resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==}
cpu: [riscv64]
os: [linux]
+ libc: [glibc]
- '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
- resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
+ '@unrs/resolver-binding-linux-riscv64-musl@1.12.2':
+ resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==}
cpu: [riscv64]
os: [linux]
+ libc: [musl]
- '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
- resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
+ '@unrs/resolver-binding-linux-s390x-gnu@1.12.2':
+ resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
- '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
- resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
+ '@unrs/resolver-binding-linux-x64-gnu@1.12.2':
+ resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==}
cpu: [x64]
os: [linux]
+ libc: [glibc]
- '@unrs/resolver-binding-linux-x64-musl@1.11.1':
- resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
+ '@unrs/resolver-binding-linux-x64-musl@1.12.2':
+ resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==}
cpu: [x64]
os: [linux]
+ libc: [musl]
- '@unrs/resolver-binding-wasm32-wasi@1.11.1':
- resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
+ '@unrs/resolver-binding-openharmony-arm64@1.12.2':
+ resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@unrs/resolver-binding-wasm32-wasi@1.12.2':
+ resolution: {integrity: sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
- resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
+ '@unrs/resolver-binding-win32-arm64-msvc@1.12.2':
+ resolution: {integrity: sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==}
cpu: [arm64]
os: [win32]
- '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
- resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
+ '@unrs/resolver-binding-win32-ia32-msvc@1.12.2':
+ resolution: {integrity: sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==}
cpu: [ia32]
os: [win32]
- '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
- resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
+ '@unrs/resolver-binding-win32-x64-msvc@1.12.2':
+ resolution: {integrity: sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==}
cpu: [x64]
os: [win32]
- '@vue/babel-helper-vue-jsx-merge-props@1.4.0':
- resolution: {integrity: sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==}
+ '@valibot/to-json-schema@1.7.1':
+ resolution: {integrity: sha512-3qkmU6KXWh8GIThEAW3kuRHPQBMjWkKy+Ppz3WkUucx53DTpOa6siMn4xDGSOhlVyMrDaJTCTMLYPZVAIk1P0A==}
+ peerDependencies:
+ valibot: ^1.4.0
+
+ '@vercel/nft@1.10.2':
+ resolution: {integrity: sha512-w+WyX5Ulmj4dtTZrxaulqrjaLZHSbnPzx75SJsTNYmotKsqn1JlLnDJa+lz5hn90HJofhl/2MAtw0mCrgM3qYw==}
+ engines: {node: '>=20'}
+ hasBin: true
- '@vue/babel-plugin-transform-vue-jsx@1.4.0':
- resolution: {integrity: sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==}
+ '@vitejs/devtools-kit@0.3.4':
+ resolution: {integrity: sha512-QHvb3wF0KZxvbfEplzzdGenB/dWoPBQlUnw3VVBm5qUYTdoud8rOoem9QI6h/+7a+iwy88LmLigxbSXbbv2Uyg==}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ vite: '*'
- '@vue/babel-preset-jsx@1.4.0':
- resolution: {integrity: sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==}
+ '@vitejs/plugin-vue-jsx@5.1.6':
+ resolution: {integrity: sha512-YXvi4as2clxt6DFw5+a0tTA97ntiQXm/raR8ofNj3aNwwdlVGTiG2gp7EvfZW17P50acL/9bP0ccF4XnqNmlgA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- '@babel/core': ^7.0.0-0
- vue: '*'
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ vue: ^3.0.0
+
+ '@vitejs/plugin-vue@6.0.8':
+ resolution: {integrity: sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ vue: ^3.2.25
+
+ '@vue-macros/common@3.1.2':
+ resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ vue: ^2.7.0 || ^3.2.25
peerDependenciesMeta:
vue:
optional: true
- '@vue/babel-sugar-composition-api-inject-h@1.4.0':
- resolution: {integrity: sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==}
+ '@vue-macros/common@3.1.4':
+ resolution: {integrity: sha512-/5Fv+6DgIcM9ajY05ZmKBv+LMX1M9A0X+IUwDRVdt67ciw8OV9bvG2r34p3RiEadlsQybjhKPRKNXDC8Bp23cw==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- '@babel/core': ^7.0.0-0
+ vue: ^2.7.0 || ^3.2.25
+ peerDependenciesMeta:
+ vue:
+ optional: true
- '@vue/babel-sugar-composition-api-render-instance@1.4.0':
- resolution: {integrity: sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@vue/babel-helper-vue-transform-on@2.0.1':
+ resolution: {integrity: sha512-uZ66EaFbnnZSYqYEyplWvn46GhZ1KuYSThdT68p+am7MgBNbQ3hphTL9L+xSIsWkdktwhPYLwPgVWqo96jDdRA==}
- '@vue/babel-sugar-functional-vue@1.4.0':
- resolution: {integrity: sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==}
+ '@vue/babel-plugin-jsx@2.0.1':
+ resolution: {integrity: sha512-a8CaLQjD/s4PVdhrLD/zT574ZNPnZBOY+IhdtKWRB4HRZ0I2tXBi5ne7d9eCfaYwp5gU5+4KIyFTV1W1YL9xZA==}
peerDependencies:
'@babel/core': ^7.0.0-0
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
- '@vue/babel-sugar-inject-h@1.4.0':
- resolution: {integrity: sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==}
+ '@vue/babel-plugin-resolve-type@2.0.1':
+ resolution: {integrity: sha512-ybwgIuRGRRBhOU37GImDoWQoz+TlSqap65qVI6iwg/J7FfLTLmMf97TS7xQH9I7Qtr/gp161kYVdhr1ZMraSYQ==}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@vue/babel-sugar-v-model@1.4.0':
- resolution: {integrity: sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@vue/compiler-core@3.5.34':
+ resolution: {integrity: sha512-s9cLyK5mLcvZ4Agva5QgRsQyLKvts9WbU9DB6NqiZkkGEdwmcEiylj5Jbwkp680drF/NNCV8OlAJSe+yMLxaJw==}
- '@vue/babel-sugar-v-on@1.4.0':
- resolution: {integrity: sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
+ '@vue/compiler-core@3.5.39':
+ resolution: {integrity: sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==}
- '@vue/compiler-sfc@2.7.16':
- resolution: {integrity: sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==}
+ '@vue/compiler-core@3.5.41':
+ resolution: {integrity: sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg==}
- '@vue/component-compiler-utils@3.3.0':
- resolution: {integrity: sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==}
+ '@vue/compiler-dom@3.5.34':
+ resolution: {integrity: sha512-EbF/T++k0e2MMZlJsBhzK8Sgwt0HcIPOhzn1CTB/lv6sQcyk+OWf8YeiLxZp3ro7MbbLcAfAJ6sEvjFWuNgUCw==}
- '@vue/test-utils@1.3.6':
- resolution: {integrity: sha512-udMmmF1ts3zwxUJEIAj5ziioR900reDrt6C9H3XpWPsLBx2lpHKoA4BTdd9HNIYbkGltWw+JjWJ+5O6QBwiyEw==}
- peerDependencies:
- vue: 2.x
- vue-template-compiler: ^2.x
+ '@vue/compiler-dom@3.5.39':
+ resolution: {integrity: sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==}
- '@webassemblyjs/ast@1.14.1':
- resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
+ '@vue/compiler-dom@3.5.41':
+ resolution: {integrity: sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw==}
- '@webassemblyjs/ast@1.9.0':
- resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==}
+ '@vue/compiler-sfc@3.5.34':
+ resolution: {integrity: sha512-D/ihr6uZeIt6r+pVZf46RWT1fAsLFMbUP7k8G1VkiiWexriED9GrX3echHd4Abbt17zjlfiFJ8z7a3BxZOPNjg==}
- '@webassemblyjs/floating-point-hex-parser@1.13.2':
- resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
+ '@vue/compiler-sfc@3.5.39':
+ resolution: {integrity: sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==}
- '@webassemblyjs/floating-point-hex-parser@1.9.0':
- resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==}
+ '@vue/compiler-sfc@3.5.41':
+ resolution: {integrity: sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ==}
- '@webassemblyjs/helper-api-error@1.13.2':
- resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
+ '@vue/compiler-ssr@3.5.34':
+ resolution: {integrity: sha512-cDtTHKibkThKGHH1SP+WdccquNRYQDFH6rRjQCqT9G2ltFAfoR5pUftpab/z+aM5mW9HLLVQW7hfKKQe/1GBeQ==}
- '@webassemblyjs/helper-api-error@1.9.0':
- resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==}
+ '@vue/compiler-ssr@3.5.39':
+ resolution: {integrity: sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==}
- '@webassemblyjs/helper-buffer@1.14.1':
- resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
+ '@vue/compiler-ssr@3.5.41':
+ resolution: {integrity: sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A==}
- '@webassemblyjs/helper-buffer@1.9.0':
- resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==}
+ '@vue/devtools-api@7.7.9':
+ resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==}
- '@webassemblyjs/helper-code-frame@1.9.0':
- resolution: {integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==}
+ '@vue/devtools-api@8.1.2':
+ resolution: {integrity: sha512-vA0O112YqyDuNA1s7Yb2gCgToQ/OxOWiFDO5ThLCcDy0ldHnSd1dUTaSYhOldbqoNgumE4dxtGAoAaSUKUD1Zg==}
- '@webassemblyjs/helper-fsm@1.9.0':
- resolution: {integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==}
+ '@vue/devtools-api@8.2.1':
+ resolution: {integrity: sha512-6u4vXBlIBAC1wMplIZgpyPn7uh/s4Bf6F5bMzvLv+EdJ0aHs/+4B7Ygv864EStQSjRbsRzTko/kUG1A1IejQ3A==}
+
+ '@vue/devtools-core@8.2.1':
+ resolution: {integrity: sha512-s/VfAY9oDTb/kFEWmy461jaFde2MIV1RO/gi1vwM+PAZBZ/Pc2Ndu3BNBdZUze8QDUuyYvElbEEGA83syjJfzA==}
+ peerDependencies:
+ vue: ^3.0.0
- '@webassemblyjs/helper-module-context@1.9.0':
- resolution: {integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==}
+ '@vue/devtools-kit@7.7.9':
+ resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==}
- '@webassemblyjs/helper-numbers@1.13.2':
- resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
+ '@vue/devtools-kit@8.1.2':
+ resolution: {integrity: sha512-f75/upc+GCyjXErpgPGz4582ujS0L/adAltGy+tqXMGUJpgAcfGr6CxnnhpZY8BHuMYt6KpbF8uaFrrQG66rGQ==}
- '@webassemblyjs/helper-wasm-bytecode@1.13.2':
- resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
+ '@vue/devtools-kit@8.2.1':
+ resolution: {integrity: sha512-FIGIuq3AWReEpbAHY/cRGeHDfI0qOb8OCQ3YjbEAX04uaxIDbGc9rhkbVcG7rnfHPXE3RsU5KrWOu9V/okd8AQ==}
- '@webassemblyjs/helper-wasm-bytecode@1.9.0':
- resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==}
+ '@vue/devtools-shared@7.7.9':
+ resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==}
- '@webassemblyjs/helper-wasm-section@1.14.1':
- resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
+ '@vue/devtools-shared@8.1.2':
+ resolution: {integrity: sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==}
- '@webassemblyjs/helper-wasm-section@1.9.0':
- resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==}
+ '@vue/devtools-shared@8.2.1':
+ resolution: {integrity: sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g==}
- '@webassemblyjs/ieee754@1.13.2':
- resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
+ '@vue/reactivity@3.5.34':
+ resolution: {integrity: sha512-y9XDjCEuBp+98k+UL5dbYkh57AHU4o6cxZedOPXw3bmrZZYLQsVHguGurq7hVrPCSrQtrnz1f9dssyFr+dMXfQ==}
- '@webassemblyjs/ieee754@1.9.0':
- resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==}
+ '@vue/reactivity@3.5.41':
+ resolution: {integrity: sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA==}
- '@webassemblyjs/leb128@1.13.2':
- resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
+ '@vue/runtime-core@3.5.34':
+ resolution: {integrity: sha512-mKeBYvu8tcMSLhypAHBmriUFfWXKTCF/23Z4jiCoYK3UtWepkliViNLuR90V9XOyD62mUxs9p1jsrpK3CCGIzw==}
- '@webassemblyjs/leb128@1.9.0':
- resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==}
+ '@vue/runtime-core@3.5.41':
+ resolution: {integrity: sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg==}
- '@webassemblyjs/utf8@1.13.2':
- resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
+ '@vue/runtime-dom@3.5.34':
+ resolution: {integrity: sha512-e8kZzERmCwUnBRVsgSQlAfrfU2rGoy0FFKPBXSlfEjc/O3KfA7QP0t1/2ZylrbchjmIKB4dPTd07A6WPr0eOrg==}
- '@webassemblyjs/utf8@1.9.0':
- resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==}
+ '@vue/runtime-dom@3.5.41':
+ resolution: {integrity: sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw==}
- '@webassemblyjs/wasm-edit@1.14.1':
- resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
+ '@vue/server-renderer@3.5.34':
+ resolution: {integrity: sha512-nHxmJoTrKsmrkbILRhkC9gY1G3moZbJTqCzDd7DOOzG5KH9oeJ0Unqrff5f9v0pW//jES05ZkJcNtfE8JjOIew==}
+ peerDependencies:
+ vue: 3.5.34
- '@webassemblyjs/wasm-edit@1.9.0':
- resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==}
+ '@vue/server-renderer@3.5.41':
+ resolution: {integrity: sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ==}
- '@webassemblyjs/wasm-gen@1.14.1':
- resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
+ '@vue/shared@3.5.34':
+ resolution: {integrity: sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==}
- '@webassemblyjs/wasm-gen@1.9.0':
- resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==}
+ '@vue/shared@3.5.39':
+ resolution: {integrity: sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==}
- '@webassemblyjs/wasm-opt@1.14.1':
- resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
+ '@vue/shared@3.5.41':
+ resolution: {integrity: sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA==}
- '@webassemblyjs/wasm-opt@1.9.0':
- resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==}
+ '@vuetify/loader-shared@2.1.2':
+ resolution: {integrity: sha512-X+1jBLmXHkpQEnC0vyOb4rtX2QSkBiFhaFXz8yhQqN2A4vQ6k2nChxN4Ol7VAY5KoqMdFoRMnmNdp/1qYXDQig==}
+ peerDependencies:
+ vue: ^3.0.0
+ vuetify: '>=3'
- '@webassemblyjs/wasm-parser@1.14.1':
- resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
+ '@vueuse/core@10.11.1':
+ resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==}
- '@webassemblyjs/wasm-parser@1.9.0':
- resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==}
+ '@vueuse/core@14.3.0':
+ resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==}
+ peerDependencies:
+ vue: ^3.5.0
- '@webassemblyjs/wast-parser@1.9.0':
- resolution: {integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==}
+ '@vueuse/integrations@14.3.0':
+ resolution: {integrity: sha512-76I5FT2ESvCmCaSwapI+a/u/CFtNXmzl9f9lNp1hRtx8vKB8hfiokJr8IvQqcQG5ckGXElyXK516b54ozV3MvA==}
+ peerDependencies:
+ async-validator: ^4
+ axios: ^1
+ change-case: ^5
+ drauu: ^0.4
+ focus-trap: ^7 || ^8
+ fuse.js: ^7
+ idb-keyval: ^6
+ jwt-decode: ^4
+ nprogress: ^0.2
+ qrcode: ^1.5
+ sortablejs: ^1
+ universal-cookie: ^7 || ^8
+ vue: ^3.5.0
+ peerDependenciesMeta:
+ async-validator:
+ optional: true
+ axios:
+ optional: true
+ change-case:
+ optional: true
+ drauu:
+ optional: true
+ focus-trap:
+ optional: true
+ fuse.js:
+ optional: true
+ idb-keyval:
+ optional: true
+ jwt-decode:
+ optional: true
+ nprogress:
+ optional: true
+ qrcode:
+ optional: true
+ sortablejs:
+ optional: true
+ universal-cookie:
+ optional: true
- '@webassemblyjs/wast-printer@1.14.1':
- resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
+ '@vueuse/metadata@10.11.1':
+ resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==}
- '@webassemblyjs/wast-printer@1.9.0':
- resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==}
+ '@vueuse/metadata@14.3.0':
+ resolution: {integrity: sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==}
- '@xtuc/ieee754@1.2.0':
- resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+ '@vueuse/nuxt@14.3.0':
+ resolution: {integrity: sha512-Uxaz/DsNa3i7vHTSjZin5R17R5pt+MtpAifsfqhV1qiBZti1wYv+/S3xysCMHuuiWyLIbbignKxIsgG9ul5kEA==}
+ peerDependencies:
+ nuxt: ^3.0.0 || ^4.0.0-0
+ vue: ^3.5.0
- '@xtuc/long@4.2.2':
- resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+ '@vueuse/shared@10.11.1':
+ resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==}
- JSONStream@1.3.5:
- resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
- hasBin: true
+ '@vueuse/shared@14.3.0':
+ resolution: {integrity: sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==}
+ peerDependencies:
+ vue: ^3.5.0
- abbrev@1.1.1:
- resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
+ abbrev@3.0.1:
+ resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
- accepts@1.3.8:
- resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
- engines: {node: '>= 0.6'}
-
- acorn-import-phases@1.0.4:
- resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==}
- engines: {node: '>=10.13.0'}
+ acorn-import-attributes@1.9.5:
+ resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
peerDependencies:
- acorn: ^8.14.0
+ acorn: ^8
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn-walk@8.2.0:
- resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
- engines: {node: '>=0.4.0'}
-
- acorn@6.4.2:
- resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==}
+ acorn@8.16.0:
+ resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
engines: {node: '>=0.4.0'}
hasBin: true
- acorn@8.15.0:
- resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ acorn@8.18.0:
+ resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==}
engines: {node: '>=0.4.0'}
hasBin: true
- agent-base@6.0.2:
- resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
- engines: {node: '>= 6.0.0'}
-
agent-base@7.1.4:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
- aggregate-error@3.1.0:
- resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
- engines: {node: '>=8'}
+ ajv@6.15.0:
+ resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
- ajv-errors@1.0.1:
- resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==}
- peerDependencies:
- ajv: '>=5.0.0'
+ ajv@8.20.0:
+ resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==}
- ajv-formats@2.1.1:
- resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
- peerDependencies:
- ajv: ^8.0.0
- peerDependenciesMeta:
- ajv:
- optional: true
-
- ajv-keywords@3.5.2:
- resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
- peerDependencies:
- ajv: ^6.9.1
-
- ajv-keywords@5.1.0:
- resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
- peerDependencies:
- ajv: ^8.8.2
-
- ajv@6.12.6:
- resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-
- ajv@8.12.0:
- resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
-
- ajv@8.17.1:
- resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
-
- ansi-align@3.0.1:
- resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
-
- ansi-escapes@4.3.2:
- resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
- engines: {node: '>=8'}
-
- ansi-escapes@7.1.1:
- resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==}
+ ansi-escapes@7.3.0:
+ resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==}
engines: {node: '>=18'}
- ansi-html-community@0.0.8:
- resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
- engines: {'0': node >= 0.8.0}
- hasBin: true
-
- ansi-regex@2.1.1:
- resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
- engines: {node: '>=0.10.0'}
-
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- ansi-regex@6.1.0:
- resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
engines: {node: '>=12'}
- ansi-styles@2.2.1:
- resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
- engines: {node: '>=0.10.0'}
-
- ansi-styles@3.2.1:
- resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
- engines: {node: '>=4'}
-
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
- ansi-styles@5.2.0:
- resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
- engines: {node: '>=10'}
-
ansi-styles@6.2.3:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
- anymatch@2.0.0:
- resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==}
+ ansis@4.3.0:
+ resolution: {integrity: sha512-44mvgtPvohuU/70DdY5Oz2AIrLJ9k6/5x4KmoSvPwO+5Moijo0+N9D0fKbbYZQWP1hNm5CpOf+E01jhxG/r8xg==}
+ engines: {node: '>=14'}
+
+ ansis@4.3.1:
+ resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==}
+ engines: {node: '>=14'}
anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
- aproba@1.2.0:
- resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==}
+ anynum@1.0.1:
+ resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==}
- arg@4.1.3:
- resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+ archiver-utils@5.0.2:
+ resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==}
+ engines: {node: '>= 14'}
- arg@5.0.2:
- resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+ archiver@7.0.1:
+ resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==}
+ engines: {node: '>= 14'}
- argparse@1.0.10:
- resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+ are-docs-informative@0.0.2:
+ resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
+ engines: {node: '>=14'}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- arr-diff@4.0.0:
- resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==}
- engines: {node: '>=0.10.0'}
-
- arr-flatten@1.1.0:
- resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==}
- engines: {node: '>=0.10.0'}
-
- arr-union@3.1.0:
- resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==}
- engines: {node: '>=0.10.0'}
-
- array-buffer-byte-length@1.0.0:
- resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
+ aria-hidden@1.2.6:
+ resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
+ engines: {node: '>=10'}
array-ify@1.0.0:
resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
- array-includes@3.1.7:
- resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
- engines: {node: '>= 0.4'}
-
- array-union@2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
-
- array-unique@0.3.2:
- resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==}
- engines: {node: '>=0.10.0'}
-
- array.prototype.findlastindex@1.2.3:
- resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==}
- engines: {node: '>= 0.4'}
-
- array.prototype.flat@1.3.2:
- resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
- engines: {node: '>= 0.4'}
-
- array.prototype.flatmap@1.3.2:
- resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
- engines: {node: '>= 0.4'}
-
- array.prototype.reduce@1.0.6:
- resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==}
- engines: {node: '>= 0.4'}
-
- arraybuffer.prototype.slice@1.0.2:
- resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==}
- engines: {node: '>= 0.4'}
-
- arrify@1.0.1:
- resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
- engines: {node: '>=0.10.0'}
-
- arrify@2.0.1:
- resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==}
- engines: {node: '>=8'}
-
- asn1.js@5.4.1:
- resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==}
+ ast-kit@2.2.0:
+ resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==}
+ engines: {node: '>=20.19.0'}
- assert@1.5.1:
- resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==}
+ ast-walker-scope@0.8.3:
+ resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==}
+ engines: {node: '>=20.19.0'}
- assign-symbols@1.0.0:
- resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
- engines: {node: '>=0.10.0'}
+ ast-walker-scope@0.9.0:
+ resolution: {integrity: sha512-IJdzo2vLiElBxKzwS36VsCue/62d6IdWjnPB2v3nuPKeWGynp6FF/CYoLa5i/3jXH/z97ZDdsXz6abpgM6w07A==}
+ engines: {node: '>=20.19.0'}
astral-regex@2.0.0:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
engines: {node: '>=8'}
- async-cache@1.1.0:
- resolution: {integrity: sha512-YDQc4vBn5NFhY6g6HhVshyi3Fy9+SQ5ePnE7JLDJn1DoL+i7ER+vMwtTNOYk9leZkYMnOwpBCWqyLDPw8Aig8g==}
- deprecated: No longer maintained. Use [lru-cache](http://npm.im/lru-cache) version 7.6 or higher, and provide an asynchronous `fetchMethod` option.
-
- async-each@1.0.6:
- resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==}
-
- async-retry@1.3.3:
- resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
+ async-sema@3.1.1:
+ resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==}
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
- asynckit@0.4.0:
- resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
-
- at-least-node@1.0.0:
- resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
- engines: {node: '>= 4.0.0'}
-
- atob@2.1.2:
- resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
- engines: {node: '>= 4.5.0'}
- hasBin: true
-
- autoprefixer@10.4.19:
- resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==}
+ autoprefixer@10.5.4:
+ resolution: {integrity: sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
postcss: ^8.1.0
- available-typed-arrays@1.0.5:
- resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
- engines: {node: '>= 0.4'}
-
- axios@0.30.2:
- resolution: {integrity: sha512-0pE4RQ4UQi1jKY6p7u6i1Tkzqmu+d+/tHS7Q7rKunWLB9WyilBTpHHpXzPNMDj5hTbK0B0PTLSz07yqMBiF6xg==}
-
- babel-code-frame@6.26.0:
- resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==}
-
- babel-core@7.0.0-bridge.0:
- resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- babel-jest@30.2.0:
- resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- peerDependencies:
- '@babel/core': ^7.11.0 || ^8.0.0-0
+ awesome-phonenumber@7.8.0:
+ resolution: {integrity: sha512-zw23nvKt6gLGgCrKZ5Z7ZK0lm3k39/uZTw+cWp5tpiXVfEFSt9AEVFDzSycws76G64xOMrIVp2upYvJxwRgzvw==}
+ engines: {node: '>=18'}
- babel-loader@8.3.0:
- resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==}
- engines: {node: '>= 8.9'}
+ b4a@1.8.1:
+ resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==}
peerDependencies:
- '@babel/core': ^7.0.0
- webpack: '>=2'
-
- babel-messages@6.23.0:
- resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==}
-
- babel-plugin-istanbul@7.0.1:
- resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==}
- engines: {node: '>=12'}
+ react-native-b4a: '*'
+ peerDependenciesMeta:
+ react-native-b4a:
+ optional: true
- babel-plugin-jest-hoist@30.2.0:
- resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- babel-plugin-polyfill-corejs2@0.4.11:
- resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
- babel-plugin-polyfill-corejs3@0.10.4:
- resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==}
+ bare-events@2.9.1:
+ resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==}
peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ bare-abort-controller: '*'
+ peerDependenciesMeta:
+ bare-abort-controller:
+ optional: true
- babel-plugin-polyfill-regenerator@0.6.2:
- resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==}
+ bare-fs@4.8.0:
+ resolution: {integrity: sha512-fM+MhCvdQhZ7NV6S95a07gPSqjIYKn6mFaXfx266wN3ajZGl/+1AzH+ubkXQ0fFZvOe2nk9VHkzdYkQE5zMV3Q==}
+ engines: {bare: '>=1.28.0'}
peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
- babel-plugin-transform-es2015-modules-commonjs@6.26.2:
- resolution: {integrity: sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==}
-
- babel-plugin-transform-strict-mode@6.24.1:
- resolution: {integrity: sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==}
+ bare-buffer: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
- babel-preset-current-node-syntax@1.2.0:
- resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
- peerDependencies:
- '@babel/core': ^7.0.0 || ^8.0.0-0
+ bare-path@3.1.1:
+ resolution: {integrity: sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==}
- babel-preset-jest@30.2.0:
- resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ bare-stream@2.13.3:
+ resolution: {integrity: sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==}
peerDependencies:
- '@babel/core': ^7.11.0 || ^8.0.0-beta.1
-
- babel-runtime@6.26.0:
- resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==}
-
- babel-template@6.26.0:
- resolution: {integrity: sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==}
-
- babel-traverse@6.26.0:
- resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==}
-
- babel-types@6.26.0:
- resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==}
-
- babylon@6.18.0:
- resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==}
- hasBin: true
-
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ bare-abort-controller: '*'
+ bare-buffer: '*'
+ bare-events: '*'
+ peerDependenciesMeta:
+ bare-abort-controller:
+ optional: true
+ bare-buffer:
+ optional: true
+ bare-events:
+ optional: true
- balanced-match@2.0.0:
- resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==}
+ bare-url@2.5.1:
+ resolution: {integrity: sha512-cD5ciQuKlx+eumTCfqbfiL+fhQm+dHbVNB/cX4+d+I/nx4JsVop9VoFEPAs5RJ6I84QR6bZIBjpd2kjDOYeWcg==}
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- base@0.11.2:
- resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
- engines: {node: '>=0.10.0'}
-
- baseline-browser-mapping@2.8.10:
- resolution: {integrity: sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA==}
- hasBin: true
-
- baseline-browser-mapping@2.8.9:
- resolution: {integrity: sha512-hY/u2lxLrbecMEWSB0IpGzGyDyeoMFQhCvZd2jGFSE5I17Fh01sYUBPCJtkWERw7zrac9+cIghxm/ytJa2X8iA==}
+ baseline-browser-mapping@2.11.12:
+ resolution: {integrity: sha512-r7WnVImvVCeFpf2DOXfy41aPWzeNg3H/A2X4dKmy1QL0MSyyk/e7z8ihJ3N6Nn2PsdhkVlqnEfnUE4a05P2aTA==}
+ engines: {node: '>=6.0.0'}
hasBin: true
- big.js@5.2.2:
- resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
-
- bignumber.js@9.1.2:
- resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
-
- binary-extensions@1.13.1:
- resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==}
- engines: {node: '>=0.10.0'}
-
- binary-extensions@2.2.0:
- resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
- engines: {node: '>=8'}
-
bindings@1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
- bluebird@3.7.2:
- resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
-
- bn.js@4.12.0:
- resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
+ birpc@2.9.0:
+ resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
- bn.js@5.2.1:
- resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+ birpc@4.0.0:
+ resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
- boxen@5.1.2:
- resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==}
- engines: {node: '>=10'}
-
- brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
-
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-
- brace-expansion@2.0.2:
- resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ brace-expansion@2.1.4:
+ resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==}
- braces@2.3.2:
- resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
- engines: {node: '>=0.10.0'}
+ brace-expansion@5.0.6:
+ resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
+ engines: {node: 18 || 20 || >=22}
- braces@3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
- engines: {node: '>=8'}
+ brace-expansion@5.0.9:
+ resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==}
+ engines: {node: 20 || >=22}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- brorand@1.1.0:
- resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
-
- browserify-aes@1.2.0:
- resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
-
- browserify-cipher@1.0.1:
- resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==}
-
- browserify-des@1.0.2:
- resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==}
-
- browserify-rsa@4.1.0:
- resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==}
-
- browserify-sign@4.2.2:
- resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==}
- engines: {node: '>= 4'}
-
- browserify-zlib@0.2.0:
- resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==}
-
- browserslist@4.26.2:
- resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
- browserslist@4.26.3:
- resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==}
+ browserslist@4.28.7:
+ resolution: {integrity: sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- bs-logger@0.2.6:
- resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
- engines: {node: '>= 6'}
-
- bser@2.1.1:
- resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
-
- buffer-equal-constant-time@1.0.1:
- resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
+ buffer-crc32@1.0.0:
+ resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
+ engines: {node: '>=8.0.0'}
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
- buffer-json@2.0.0:
- resolution: {integrity: sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==}
-
- buffer-xor@1.0.3:
- resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
-
- buffer@4.9.2:
- resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==}
-
- builtin-modules@3.3.0:
- resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
- engines: {node: '>=6'}
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- builtin-status-codes@3.0.0:
- resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==}
+ builtin-modules@5.2.0:
+ resolution: {integrity: sha512-02yxLeyxF4dNl6SlY6/5HfRSrSdZ/sCPoxy2kZNP5dZZX8LSAD9aE2gtJIUgWrsQTiMPl3mxESyrobSwvRGisQ==}
+ engines: {node: '>=18.20'}
- builtins@5.0.1:
- resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==}
+ bundle-name@4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
- bytes@3.0.0:
- resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
- engines: {node: '>= 0.8'}
+ bundle-require@5.1.0:
+ resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ peerDependencies:
+ esbuild: '>=0.18'
- c12@1.11.1:
- resolution: {integrity: sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==}
+ c12@3.3.4:
+ resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==}
peerDependencies:
- magicast: ^0.3.4
+ magicast: '*'
peerDependenciesMeta:
magicast:
optional: true
- c12@1.4.2:
- resolution: {integrity: sha512-3IP/MuamSVRVw8W8+CHWAz9gKN4gd+voF2zm/Ln6D25C2RhytEZ1ABbC8MjKr4BR9rhoV1JQ7jJA158LDiTkLg==}
-
- cacache@12.0.4:
- resolution: {integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==}
-
- cacache@15.3.0:
- resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==}
- engines: {node: '>= 10'}
-
- cache-base@1.0.1:
- resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
- engines: {node: '>=0.10.0'}
-
- cache-loader@4.1.0:
- resolution: {integrity: sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==}
- engines: {node: '>= 8.9.0'}
- peerDependencies:
- webpack: ^4.0.0
-
- call-bind-apply-helpers@1.0.2:
- resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
- engines: {node: '>= 0.4'}
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
- call-bind@1.0.2:
- resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
+ cac@7.0.0:
+ resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
+ engines: {node: '>=20.19.0'}
- callsite@1.0.0:
- resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==}
+ cacheable@2.3.5:
+ resolution: {integrity: sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==}
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- camel-case@4.1.2:
- resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
-
- camelcase-keys@7.0.2:
- resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==}
- engines: {node: '>=12'}
-
camelcase@5.3.1:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
- camelcase@6.3.0:
- resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
- engines: {node: '>=10'}
-
- caniuse-api@3.0.0:
- resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
-
- caniuse-lite@1.0.30001639:
- resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==}
-
- caniuse-lite@1.0.30001746:
- resolution: {integrity: sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA==}
-
- chalk@1.1.3:
- resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
- engines: {node: '>=0.10.0'}
-
- chalk@2.4.2:
- resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
- engines: {node: '>=4'}
+ caniuse-api@4.0.0:
+ resolution: {integrity: sha512-B0hQ1OLyJuHTQSOWXvwibWqM6DCoqJdvBA6X1S/53bd4XU7LJ1yurIPlrsouol3mw1jh9pGI4ivubSpmJeIqCA==}
- chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
+ caniuse-lite@1.0.30001809:
+ resolution: {integrity: sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==}
- chalk@5.5.0:
- resolution: {integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==}
- engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- chalk@5.6.2:
- resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
- engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ change-case@5.4.4:
+ resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
- char-regex@1.0.2:
- resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
- engines: {node: '>=10'}
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
- chardet@0.7.0:
- resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
- chart.js@4.5.0:
- resolution: {integrity: sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==}
+ chart.js@4.5.1:
+ resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==}
engines: {pnpm: '>=8'}
chartjs-adapter-moment@1.0.1:
@@ -3349,125 +3908,56 @@ packages:
chart.js: '>=3.0.0'
moment: ^2.10.2
- chokidar@2.1.8:
- resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==}
- deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
-
- chokidar@3.5.3:
- resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
- engines: {node: '>= 8.10.0'}
-
- chokidar@3.6.0:
- resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
- engines: {node: '>= 8.10.0'}
-
- chownr@1.1.4:
- resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
-
- chownr@2.0.0:
- resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
- engines: {node: '>=10'}
-
- chrome-trace-event@1.0.4:
- resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
- engines: {node: '>=6.0'}
+ chokidar@5.0.0:
+ resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
+ engines: {node: '>= 20.19.0'}
- ci-info@3.8.0:
- resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
- engines: {node: '>=8'}
+ chownr@3.0.0:
+ resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
+ engines: {node: '>=18'}
- ci-info@3.9.0:
- resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
- engines: {node: '>=8'}
+ chrome-launcher@1.2.1:
+ resolution: {integrity: sha512-qmFR5PLMzHyuNJHwOloHPAHhbaNglkfeV/xDtt5b7xiFFyU1I+AZZX0PYseMuhenJSSirgxELYIbswcoc+5H4A==}
+ engines: {node: '>=12.13.0'}
+ hasBin: true
- ci-info@4.3.0:
- resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==}
+ ci-info@4.4.0:
+ resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==}
engines: {node: '>=8'}
- cipher-base@1.0.4:
- resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
-
citty@0.1.6:
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
- cjs-module-lexer@2.1.0:
- resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==}
-
- class-utils@0.3.6:
- resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
- engines: {node: '>=0.10.0'}
-
- clean-css@4.2.4:
- resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
- engines: {node: '>= 4.0'}
-
- clean-css@5.3.3:
- resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
- engines: {node: '>= 10.0'}
-
- clean-regexp@1.0.0:
- resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
- engines: {node: '>=4'}
-
- clean-stack@2.2.0:
- resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
- engines: {node: '>=6'}
-
- cli-boxes@2.2.1:
- resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
- engines: {node: '>=6'}
-
- cli-cursor@3.1.0:
- resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
- engines: {node: '>=8'}
+ citty@0.2.2:
+ resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==}
cli-cursor@5.0.0:
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines: {node: '>=18'}
- cli-truncate@4.0.0:
- resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
- engines: {node: '>=18'}
-
- cli-width@3.0.0:
- resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
- engines: {node: '>= 10'}
+ cli-truncate@5.2.0:
+ resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==}
+ engines: {node: '>=20'}
cliui@6.0.0:
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
- cliui@7.0.4:
- resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
-
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
- clone@2.1.2:
- resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
- engines: {node: '>=0.8'}
-
- co@4.6.0:
- resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
- engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
-
- collect-v8-coverage@1.0.2:
- resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
+ cliui@9.0.1:
+ resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==}
+ engines: {node: '>=20'}
- collection-visit@1.0.0:
- resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==}
+ cluster-key-slot@1.1.1:
+ resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==}
engines: {node: '>=0.10.0'}
- color-convert@1.9.3:
- resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
-
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
- color-name@1.1.3:
- resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
-
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
@@ -3477,28 +3967,22 @@ packages:
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
- combined-stream@1.0.8:
- resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
- engines: {node: '>= 0.8'}
+ colortranslator@5.0.0:
+ resolution: {integrity: sha512-Z3UPUKasUVDFCDYAjP2fmlVRf1jFHJv1izAmPjiOa0OCIw1W7iC8PZ2GsoDa8uZv+mKyWopxxStT9q05+27h7w==}
- commander@10.0.1:
- resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
- engines: {node: '>=14'}
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- commander@14.0.0:
- resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==}
- engines: {node: '>=20'}
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
- commander@4.1.1:
- resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
- engines: {node: '>= 6'}
-
- commander@7.2.0:
- resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
- engines: {node: '>= 10'}
+ comment-parser@1.4.7:
+ resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==}
+ engines: {node: '>= 12.0.0'}
commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
@@ -3506,527 +3990,183 @@ packages:
compare-func@2.0.0:
resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
- compatx@0.1.8:
- resolution: {integrity: sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==}
+ compatx@0.2.0:
+ resolution: {integrity: sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA==}
- component-emitter@1.3.0:
- resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==}
+ compress-commons@6.0.2:
+ resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==}
+ engines: {node: '>= 14'}
- compressible@2.0.18:
- resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
- engines: {node: '>= 0.6'}
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
- compression@1.7.4:
- resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
- engines: {node: '>= 0.8.0'}
+ confbox@0.2.4:
+ resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==}
- concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ consola@3.4.2:
+ resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
- concat-stream@1.6.2:
- resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
- engines: {'0': node >= 0.8}
+ conventional-changelog-angular@8.3.1:
+ resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==}
+ engines: {node: '>=18'}
- condense-newlines@0.2.1:
- resolution: {integrity: sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==}
- engines: {node: '>=0.10.0'}
+ conventional-changelog-conventionalcommits@9.3.1:
+ resolution: {integrity: sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==}
+ engines: {node: '>=18'}
- confbox@0.1.7:
- resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==}
+ conventional-commits-parser@6.4.0:
+ resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==}
+ engines: {node: '>=18'}
+ hasBin: true
- confbox@0.1.8:
- resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- config-chain@1.1.13:
- resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
+ cookie-es@1.2.3:
+ resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==}
- configstore@5.0.1:
- resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==}
- engines: {node: '>=8'}
+ cookie-es@2.0.1:
+ resolution: {integrity: sha512-aVf4A4hI2w70LnF7GG+7xDQUkliwiXWXFvTjkip4+b64ygDQ2sJPRSKFDHbxn8o0xu9QzPkMuuiWIXyFSE2slA==}
- connect@3.7.0:
- resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==}
- engines: {node: '>= 0.10.0'}
+ cookie-es@3.1.1:
+ resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==}
- consola@2.15.3:
- resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
+ copy-anything@4.0.5:
+ resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
+ engines: {node: '>=18'}
- consola@3.2.3:
- resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ core-js-compat@3.49.0:
+ resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ cosmiconfig-typescript-loader@6.3.0:
+ resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==}
+ engines: {node: '>=v18'}
+ peerDependencies:
+ '@types/node': '*'
+ cosmiconfig: '>=9'
+ typescript: '>=5'
- console-browserify@1.2.0:
- resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==}
-
- consolidate@0.15.1:
- resolution: {integrity: sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==}
- engines: {node: '>= 0.10.0'}
- deprecated: Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog
- peerDependencies:
- arc-templates: ^0.5.3
- atpl: '>=0.7.6'
- babel-core: ^6.26.3
- bracket-template: ^1.1.5
- coffee-script: ^1.12.7
- dot: ^1.1.3
- dust: ^0.3.0
- dustjs-helpers: ^1.7.4
- dustjs-linkedin: ^2.7.5
- eco: ^1.1.0-rc-3
- ect: ^0.5.9
- ejs: ^3.1.5
- haml-coffee: ^1.14.1
- hamlet: ^0.3.3
- hamljs: ^0.6.2
- handlebars: ^4.7.6
- hogan.js: ^3.0.2
- htmling: ^0.0.8
- jade: ^1.11.0
- jazz: ^0.0.18
- jqtpl: ~1.1.0
- just: ^0.1.8
- liquid-node: ^3.0.1
- liquor: ^0.0.5
- lodash: ^4.17.20
- marko: ^3.14.4
- mote: ^0.2.0
- mustache: ^3.0.0
- nunjucks: ^3.2.2
- plates: ~0.4.11
- pug: ^3.0.0
- qejs: ^3.0.5
- ractive: ^1.3.12
- razor-tmpl: ^1.3.1
- react: ^16.13.1
- react-dom: ^16.13.1
- slm: ^2.0.0
- squirrelly: ^5.1.0
- swig: ^1.4.2
- swig-templates: ^2.0.3
- teacup: ^2.0.0
- templayed: '>=0.2.3'
- then-jade: '*'
- then-pug: '*'
- tinyliquid: ^0.2.34
- toffee: ^0.3.6
- twig: ^1.15.2
- twing: ^5.0.2
- underscore: ^1.11.0
- vash: ^0.13.0
- velocityjs: ^2.0.1
- walrus: ^0.10.1
- whiskers: ^0.4.0
+ cosmiconfig@9.0.2:
+ resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
peerDependenciesMeta:
- arc-templates:
- optional: true
- atpl:
- optional: true
- babel-core:
- optional: true
- bracket-template:
- optional: true
- coffee-script:
- optional: true
- dot:
- optional: true
- dust:
+ typescript:
optional: true
- dustjs-helpers:
+
+ countries-list@3.3.0:
+ resolution: {integrity: sha512-XRUjS+dcZuNh/fg3+mka3bXgcg4TbQZ1gaK5IJqO6qulerBANl1bmrd20P2dgmPkBpP+5FnejiSF1gd7bgAg+g==}
+
+ crc-32@1.2.2:
+ resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+
+ crc32-stream@6.0.0:
+ resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==}
+ engines: {node: '>= 14'}
+
+ croner@10.0.1:
+ resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==}
+ engines: {node: '>=18.0'}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ crossws@0.3.5:
+ resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==}
+
+ crossws@0.4.10:
+ resolution: {integrity: sha512-pz3oubH/dt12KjqsUB0IuXW4nwRDQ583iDsP4555Cpdqx0NoU7pGlWBcayyFI8f/l/idRpgjMEfwuOxSWJYlIA==}
+ peerDependencies:
+ srvx: '>=0.11.5'
+ peerDependenciesMeta:
+ srvx:
optional: true
- dustjs-linkedin:
- optional: true
- eco:
- optional: true
- ect:
- optional: true
- ejs:
- optional: true
- haml-coffee:
- optional: true
- hamlet:
- optional: true
- hamljs:
- optional: true
- handlebars:
- optional: true
- hogan.js:
- optional: true
- htmling:
- optional: true
- jade:
- optional: true
- jazz:
- optional: true
- jqtpl:
- optional: true
- just:
- optional: true
- liquid-node:
- optional: true
- liquor:
- optional: true
- lodash:
- optional: true
- marko:
- optional: true
- mote:
- optional: true
- mustache:
- optional: true
- nunjucks:
- optional: true
- plates:
- optional: true
- pug:
- optional: true
- qejs:
- optional: true
- ractive:
- optional: true
- razor-tmpl:
- optional: true
- react:
- optional: true
- react-dom:
- optional: true
- slm:
- optional: true
- squirrelly:
- optional: true
- swig:
- optional: true
- swig-templates:
- optional: true
- teacup:
- optional: true
- templayed:
- optional: true
- then-jade:
- optional: true
- then-pug:
- optional: true
- tinyliquid:
- optional: true
- toffee:
- optional: true
- twig:
- optional: true
- twing:
- optional: true
- underscore:
- optional: true
- vash:
- optional: true
- velocityjs:
- optional: true
- walrus:
- optional: true
- whiskers:
- optional: true
-
- constants-browserify@1.0.0:
- resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==}
-
- conventional-changelog-angular@7.0.0:
- resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
- engines: {node: '>=16'}
-
- conventional-changelog-conventionalcommits@7.0.2:
- resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==}
- engines: {node: '>=16'}
-
- conventional-commits-parser@5.0.0:
- resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==}
- engines: {node: '>=16'}
- hasBin: true
-
- convert-source-map@2.0.0:
- resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
-
- cookie@0.3.1:
- resolution: {integrity: sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==}
- engines: {node: '>= 0.6'}
-
- copy-concurrently@1.0.5:
- resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==}
- deprecated: This package is no longer supported.
-
- copy-descriptor@0.1.1:
- resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
- engines: {node: '>=0.10.0'}
-
- core-js-compat@3.37.1:
- resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==}
- core-js@2.6.12:
- resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
- deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
-
- core-js@3.45.1:
- resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==}
-
- core-util-is@1.0.3:
- resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-
- cosmiconfig-typescript-loader@6.1.0:
- resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==}
- engines: {node: '>=v18'}
- peerDependencies:
- '@types/node': '*'
- cosmiconfig: '>=9'
- typescript: '>=5'
-
- cosmiconfig@6.0.0:
- resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==}
- engines: {node: '>=8'}
-
- cosmiconfig@7.1.0:
- resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
- engines: {node: '>=10'}
-
- cosmiconfig@8.3.6:
- resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
- engines: {node: '>=14'}
- peerDependencies:
- typescript: '>=4.9.5'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- cosmiconfig@9.0.0:
- resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
- engines: {node: '>=14'}
- peerDependencies:
- typescript: '>=4.9.5'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- crc@4.3.2:
- resolution: {integrity: sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==}
+ css-functions-list@3.3.3:
+ resolution: {integrity: sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==}
engines: {node: '>=12'}
- peerDependencies:
- buffer: '>=6.0.3'
- peerDependenciesMeta:
- buffer:
- optional: true
- create-ecdh@4.0.4:
- resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
-
- create-hash@1.2.0:
- resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
-
- create-hmac@1.1.7:
- resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
-
- create-require@1.1.1:
- resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
-
- cross-spawn@7.0.6:
- resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
- engines: {node: '>= 8'}
-
- crypto-browserify@3.12.0:
- resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==}
-
- crypto-random-string@2.0.0:
- resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
- engines: {node: '>=8'}
-
- css-blank-pseudo@6.0.2:
- resolution: {integrity: sha512-J/6m+lsqpKPqWHOifAFtKFeGLOzw3jR92rxQcwRUfA/eTuZzKfKlxOmYDx2+tqOPQAueNvBiY8WhAeHu5qNmTg==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
-
- css-declaration-sorter@6.4.1:
- resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==}
- engines: {node: ^10 || ^12 || >=14}
- peerDependencies:
- postcss: ^8.0.9
-
- css-declaration-sorter@7.2.0:
- resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.0.9
-
- css-functions-list@3.2.1:
- resolution: {integrity: sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==}
- engines: {node: '>=12 || >=16'}
-
- css-has-pseudo@6.0.5:
- resolution: {integrity: sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
-
- css-loader@5.2.7:
- resolution: {integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- webpack: ^4.27.0 || ^5.0.0
-
- css-prefers-color-scheme@9.0.1:
- resolution: {integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
-
- css-select@4.3.0:
- resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
-
- css-select@5.1.0:
- resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
-
- css-tree@1.1.3:
- resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
- engines: {node: '>=8.0.0'}
+ css-select@5.2.2:
+ resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
css-tree@2.2.1:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
- css-tree@2.3.1:
- resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+ css-tree@3.2.1:
+ resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
- css-what@6.1.0:
- resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ css-what@6.2.2:
+ resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
engines: {node: '>= 6'}
- css@2.2.4:
- resolution: {integrity: sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==}
-
- cssdb@8.0.2:
- resolution: {integrity: sha512-zbOCmmbcHvr2lP+XrZSgftGMGumbosC6IM3dbxwifwPEBD70pVJaH3Ho191VBEqDg644AM7PPPVj0ZXokTjZng==}
-
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
hasBin: true
- cssnano-preset-default@5.2.14:
- resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
-
- cssnano-preset-default@7.0.3:
- resolution: {integrity: sha512-dQ3Ba1p/oewICp/szF1XjFFgql8OlOBrI2YNBUUwhHQnJNoMOcQTa+Bi7jSJN8r/eM1egW0Ud1se/S7qlduWKA==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ cssnano-preset-default@8.0.4:
+ resolution: {integrity: sha512-WUn2NmdLD0FlUI8XdQrlfDjVNGLOI3cxaw7Y6msbfxn4G2vJByuO6M73Wo5B9Rd0Ap36SQhG7wsOXAMnVdC2eQ==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4.31
-
- cssnano-utils@3.1.0:
- resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
-
- cssnano-utils@5.0.0:
- resolution: {integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ postcss: ^8.5.25
- cssnano@5.1.15:
- resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==}
- engines: {node: ^10 || ^12 || >=14.0}
+ cssnano-utils@6.0.2:
+ resolution: {integrity: sha512-AqysikWP69dOKAP/UMvUYrlZ1gvvQu0/eMFVUKLhH+ZM23dUAKXC31xKvNyL9It2UMF2uDmK4XotBeO9vSBKzg==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.2.15
+ postcss: ^8.5.25
- cssnano@7.0.3:
- resolution: {integrity: sha512-lsekJctOTqdCn4cNrtrSwsuMR/fHC+oiVMHkp/OugBWtwjH8XJag1/OtGaYJGtz0un1fQcRy4ryfYTQsfh+KSQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ cssnano@8.0.4:
+ resolution: {integrity: sha512-m6epEvKkzysdXamdK4BU9S6lQzx+syY+5Qm4f2dbpxlewBtEYOKi2v2iIr1jLsjuAr3V1WjRp6hXFPH1BEDirw==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4.31
-
- csso@4.2.0:
- resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
- engines: {node: '>=8.0.0'}
+ postcss: ^8.5.25
csso@5.0.5:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
- cssstyle@4.6.0:
- resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==}
- engines: {node: '>=18'}
-
- csstype@3.1.2:
- resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
-
- cuint@0.2.2:
- resolution: {integrity: sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==}
-
- cyclist@1.0.2:
- resolution: {integrity: sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==}
-
- dargs@8.1.0:
- resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
- engines: {node: '>=12'}
-
- data-urls@5.0.0:
- resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
- engines: {node: '>=18'}
-
- date-fns@2.30.0:
- resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
- engines: {node: '>=0.11'}
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
- de-indent@1.0.2:
- resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
-
- deasync@0.1.29:
- resolution: {integrity: sha512-EBtfUhVX23CE9GR6m+F8WPeImEE4hR/FW9RkK0PMl9V1t283s0elqsTD8EZjaKX28SY1BW2rYfCgNsAYdpamUw==}
- engines: {node: '>=0.11.0'}
+ culori@4.0.2:
+ resolution: {integrity: sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- debounce@1.2.1:
- resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
+ date-fns@4.3.0:
+ resolution: {integrity: sha512-OYcL+3N/jyWbYdFGqoMAhytDgxP9pbYPUUiRCOgn4Fewaadk9l/Wam4Avciiyp2BgkpfQyBV9B+ehnVJych+eQ==}
- debug@2.6.9:
- resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ db0@0.3.4:
+ resolution: {integrity: sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==}
peerDependencies:
- supports-color: '*'
+ '@electric-sql/pglite': '*'
+ '@libsql/client': '*'
+ better-sqlite3: '*'
+ drizzle-orm: '*'
+ mysql2: '*'
+ sqlite3: '*'
peerDependenciesMeta:
- supports-color:
+ '@electric-sql/pglite':
optional: true
-
- debug@3.2.7:
- resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
+ '@libsql/client':
optional: true
-
- debug@4.3.4:
- resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
+ better-sqlite3:
optional: true
-
- debug@4.3.6:
- resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
+ drizzle-orm:
optional: true
-
- debug@4.4.1:
- resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
+ mysql2:
+ optional: true
+ sqlite3:
optional: true
debug@4.4.3:
@@ -4038,36 +4178,10 @@ packages:
supports-color:
optional: true
- decache@4.6.2:
- resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==}
-
- decamelize-keys@1.1.1:
- resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
- engines: {node: '>=0.10.0'}
-
decamelize@1.2.0:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
- decamelize@5.0.1:
- resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==}
- engines: {node: '>=10'}
-
- decimal.js@10.6.0:
- resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
-
- decode-uri-component@0.2.2:
- resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
- engines: {node: '>=0.10'}
-
- dedent@1.7.0:
- resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==}
- peerDependencies:
- babel-plugin-macros: ^3.1.0
- peerDependenciesMeta:
- babel-plugin-macros:
- optional: true
-
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -4075,188 +4189,152 @@ packages:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
- define-data-property@1.1.0:
- resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==}
- engines: {node: '>= 0.4'}
-
- define-properties@1.2.1:
- resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
- engines: {node: '>= 0.4'}
-
- define-property@0.2.5:
- resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==}
- engines: {node: '>=0.10.0'}
-
- define-property@1.0.0:
- resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==}
- engines: {node: '>=0.10.0'}
-
- define-property@2.0.2:
- resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==}
- engines: {node: '>=0.10.0'}
+ default-browser-id@5.0.1:
+ resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
+ engines: {node: '>=18'}
- defu@5.0.1:
- resolution: {integrity: sha512-EPS1carKg+dkEVy3qNTqIdp2qV7mUP08nIsupfwQpz++slCVRw7qbQyWvSTig+kFPwz2XXp5/kIIkH+CwrJKkQ==}
+ default-browser@5.5.0:
+ resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
+ engines: {node: '>=18'}
- defu@6.1.2:
- resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==}
+ define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
- defu@6.1.4:
- resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+ defu@6.1.7:
+ resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==}
- delayed-stream@1.0.0:
- resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
- engines: {node: '>=0.4.0'}
+ denque@2.1.0:
+ resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
+ engines: {node: '>=0.10'}
depd@2.0.0:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
- des.js@1.1.0:
- resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==}
-
- destr@2.0.3:
- resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==}
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
- destroy@1.2.0:
- resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ destr@2.0.5:
+ resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
- detect-indent@5.0.0:
- resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==}
- engines: {node: '>=4'}
+ detect-indent@7.0.2:
+ resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==}
+ engines: {node: '>=12.20'}
- detect-newline@3.1.0:
- resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
- devalue@2.0.1:
- resolution: {integrity: sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q==}
-
- dialog-polyfill@0.4.10:
- resolution: {integrity: sha512-j5yGMkP8T00UFgyO+78OxiN5vC5dzRQF3BEio+LhNvDbyfxWBsi3sfPArDm54VloaJwy2hm3erEiDWqHRC8rzw==}
-
- diffie-hellman@5.0.3:
- resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
-
- dijkstrajs@1.0.3:
- resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
-
- dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
+ devalue@5.9.0:
+ resolution: {integrity: sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A==}
- doctrine@2.1.0:
- resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
- engines: {node: '>=0.10.0'}
+ devframe@0.5.4:
+ resolution: {integrity: sha512-dbHU/LuptR1aMXcizjHUeY3gu7qVaRQoFYqbbyyGuO6Y+avFA4uQtwinHtG1qa7lRel/7b8JrBDm0nbnxU3vqg==}
+ peerDependencies:
+ '@modelcontextprotocol/sdk': ^1.0.0
+ peerDependenciesMeta:
+ '@modelcontextprotocol/sdk':
+ optional: true
- doctrine@3.0.0:
- resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
- engines: {node: '>=6.0.0'}
+ devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
- dom-converter@0.2.0:
- resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==}
+ diff@8.0.4:
+ resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
+ engines: {node: '>=0.3.1'}
- dom-event-types@1.1.0:
- resolution: {integrity: sha512-jNCX+uNJ3v38BKvPbpki6j5ItVlnSqVV6vDWGS6rExzCMjsc39frLjm1n91o6YaKK6AZl0wLloItW6C6mr61BQ==}
+ diff@9.0.0:
+ resolution: {integrity: sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==}
+ engines: {node: '>=0.3.1'}
- dom-serializer@1.4.1:
- resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
+ dijkstrajs@1.0.3:
+ resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
- domain-browser@1.2.0:
- resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==}
- engines: {node: '>=0.4', npm: '>=1.2'}
-
domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
- domhandler@4.3.1:
- resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
- engines: {node: '>= 4'}
-
domhandler@5.0.3:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
- domutils@2.8.0:
- resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
-
- domutils@3.1.0:
- resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
- dot-case@3.0.4:
- resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
+ dot-prop@10.2.0:
+ resolution: {integrity: sha512-BTJ9aZYL3vCfZlZOBLy9v8TUqWGQ0pzFnygKwFZt5udj6viBoFIBviKPUoZLDCPn1FoXffv6McQFDenrm5Krfw==}
+ engines: {node: '>=20'}
dot-prop@5.3.0:
resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
engines: {node: '>=8'}
- dotenv@16.6.1:
- resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
- engines: {node: '>=12'}
-
- dotenv@17.2.1:
- resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==}
+ dotenv@17.4.2:
+ resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==}
engines: {node: '>=12'}
- dotenv@8.6.0:
- resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==}
- engines: {node: '>=10'}
-
- dotenv@9.0.2:
- resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==}
- engines: {node: '>=10'}
-
- dunder-proto@1.0.1:
- resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
- engines: {node: '>= 0.4'}
-
duplexer@0.1.2:
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
- duplexify@3.7.1:
- resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==}
-
- duplexify@4.1.2:
- resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==}
-
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- ecdsa-sig-formatter@1.0.11:
- resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
-
- editorconfig@1.0.4:
- resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
- engines: {node: '>=14'}
- hasBin: true
-
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- ejs@3.1.10:
- resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
- engines: {node: '>=0.10.0'}
- hasBin: true
+ electron-to-chromium@1.5.402:
+ resolution: {integrity: sha512-/oOpMaPT6Yg+6/1XQhyIPlzgj7Ye9zf+nNM2Uh6OcE2G2oNptWazFa+qB2Pdqqbsc9KnIDzgAntoYN0dbwOXwA==}
+
+ embla-carousel-auto-height@8.6.0:
+ resolution: {integrity: sha512-/HrJQOEM6aol/oF33gd2QlINcXy3e19fJWvHDuHWp2bpyTa+2dm9tVVJak30m2Qy6QyQ6Fc8DkImtv7pxWOJUQ==}
+ peerDependencies:
+ embla-carousel: 8.6.0
+
+ embla-carousel-auto-scroll@8.6.0:
+ resolution: {integrity: sha512-WT9fWhNXFpbQ6kP+aS07oF5IHYLZ1Dx4DkwgCY8Hv2ZyYd2KMCPfMV1q/cA3wFGuLO7GMgKiySLX90/pQkcOdQ==}
+ peerDependencies:
+ embla-carousel: 8.6.0
- electron-to-chromium@1.5.227:
- resolution: {integrity: sha512-ITxuoPfJu3lsNWUi2lBM2PaBPYgH3uqmxut5vmBxgYvyI4AlJ6P3Cai1O76mOrkJCBzq0IxWg/NtqOrpu/0gKA==}
+ embla-carousel-autoplay@8.6.0:
+ resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==}
+ peerDependencies:
+ embla-carousel: 8.6.0
- electron-to-chromium@1.5.228:
- resolution: {integrity: sha512-nxkiyuqAn4MJ1QbobwqJILiDtu/jk14hEAWaMiJmNPh1Z+jqoFlBFZjdXwLWGeVSeu9hGLg6+2G9yJaW8rBIFA==}
+ embla-carousel-class-names@8.6.0:
+ resolution: {integrity: sha512-l1hm1+7GxQ+zwdU2sea/LhD946on7XO2qk3Xq2XWSwBaWfdgchXdK567yzLtYSHn4sWYdiX+x4nnaj+saKnJkw==}
+ peerDependencies:
+ embla-carousel: 8.6.0
- elliptic@6.6.0:
- resolution: {integrity: sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==}
+ embla-carousel-fade@8.6.0:
+ resolution: {integrity: sha512-qaYsx5mwCz72ZrjlsXgs1nKejSrW+UhkbOMwLgfRT7w2LtdEB03nPRI06GHuHv5ac2USvbEiX2/nAHctcDwvpg==}
+ peerDependencies:
+ embla-carousel: 8.6.0
- emittery@0.13.1:
- resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
- engines: {node: '>=12'}
+ embla-carousel-reactive-utils@8.6.0:
+ resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==}
+ peerDependencies:
+ embla-carousel: 8.6.0
- emoji-regex@10.4.0:
- resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
+ embla-carousel-vue@8.6.0:
+ resolution: {integrity: sha512-v8UO5UsyLocZnu/LbfQA7Dn2QHuZKurJY93VUmZYP//QRWoCWOsionmvLLAlibkET3pGPs7++03VhJKbWD7vhQ==}
+ peerDependencies:
+ vue: ^3.2.37
+
+ embla-carousel-wheel-gestures@8.1.0:
+ resolution: {integrity: sha512-J68jkYrxbWDmXOm2n2YHl+uMEXzkGSKjWmjaEgL9xVvPb3HqVmg6rJSKfI3sqIDVvm7mkeTy87wtG/5263XqHQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ embla-carousel: ^8.0.0 || ~8.0.0-rc03
+
+ embla-carousel@8.6.0:
+ resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==}
+
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -4264,41 +4342,20 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- emojis-list@3.0.0:
- resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
- engines: {node: '>= 4'}
-
- encodeurl@1.0.2:
- resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
- engines: {node: '>= 0.8'}
-
encodeurl@2.0.0:
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
engines: {node: '>= 0.8'}
- end-of-stream@1.4.4:
- resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
-
- enhanced-resolve@4.5.0:
- resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==}
- engines: {node: '>=6.9.0'}
-
- enhanced-resolve@5.18.3:
- resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
+ enhanced-resolve@5.21.6:
+ resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==}
engines: {node: '>=10.13.0'}
- ent@2.2.0:
- resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==}
-
- entities@2.2.0:
- resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
-
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
- entities@6.0.1:
- resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+ entities@7.0.1:
+ resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
engines: {node: '>=0.12'}
env-paths@2.2.1:
@@ -4309,52 +4366,41 @@ packages:
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
engines: {node: '>=18'}
- errno@0.1.8:
- resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
- hasBin: true
-
- error-ex@1.3.2:
- resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
-
- error-stack-parser@2.1.4:
- resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
+ error-ex@1.3.4:
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
- es-abstract@1.22.2:
- resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==}
- engines: {node: '>= 0.4'}
+ error-stack-parser-es@1.0.5:
+ resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
- es-array-method-boxes-properly@1.0.0:
- resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==}
+ error-stack-parser-es@2.0.1:
+ resolution: {integrity: sha512-J36ntO+rMQVRuR/umlmxmfLi4TpWwtmTnHoJoXTiC2xDNazs0VDPKcX6pbhZMDd2HFtH9isMBJXMdbki+A++Pg==}
- es-define-property@1.0.1:
- resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
- engines: {node: '>= 0.4'}
+ errx@0.1.2:
+ resolution: {integrity: sha512-chfpPHmCerdo/rXr/nNvPZRkV4WwDRwzwnsJ0Uzz3tVi8Z41tDctRjduYy1138ii77AFlts1qvWtX3g/Acg91Q==}
es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
- es-module-lexer@1.7.0:
- resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+ es-module-lexer@2.3.1:
+ resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==}
- es-object-atoms@1.1.1:
- resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
- engines: {node: '>= 0.4'}
-
- es-set-tostringtag@2.1.0:
- resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
- engines: {node: '>= 0.4'}
+ es-toolkit@1.48.1:
+ resolution: {integrity: sha512-wfnXlwd5I75eXRtdD2vuEs50xHHESECDsGD7yiQnfFVNoa5522NwXEbmgo98LfiukSQHs+mBM7/YG3qKJB9/mQ==}
- es-shim-unscopables@1.0.0:
- resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
+ esbuild@0.25.12:
+ resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
+ engines: {node: '>=18'}
+ hasBin: true
- es-to-primitive@1.2.1:
- resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
- engines: {node: '>= 0.4'}
+ esbuild@0.27.7:
+ resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
+ engines: {node: '>=18'}
+ hasBin: true
- esbuild@0.18.20:
- resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
- engines: {node: '>=12'}
+ esbuild@0.28.1:
+ resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==}
+ engines: {node: '>=18'}
hasBin: true
escalade@3.2.0:
@@ -4364,14 +4410,6 @@ packages:
escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
- escape-string-regexp@1.0.5:
- resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
- engines: {node: '>=0.8.0'}
-
- escape-string-regexp@2.0.0:
- resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
- engines: {node: '>=8'}
-
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@@ -4380,179 +4418,138 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
+ eslint-config-flat-gitignore@2.3.0:
+ resolution: {integrity: sha512-bg4ZLGgoARg1naWfsINUUb/52Ksw/K22K+T16D38Y8v+/sGwwIYrGvH/JBjOin+RQtxxC9tzNNiy4shnGtGyyQ==}
+ peerDependencies:
+ eslint: ^9.5.0 || ^10.0.0
+
eslint-config-prettier@10.1.8:
resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
- eslint-config-standard@17.1.0:
- resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- eslint: ^8.0.1
- eslint-plugin-import: ^2.25.2
- eslint-plugin-n: '^15.0.0 || ^16.0.0 '
- eslint-plugin-promise: ^6.0.0
-
- eslint-import-resolver-node@0.3.9:
- resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
-
- eslint-import-resolver-typescript@3.6.1:
- resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- eslint: '*'
- eslint-plugin-import: '*'
+ eslint-flat-config-utils@3.2.0:
+ resolution: {integrity: sha512-PHgo1X5uqIorJONLVD9BIaOSdoYFD3z/AeJljdqDPlWVRpeCYkDbK9k0AXoYVqqNJr6FEYIEr5Rm2TSktLQcHw==}
- eslint-module-utils@2.8.0:
- resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
- engines: {node: '>=4'}
+ eslint-import-context@0.1.9:
+ resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
peerDependencies:
- '@typescript-eslint/parser': '*'
- eslint: '*'
- eslint-import-resolver-node: '*'
- eslint-import-resolver-typescript: '*'
- eslint-import-resolver-webpack: '*'
+ unrs-resolver: ^1.0.0
peerDependenciesMeta:
- '@typescript-eslint/parser':
- optional: true
- eslint:
- optional: true
- eslint-import-resolver-node:
- optional: true
- eslint-import-resolver-typescript:
- optional: true
- eslint-import-resolver-webpack:
+ unrs-resolver:
optional: true
- eslint-plugin-es@3.0.1:
- resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==}
- engines: {node: '>=8.10.0'}
+ eslint-merge-processors@2.0.0:
+ resolution: {integrity: sha512-sUuhSf3IrJdGooquEUB5TNpGNpBoQccbnaLHsb1XkBLUPPqCNivCpY05ZcpCOiV9uHwO2yxXEWVczVclzMxYlA==}
peerDependencies:
- eslint: '>=4.19.1'
+ eslint: '*'
- eslint-plugin-es@4.1.0:
- resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==}
- engines: {node: '>=8.10.0'}
+ eslint-plugin-import-lite@0.6.0:
+ resolution: {integrity: sha512-80vevx2A7i3H7n1/6pqDO8cc5wRz6OwLDvIyVl9UflBV1N1f46e9Ihzi65IOLYoSxM6YykK2fTw1xm0Ixx6aTQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: '>=4.19.1'
+ eslint: ^9.0.0 || ^10.0.0
- eslint-plugin-import@2.28.1:
- resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==}
- engines: {node: '>=4'}
+ eslint-plugin-import-x@4.17.0:
+ resolution: {integrity: sha512-aM7V25Bg6YuYxtEhwjafzfS0NTMds1D2PMQI0K4KqJxQJRtkP4CO+MQTWRdBq2qAnmPxTxLevhXUBtByxJqS1w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': '*'
- eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
+ '@typescript-eslint/utils': ^8.56.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ eslint-import-resolver-node: '*'
peerDependenciesMeta:
- '@typescript-eslint/parser':
+ '@typescript-eslint/utils':
+ optional: true
+ eslint-import-resolver-node:
optional: true
- eslint-plugin-n@15.7.0:
- resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==}
- engines: {node: '>=12.22.0'}
+ eslint-plugin-jsdoc@63.0.7:
+ resolution: {integrity: sha512-pxrqGO733F7xmVYB5vQOiciiT9uddxqehawnbPjZmW2YaJR6fT5cP3UQd2BNoE85ATspCMtNL8w/a5WDGX3Qwg==}
+ engines: {node: ^22.13.0 || >=24}
peerDependencies:
- eslint: '>=7.0.0'
+ eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
- eslint-plugin-node@11.1.0:
- resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==}
- engines: {node: '>=8.10.0'}
+ eslint-plugin-regexp@3.1.0:
+ resolution: {integrity: sha512-qGXIC3DIKZHcK1H9A9+Byz9gmndY6TTSRkSMTZpNXdyCw2ObSehRgccJv35n9AdUakEjQp5VFNLas6BMXizCZg==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
- eslint: '>=5.16.0'
-
- eslint-plugin-nuxt@4.0.0:
- resolution: {integrity: sha512-v3Vwdk8YKe52bAz8eSIDqQuTtfL/T1r9dSl1uhC5SyR5pgLxgKkQdxXVf/Bf6Ax7uyd9rHqiAuYVdqqDb7ILdA==}
+ eslint: '>=9.38.0'
- eslint-plugin-promise@6.1.1:
- resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ eslint-plugin-unicorn@65.0.1:
+ resolution: {integrity: sha512-daCrQrgxOoOz2uMPWB3Y3vvv/5q+ncwICI8IjoebiwtW87CaY4tAN5EEiRXTYVnf7qi1v1BGBdHOSnZLV0rx6A==}
+ engines: {node: ^20.10.0 || >=21.0.0}
peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
+ eslint: '>=9.38.0'
- eslint-plugin-unicorn@44.0.2:
- resolution: {integrity: sha512-GLIDX1wmeEqpGaKcnMcqRvMVsoabeF0Ton0EX4Th5u6Kmf7RM9WBl705AXFEsns56ESkEs0uyelLuUTvz9Tr0w==}
- engines: {node: '>=14.18'}
+ eslint-plugin-vue@10.9.2:
+ resolution: {integrity: sha512-4g7ZP3pYcuqd7Zp0pzUKcos0W+RkjBz4EGdhJ92FcYk6v03Ti/GK5NwjgsjxHK+98eXDbHeK7VtX1az7/8doZA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: '>=8.23.1'
+ '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
+ '@typescript-eslint/parser': ^7.0.0 || ^8.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ vue-eslint-parser: ^10.3.0
+ peerDependenciesMeta:
+ '@stylistic/eslint-plugin':
+ optional: true
+ '@typescript-eslint/parser':
+ optional: true
- eslint-plugin-vue@9.33.0:
- resolution: {integrity: sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==}
- engines: {node: ^14.17.0 || >=16.0.0}
+ eslint-processor-vue-blocks@2.0.0:
+ resolution: {integrity: sha512-u4W0CJwGoWY3bjXAuFpc/b6eK3NQEI8MoeW7ritKj3G3z/WtHrKjkqf+wk8mPEy5rlMGS+k6AZYOw2XBoN/02Q==}
peerDependencies:
- eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
-
- eslint-scope@4.0.3:
- resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==}
- engines: {node: '>=4.0.0'}
-
- eslint-scope@5.1.1:
- resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
- engines: {node: '>=8.0.0'}
-
- eslint-scope@7.2.2:
- resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@vue/compiler-sfc': ^3.3.0
+ eslint: '>=9.0.0'
- eslint-utils@2.1.0:
- resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
- engines: {node: '>=6'}
+ eslint-scope@9.1.2:
+ resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- eslint-utils@3.0.0:
- resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
- engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
+ eslint-typegen@2.3.1:
+ resolution: {integrity: sha512-zVdh8rThBvv2o5T/K524Fr5iy1Jo0q09rHL7y7FbOhgMB177T2gw+shxfC4ChCEqdq6/y6LJA4j8Fbr/Xls9aw==}
peerDependencies:
- eslint: '>=5'
-
- eslint-visitor-keys@1.3.0:
- resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
- engines: {node: '>=4'}
-
- eslint-visitor-keys@2.1.0:
- resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
- engines: {node: '>=10'}
+ eslint: ^9.0.0 || ^10.0.0
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- eslint-webpack-plugin@4.0.1:
- resolution: {integrity: sha512-fUFcXpui/FftGx3NzvWgLZXlLbu+m74sUxGEgxgoxYcUtkIQbS6SdNNZkS99m5ycb23TfoNYrDpp1k/CK5j6Hw==}
- engines: {node: '>= 14.15.0'}
- peerDependencies:
- eslint: ^8.0.0
- webpack: ^5.0.0
-
- eslint@8.57.1:
- resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
- hasBin: true
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- espree@9.6.1:
- resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ eslint-visitor-keys@5.0.1:
+ resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- esprima@4.0.1:
- resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
- engines: {node: '>=4'}
+ eslint@10.5.0:
+ resolution: {integrity: sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
- esquery@1.5.0:
- resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
- engines: {node: '>=0.10'}
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ espree@11.2.0:
+ resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- esquery@1.6.0:
- resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ esquery@1.7.0:
+ resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
engines: {node: '>=0.10'}
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
- estraverse@4.3.0:
- resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
- engines: {node: '>=4.0'}
-
estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
@@ -4575,81 +4572,31 @@ packages:
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
engines: {node: '>=6'}
- eventemitter3@5.0.1:
- resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+ eventemitter3@5.0.4:
+ resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
+
+ events-universal@1.0.1:
+ resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
- eventsource-polyfill@0.9.6:
- resolution: {integrity: sha512-LyMFp2oPDGhum2lMvkjqKZEwWd2/AoXyt8aoyftTBMWwPHNgU+2tdxhTHPluDxoz+z4gNj0uHAPR9nqevATMbg==}
-
- evp_bytestokey@1.0.3:
- resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
-
- execa@5.1.1:
- resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
- engines: {node: '>=10'}
-
execa@8.0.1:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
- exit-x@0.2.2:
- resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==}
- engines: {node: '>= 0.8.0'}
-
- exit@0.1.2:
- resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
- engines: {node: '>= 0.8.0'}
-
- expand-brackets@2.1.4:
- resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==}
- engines: {node: '>=0.10.0'}
-
- expect@30.2.0:
- resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
- extend-shallow@2.0.1:
- resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
- engines: {node: '>=0.10.0'}
-
- extend-shallow@3.0.2:
- resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==}
- engines: {node: '>=0.10.0'}
-
- extend@3.0.2:
- resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
-
- external-editor@3.1.0:
- resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
- engines: {node: '>=4'}
-
- extglob@2.0.4:
- resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
- engines: {node: '>=0.10.0'}
-
- extract-css-chunks-webpack-plugin@4.10.0:
- resolution: {integrity: sha512-D/wb/Tbexq8XMBl4uhthto25WBaHI9P8vucDdzwPtLTyVi4Rdw/aiRLSL2rHaF6jZfPAjThWXepFU9PXsdtIbA==}
- engines: {node: '>= 6.9.0'}
- peerDependencies:
- webpack: ^4.4.0 || ^5.0.0
-
- extract-from-css@0.4.4:
- resolution: {integrity: sha512-41qWGBdtKp9U7sgBxAQ7vonYqSXzgW/SiAYzq4tdWSVhAShvpVCH1nyvPQgjse6EdgbW7Y7ERdT3674/lKr65A==}
- engines: {node: '>=0.10.0', npm: '>=2.0.0'}
+ exsolve@1.1.1:
+ resolution: {integrity: sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g==}
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- fast-glob@3.3.1:
- resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
- engines: {node: '>=8.6.0'}
+ fast-fifo@1.3.2:
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
- fast-glob@3.3.2:
- resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
fast-json-stable-stringify@2.1.0:
@@ -4658,85 +4605,66 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- fast-text-encoding@1.0.6:
- resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==}
+ fast-npm-meta@2.2.0:
+ resolution: {integrity: sha512-99jPl8JkCSCa4VlboNU1XuL98ijm74Pm9CGo6H4BoMVoVh1uhguQcvwLgXDT8Vkl2qj/UEQ0J9gD8beHjTFk1w==}
+ hasBin: true
+
+ fast-string-truncated-width@3.0.3:
+ resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==}
+
+ fast-string-width@3.0.2:
+ resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==}
+
+ fast-uri@3.1.2:
+ resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==}
+
+ fast-wrap-ansi@0.2.2:
+ resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==}
+
+ fast-xml-builder@1.2.1:
+ resolution: {integrity: sha512-tPb5TTWfgfVx5BNSi2xV0eLr89POeXXn0dXIsCJ9m1narrWxeIyx6je9d7Rce/3NyXLbvuQmLkxq+RuxMWejvw==}
- fast-uri@3.1.0:
- resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+ fast-xml-parser@5.9.3:
+ resolution: {integrity: sha512-brCNCeScma/kqa54J4PIDriSSSLssRkuYaUCpvHJulGc3HGI/xxKUCTDcYkAdqJsyb//ydpbxecjC3hB9+tb/g==}
+ hasBin: true
fastest-levenshtein@1.0.16:
resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
engines: {node: '>= 4.9.1'}
- fastq@1.15.0:
- resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
+ fastq@1.20.1:
+ resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
faye-websocket@0.11.4:
resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
engines: {node: '>=0.8.0'}
- fb-watchman@2.0.2:
- resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
-
- figgy-pudding@3.5.2:
- resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==}
- deprecated: This module is no longer supported.
-
- figures@3.2.0:
- resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
- engines: {node: '>=8'}
-
- file-entry-cache@6.0.1:
- resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
- engines: {node: ^10.12.0 || >=12.0.0}
-
- file-entry-cache@7.0.1:
- resolution: {integrity: sha512-uLfFktPmRetVCbHe5UPuekWrQ6hENufnA46qEGbfACkK5drjTTdQYUragRgMjHldcbYG+nslUerqMPjbBSHXjQ==}
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
-
- file-loader@6.2.0:
- resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==}
- engines: {node: '>= 10.13.0'}
peerDependencies:
- webpack: ^4.0.0 || ^5.0.0
-
- file-uri-to-path@1.0.0:
- resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
- filelist@1.0.4:
- resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
+ file-entry-cache@11.1.3:
+ resolution: {integrity: sha512-oMbq0PD6VIiIwMF6LIa7MEwd/l9huKwmqRKXqmrkqIZv8CvRbfowL+L0ryAl8h//HfAS0zS+4SbYoRyAoA6BJA==}
- fill-range@4.0.0:
- resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==}
- engines: {node: '>=0.10.0'}
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
- fill-range@7.0.1:
- resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
- engines: {node: '>=8'}
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
- finalhandler@1.1.2:
- resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
- engines: {node: '>= 0.8'}
-
- find-babel-config@1.2.0:
- resolution: {integrity: sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==}
- engines: {node: '>=4.0.0'}
-
- find-cache-dir@2.1.0:
- resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==}
- engines: {node: '>=6'}
-
- find-cache-dir@3.3.2:
- resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
- engines: {node: '>=8'}
-
- find-up@3.0.0:
- resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
- engines: {node: '>=6'}
+ find-up-simple@1.0.1:
+ resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
+ engines: {node: '>=18'}
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
@@ -4746,152 +4674,93 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
- find-up@7.0.0:
- resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
- engines: {node: '>=18'}
+ find-up@8.0.0:
+ resolution: {integrity: sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==}
+ engines: {node: '>=20'}
- firebase-admin@10.3.0:
- resolution: {integrity: sha512-A0wgMLEjyVyUE+heyMJYqHRkPVjpebhOYsa47RHdrTM4ltApcx8Tn86sUmjqxlfh09gNnILAm7a8q5+FmgBYpg==}
- engines: {node: '>=12.7.0'}
+ firebase@12.13.0:
+ resolution: {integrity: sha512-iutR8ejvAqk6qUClnsPz3U3VIjTWp243AX4cD3iifak5t56to1J29xUIQgSDDzaAqKvhshZerzSahwMQj2TlvA==}
- firebase@10.14.1:
- resolution: {integrity: sha512-0KZxU+Ela9rUCULqFsUUOYYkjh7OM1EWdIfG6///MtXd0t2/uUIf0iNV5i0KariMhRQ5jve/OY985nrAXFaZeQ==}
+ flag-icons@7.5.0:
+ resolution: {integrity: sha512-kd+MNXviFIg5hijH766tt+3x76ele1AXlo4zDdCxIvqWZhKt4T83bOtxUOOMlTx/EcFdUMH5yvQgYlFh1EqqFg==}
- firebaseui@6.1.0:
- resolution: {integrity: sha512-5WiVYVxPGMANuZKxg6KLyU1tyqIsbqf/59Zm4HrdFYwPtM5lxxB0THvgaIk4ix+hCgF0qmY89sKiktcifKzGIA==}
- peerDependencies:
- firebase: ^9.1.3 || ^10.0.0
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
- flat-cache@3.1.1:
- resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==}
- engines: {node: '>=12.0.0'}
+ flat-cache@6.1.22:
+ resolution: {integrity: sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==}
- flat@5.0.2:
- resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
- hasBin: true
+ flatted@3.4.2:
+ resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==}
- flatted@3.2.9:
- resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
+ fnv1a-64@0.1.2:
+ resolution: {integrity: sha512-mJbcILTPybAR1jdOwt/lVv8N2cffeJFFP+gVbSAwLEx1ujXH27RpPd8Rokec/KX9c76UYIB6Co+H4lQzxPnJfA==}
- flush-write-stream@1.1.1:
- resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==}
+ fontaine@0.8.0:
+ resolution: {integrity: sha512-eek1GbzOdWIj9FyQH/emqW1aEdfC3lYRCHepzwlFCm5T77fBSRSyNRKE6/antF1/B1M+SfJXVRQTY9GAr7lnDg==}
+ engines: {node: '>=18.12.0'}
- follow-redirects@1.15.11:
- resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
- engines: {node: '>=4.0'}
+ fontkitten@1.0.3:
+ resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==}
+ engines: {node: '>=20'}
+
+ fontless@0.2.1:
+ resolution: {integrity: sha512-mUWZ8w91/mw2KEcZ6gHNoNNmsAq9Wiw2IypIux5lM03nhXm+WSloXGUNuRETNTLqZexMgpt7Aj/v63qqrsWraQ==}
+ engines: {node: '>=18.12.0'}
peerDependencies:
- debug: '*'
+ vite: '*'
peerDependenciesMeta:
- debug:
+ vite:
optional: true
- for-each@0.3.3:
- resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
-
- for-in@1.0.2:
- resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
- engines: {node: '>=0.10.0'}
-
foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
- fork-ts-checker-webpack-plugin@6.5.3:
- resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==}
- engines: {node: '>=10', yarn: '>=1.0.0'}
+ fraction.js@5.3.4:
+ resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
+
+ framer-motion@12.42.2:
+ resolution: {integrity: sha512-5XY9luDiu0oHfHBjpDthFMh0ES+122w6p/papSJBweMkO8Sn+PW2QaEgRblQBpWFnuvZS5qvarpt/hO2pjGmnw==}
peerDependencies:
- eslint: '>= 6'
- typescript: '>= 2.7'
- vue-template-compiler: '*'
- webpack: '>= 4'
+ '@emotion/is-prop-valid': '*'
+ react: ^18.0.0 || ^19.0.0
+ react-dom: ^18.0.0 || ^19.0.0
peerDependenciesMeta:
- eslint:
+ '@emotion/is-prop-valid':
optional: true
- vue-template-compiler:
+ react:
+ optional: true
+ react-dom:
optional: true
- form-data@4.0.4:
- resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
- engines: {node: '>= 6'}
-
- fraction.js@4.3.7:
- resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
-
- fragment-cache@0.2.1:
- resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
- engines: {node: '>=0.10.0'}
-
- fresh@0.5.2:
- resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
- engines: {node: '>= 0.6'}
-
- from2@2.3.0:
- resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
-
- fs-extra@11.2.0:
- resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
- engines: {node: '>=14.14'}
-
- fs-extra@8.1.0:
- resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
- engines: {node: '>=6 <7 || >=8'}
-
- fs-extra@9.1.0:
- resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
- engines: {node: '>=10'}
-
- fs-memo@1.2.0:
- resolution: {integrity: sha512-YEexkCpL4j03jn5SxaMHqcO6IuWuqm8JFUYhyCep7Ao89JIYmB8xoKhK7zXXJ9cCaNXpyNH5L3QtAmoxjoHW2w==}
-
- fs-minipass@2.1.0:
- resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
- engines: {node: '>= 8'}
-
- fs-monkey@1.0.5:
- resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==}
-
- fs-write-stream-atomic@1.0.10:
- resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==}
- deprecated: This package is no longer supported.
-
- fs.realpath@1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
-
- fsevents@1.2.13:
- resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==}
- engines: {node: '>= 4.0'}
- os: [darwin]
- deprecated: Upgrade to fsevents v2 to mitigate potential security issues
+ fresh@2.0.0:
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
- function-bind@1.1.1:
- resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
-
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- function.prototype.name@1.1.6:
- resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
- engines: {node: '>= 0.4'}
-
- functional-red-black-tree@1.0.1:
- resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
-
- functions-have-names@1.2.3:
- resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
-
- gaxios@4.3.3:
- resolution: {integrity: sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==}
+ fuse.js@7.4.2:
+ resolution: {integrity: sha512-LVbzjD4WA6UP5B1UnP8wuaXJiLnqMdM/E4fiJXTJ5haJ5b/MBNsK29h2fm6swEoQaVQjvYFWKLE2RanyZIoRVQ==}
engines: {node: '>=10'}
- gcp-metadata@4.3.1:
- resolution: {integrity: sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==}
+ fuse.js@7.5.0:
+ resolution: {integrity: sha512-sQtrEfA+ez/3G0cCZecF70oqpCRttCexYUG4mUrtWL49ULUzUyxokt5kyqwtKzj1270RaKih+hcP3qLcumccow==}
engines: {node: '>=10'}
+ fzf@0.5.2:
+ resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==}
+
+ generic-names@4.0.0:
+ resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==}
+
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -4900,73 +4769,30 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- get-east-asian-width@1.3.0:
- resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
+ get-east-asian-width@1.6.0:
+ resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==}
engines: {node: '>=18'}
- get-intrinsic@1.2.1:
- resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
-
- get-intrinsic@1.3.0:
- resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
- engines: {node: '>= 0.4'}
-
- get-package-type@0.1.0:
- resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
- engines: {node: '>=8.0.0'}
-
- get-port-please@2.6.1:
- resolution: {integrity: sha512-4PDSrL6+cuMM1xs6w36ZIkaKzzE0xzfVBCfebHIJ3FE8iB9oic/ECwPw3iNiD4h1AoJ5XLLBhEviFAVrZsDC5A==}
-
- get-proto@1.0.1:
- resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
- engines: {node: '>= 0.4'}
-
- get-stream@6.0.1:
- resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
- engines: {node: '>=10'}
+ get-port-please@3.2.0:
+ resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==}
get-stream@8.0.1:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
- get-symbol-description@1.0.0:
- resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
- engines: {node: '>= 0.4'}
-
- get-tsconfig@4.7.2:
- resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==}
+ get-tsconfig@4.14.0:
+ resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==}
- get-value@2.0.6:
- resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
- engines: {node: '>=0.10.0'}
-
- giget@1.1.2:
- resolution: {integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==}
- hasBin: true
-
- giget@1.2.3:
- resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==}
+ giget@3.3.1:
+ resolution: {integrity: sha512-r+mvuDjrjMpsdw46Kmeydb8bdHm7wOKw8wNBtTndkjbPjgAp5oUJUxRE76wZFknxIPokfWvep2qSXK37aXE6zg==}
hasBin: true
- git-config-path@2.0.0:
- resolution: {integrity: sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA==}
- engines: {node: '>=4'}
-
- git-raw-commits@4.0.0:
- resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==}
- engines: {node: '>=16'}
+ git-raw-commits@5.0.1:
+ resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==}
+ engines: {node: '>=18'}
+ deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead.
hasBin: true
- git-up@7.0.0:
- resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==}
-
- git-url-parse@13.1.1:
- resolution: {integrity: sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==}
-
- glob-parent@3.1.0:
- resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==}
-
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -4975,26 +4801,23 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
- glob-to-regexp@0.4.1:
- resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
-
- glob@10.4.5:
- resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ glob@10.5.0:
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
hasBin: true
- glob@7.2.3:
- resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
- deprecated: Glob versions prior to v9 are no longer supported
-
- glob@8.1.0:
- resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
- engines: {node: '>=12'}
- deprecated: Glob versions prior to v9 are no longer supported
+ glob@13.0.6:
+ resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
+ engines: {node: 18 || 20 || >=22}
global-directory@4.0.1:
resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
engines: {node: '>=18'}
+ global-directory@5.0.0:
+ resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==}
+ engines: {node: '>=20'}
+
global-modules@2.0.0:
resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==}
engines: {node: '>=6'}
@@ -5003,277 +4826,120 @@ packages:
resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==}
engines: {node: '>=6'}
- globals@11.12.0:
- resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
- engines: {node: '>=4'}
-
- globals@13.24.0:
- resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
- engines: {node: '>=8'}
+ globals@17.7.0:
+ resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==}
+ engines: {node: '>=18'}
- globals@9.18.0:
- resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==}
- engines: {node: '>=0.10.0'}
+ globby@16.2.0:
+ resolution: {integrity: sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==}
+ engines: {node: '>=20'}
- globalthis@1.0.3:
- resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
- engines: {node: '>= 0.4'}
+ globby@16.2.3:
+ resolution: {integrity: sha512-VZX7TV7jmd/pn71vdnLKtgwy1IWqc3KjI9x1/UtPkwoKk5fKrNLY30ltDe3cAM5xruIN7YuuaulFt133jRrKZg==}
+ engines: {node: '>=20'}
- globby@11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
+ globjoin@0.1.4:
+ resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==}
- globby@13.2.2:
- resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ google-fonts-helper@3.7.4:
+ resolution: {integrity: sha512-LNq+i6DjgFfJkb+DN2aztI2Bv/QXKMTQAzwU0arxmK6OZjUY/OxqQJQVWf+31WZFJQzTGFvtaCrSiN+kUosNTw==}
- globby@14.0.2:
- resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==}
- engines: {node: '>=18'}
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- globjoin@0.1.4:
- resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==}
+ gzip-size@7.0.0:
+ resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- google-auth-library@7.14.1:
- resolution: {integrity: sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==}
- engines: {node: '>=10'}
+ h3@1.15.11:
+ resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==}
- google-gax@2.30.5:
- resolution: {integrity: sha512-Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ==}
- engines: {node: '>=10'}
+ h3@2.0.1-rc.22:
+ resolution: {integrity: sha512-Esv0DMIuPkCTSWCA0vO73vcTqwzH1wjSrAO1TXNu/K3up1sZHa9EKMapbmxCDYBeymC3fVTk4qxp7ogQWQ+KgA==}
+ engines: {node: '>=20.11.1'}
hasBin: true
+ peerDependencies:
+ crossws: ^0.4.1
+ peerDependenciesMeta:
+ crossws:
+ optional: true
- google-p12-pem@3.1.4:
- resolution: {integrity: sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==}
- engines: {node: '>=10'}
- deprecated: Package is no longer maintained
- hasBin: true
+ has-flag@5.0.1:
+ resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==}
+ engines: {node: '>=12'}
- gopd@1.0.1:
- resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ hashery@1.5.1:
+ resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==}
+ engines: {node: '>=20'}
- gopd@1.2.0:
- resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ hasown@2.0.4:
+ resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
engines: {node: '>= 0.4'}
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ hast-util-to-html@9.0.5:
+ resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
- graphemer@1.4.0:
- resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
- gtoken@5.3.2:
- resolution: {integrity: sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==}
- engines: {node: '>=10'}
+ hey-listen@1.0.8:
+ resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==}
- gzip-size@6.0.0:
- resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
- engines: {node: '>=10'}
+ highlight.js@11.11.1:
+ resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
+ engines: {node: '>=12.0.0'}
- handlebars@4.7.8:
- resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
- engines: {node: '>=0.4.7'}
- hasBin: true
+ hookable@5.5.3:
+ resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
- hard-rejection@2.1.0:
- resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
- engines: {node: '>=6'}
+ hookable@6.1.1:
+ resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
- hard-source-webpack-plugin@0.13.1:
- resolution: {integrity: sha512-r9zf5Wq7IqJHdVAQsZ4OP+dcUSvoHqDMxJlIzaE2J0TZWn3UjMMrHqwDHR8Jr/pzPfG7XxSe36E7Y8QGNdtuAw==}
- engines: {node: '>=8.0.0'}
- peerDependencies:
- webpack: '*'
+ hookified@1.15.1:
+ resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==}
- has-ansi@2.0.0:
- resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
- engines: {node: '>=0.10.0'}
+ hookified@2.2.0:
+ resolution: {integrity: sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==}
- has-bigints@1.0.2:
- resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+ html-entities@2.6.0:
+ resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
- has-flag@3.0.0:
- resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
- engines: {node: '>=4'}
+ html-tags@5.1.0:
+ resolution: {integrity: sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==}
+ engines: {node: '>=20.10'}
- has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
+ html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
- has-property-descriptors@1.0.0:
- resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
+ htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
- has-proto@1.0.1:
- resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
- engines: {node: '>= 0.4'}
+ http-errors@2.0.1:
+ resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
+ engines: {node: '>= 0.8'}
- has-symbols@1.0.3:
- resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
- engines: {node: '>= 0.4'}
-
- has-symbols@1.1.0:
- resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
- engines: {node: '>= 0.4'}
-
- has-tostringtag@1.0.2:
- resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
- engines: {node: '>= 0.4'}
-
- has-value@0.3.1:
- resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==}
- engines: {node: '>=0.10.0'}
-
- has-value@1.0.0:
- resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==}
- engines: {node: '>=0.10.0'}
-
- has-values@0.1.4:
- resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==}
- engines: {node: '>=0.10.0'}
-
- has-values@1.0.0:
- resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==}
- engines: {node: '>=0.10.0'}
-
- has@1.0.3:
- resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
- engines: {node: '>= 0.4.0'}
-
- hash-base@3.1.0:
- resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==}
- engines: {node: '>=4'}
-
- hash-stream-validation@0.2.4:
- resolution: {integrity: sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==}
-
- hash-sum@1.0.2:
- resolution: {integrity: sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==}
-
- hash-sum@2.0.0:
- resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
-
- hash.js@1.1.7:
- resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
-
- hasown@2.0.2:
- resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
- engines: {node: '>= 0.4'}
-
- he@1.2.0:
- resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
- hasBin: true
-
- highlight.js@11.11.1:
- resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
- engines: {node: '>=12.0.0'}
-
- hmac-drbg@1.0.1:
- resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
-
- hookable@4.4.1:
- resolution: {integrity: sha512-KWjZM8C7IVT2qne5HTXjM6R6VnRfjfRlf/oCnHd+yFxoHO1DzOl6B9LzV/VqGQK/IrFewq+EG+ePVrE9Tpc3fg==}
-
- hookable@5.5.3:
- resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
-
- hosted-git-info@2.8.9:
- resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
-
- hosted-git-info@4.1.0:
- resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
- engines: {node: '>=10'}
-
- html-encoding-sniffer@4.0.0:
- resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
- engines: {node: '>=18'}
-
- html-entities@2.4.0:
- resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==}
-
- html-escaper@2.0.2:
- resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
-
- html-minifier-terser@5.1.1:
- resolution: {integrity: sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==}
- engines: {node: '>=6'}
- hasBin: true
-
- html-minifier-terser@7.2.0:
- resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==}
- engines: {node: ^14.13.1 || >=16.0.0}
- hasBin: true
-
- html-tags@2.0.0:
- resolution: {integrity: sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==}
- engines: {node: '>=4'}
-
- html-tags@3.3.1:
- resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
- engines: {node: '>=8'}
-
- html-webpack-plugin@4.5.2:
- resolution: {integrity: sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==}
- engines: {node: '>=6.9'}
- peerDependencies:
- webpack: ^4.0.0 || ^5.0.0
-
- htmlparser2@6.1.0:
- resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==}
-
- htmlparser2@8.0.2:
- resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
-
- http-errors@2.0.0:
- resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
- engines: {node: '>= 0.8'}
-
- http-parser-js@0.5.8:
- resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
-
- http-proxy-agent@5.0.0:
- resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
- engines: {node: '>= 6'}
+ http-parser-js@0.5.10:
+ resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==}
- http-proxy-agent@7.0.2:
- resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
- engines: {node: '>= 14'}
-
- https-browserify@1.0.0:
- resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==}
-
- https-proxy-agent@5.0.1:
- resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
- engines: {node: '>= 6'}
+ http-shutdown@1.2.2:
+ resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
https-proxy-agent@7.0.6:
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
engines: {node: '>= 14'}
- human-signals@2.1.0:
- resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
- engines: {node: '>=10.17.0'}
+ httpxy@0.5.5:
+ resolution: {integrity: sha512-uDjmnPyp1q4Sgzf3w+J/Fc6UqcCEj0x4Wjp7OqK5dGhNeDgpyrAmnS6ey8QWrX3SWDon2DMKf9sBa5X9+CVyMA==}
human-signals@5.0.0:
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
engines: {node: '>=16.17.0'}
- hyperdyperid@1.2.0:
- resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==}
- engines: {node: '>=10.18'}
-
- iconv-lite@0.4.24:
- resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
- engines: {node: '>=0.10.0'}
-
- iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
-
- icss-utils@5.1.0:
- resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
+ husky@9.1.7:
+ resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
+ engines: {node: '>=18'}
+ hasBin: true
idb@7.1.1:
resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
@@ -5281,59 +4947,50 @@ packages:
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- iferr@0.1.5:
- resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==}
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
- ignore@5.2.4:
- resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
+ ignore@7.0.5:
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'}
- ignore@5.3.1:
- resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
+ ignore@7.0.6:
+ resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==}
engines: {node: '>= 4'}
- import-fresh@3.3.0:
- resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
- engines: {node: '>=6'}
+ image-meta@0.2.2:
+ resolution: {integrity: sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA==}
+
+ image-size@2.0.2:
+ resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==}
+ engines: {node: '>=16.x'}
+ hasBin: true
+
+ immutable@5.1.5:
+ resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==}
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
- import-lazy@4.0.0:
- resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
- engines: {node: '>=8'}
-
- import-local@3.2.0:
- resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
- engines: {node: '>=8'}
- hasBin: true
-
import-meta-resolve@4.2.0:
resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==}
+ importx@0.5.2:
+ resolution: {integrity: sha512-YEwlK86Ml5WiTxN/ECUYC5U7jd1CisAVw7ya4i9ZppBoHfFkT2+hChhr3PE2fYxUKLkNyivxEQpa5Ruil1LJBQ==}
+
+ impound@1.1.6:
+ resolution: {integrity: sha512-ugavDQkE74SGrBjagNIwNVHNBxX14mmfQnTm4jFGzOoWwYsgihqV698BNr5xwRY9quKK4rEg8bc6ECltllMr+w==}
+
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
- indent-string@4.0.0:
- resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
- engines: {node: '>=8'}
-
indent-string@5.0.0:
resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
engines: {node: '>=12'}
- infer-owner@1.0.4:
- resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==}
-
- inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
- deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
-
- inherits@2.0.3:
- resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
-
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
@@ -5344,94 +5001,37 @@ packages:
resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
- inquirer@7.3.3:
- resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==}
- engines: {node: '>=8.0.0'}
-
- internal-slot@1.0.5:
- resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
- engines: {node: '>= 0.4'}
-
- invariant@2.2.4:
- resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
-
- ip@2.0.1:
- resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==}
+ ini@6.0.0:
+ resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==}
+ engines: {node: ^20.17.0 || >=22.9.0}
- is-accessor-descriptor@0.1.6:
- resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==}
- engines: {node: '>=0.10.0'}
- deprecated: Please upgrade to v0.1.7
-
- is-accessor-descriptor@1.0.0:
- resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==}
- engines: {node: '>=0.10.0'}
- deprecated: Please upgrade to v1.0.1
+ ioredis@5.11.1:
+ resolution: {integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==}
+ engines: {node: '>=12.22.0'}
- is-array-buffer@3.0.2:
- resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
+ iron-webcrypto@1.2.1:
+ resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- is-bigint@1.0.4:
- resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
-
- is-binary-path@1.0.1:
- resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==}
- engines: {node: '>=0.10.0'}
-
- is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
-
- is-boolean-object@1.1.2:
- resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
- engines: {node: '>= 0.4'}
-
- is-buffer@1.1.6:
- resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
-
- is-builtin-module@3.2.1:
- resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
- engines: {node: '>=6'}
-
- is-callable@1.2.7:
- resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
- engines: {node: '>= 0.4'}
-
- is-core-module@2.13.0:
- resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
+ is-builtin-module@5.0.0:
+ resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
+ engines: {node: '>=18.20'}
- is-data-descriptor@0.1.4:
- resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==}
- engines: {node: '>=0.10.0'}
- deprecated: Please upgrade to v0.1.5
-
- is-data-descriptor@1.0.0:
- resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==}
- engines: {node: '>=0.10.0'}
- deprecated: Please upgrade to v1.0.1
-
- is-date-object@1.0.5:
- resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+ is-core-module@2.16.2:
+ resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==}
engines: {node: '>= 0.4'}
- is-descriptor@0.1.6:
- resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==}
- engines: {node: '>=0.10.0'}
-
- is-descriptor@1.0.2:
- resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==}
- engines: {node: '>=0.10.0'}
-
- is-extendable@0.1.1:
- resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
- engines: {node: '>=0.10.0'}
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
- is-extendable@1.0.1:
- resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
- engines: {node: '>=0.10.0'}
+ is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
@@ -5441,40 +5041,29 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- is-fullwidth-code-point@4.0.0:
- resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
- engines: {node: '>=12'}
-
- is-fullwidth-code-point@5.0.0:
- resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ is-fullwidth-code-point@5.1.0:
+ resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
engines: {node: '>=18'}
- is-generator-fn@2.1.0:
- resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
- engines: {node: '>=6'}
-
- is-glob@3.1.0:
- resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==}
- engines: {node: '>=0.10.0'}
-
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
- is-https@2.0.2:
- resolution: {integrity: sha512-UfUCKVQH/6PQRCh5Qk9vNu4feLZiFmV/gr8DjbtJD0IrCRIDTA6E+d/AVFGPulI5tqK5W45fYbn1Nir1O99rFw==}
+ is-in-ssh@1.0.0:
+ resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==}
+ engines: {node: '>=20'}
- is-negative-zero@2.0.2:
- resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
- engines: {node: '>= 0.4'}
+ is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
- is-number-object@1.0.7:
- resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
- engines: {node: '>= 0.4'}
+ is-installed-globally@1.0.0:
+ resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==}
+ engines: {node: '>=18'}
- is-number@3.0.0:
- resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==}
- engines: {node: '>=0.10.0'}
+ is-module@1.0.0:
+ resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
@@ -5484,37 +5073,16 @@ packages:
resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
engines: {node: '>=8'}
- is-path-inside@3.0.3:
- resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
- engines: {node: '>=8'}
-
- is-plain-obj@1.1.0:
- resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
- engines: {node: '>=0.10.0'}
-
- is-plain-object@2.0.4:
- resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
- engines: {node: '>=0.10.0'}
-
- is-plain-object@5.0.0:
- resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
- engines: {node: '>=0.10.0'}
-
- is-potential-custom-element-name@1.0.1:
- resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
-
- is-regex@1.1.4:
- resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
- engines: {node: '>= 0.4'}
-
- is-shared-array-buffer@1.0.2:
- resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+ is-path-inside@4.0.0:
+ resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==}
+ engines: {node: '>=12'}
- is-ssh@1.4.0:
- resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==}
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
- is-stream-ended@0.1.4:
- resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==}
+ is-reference@1.2.1:
+ resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
@@ -5524,470 +5092,321 @@ packages:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- is-string@1.0.7:
- resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
- engines: {node: '>= 0.4'}
+ is-unsafe@1.0.1:
+ resolution: {integrity: sha512-CLK2+VdgERgD96EYm5lUQssZYlRg2tkZnbsxZoacmSiRxiFJ4Nk4SzjCl+Ur+v3kXIY9dTIdb3IH22y1mZ56LA==}
- is-symbol@1.0.4:
- resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
- engines: {node: '>= 0.4'}
+ is-what@5.5.0:
+ resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
+ engines: {node: '>=18'}
- is-text-path@2.0.0:
- resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==}
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
- is-typed-array@1.1.12:
- resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
- engines: {node: '>= 0.4'}
-
- is-typedarray@1.0.0:
- resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
-
- is-weakref@1.0.2:
- resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
-
- is-whitespace@0.3.0:
- resolution: {integrity: sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==}
- engines: {node: '>=0.10.0'}
-
- is-windows@1.0.2:
- resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
- engines: {node: '>=0.10.0'}
-
- is-wsl@1.1.0:
- resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==}
- engines: {node: '>=4'}
+ is-wsl@3.1.1:
+ resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
+ engines: {node: '>=16'}
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
- isarray@2.0.5:
- resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
-
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- isobject@2.1.0:
- resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==}
- engines: {node: '>=0.10.0'}
+ isexe@4.0.0:
+ resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==}
+ engines: {node: '>=20'}
- isobject@3.0.1:
- resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
- engines: {node: '>=0.10.0'}
+ isomorphic.js@0.2.5:
+ resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==}
- istanbul-lib-coverage@3.2.2:
- resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
- engines: {node: '>=8'}
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
- istanbul-lib-instrument@6.0.3:
- resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
- engines: {node: '>=10'}
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
- istanbul-lib-report@3.0.1:
- resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
- engines: {node: '>=10'}
+ jiti@2.7.0:
+ resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
+ hasBin: true
- istanbul-lib-source-maps@5.0.6:
- resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
- engines: {node: '>=10'}
+ js-tokens@10.0.0:
+ resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==}
- istanbul-reports@3.2.0:
- resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
- engines: {node: '>=8'}
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- jackspeak@3.4.3:
- resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+ js-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
- jake@10.9.4:
- resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==}
- engines: {node: '>=10'}
+ js-yaml@4.2.0:
+ resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==}
hasBin: true
- jest-changed-files@30.2.0:
- resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
- jest-circus@30.2.0:
- resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ jsdoc-type-pratt-parser@7.2.0:
+ resolution: {integrity: sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==}
+ engines: {node: '>=20.0.0'}
- jest-cli@30.2.0:
- resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
hasBin: true
- peerDependencies:
- node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
- peerDependenciesMeta:
- node-notifier:
- optional: true
-
- jest-config@30.2.0:
- resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- peerDependencies:
- '@types/node': '*'
- esbuild-register: '>=3.4.0'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- '@types/node':
- optional: true
- esbuild-register:
- optional: true
- ts-node:
- optional: true
- jest-diff@30.2.0:
- resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
- jest-docblock@30.2.0:
- resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- jest-each@30.2.0:
- resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ json-schema-to-typescript-lite@15.0.0:
+ resolution: {integrity: sha512-5mMORSQm9oTLyjM4mWnyNBi2T042Fhg1/0gCIB6X8U/LVpM2A+Nmj2yEyArqVouDmFThDxpEXcnTgSrjkGJRFA==}
- jest-environment-jsdom@30.2.0:
- resolution: {integrity: sha512-zbBTiqr2Vl78pKp/laGBREYzbZx9ZtqPjOK4++lL4BNDhxRnahg51HtoDrk9/VjIy9IthNEWdKVd7H5bqBhiWQ==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- peerDependencies:
- canvas: ^3.0.0
- peerDependenciesMeta:
- canvas:
- optional: true
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
- jest-environment-node@30.2.0:
- resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
- jest-haste-map@30.2.0:
- resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
- jest-leak-detector@30.2.0:
- resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
- jest-matcher-utils@30.2.0:
- resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- jest-message-util@30.2.0:
- resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ keyv@5.6.0:
+ resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==}
- jest-mock@30.2.0:
- resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
- jest-pnp-resolver@1.2.3:
- resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
- peerDependencies:
- jest-resolve: '*'
- peerDependenciesMeta:
- jest-resolve:
- optional: true
- jest-regex-util@30.0.1:
- resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ klona@2.0.6:
+ resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
+ engines: {node: '>= 8'}
- jest-resolve-dependencies@30.2.0:
- resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ knitwork@1.3.0:
+ resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==}
- jest-resolve@30.2.0:
- resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ launch-editor@2.14.1:
+ resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==}
- jest-runner@30.2.0:
- resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ lazystream@1.0.1:
+ resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
+ engines: {node: '>= 0.6.3'}
- jest-runtime@30.2.0:
- resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
- jest-snapshot@30.2.0:
- resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ lib0@0.2.117:
+ resolution: {integrity: sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==}
+ engines: {node: '>=16'}
+ hasBin: true
- jest-util@29.7.0:
- resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ libphonenumber-js@1.13.3:
+ resolution: {integrity: sha512-xMkdAMqcyG7iN2WZZmGIfWbYxW4orRkny+0/AXIbwL0xll2zkDX0Vzo/BXFa6+7mh2UvJl9MbcTtHk0YXkFtBA==}
- jest-util@30.2.0:
- resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ lighthouse-logger@2.0.2:
+ resolution: {integrity: sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==}
- jest-validate@30.2.0:
- resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
- jest-watcher@30.2.0:
- resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ lightningcss-android-arm64@1.33.0:
+ resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
- jest-worker@26.6.2:
- resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
- engines: {node: '>= 10.13.0'}
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
- jest-worker@27.5.1:
- resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
- engines: {node: '>= 10.13.0'}
+ lightningcss-darwin-arm64@1.33.0:
+ resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
- jest-worker@29.7.0:
- resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
- jest-worker@30.2.0:
- resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ lightningcss-darwin-x64@1.33.0:
+ resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
- jest@30.2.0:
- resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- hasBin: true
- peerDependencies:
- node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
- peerDependenciesMeta:
- node-notifier:
- optional: true
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
- jiti@1.20.0:
- resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==}
- hasBin: true
+ lightningcss-freebsd-x64@1.33.0:
+ resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
- jiti@1.21.0:
- resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
- hasBin: true
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
- jiti@1.21.6:
- resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
- hasBin: true
-
- jiti@2.6.1:
- resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
- hasBin: true
-
- jose@2.0.7:
- resolution: {integrity: sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg==}
- engines: {node: '>=10.13.0 < 13 || >=13.7.0'}
-
- js-beautify@1.14.9:
- resolution: {integrity: sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==}
- engines: {node: '>=12'}
- hasBin: true
-
- js-tokens@3.0.2:
- resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==}
-
- js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
- js-tokens@9.0.0:
- resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==}
-
- js-yaml@3.14.1:
- resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
- hasBin: true
-
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
- hasBin: true
-
- jsdom@26.1.0:
- resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==}
- engines: {node: '>=18'}
- peerDependencies:
- canvas: ^3.0.0
- peerDependenciesMeta:
- canvas:
- optional: true
-
- jsesc@0.5.0:
- resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
- hasBin: true
-
- jsesc@2.5.2:
- resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
- engines: {node: '>=4'}
- hasBin: true
-
- jsesc@3.1.0:
- resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
- engines: {node: '>=6'}
- hasBin: true
-
- json-bigint@1.0.0:
- resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==}
-
- json-buffer@3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-
- json-parse-better-errors@1.0.2:
- resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
-
- json-parse-even-better-errors@2.3.1:
- resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
-
- json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-
- json-schema-traverse@1.0.0:
- resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
-
- json-stable-stringify-without-jsonify@1.0.1:
- resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
-
- json5@0.5.1:
- resolution: {integrity: sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==}
- hasBin: true
-
- json5@1.0.2:
- resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
- hasBin: true
-
- json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
-
- jsonfile@4.0.0:
- resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
-
- jsonfile@6.1.0:
- resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
-
- jsonparse@1.3.1:
- resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
- engines: {'0': node >= 0.2.0}
-
- jsonwebtoken@8.5.1:
- resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==}
- engines: {node: '>=4', npm: '>=1.4.28'}
-
- jwa@1.4.1:
- resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==}
-
- jwa@2.0.0:
- resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==}
-
- jwks-rsa@2.1.5:
- resolution: {integrity: sha512-IODtn1SwEm7n6GQZnQLY0oxKDrMh7n/jRH1MzE8mlxWMrh2NnMyOsXTebu8vJ1qCpmuTJcL4DdiE0E4h8jnwsA==}
- engines: {node: '>=10 < 13 || >=14'}
-
- jws@3.2.2:
- resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==}
-
- jws@4.0.0:
- resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==}
-
- keyv@4.5.3:
- resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==}
-
- kind-of@3.2.2:
- resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
- engines: {node: '>=0.10.0'}
+ lightningcss-linux-arm-gnueabihf@1.33.0:
+ resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
- kind-of@4.0.0:
- resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==}
- engines: {node: '>=0.10.0'}
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- kind-of@5.1.0:
- resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==}
- engines: {node: '>=0.10.0'}
+ lightningcss-linux-arm64-gnu@1.33.0:
+ resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- kind-of@6.0.3:
- resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
- engines: {node: '>=0.10.0'}
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- klona@2.0.6:
- resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
- engines: {node: '>= 8'}
+ lightningcss-linux-arm64-musl@1.33.0:
+ resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- knitwork@1.0.0:
- resolution: {integrity: sha512-dWl0Dbjm6Xm+kDxhPQJsCBTxrJzuGl0aP9rhr+TG8D3l+GL90N8O8lYUi7dTSAN2uuDqCtNgb6aEuQH5wsiV8Q==}
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- knitwork@1.1.0:
- resolution: {integrity: sha512-oHnmiBUVHz1V+URE77PNot2lv3QiYU2zQf1JjOVkMt3YDKGbu8NAFr+c4mcNOhdsGrB/VpVbRwPwhiXrPhxQbw==}
+ lightningcss-linux-x64-gnu@1.33.0:
+ resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- known-css-properties@0.29.0:
- resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==}
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- last-call-webpack-plugin@3.0.0:
- resolution: {integrity: sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==}
+ lightningcss-linux-x64-musl@1.33.0:
+ resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- launch-editor-middleware@2.8.0:
- resolution: {integrity: sha512-0Az27jnPR2RgkUoZoLHluM5gg9zHeg7hPsUZESJxcTV8Rs6Fed+Nof7Lb2HmpsE8lN/3YzpU+mvK5exYWSftWw==}
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
- launch-editor@2.8.0:
- resolution: {integrity: sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==}
+ lightningcss-win32-arm64-msvc@1.33.0:
+ resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
- leven@3.1.0:
- resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
- engines: {node: '>=6'}
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
- levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
+ lightningcss-win32-x64-msvc@1.33.0:
+ resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
- libphonenumber-js@1.12.9:
- resolution: {integrity: sha512-VWwAdNeJgN7jFOD+wN4qx83DTPMVPPAUyx9/TUkBXKLiNkuWWk6anV0439tgdtwaJDrEdqkvdN22iA6J4bUCZg==}
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
- lilconfig@2.1.0:
- resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
- engines: {node: '>=10'}
+ lightningcss@1.33.0:
+ resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==}
+ engines: {node: '>= 12.0.0'}
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
- limiter@1.1.5:
- resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==}
-
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- lint-staged@16.1.4:
- resolution: {integrity: sha512-xy7rnzQrhTVGKMpv6+bmIA3C0yET31x8OhKBYfvGo0/byeZ6E0BjGARrir3Kg/RhhYHutpsi01+2J5IpfVoueA==}
- engines: {node: '>=20.17'}
- hasBin: true
-
- listr2@9.0.1:
- resolution: {integrity: sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==}
- engines: {node: '>=20.0.0'}
+ linkifyjs@4.3.3:
+ resolution: {integrity: sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==}
- loader-runner@2.4.0:
- resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==}
- engines: {node: '>=4.3.0 <5.0.0 || >=5.10'}
+ lint-staged@17.0.8:
+ resolution: {integrity: sha512-B2P/d+jVW0UXOQ0MVMLrB/9ydA1P+zz6jYfdrbbEd9ur3S2rcbduFWKiUCC02Sm5hbC8nrm7y24WuYMG54HfxA==}
+ engines: {node: '>=22.22.1'}
+ hasBin: true
- loader-runner@4.3.0:
- resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
- engines: {node: '>=6.11.5'}
+ listhen@1.10.1:
+ resolution: {integrity: sha512-6nt/86SkqUQSLW1ofz8MxC6RhRMqOl3ONISe6qqvJ3xj09aJWQx6DhgSZpugs3PX4PXdOas/WD6A9jx6J2N19A==}
+ hasBin: true
+ peerDependencies:
+ '@parcel/watcher': ^2.5.6
+ peerDependenciesMeta:
+ '@parcel/watcher':
+ optional: true
- loader-utils@1.4.2:
- resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
- engines: {node: '>=4.0.0'}
+ listr2@10.2.1:
+ resolution: {integrity: sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==}
+ engines: {node: '>=22.13.0'}
- loader-utils@2.0.4:
- resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
- engines: {node: '>=8.9.0'}
+ load-tsconfig@0.2.5:
+ resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- local-pkg@0.4.3:
- resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
- engines: {node: '>=14'}
+ loader-utils@3.3.1:
+ resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
+ engines: {node: '>= 12.13.0'}
- local-pkg@0.5.0:
- resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
+ local-pkg@1.2.1:
+ resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==}
engines: {node: '>=14'}
- locate-path@3.0.0:
- resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
- engines: {node: '>=6'}
-
locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
@@ -5996,215 +5415,82 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
- locate-path@7.2.0:
- resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- lodash._reinterpolate@3.0.0:
- resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==}
+ locate-path@8.0.0:
+ resolution: {integrity: sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==}
+ engines: {node: '>=20'}
lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
- lodash.clonedeep@4.5.0:
- resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
-
- lodash.debounce@4.0.8:
- resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
-
- lodash.includes@4.3.0:
- resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==}
-
- lodash.isboolean@3.0.3:
- resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==}
-
- lodash.isinteger@4.0.4:
- resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==}
-
- lodash.isnumber@3.0.3:
- resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==}
-
- lodash.isplainobject@4.0.6:
- resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
-
- lodash.isstring@4.0.1:
- resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==}
-
- lodash.kebabcase@4.1.1:
- resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
-
- lodash.memoize@4.1.2:
- resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
-
- lodash.merge@4.6.2:
- resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-
- lodash.mergewith@4.6.2:
- resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
-
- lodash.once@4.1.1:
- resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
-
- lodash.snakecase@4.1.1:
- resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
-
- lodash.startcase@4.4.0:
- resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
-
- lodash.template@4.5.0:
- resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==}
- deprecated: This package is deprecated. Use https://socket.dev/npm/package/eta instead.
-
- lodash.templatesettings@4.2.0:
- resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==}
-
lodash.truncate@4.4.2:
resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==}
- lodash.unionby@4.8.0:
- resolution: {integrity: sha512-e60kn4GJIunNkw6v9MxRnUuLYI/Tyuanch7ozoCtk/1irJTYBj+qNTxr5B3qVflmJhwStJBv387Cb+9VOfABMg==}
-
- lodash.uniq@4.5.0:
- resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
-
- lodash.upperfirst@4.3.1:
- resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
-
- lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ lodash@4.18.1:
+ resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
log-update@6.1.0:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
- long@4.0.0:
- resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==}
-
- long@5.2.3:
- resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==}
-
- loose-envify@1.4.0:
- resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
- hasBin: true
-
- lower-case@2.0.2:
- resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
+ long@5.3.2:
+ resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@4.0.2:
- resolution: {integrity: sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==}
-
- lru-cache@4.1.5:
- resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
+ lru-cache@11.5.2:
+ resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==}
+ engines: {node: 20 || >=22}
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
- lru-cache@6.0.0:
- resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
- engines: {node: '>=10'}
-
- lru-memoizer@2.2.0:
- resolution: {integrity: sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw==}
-
- magic-string@0.30.10:
- resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==}
-
- magic-string@0.30.4:
- resolution: {integrity: sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==}
- engines: {node: '>=12'}
-
- make-dir@1.3.0:
- resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
- engines: {node: '>=4'}
-
- make-dir@2.1.0:
- resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
- engines: {node: '>=6'}
-
- make-dir@3.1.0:
- resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
- engines: {node: '>=8'}
-
- make-dir@4.0.0:
- resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
- engines: {node: '>=10'}
-
- make-error@1.3.6:
- resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
-
- makeerror@1.0.12:
- resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
-
- map-cache@0.2.2:
- resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
- engines: {node: '>=0.10.0'}
+ magic-regexp@0.10.0:
+ resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==}
- map-obj@1.0.1:
- resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
- engines: {node: '>=0.10.0'}
+ magic-string-ast@1.0.3:
+ resolution: {integrity: sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==}
+ engines: {node: '>=20.19.0'}
- map-obj@4.3.0:
- resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
- engines: {node: '>=8'}
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
- map-visit@1.0.0:
- resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==}
- engines: {node: '>=0.10.0'}
+ magic-string@1.1.0:
+ resolution: {integrity: sha512-kS3VHe0nEPST2saQV4Rbkchcd3UBRkVTQHo1D3h/ZTwFDhai/mfKkmtPAtD129EOI7K3HlHIsFOt0WrI2/oU9g==}
- markdown-table@2.0.0:
- resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==}
+ magicast@0.5.3:
+ resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==}
- material-design-lite@1.3.0:
- resolution: {integrity: sha512-ao76b0bqSTKcEMt7Pui+J/S3eVF0b3GWfuKUwfe2lP5DKlLZOwBq37e0/bXEzxrw7/SuHAuYAdoCwY6mAYhrsg==}
- engines: {node: '>=0.12.0'}
+ magicast@0.5.4:
+ resolution: {integrity: sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==}
- math-intrinsics@1.1.0:
- resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
- engines: {node: '>= 0.4'}
+ marked@17.0.6:
+ resolution: {integrity: sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==}
+ engines: {node: '>= 20'}
+ hasBin: true
- mathml-tag-names@2.1.3:
- resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==}
+ marky@1.3.0:
+ resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==}
- md5.js@1.3.5:
- resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
+ mathml-tag-names@4.0.0:
+ resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==}
- mdn-data@2.0.14:
- resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
- mdn-data@2.0.30:
- resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
-
- memfs@3.5.3:
- resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
- engines: {node: '>= 4.0.0'}
+ mdn-data@2.27.1:
+ resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==}
- memfs@4.9.3:
- resolution: {integrity: sha512-bsYSSnirtYTWi1+OPMFb0M048evMKyUYe0EbtuGQgq6BVQM1g1W8/KIUJCCvjgI/El0j6Q4WsmMiBwLUBSw8LA==}
- engines: {node: '>= 4.0.0'}
-
- memory-fs@0.4.1:
- resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==}
-
- memory-fs@0.5.0:
- resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==}
- engines: {node: '>=4.3.0 <5.0.0 || >=5.10'}
-
- meow@10.1.5:
- resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- meow@12.1.1:
- resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
- engines: {node: '>=16.10'}
+ meow@13.2.0:
+ resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
+ engines: {node: '>=18'}
- merge-source-map@1.1.0:
- resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==}
+ meow@14.1.0:
+ resolution: {integrity: sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==}
+ engines: {node: '>=20'}
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -6213,53 +5499,38 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- micromatch@3.1.10:
- resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==}
- engines: {node: '>=0.10.0'}
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
- micromatch@4.0.5:
- resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
- engines: {node: '>=8.6'}
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
+
+ micromark-util-types@2.0.2:
+ resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
- miller-rabin@4.0.1:
- resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
- hasBin: true
-
- mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
-
mime-db@1.54.0:
resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
engines: {node: '>= 0.6'}
- mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
-
- mime@1.6.0:
- resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
- engines: {node: '>=4'}
- hasBin: true
-
- mime@2.5.2:
- resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==}
- engines: {node: '>=4.0.0'}
- hasBin: true
+ mime-types@3.0.2:
+ resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
+ engines: {node: '>=18'}
- mime@3.0.0:
- resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
- engines: {node: '>=10.0.0'}
+ mime@4.1.0:
+ resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==}
+ engines: {node: '>=16'}
hasBin: true
- mimic-fn@2.1.0:
- resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
- engines: {node: '>=6'}
-
mimic-fn@4.0.0:
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines: {node: '>=12'}
@@ -6268,172 +5539,97 @@ packages:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
- min-indent@1.0.1:
- resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
- engines: {node: '>=4'}
-
- minimalistic-assert@1.0.1:
- resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
-
- minimalistic-crypto-utils@1.0.1:
- resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
+ minimatch@10.2.5:
+ resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
+ engines: {node: 18 || 20 || >=22}
- minimatch@3.0.8:
- resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==}
+ minimatch@10.2.6:
+ resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==}
+ engines: {node: 18 || 20 || >=22}
- minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
-
- minimatch@5.1.6:
- resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ minimatch@5.1.9:
+ resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==}
engines: {node: '>=10'}
- minimatch@9.0.1:
- resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ minimatch@9.0.9:
+ resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
engines: {node: '>=16 || 14 >=14.17'}
- minimist-options@4.1.0:
- resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
- engines: {node: '>= 6'}
-
- minimist@1.2.8:
- resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
- minipass-collect@1.0.2:
- resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==}
- engines: {node: '>= 8'}
-
- minipass-flush@1.0.5:
- resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
- engines: {node: '>= 8'}
-
- minipass-pipeline@1.2.4:
- resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
- engines: {node: '>=8'}
-
- minipass@3.3.6:
- resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
- engines: {node: '>=8'}
-
- minipass@5.0.0:
- resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
- engines: {node: '>=8'}
-
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ minipass@7.1.3:
+ resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
engines: {node: '>=16 || 14 >=14.17'}
- minizlib@2.1.2:
- resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
- engines: {node: '>= 8'}
-
- mississippi@3.0.0:
- resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==}
- engines: {node: '>=4.0.0'}
+ minizlib@3.1.0:
+ resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
+ engines: {node: '>= 18'}
- mixin-deep@1.3.2:
- resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
- engines: {node: '>=0.10.0'}
-
- mkdirp@0.5.6:
- resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
- hasBin: true
-
- mkdirp@1.0.4:
- resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
- engines: {node: '>=10'}
- hasBin: true
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
- mlly@1.4.2:
- resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==}
+ mlly@1.8.2:
+ resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
- mlly@1.7.1:
- resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==}
-
- mlly@1.7.3:
- resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==}
+ mocked-exports@0.1.1:
+ resolution: {integrity: sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==}
moment@2.30.1:
resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
- move-concurrently@1.0.1:
- resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==}
- deprecated: This package is no longer supported.
-
- mri@1.2.0:
- resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
- engines: {node: '>=4'}
+ motion-dom@12.42.2:
+ resolution: {integrity: sha512-5gIMWLp/PycBtJRJWRgjxke5n8dlvkSn2DrYW+tr3XcqAZY1xZh6BJyooJXCM8wdfM7wfMjkBJNLge1CKPUIRA==}
- mrmime@1.0.1:
- resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
- engines: {node: '>=10'}
+ motion-utils@12.39.0:
+ resolution: {integrity: sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==}
- ms@2.0.0:
- resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+ motion-v@2.3.0:
+ resolution: {integrity: sha512-J0CCfXtICCni9RjotDUBOs57xNpYI9yyBSohEOxaRHrmjwOtlw291fhRu/mdgEdSasys96R028YDDOAtWBbRaA==}
+ peerDependencies:
+ '@vueuse/core': '>=10.0.0'
+ vue: '>=3.0.0'
- ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+ mrmime@2.0.1:
+ resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
+ engines: {node: '>=10'}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- mustache@2.3.2:
- resolution: {integrity: sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==}
- engines: {npm: '>=1.4.0'}
- hasBin: true
-
- mute-stream@0.0.8:
- resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
-
- nan@2.18.0:
- resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==}
-
- nano-spawn@1.0.2:
- resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==}
- engines: {node: '>=20.17'}
+ muggle-string@0.4.1:
+ resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ nanoid@3.3.12:
+ resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanoid@3.3.8:
- resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
+ nanoid@3.3.17:
+ resolution: {integrity: sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanomatch@1.2.13:
- resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
- engines: {node: '>=0.10.0'}
+ nanotar@0.3.0:
+ resolution: {integrity: sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==}
- napi-postinstall@0.3.3:
- resolution: {integrity: sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==}
+ napi-postinstall@0.3.4:
+ resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
hasBin: true
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
- negotiator@0.6.3:
- resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
- engines: {node: '>= 0.6'}
-
- neo-async@2.6.2:
- resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
-
- no-case@3.0.4:
- resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
- node-addon-api@1.7.2:
- resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==}
+ nitropack@2.13.4:
+ resolution: {integrity: sha512-tX7bT6zxNeMwkc6hxHiZeUoTOjVrcjoh1Z3cmxOlodIqjl4HISgqfGOmkWSayky3Nv9Z5+KQH52F8nmXJY5AAA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ xml2js: ^0.6.2
+ peerDependenciesMeta:
+ xml2js:
+ optional: true
- node-cache@4.2.1:
- resolution: {integrity: sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==}
- engines: {node: '>= 0.4.6'}
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
node-fetch-native@1.6.7:
resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
@@ -6447,159 +5643,201 @@ packages:
encoding:
optional: true
- node-forge@1.3.1:
- resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
+ node-forge@1.4.0:
+ resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==}
engines: {node: '>= 6.13.0'}
- node-html-parser@6.1.13:
- resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==}
+ node-gyp-build@4.8.4:
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
+ hasBin: true
+
+ node-mock-http@1.0.5:
+ resolution: {integrity: sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==}
- node-int64@0.4.0:
- resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
+ node-releases@2.0.53:
+ resolution: {integrity: sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==}
+ engines: {node: '>=18'}
- node-libs-browser@2.2.1:
- resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==}
+ nopt@8.1.0:
+ resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
- node-object-hash@1.4.2:
- resolution: {integrity: sha512-UdS4swXs85fCGWWf6t6DMGgpN/vnlKeSGEQ7hJcrs7PBFoxoKLmibc3QRb7fwiYsjdL7PX8iI/TMSlZ90dgHhQ==}
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
- node-releases@2.0.21:
- resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==}
+ nostics@0.2.0:
+ resolution: {integrity: sha512-/WQpI46UMbqvy1okYb+V+9wW3J8/m6GJ33wm691n/tyi6YtJiZ6ssJjENAU7y4evfYrrgYN9HllKDzPvffil1w==}
- node-res@5.0.1:
- resolution: {integrity: sha512-YOleO9c7MAqoHC+Ccu2vzvV1fL6Ku49gShq3PIMKWHRgrMSih3XcwL05NbLBi6oU2J471gTBfdpVVxwT6Pfhxg==}
-
- nopt@6.0.0:
- resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==}
- engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
- hasBin: true
-
- normalize-package-data@2.5.0:
- resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
-
- normalize-package-data@3.0.3:
- resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
- engines: {node: '>=10'}
-
- normalize-path@2.1.1:
- resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==}
- engines: {node: '>=0.10.0'}
-
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
-
- normalize-range@0.1.2:
- resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
- engines: {node: '>=0.10.0'}
-
- normalize-url@1.9.1:
- resolution: {integrity: sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==}
- engines: {node: '>=4'}
-
- normalize-url@6.1.0:
- resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
- engines: {node: '>=10'}
-
- npm-run-path@4.0.1:
- resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
- engines: {node: '>=8'}
+ nostics@1.2.0:
+ resolution: {integrity: sha512-FGqEfhQjrvo1lL8KFifdTQiNwwQHJxC1jtYE1Rc54qF/jxONUNL+kC9gS1krX8Q65PgrQ5fCqH/I4NhWBvdSqg==}
npm-run-path@5.3.0:
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ npm-run-path@6.0.0:
+ resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
+ engines: {node: '>=18'}
+
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- nuxt-highlightjs@1.0.3:
- resolution: {integrity: sha512-3UEEyVYwjN+tg+gFF2fC/K4+xMiGCQlZ+3c19f3MCa5l90JtV7QXfU/2NpTq3yY3BeAgAYSwLVbP1SWOhVsXaw==}
+ nuxt-link-checker@5.1.2:
+ resolution: {integrity: sha512-qnRRT0suYq3xTf4EGQbo0Dx0LShVOMTa3WTULJhhvn/WkpbC95uvDKQAX+/JCME3EPob4ADiy8PPTqsc74Z/ig==}
+ peerDependencies:
+ nuxt: ^3.9.0 || ^4.0.0
- nuxt@2.18.1:
- resolution: {integrity: sha512-SZFOLDKgCfLu23BrQE0YYNWeoi/h+fw07TNDNDzRfbmMvQlStgTBG7lqeELytXdQnaPKWjWAYo12K7pPPRZb9Q==}
- deprecated: Nuxt 2 has reached EOL and is no longer actively maintained. See https://nuxt.com/blog/nuxt2-eol for more details.
+ nuxt-og-image@6.7.2:
+ resolution: {integrity: sha512-+TdTqdimQvMrTxWrvci3hHLxsgP/RhkQQ+4XawLgis9tWpGCxmbdSfrelBr9C0LeQ/vhc7ztSIOzsewcGbLpXw==}
+ engines: {node: '>=18.0.0'}
hasBin: true
+ peerDependencies:
+ '@resvg/resvg-js': ^2.6.0
+ '@resvg/resvg-wasm': ^2.6.0
+ '@takumi-rs/core': ^1.0.0-beta.3 || ^2.0.0-rc.5
+ '@takumi-rs/wasm': ^1.0.0-beta.3 || ^2.0.0-rc.5
+ '@unhead/vue': ^2.0.5 || ^3.0.0
+ fontless: ^0.2.0
+ nitropack: ^2.13.4
+ playwright-core: ^1.50.0
+ satori: '>=0.19.2'
+ sharp: ^0.34.0
+ tailwindcss: ^4.0.0
+ unifont: ^0.7.0
+ unstorage: ^1.15.0
+ zod: '>=3'
+ peerDependenciesMeta:
+ '@resvg/resvg-js':
+ optional: true
+ '@resvg/resvg-wasm':
+ optional: true
+ '@takumi-rs/core':
+ optional: true
+ '@takumi-rs/wasm':
+ optional: true
+ fontless:
+ optional: true
+ nitropack:
+ optional: true
+ playwright-core:
+ optional: true
+ satori:
+ optional: true
+ sharp:
+ optional: true
+ tailwindcss:
+ optional: true
+ unifont:
+ optional: true
+ zod:
+ optional: true
- nwsapi@2.2.22:
- resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==}
+ nuxt-schema-org@6.2.3:
+ resolution: {integrity: sha512-EkiLjx967+ckgSTxDRb1lDLL+AQgsmn1QhW+NRH23r9VtU3MI80hY69/XE5bEnYs0QPRYHRgppF/v9IUZ0XwEQ==}
+ peerDependencies:
+ '@unhead/vue': ^2.0.7 || ^3.0.0
+ unhead: ^2.0.7 || ^3.0.0
+ zod: '>=3'
+ peerDependenciesMeta:
+ '@unhead/vue':
+ optional: true
+ unhead:
+ optional: true
+ zod:
+ optional: true
- nypm@0.3.9:
- resolution: {integrity: sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==}
- engines: {node: ^14.16.0 || >=16.10.0}
+ nuxt-seo-utils@8.3.1:
+ resolution: {integrity: sha512-IChfSk6HYHeeZwTDQB2n/1Yj7jDflCWdeI6ZlElfdanZL673wE56CvAW9B1xrfGRkPalLy49OoLfp8YOzlzR7A==}
hasBin: true
+ peerDependencies:
+ '@unhead/vue': ^2.0.7 || ^3.0.0
+ esbuild: '>=0.17.0'
+ lightningcss: '>=1.20.0'
+ nuxt: ^3.0.0 || ^4.0.0
+ rolldown: '>=1.0.0-beta.0'
+ unhead: ^2.0.7 || ^3.0.0
+ peerDependenciesMeta:
+ '@unhead/vue':
+ optional: true
+ esbuild:
+ optional: true
+ lightningcss:
+ optional: true
+ rolldown:
+ optional: true
+ unhead:
+ optional: true
- object-assign@4.1.1:
- resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
- engines: {node: '>=0.10.0'}
-
- object-copy@0.1.0:
- resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
- engines: {node: '>=0.10.0'}
-
- object-hash@3.0.0:
- resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
- engines: {node: '>= 6'}
+ nuxt-site-config-kit@4.1.1:
+ resolution: {integrity: sha512-xa341q3+RbpfNNKTwQ2Nsn980WZqF3zZPIR4PlF0xsm2M8Qfxtuaa1I7wMq6/fg/E2J9IyUm0DQ+B4mnKtMs4Q==}
- object-inspect@1.12.3:
- resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
+ nuxt-site-config@4.1.1:
+ resolution: {integrity: sha512-hYf7YtYng5fsuxeAH5hE11sC/Q18pPa8MOULYS2GKb9KjIMiK+d57mDIU/8i4AabVyxrYKJkNuqIg/c4dWrYAw==}
- object-keys@1.1.1:
- resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
- engines: {node: '>= 0.4'}
+ nuxt@4.5.1:
+ resolution: {integrity: sha512-bDfkB3VKenF7diLS+r6hBGjW/5hyH35q2xHZ355jEYuD1/dVC/3DW8yW8P+8p+Qk8MX+J0TmD66+jxnCandEpA==}
+ engines: {node: ^22.19.0 || ^24.11.0 || >=26.0.0}
+ hasBin: true
+ peerDependencies:
+ '@parcel/watcher': ^2.1.0
+ '@types/node': '>=18.12.0'
+ peerDependenciesMeta:
+ '@parcel/watcher':
+ optional: true
+ '@types/node':
+ optional: true
- object-visit@1.0.1:
- resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==}
- engines: {node: '>=0.10.0'}
+ nuxtseo-layer-devtools@5.3.2:
+ resolution: {integrity: sha512-fXWMKHJqmRxOyissWW10Jgc4dSD4Z8BrjJ/rDjF68esn62fotXwaW9aLpBSrm28NVb0SpLdJlJ2IgmF4jc2sdw==}
- object.assign@4.1.4:
- resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
- engines: {node: '>= 0.4'}
+ nuxtseo-shared@5.3.2:
+ resolution: {integrity: sha512-0A+oVQJUvcNKFqB/lzhG5+YhthZmrpzRv2os0LRsPbGNXwj1w3qUbmd0d7SRIP80cto1lKhZfSNZ/HxoCsbI4A==}
+ peerDependencies:
+ '@nuxt/schema': ^3.16.0 || ^4.0.0
+ nuxt: ^3.16.0 || ^4.0.0
+ nuxt-site-config: ^3.2.0 || ^4.0.0
+ vue: ^3.5.0
+ zod: ^3.23.0 || ^4.0.0
+ peerDependenciesMeta:
+ nuxt-site-config:
+ optional: true
+ zod:
+ optional: true
- object.fromentries@2.0.7:
- resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
- engines: {node: '>= 0.4'}
+ nypm@0.6.9:
+ resolution: {integrity: sha512-zxlE2yvSWZWmHcNdT3+5zV2lrCogeE9YOklHrR3dFjqutq5wO7GFDYLFDRXLsYnJzwvy/im9fYoxePvS0VTW0w==}
+ engines: {node: '>=18'}
+ hasBin: true
- object.getownpropertydescriptors@2.1.7:
- resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==}
- engines: {node: '>= 0.8'}
+ object-deep-merge@2.0.1:
+ resolution: {integrity: sha512-aKttDKcU3pyZqKcCkDhsMn70WmZFG2JGDQLP9EcLyTSIFQRCPWLAmBZRLJnrVUrhPG1jETEEbfdgbNtJf1LyMg==}
- object.groupby@1.0.1:
- resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==}
+ object-identity@0.2.3:
+ resolution: {integrity: sha512-2J8Joz2Tf7aaylhqFvIUJHNgpuGR38Hh75Voq9GzTbStBxJUaOtN0K1aOd3cV5qp+ij1pMqRbPrGCGMOyX303w==}
- object.pick@1.3.0:
- resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
- engines: {node: '>=0.10.0'}
+ obug@2.1.4:
+ resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==}
+ engines: {node: '>=12.20.0'}
- object.values@1.1.7:
- resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
- engines: {node: '>= 0.4'}
+ ofetch@1.5.1:
+ resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
- ohash@1.1.3:
- resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==}
+ ofetch@2.0.0-alpha.3:
+ resolution: {integrity: sha512-zpYTCs2byOuft65vI3z43Dd6iSdFbOZZLb9/d21aCpx2rGastVU9dOCv0lu4ykc1Ur1anAYjDi3SUvR0vq50JA==}
- ohash@1.1.4:
- resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==}
+ ohash@2.0.11:
+ resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
- on-finished@2.3.0:
- resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
- engines: {node: '>= 0.8'}
+ on-change@6.0.2:
+ resolution: {integrity: sha512-08+12qcOVEA0fS9g/VxKS27HaT94nRutUT77J2dr8zv/unzXopvhBuF8tNLWsoLQ5IgrQ6eptGeGqUYat82U1w==}
+ engines: {node: '>=20'}
on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
- on-headers@1.0.2:
- resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
- engines: {node: '>= 0.8'}
-
- once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
- onetime@5.1.2:
- resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
- engines: {node: '>=6'}
-
onetime@6.0.0:
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
engines: {node: '>=12'}
@@ -6608,25 +5846,48 @@ packages:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
- opener@1.5.2:
- resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
- hasBin: true
+ oniguruma-parser@0.12.2:
+ resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==}
- optimize-css-assets-webpack-plugin@6.0.1:
- resolution: {integrity: sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==}
- peerDependencies:
- webpack: ^4.0.0
+ oniguruma-to-es@4.3.6:
+ resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==}
- optionator@0.9.3:
- resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
+ open@11.0.0:
+ resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==}
+ engines: {node: '>=20'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
- os-browserify@0.3.0:
- resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==}
+ orderedmap@2.1.1:
+ resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
- os-tmpdir@1.0.2:
- resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
- engines: {node: '>=0.10.0'}
+ oxc-parser@0.132.0:
+ resolution: {integrity: sha512-+0LAPHaqtfQlvWdpaAa09SmOaZZgP8C552xosEkGJ4+ruEwP1Vgx+sqBgcBCNfR6KDCmagGOZTde8wmAvcI/Hg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-parser@0.137.0:
+ resolution: {integrity: sha512-yFImD+WLElJpLKy8llG1qe4DCmMsL18peRp8XP1JKfig/gISbJkglnpDtX2aTmAn10kZF7164HbN2H8QPsXxGg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-parser@0.138.0:
+ resolution: {integrity: sha512-c25lvfpZ2+WY1yk6NkP0X0RTQg0ZxgSVaZHDa7lt6fEe1jwZjPWkRWvTyZ1xyaM7roVJMdtRCfbhUj/d4ims3Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-walker@1.1.1:
+ resolution: {integrity: sha512-Hwd7dq28zu/Er99+bpWp16CGwFrhyalJh0W3JOB7XpPvgWo3MqMi2ksWGKuzzA9zt50mJ2pIUwR5lpAdZ9ACNQ==}
+ peerDependencies:
+ '@oxc-project/types': '>=0.98.0'
+ oxc-parser: '>=0.98.0'
+ rolldown: '>=1.0.0'
+ peerDependenciesMeta:
+ '@oxc-project/types':
+ optional: true
+ oxc-parser:
+ optional: true
+ rolldown:
+ optional: true
p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
@@ -6640,10 +5901,6 @@ packages:
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- p-locate@3.0.0:
- resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
- engines: {node: '>=6'}
-
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
@@ -6656,10 +5913,6 @@ packages:
resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- p-map@4.0.0:
- resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
- engines: {node: '>=10'}
-
p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
@@ -6667,75 +5920,34 @@ packages:
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
- pako@1.0.11:
- resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
-
- parallel-transform@1.2.0:
- resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==}
-
- param-case@3.0.4:
- resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
+ package-manager-detector@1.6.0:
+ resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
- parse-asn1@5.1.6:
- resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==}
-
- parse-git-config@3.0.0:
- resolution: {integrity: sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==}
- engines: {node: '>=8'}
-
- parse-json@4.0.0:
- resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
- engines: {node: '>=4'}
+ parse-imports-exports@0.2.4:
+ resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
- parse-path@7.0.0:
- resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==}
-
- parse-url@8.1.0:
- resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==}
-
- parse5@7.3.0:
- resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+ parse-statements@1.0.11:
+ resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
- pascal-case@3.1.2:
- resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
-
- pascalcase@0.1.1:
- resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
- engines: {node: '>=0.10.0'}
-
- path-browserify@0.0.1:
- resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==}
-
- path-dirname@1.0.2:
- resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==}
-
- path-exists@3.0.0:
- resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
- engines: {node: '>=4'}
-
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
- path-exists@5.0.0:
- resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- path-is-absolute@1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
+ path-expression-matcher@1.6.1:
+ resolution: {integrity: sha512-h7bxdzhHk8Knyc4Tj+jMaa7fEEoUJy7p1qtbVgkYg1Uhpe5Np5VuGXCRZnkZvU+Q42M1vStt0ifa3ueykRJPmQ==}
+ engines: {node: '>=14.0.0'}
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
@@ -6752,85 +5964,51 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
- path-type@4.0.0:
- resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
- engines: {node: '>=8'}
-
- path-type@5.0.0:
- resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==}
- engines: {node: '>=12'}
-
- pathe@1.1.1:
- resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==}
+ path-scurry@2.0.2:
+ resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
+ engines: {node: 18 || 20 || >=22}
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
- pbkdf2@3.1.2:
- resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
- engines: {node: '>=0.12'}
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
perfect-debounce@1.0.0:
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
- picocolors@0.2.1:
- resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==}
-
- picocolors@1.0.0:
- resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
-
- picocolors@1.0.1:
- resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+ perfect-debounce@2.1.0:
+ resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ picomatch@2.3.2:
+ resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==}
engines: {node: '>=8.6'}
- picomatch@4.0.3:
- resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
engines: {node: '>=12'}
- pidtree@0.6.0:
- resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
- engines: {node: '>=0.10'}
- hasBin: true
-
- pify@2.3.0:
- resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
- engines: {node: '>=0.10.0'}
-
- pify@3.0.0:
- resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
- engines: {node: '>=4'}
-
- pify@4.0.1:
- resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
- engines: {node: '>=6'}
-
- pify@5.0.0:
- resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==}
- engines: {node: '>=10'}
-
- pirates@4.0.7:
- resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
- engines: {node: '>= 6'}
-
- pkg-dir@3.0.0:
- resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==}
- engines: {node: '>=6'}
+ picomatch@4.0.5:
+ resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==}
+ engines: {node: '>=12'}
- pkg-dir@4.2.0:
- resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
- engines: {node: '>=8'}
+ pinia@3.0.4:
+ resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==}
+ peerDependencies:
+ typescript: '>=4.5.0'
+ vue: ^3.5.11
+ peerDependenciesMeta:
+ typescript:
+ optional: true
- pkg-types@1.1.2:
- resolution: {integrity: sha512-VEGf1he2DR5yowYRl0XJhWJq5ktm9gYIsH+y8sNJpHlxch7JPDaufgrsl4vYjd9hMUY8QVjoNncKbow9I7exyA==}
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
- pkg-types@1.2.1:
- resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==}
+ pkg-types@2.3.1:
+ resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==}
pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
@@ -6840,835 +6018,362 @@ packages:
resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
engines: {node: '>=10.13.0'}
- pnp-webpack-plugin@1.7.0:
- resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==}
- engines: {node: '>=6'}
-
- posix-character-classes@0.1.1:
- resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==}
- engines: {node: '>=0.10.0'}
-
- postcss-attribute-case-insensitive@6.0.3:
- resolution: {integrity: sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
-
- postcss-calc@10.0.0:
- resolution: {integrity: sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==}
+ postcss-calc@10.1.1:
+ resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==}
engines: {node: ^18.12 || ^20.9 || >=22.0}
peerDependencies:
postcss: ^8.4.38
- postcss-calc@8.2.4:
- resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==}
+ postcss-colormin@8.0.2:
+ resolution: {integrity: sha512-3puH3etbn8GPaJuF8OybCdUW6PJO0KU9ZnsaA/1VG9HU0Wdrf94dOTQkbQnA8/qkYdPjwHzcWvzUGXIeawBa0w==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.2.2
+ postcss: ^8.5.25
- postcss-clamp@4.1.0:
- resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==}
- engines: {node: '>=7.6.0'}
+ postcss-convert-values@8.0.2:
+ resolution: {integrity: sha512-KA6VVp93xASmDI0HWgRQ7938XR20hZEVL525YCbcTVsuxn4BNxs+ge4wLNow+ay+uqPuy3uEh51zhjfI92uN4w==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4.6
+ postcss: ^8.5.25
- postcss-color-functional-notation@6.0.12:
- resolution: {integrity: sha512-LGLWl6EDofJwDHMElYvt4YU9AeH+oijzOfeKhE0ebuu0aBSDeEg7CfFXMi0iiXWV1VKxn3MLGOtcBNnOiQS9Yg==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-discard-comments@8.0.2:
+ resolution: {integrity: sha512-tQk36szZkG9ngZM9bKrUp3hM2SxdclYJVnMtAMKyi0RqY7IQpx67TJ3+0thRMV47niKBw9Y/1auGkBeCfPC97A==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-color-hex-alpha@9.0.4:
- resolution: {integrity: sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-discard-duplicates@8.0.2:
+ resolution: {integrity: sha512-Y2IDdRqvnpzsOH5ZLcJnvh/Eiye8O3r6uO7oFTe3YuFfrat3xQRDPjTVohRmi8RWuOIq2rGjva1n4Adus4pljw==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-color-rebeccapurple@9.0.3:
- resolution: {integrity: sha512-ruBqzEFDYHrcVq3FnW3XHgwRqVMrtEPLBtD7K2YmsLKVc2jbkxzzNEctJKsPCpDZ+LeMHLKRDoSShVefGc+CkQ==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-discard-empty@8.0.2:
+ resolution: {integrity: sha512-fGHTnqg2S4fBudyd+tCE+qT57R4YRUaYLannCrKYsE8u/rCMGCBMPwIM4jcNWJLP5vMEBitGrXa5mGB7VKA+Eg==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-colormin@5.3.1:
- resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==}
- engines: {node: ^10 || ^12 || >=14.0}
+ postcss-discard-overridden@8.0.2:
+ resolution: {integrity: sha512-a9Dvv5ccOI7P94oCaeytj4FCSsHiXyH8KwXQorU/GJWDRvwFMY9yUs4uPKSG2HBSGtR49xo3ieml6F1EQCJtZA==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.2.15
+ postcss: ^8.5.25
- postcss-colormin@7.0.1:
- resolution: {integrity: sha512-uszdT0dULt3FQs47G5UHCduYK+FnkLYlpu1HpWu061eGsKZ7setoG7kA+WC9NQLsOJf69D5TxGHgnAdRgylnFQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ postcss-html@1.8.1:
+ resolution: {integrity: sha512-OLF6P7qctfAWayOhLpcVnTGqVeJzu2W3WpIYelfz2+JV5oGxfkcEvweN9U4XpeqE0P98dcD9ssusGwlF0TK0uQ==}
+ engines: {node: ^12 || >=14}
- postcss-convert-values@5.1.3:
- resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==}
- engines: {node: ^10 || ^12 || >=14.0}
+ postcss-merge-longhand@8.0.2:
+ resolution: {integrity: sha512-iN1JQ21vKd3ZdbHmj69lqOwaWiFvxlXVQ5EeH/sw5M3TqI1sFR28G4yleAcNkMwB55E6qGRRVR3lem+ZJazmoQ==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.2.15
+ postcss: ^8.5.25
- postcss-convert-values@7.0.1:
- resolution: {integrity: sha512-9x2ofb+hYPwHWMlWAzyWys2yMDZYGfkX9LodbaVTmLdlupmtH2AGvj8Up95wzzNPRDEzPIxQIkUaPJew3bT6xA==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ postcss-merge-rules@8.0.2:
+ resolution: {integrity: sha512-ipELN1m3k/GLGD+wmYHtiEVE2TMW5OKm4CgSRqYDeDz1ZX89AbeUCoeos0dUdTcpMilSa+zIRwvD78U3Uv/1BA==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4.31
+ postcss: ^8.5.25
- postcss-custom-media@10.0.7:
- resolution: {integrity: sha512-o2k5nnvRZhF36pr1fGFM7a1EMTcNdKNO70Tp1g2lfpYgiwIctR7ic4acBCDHBMYRcQ8mFlaBB1QsEywqrSIaFQ==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-minify-font-values@8.0.2:
+ resolution: {integrity: sha512-T6oURfdYH/BtXLLN/biomuY1hSYSGbfRyLyxQ+7+VCRw7Zj1ROpRwHpaX2PP/rpmT/0yHaGIVUNShmanvm3PXw==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-custom-properties@13.3.11:
- resolution: {integrity: sha512-CAIgz03I/GMhVbAKIi3u3P8j5JY2KHl0TlePcfUX3OUy8t0ynnWvyJaS1D92pEAw1LjmeKWi7+aIU0s53iYdOQ==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-minify-gradients@8.0.2:
+ resolution: {integrity: sha512-s49jAcFm5eF7GLLU0+28e4mQc/vISBMtu+1gQbq/Uf7+w155G8nbItaQp5NYY7QsYerpj2qvtNkYN25gZWWYdw==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-custom-selectors@7.1.11:
- resolution: {integrity: sha512-IoGprXOueDJL5t3ZuWR+QzPpmrQCFNhvoICsg0vDSehGwWNG0YV/Z4A+zouGRonC7NJThoV+A8A74IEMqMQUQw==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-minify-params@8.0.2:
+ resolution: {integrity: sha512-ifaU795JsBddkffWbTOXl8ubUyBqpNiLS8xjqKmE/Sw9AOpjWG2uFPfpEv3AZPXWNkWJf8kGvW9wLHImEUJUkA==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-dir-pseudo-class@8.0.1:
- resolution: {integrity: sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-minify-selectors@8.0.3:
+ resolution: {integrity: sha512-3WchKL9xoA80/jNkRcimRGIc9mP6sHPQUY/1WzV+GbF69I/upieyaKzZcIdQzf9cBmCJ6vjxi+NrKqCojoOb7Q==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-discard-comments@5.1.2:
- resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==}
- engines: {node: ^10 || ^12 || >=14.0}
+ postcss-normalize-charset@8.0.2:
+ resolution: {integrity: sha512-iy3/b+gX+dHfbNZq/4rfThbMAqxhneBJEhS71y5toliav5rLowkZ6g0ZJGymXRZytDOt/u+fRSFkNJLkRPYaug==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.2.15
+ postcss: ^8.5.25
- postcss-discard-comments@7.0.1:
- resolution: {integrity: sha512-GVrQxUOhmle1W6jX2SvNLt4kmN+JYhV7mzI6BMnkAWR9DtVvg8e67rrV0NfdWhn7x1zxvzdWkMBPdBDCls+uwQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ postcss-normalize-display-values@8.0.2:
+ resolution: {integrity: sha512-T6Az9mgc7FUWvI6mK0uOsItT6csep7fdLtDSRC2XBMTCvrQmtYiz86T5hEM6sfAkZVVhfrALPhdPxJWVoNAktw==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4.31
+ postcss: ^8.5.25
- postcss-discard-duplicates@5.1.0:
- resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==}
- engines: {node: ^10 || ^12 || >=14.0}
+ postcss-normalize-positions@8.0.2:
+ resolution: {integrity: sha512-BBg188AxYLC86LDEnkbQTcdnZugP2vDwYQQDV+Htju2gpTqM2a3o/oQ91/h9+j0277InjNgrI7l1LDDRrlWQ5w==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.2.15
+ postcss: ^8.5.25
- postcss-discard-duplicates@7.0.0:
- resolution: {integrity: sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ postcss-normalize-repeat-style@8.0.2:
+ resolution: {integrity: sha512-6mbVJzuogwcAHMd6MMpmAMcc3BkleOcY2xazCp+HCMiod78tx7rdOrufTrPYGjBLaTjkgNUr8KCkLHj8mfH6WQ==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4.31
+ postcss: ^8.5.25
- postcss-discard-empty@5.1.1:
- resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==}
- engines: {node: ^10 || ^12 || >=14.0}
+ postcss-normalize-string@8.0.2:
+ resolution: {integrity: sha512-8UK2KJSChlv7V12QgWTWtbRzzZcki/f21e8egMlFHTE9rEBCCyLo60rcY3mh77cDZhrBSIfKM9ciOsU6249nbA==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.2.15
+ postcss: ^8.5.25
- postcss-discard-empty@7.0.0:
- resolution: {integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ postcss-normalize-timing-functions@8.0.2:
+ resolution: {integrity: sha512-C2OyYiEMKjCxA0m+QJ5SeMf12OenIIGqrXEuWizEunZZP+s5TRq1aT8naxqr/8rytSRqD4SwH4mywc9G44u4cw==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4.31
+ postcss: ^8.5.25
- postcss-discard-overridden@5.1.0:
- resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==}
- engines: {node: ^10 || ^12 || >=14.0}
+ postcss-normalize-unicode@8.0.2:
+ resolution: {integrity: sha512-ttWq9oM88gSPpfspoZB49r/lv1fvjOadi79E/4BxGVt0rughnNDdTnDLmWj+epOjS6iKhmse3kbNcISR6Jl+3A==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.2.15
+ postcss: ^8.5.25
- postcss-discard-overridden@7.0.0:
- resolution: {integrity: sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ postcss-normalize-url@8.0.2:
+ resolution: {integrity: sha512-PvSiaJOQpP0AW5GSHrWZXupfhUgLUtS1MubJX+wPwh6RZZP6CHnZQy/S8uX2vvHMd57qIZ44Sb/37rFMiAWPfA==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4.31
+ postcss: ^8.5.25
- postcss-double-position-gradients@5.0.6:
- resolution: {integrity: sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-normalize-whitespace@8.0.2:
+ resolution: {integrity: sha512-Fipz8bjy96XPmtMPsqbGw3fypbS+aOHJfpTzfQY9z0lDYFqqGIqYWwrfsi2ZOv7B86pY81vQGJ6mSHWvTXDV7g==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-focus-visible@9.0.1:
- resolution: {integrity: sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-ordered-values@8.0.2:
+ resolution: {integrity: sha512-LBqMGd6Bam4TVp9dKui01o0prWtsGfPP+WtENunNs3L9oi+t75uPyEmzzaimxinmGgeiFLix9xLI0FfD+qedjw==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-focus-within@8.0.1:
- resolution: {integrity: sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-reduce-initial@8.0.2:
+ resolution: {integrity: sha512-+612lhSpyp1g4ZU0zQKwmdHnAi8LevMpzvQuP2RVhq+EUWqAwwUMk03OQEfzy+es9OSdRTuy5ugnFeEeOiIe2A==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-font-variant@5.0.0:
- resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==}
+ postcss-reduce-transforms@8.0.2:
+ resolution: {integrity: sha512-7D2vDXJ2HBNQpbiw5dY9UyLfBRCGRBjV0ChMqHdHghFsjAH3hIIUgb/rE+e77LFiT8VjXUK2fZh3omG4R96n8A==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.1.0
+ postcss: ^8.5.25
- postcss-gap-properties@5.0.1:
- resolution: {integrity: sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-safe-parser@6.0.0:
+ resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
+ engines: {node: '>=12.0'}
peerDependencies:
- postcss: ^8.4
-
- postcss-html@1.7.0:
- resolution: {integrity: sha512-MfcMpSUIaR/nNgeVS8AyvyDugXlADjN9AcV7e5rDfrF1wduIAGSkL4q2+wgrZgA3sHVAHLDO9FuauHhZYW2nBw==}
- engines: {node: ^12 || >=14}
+ postcss: ^8.3.3
- postcss-image-set-function@6.0.3:
- resolution: {integrity: sha512-i2bXrBYzfbRzFnm+pVuxVePSTCRiNmlfssGI4H0tJQvDue+yywXwUxe68VyzXs7cGtMaH6MCLY6IbCShrSroCw==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-safe-parser@7.0.1:
+ resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==}
+ engines: {node: '>=18.0'}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.4.31
- postcss-import-resolver@2.0.0:
- resolution: {integrity: sha512-y001XYgGvVwgxyxw9J1a5kqM/vtmIQGzx34g0A0Oy44MFcy/ZboZw1hu/iN3VYFjSTRzbvd7zZJJz0Kh0AGkTw==}
+ postcss-selector-parser@7.1.1:
+ resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
+ engines: {node: '>=4'}
- postcss-import@15.1.0:
- resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- postcss: ^8.0.0
+ postcss-selector-parser@7.1.5:
+ resolution: {integrity: sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==}
+ engines: {node: '>=4'}
- postcss-lab-function@6.0.17:
- resolution: {integrity: sha512-QzjC6/3J6XKZzHGuUKhWNvlDMfWo+08dQOfQj4vWQdpZFdOxCh9QCR4w4XbV68EkdzywJie1mcm81jwFyV0+kg==}
- engines: {node: ^14 || ^16 || >=18}
+ postcss-svgo@8.0.3:
+ resolution: {integrity: sha512-ADG8YNtwE5bcqvxw1gU0X7FkgdvinZZxWKHSCMwayX7gPl4XRmBMyiC84Ukal5bPS9Nk/2tI7siJwqxIN4/grg==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4
+ postcss: ^8.5.25
- postcss-loader@4.3.0:
- resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==}
- engines: {node: '>= 10.13.0'}
+ postcss-unique-selectors@8.0.2:
+ resolution: {integrity: sha512-cIftRB4rW3UCqnQjFAS6WlUzragjsU2AtMzWDdDQKTMjgPh1rO8qYgnoYqkUgRXKnxd3902laOWbkkYO/GYEHw==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^7.0.0 || ^8.0.1
- webpack: ^4.0.0 || ^5.0.0
+ postcss: ^8.5.25
- postcss-logical@7.0.1:
- resolution: {integrity: sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- postcss-merge-longhand@5.1.7:
- resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ postcss@8.5.15:
+ resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
+ engines: {node: ^10 || ^12 || >=14}
- postcss-merge-longhand@7.0.2:
- resolution: {integrity: sha512-06vrW6ZWi9qeP7KMS9fsa9QW56+tIMW55KYqF7X3Ccn+NI2pIgPV6gFfvXTMQ05H90Y5DvnCDPZ2IuHa30PMUg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ postcss@8.5.26:
+ resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==}
+ engines: {node: ^10 || ^12 || >=14}
- postcss-merge-rules@5.1.4:
- resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ powershell-utils@0.1.0:
+ resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==}
+ engines: {node: '>=20'}
- postcss-merge-rules@7.0.2:
- resolution: {integrity: sha512-VAR47UNvRsdrTHLe7TV1CeEtF9SJYR5ukIB9U4GZyZOptgtsS20xSxy+k5wMrI3udST6O1XuIn7cjQkg7sDAAw==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
- postcss-minify-font-values@5.1.0:
- resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ prettier@3.8.4:
+ resolution: {integrity: sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==}
+ engines: {node: '>=14'}
+ hasBin: true
- postcss-minify-font-values@7.0.0:
- resolution: {integrity: sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ pretty-bytes@7.1.1:
+ resolution: {integrity: sha512-X+vn9z8nOFZQlxOLmfJ0iKDdMD7jYTsTW12OAlCpdoE3Igik6L37pugIZi+N3usuyp5McfgKPWi12q3zvHLeGQ==}
+ engines: {node: '>=20'}
- postcss-minify-gradients@5.1.1:
- resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
- postcss-minify-gradients@7.0.0:
- resolution: {integrity: sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
- postcss-minify-params@5.1.4:
- resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ proper-lockfile@4.1.2:
+ resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==}
- postcss-minify-params@7.0.1:
- resolution: {integrity: sha512-e+Xt8xErSRPgSRFxHeBCSxMiO8B8xng7lh8E0A5ep1VfwYhY8FXhu4Q3APMjgx9YDDbSp53IBGENrzygbUvgUQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ property-information@7.2.0:
+ resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==}
- postcss-minify-selectors@5.2.1:
- resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ prosemirror-changeset@2.4.1:
+ resolution: {integrity: sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==}
- postcss-minify-selectors@7.0.2:
- resolution: {integrity: sha512-dCzm04wqW1uqLmDZ41XYNBJfjgps3ZugDpogAmJXoCb5oCiTzIX4oPXXKxDpTvWOnKxQKR4EbV4ZawJBLcdXXA==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ prosemirror-commands@1.7.2:
+ resolution: {integrity: sha512-q6Q6szxqdu9Xd6EcdKsqXghu5nQdZTpB4Q9yd04WRc7/jt763e/rT60Owh0L1GYY+T46o5rD+9lEN36dZS43tw==}
- postcss-modules-extract-imports@3.0.0:
- resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
+ prosemirror-dropcursor@1.8.3:
+ resolution: {integrity: sha512-FoYbsJR8gK+DGlqhNoE29Loa38eIZPzQRIb1VMaDNBoo4OLP6vVof/jR8qFY/6XvUd6Dhug8MDCHl2a/h8RTfQ==}
- postcss-modules-local-by-default@4.0.3:
- resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
+ prosemirror-gapcursor@1.4.1:
+ resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==}
- postcss-modules-scope@3.0.0:
- resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
+ prosemirror-history@1.5.0:
+ resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==}
- postcss-modules-values@4.0.0:
- resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
+ prosemirror-inputrules@1.5.1:
+ resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==}
- postcss-nesting@12.1.5:
- resolution: {integrity: sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
+ prosemirror-keymap@1.2.3:
+ resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==}
- postcss-normalize-charset@5.1.0:
- resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ prosemirror-model@1.25.11:
+ resolution: {integrity: sha512-QWg9RhnpLlogAmp3p96uEFrE5txQpFynd4vhBAELkwgOCWQs/X0yCzB3/hrHqiPwf91RG5KyWq6553zs9JqIOQ==}
- postcss-normalize-charset@7.0.0:
- resolution: {integrity: sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ prosemirror-schema-list@1.5.1:
+ resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==}
- postcss-normalize-display-values@5.1.0:
- resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ prosemirror-state@1.4.4:
+ resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==}
- postcss-normalize-display-values@7.0.0:
- resolution: {integrity: sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ prosemirror-tables@1.8.5:
+ resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==}
- postcss-normalize-positions@5.1.1:
- resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ prosemirror-transform@1.12.0:
+ resolution: {integrity: sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==}
- postcss-normalize-positions@7.0.0:
- resolution: {integrity: sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ prosemirror-view@1.42.2:
+ resolution: {integrity: sha512-Pdg0l5kXm8aLDquFAnQFTCITg0q44sLqBlHlpsVLD9segdOao8TOfQdAhCrCXyVgPSRr6UDDROOIWA3bIrN9YQ==}
- postcss-normalize-repeat-style@5.1.1:
- resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ protobufjs@7.6.1:
+ resolution: {integrity: sha512-4K0myLaWL5EteuSAro91EGFgcfVgxb64Jx+7oDAY6GOkXD4M69yuSEljNcInGVCA5sOPxmZ/EqDLj2x0Q0+Ygg==}
+ engines: {node: '>=12.0.0'}
- postcss-normalize-repeat-style@7.0.0:
- resolution: {integrity: sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
- postcss-normalize-string@5.1.0:
- resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ pusher-js@8.5.0:
+ resolution: {integrity: sha512-V7uzGi9bqOOOyM/6IkJdpFyjGZj7llz1v0oWnYkZKcYLvbz6VcHVLmzKqkvegjuMumpfIEKGLmWHwFb39XFCpw==}
- postcss-normalize-string@7.0.0:
- resolution: {integrity: sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ qified@0.10.1:
+ resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==}
+ engines: {node: '>=20'}
- postcss-normalize-timing-functions@5.1.0:
- resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ qrcode@1.5.4:
+ resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
- postcss-normalize-timing-functions@7.0.0:
- resolution: {integrity: sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ quansync@0.2.11:
+ resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
- postcss-normalize-unicode@5.1.1:
- resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ quansync@1.0.0:
+ resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==}
- postcss-normalize-unicode@7.0.1:
- resolution: {integrity: sha512-PTPGdY9xAkTw+8ZZ71DUePb7M/Vtgkbbq+EoI33EuyQEzbKemEQMhe5QSr0VP5UfZlreANDPxSfcdSprENcbsg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- postcss-normalize-url@5.1.0:
- resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ radix3@1.1.2:
+ resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
- postcss-normalize-url@7.0.0:
- resolution: {integrity: sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
+ range-parser@1.3.0:
+ resolution: {integrity: sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==}
+ engines: {node: '>= 0.6'}
- postcss-normalize-whitespace@5.1.1:
- resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
-
- postcss-normalize-whitespace@7.0.0:
- resolution: {integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-opacity-percentage@2.0.0:
- resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.2
-
- postcss-ordered-values@5.1.3:
- resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
-
- postcss-ordered-values@7.0.1:
- resolution: {integrity: sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-overflow-shorthand@5.0.1:
- resolution: {integrity: sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
-
- postcss-page-break@3.0.4:
- resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==}
- peerDependencies:
- postcss: ^8
-
- postcss-place@9.0.1:
- resolution: {integrity: sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
-
- postcss-preset-env@9.5.15:
- resolution: {integrity: sha512-z/2akOVQChOGAdzaUR4pQrDOM3xGZc5/k4THHWyREbWAfngaJATA2SkEQMkiyV5Y/EoSwE0nt0IiaIs6CMmxfQ==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
-
- postcss-pseudo-class-any-link@9.0.2:
- resolution: {integrity: sha512-HFSsxIqQ9nA27ahyfH37cRWGk3SYyQLpk0LiWw/UGMV4VKT5YG2ONee4Pz/oFesnK0dn2AjcyequDbIjKJgB0g==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
-
- postcss-reduce-initial@5.1.2:
- resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
-
- postcss-reduce-initial@7.0.1:
- resolution: {integrity: sha512-0JDUSV4bGB5FGM5g8MkS+rvqKukJZ7OTHw/lcKn7xPNqeaqJyQbUO8/dJpvyTpaVwPsd3Uc33+CfNzdVowp2WA==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-reduce-transforms@5.1.0:
- resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
-
- postcss-reduce-transforms@7.0.0:
- resolution: {integrity: sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-replace-overflow-wrap@4.0.0:
- resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==}
- peerDependencies:
- postcss: ^8.0.3
-
- postcss-resolve-nested-selector@0.1.1:
- resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==}
-
- postcss-safe-parser@6.0.0:
- resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
- engines: {node: '>=12.0'}
- peerDependencies:
- postcss: ^8.3.3
-
- postcss-selector-not@7.0.2:
- resolution: {integrity: sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
-
- postcss-selector-parser@6.0.13:
- resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
- engines: {node: '>=4'}
-
- postcss-selector-parser@6.1.2:
- resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
- engines: {node: '>=4'}
-
- postcss-svgo@5.1.0:
- resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
-
- postcss-svgo@7.0.1:
- resolution: {integrity: sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==}
- engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-unique-selectors@5.1.1:
- resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
-
- postcss-unique-selectors@7.0.1:
- resolution: {integrity: sha512-MH7QE/eKUftTB5ta40xcHLl7hkZjgDFydpfTK+QWXeHxghVt3VoPqYL5/G+zYZPPIs+8GuqFXSTgxBSoB1RZtQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.31
-
- postcss-url@10.1.3:
- resolution: {integrity: sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==}
- engines: {node: '>=10'}
- peerDependencies:
- postcss: ^8.0.0
-
- postcss-value-parser@4.2.0:
- resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
-
- postcss@7.0.39:
- resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==}
- engines: {node: '>=6.0.0'}
-
- postcss@8.4.31:
- resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
- engines: {node: ^10 || ^12 || >=14}
-
- postcss@8.4.35:
- resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==}
- engines: {node: ^10 || ^12 || >=14}
-
- postcss@8.4.39:
- resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==}
- engines: {node: ^10 || ^12 || >=14}
-
- postcss@8.5.6:
- resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
- engines: {node: ^10 || ^12 || >=14}
-
- prelude-ls@1.2.1:
- resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
- engines: {node: '>= 0.8.0'}
-
- prepend-http@1.0.4:
- resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==}
- engines: {node: '>=0.10.0'}
-
- prettier@2.8.8:
- resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
- engines: {node: '>=10.13.0'}
- hasBin: true
-
- prettier@3.6.2:
- resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
- engines: {node: '>=14'}
- hasBin: true
-
- pretty-bytes@5.6.0:
- resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
- engines: {node: '>=6'}
-
- pretty-error@2.1.2:
- resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==}
-
- pretty-format@30.2.0:
- resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==}
- engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
-
- pretty-time@1.1.0:
- resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==}
- engines: {node: '>=4'}
-
- pretty@2.0.0:
- resolution: {integrity: sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==}
- engines: {node: '>=0.10.0'}
-
- process-nextick-args@2.0.1:
- resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
-
- process@0.11.10:
- resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
- engines: {node: '>= 0.6.0'}
-
- promise-inflight@1.0.1:
- resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
- peerDependencies:
- bluebird: '*'
- peerDependenciesMeta:
- bluebird:
- optional: true
-
- proper-lockfile@4.1.2:
- resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==}
-
- proto-list@1.2.4:
- resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
-
- proto3-json-serializer@0.1.9:
- resolution: {integrity: sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==}
-
- protobufjs@6.11.3:
- resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==}
- hasBin: true
-
- protobufjs@6.11.4:
- resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==}
- hasBin: true
-
- protobufjs@7.2.5:
- resolution: {integrity: sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==}
- engines: {node: '>=12.0.0'}
-
- protocols@2.0.1:
- resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==}
-
- proxy-from-env@1.1.0:
- resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
-
- prr@1.0.1:
- resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
-
- pseudomap@1.0.2:
- resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
-
- public-encrypt@4.0.3:
- resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==}
-
- pump@2.0.1:
- resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
-
- pump@3.0.0:
- resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
-
- pumpify@1.5.1:
- resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==}
-
- pumpify@2.0.1:
- resolution: {integrity: sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==}
-
- punycode@1.4.1:
- resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
-
- punycode@2.3.0:
- resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
- engines: {node: '>=6'}
-
- punycode@2.3.1:
- resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
- engines: {node: '>=6'}
-
- pure-rand@7.0.1:
- resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==}
-
- pusher-js@8.4.0:
- resolution: {integrity: sha512-wp3HqIIUc1GRyu1XrP6m2dgyE9MoCsXVsWNlohj0rjSkLf+a0jLvEyVubdg58oMk7bhjBWnFClgp8jfAa6Ak4Q==}
-
- qrcode@1.5.4:
- resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
- engines: {node: '>=10.13.0'}
- hasBin: true
-
- qs@6.11.2:
- resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==}
- engines: {node: '>=0.6'}
-
- query-string@4.3.4:
- resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==}
- engines: {node: '>=0.10.0'}
-
- querystring-es3@0.2.1:
- resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==}
- engines: {node: '>=0.4.x'}
-
- queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
- quick-lru@5.1.1:
- resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
- engines: {node: '>=10'}
-
- randombytes@2.1.0:
- resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
-
- randomfill@1.0.4:
- resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
-
- range-parser@1.2.1:
- resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
- engines: {node: '>= 0.6'}
-
- rc9@2.1.1:
- resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==}
-
- rc9@2.1.2:
- resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
-
- react-is@18.3.1:
- resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
-
- read-cache@1.0.0:
- resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
-
- read-pkg-up@7.0.1:
- resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
- engines: {node: '>=8'}
-
- read-pkg-up@8.0.0:
- resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==}
- engines: {node: '>=12'}
-
- read-pkg@5.2.0:
- resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
- engines: {node: '>=8'}
-
- read-pkg@6.0.0:
- resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==}
- engines: {node: '>=12'}
+ rc9@3.0.1:
+ resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==}
readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
- readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
+ readable-stream@4.7.0:
+ resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- readdirp@2.2.1:
- resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==}
- engines: {node: '>=0.10'}
+ readdir-glob@1.1.3:
+ resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
- readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
+ readdirp@5.1.1:
+ resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==}
+ engines: {node: '>= 20.19.0'}
- redent@4.0.0:
- resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==}
- engines: {node: '>=12'}
+ redis-errors@1.2.0:
+ resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==}
+ engines: {node: '>=4'}
- regenerate-unicode-properties@10.1.1:
- resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
+ redis-parser@3.0.0:
+ resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
engines: {node: '>=4'}
- regenerate@1.4.2:
- resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+ refa@0.12.1:
+ resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- regenerator-runtime@0.11.1:
- resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==}
+ regex-recursion@6.0.2:
+ resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
- regenerator-runtime@0.14.1:
- resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+ regex-utilities@2.3.0:
+ resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
- regenerator-transform@0.15.2:
- resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
+ regex@6.1.0:
+ resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
- regex-not@1.0.2:
- resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
- engines: {node: '>=0.10.0'}
+ regexp-ast-analysis@0.7.1:
+ resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
regexp-tree@0.1.27:
resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==}
hasBin: true
- regexp.prototype.flags@1.5.1:
- resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
- engines: {node: '>= 0.4'}
-
- regexpp@3.2.0:
- resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
- engines: {node: '>=8'}
-
- regexpu-core@5.3.2:
- resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
- engines: {node: '>=4'}
-
- regjsparser@0.9.1:
- resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
+ regjsparser@0.13.2:
+ resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==}
hasBin: true
- relateurl@0.2.7:
- resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
- engines: {node: '>= 0.10'}
-
- remove-trailing-separator@1.1.0:
- resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==}
-
- renderkid@2.0.7:
- resolution: {integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==}
-
- repeat-element@1.1.4:
- resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==}
- engines: {node: '>=0.10.0'}
-
- repeat-string@1.6.1:
- resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
- engines: {node: '>=0.10'}
+ reka-ui@2.9.10:
+ resolution: {integrity: sha512-yuvZVTp4fWH2G3qk+ze/x6YYlyc2Xl1d+eMUlIYrKqzTowBKteoDoN17fitURmqSUck3mc7JbcYgp49DnGu2EQ==}
+ peerDependencies:
+ vue: '>= 3.4.0'
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
@@ -7681,9 +6386,9 @@ packages:
require-main-filename@2.0.0:
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
- resolve-cwd@3.0.0:
- resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
- engines: {node: '>=8'}
+ reserved-identifiers@1.2.0:
+ resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==}
+ engines: {node: '>=18'}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
@@ -7696,88 +6401,73 @@ packages:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
- resolve-url@0.2.1:
- resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==}
- deprecated: https://github.com/lydell/resolve-url#deprecated
-
- resolve@1.22.6:
- resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==}
+ resolve@1.22.12:
+ resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==}
+ engines: {node: '>= 0.4'}
hasBin: true
- restore-cursor@3.1.0:
- resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
- engines: {node: '>=8'}
-
restore-cursor@5.1.0:
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines: {node: '>=18'}
- ret@0.1.15:
- resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
- engines: {node: '>=0.12'}
-
- retry-request@4.2.2:
- resolution: {integrity: sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==}
- engines: {node: '>=8.10.0'}
-
retry@0.12.0:
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
engines: {node: '>= 4'}
- retry@0.13.1:
- resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
- engines: {node: '>= 4'}
-
- reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
- rimraf@2.7.1:
- resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
- deprecated: Rimraf versions prior to v4 are no longer supported
- hasBin: true
+ rolldown-string@0.3.1:
+ resolution: {integrity: sha512-dv8GOXkYqUQdI0rsXB8hmzO95pKWSuX2eg5/JSJa9czfEVIFuKNR7ZJDfat8LlmD35RAhWY+evS7/wXXqFDfSg==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ rolldown: '*'
+ peerDependenciesMeta:
+ rolldown:
+ optional: true
- rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- deprecated: Rimraf versions prior to v4 are no longer supported
+ rolldown@1.2.3:
+ resolution: {integrity: sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
- ripemd160@2.0.2:
- resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
-
- rollup@2.79.2:
- resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==}
- engines: {node: '>=10.0.0'}
+ rollup-plugin-visualizer@7.0.1:
+ resolution: {integrity: sha512-UJUT4+1Ho4OcWmPYU3sYXgUqI8B8Ayfe06MX7y0qCJ1K8aGoKtR/NDd/2nZqM7ADkrzny+I99Ul7GgyoiVNAgg==}
+ engines: {node: '>=22'}
hasBin: true
+ peerDependencies:
+ rolldown: 1.x || ^1.0.0-beta || ^1.0.0-rc
+ rollup: 2.x || 3.x || 4.x
+ peerDependenciesMeta:
+ rolldown:
+ optional: true
+ rollup:
+ optional: true
- rollup@3.29.5:
- resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==}
- engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+ rollup@4.62.4:
+ resolution: {integrity: sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- rrweb-cssom@0.8.0:
- resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
-
- run-async@2.4.1:
- resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
- engines: {node: '>=0.12.0'}
+ rope-sequence@1.3.4:
+ resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
- run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ rou3@0.8.1:
+ resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==}
- run-queue@1.0.3:
- resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==}
+ rou3@0.9.1:
+ resolution: {integrity: sha512-z/sSmzvtwMDDnxsPVhfWMuG6F6mbmhFDXoVqLmMfbpDD9qfV3GDmSQpf0+W296/ZDIpW2wcMmBfpVFzcnOi/nA==}
- rxjs@6.6.7:
- resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
- engines: {npm: '>=2.0.0'}
+ run-applescript@7.1.0:
+ resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
+ engines: {node: '>=18'}
- safe-array-concat@1.0.1:
- resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==}
- engines: {node: '>=0.4'}
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
@@ -7785,139 +6475,69 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- safe-regex-test@1.0.0:
- resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
-
- safe-regex@1.1.0:
- resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==}
-
- safe-regex@2.1.1:
- resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==}
-
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
- sass-loader@10.4.1:
- resolution: {integrity: sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- fibers: '>= 3.1.0'
- node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
- sass: ^1.3.0
- webpack: ^4.36.0 || ^5.0.0
- peerDependenciesMeta:
- fibers:
- optional: true
- node-sass:
- optional: true
- sass:
- optional: true
-
- sass@1.32.13:
- resolution: {integrity: sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==}
- engines: {node: '>=8.9.0'}
+ sass@1.100.0:
+ resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==}
+ engines: {node: '>=20.19.0'}
hasBin: true
- sax@1.4.1:
- resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
-
- saxes@6.0.0:
- resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
- engines: {node: '>=v12.22.7'}
-
- schema-utils@1.0.0:
- resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==}
- engines: {node: '>= 4'}
-
- schema-utils@2.7.0:
- resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==}
- engines: {node: '>= 8.9.0'}
-
- schema-utils@2.7.1:
- resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==}
- engines: {node: '>= 8.9.0'}
-
- schema-utils@3.3.0:
- resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
- engines: {node: '>= 10.13.0'}
-
- schema-utils@4.3.2:
- resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==}
- engines: {node: '>= 10.13.0'}
+ sax@1.6.1:
+ resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==}
+ engines: {node: '>=11.0.0'}
- scule@0.2.1:
- resolution: {integrity: sha512-M9gnWtn3J0W+UhJOHmBxBTwv8mZCan5i1Himp60t6vvZcor0wr+IM0URKmIglsWJ7bRujNAVVN77fp+uZaWoKg==}
-
- scule@1.0.0:
- resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==}
+ scslre@0.3.0:
+ resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==}
+ engines: {node: ^14.0.0 || >=16.0.0}
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
- semver@5.7.2:
- resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
- hasBin: true
-
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
- semver@7.5.4:
- resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+ semver@7.8.1:
+ resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==}
engines: {node: '>=10'}
hasBin: true
- semver@7.7.2:
- resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+ semver@7.8.5:
+ resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==}
engines: {node: '>=10'}
hasBin: true
- send@0.19.0:
- resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
- engines: {node: '>= 0.8.0'}
-
- serialize-javascript@4.0.0:
- resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
-
- serialize-javascript@5.0.1:
- resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==}
+ send@1.2.1:
+ resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
+ engines: {node: '>= 18'}
- serialize-javascript@6.0.1:
- resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==}
+ serialize-javascript@7.0.7:
+ resolution: {integrity: sha512-YAy8Od6KV+uuwUuU50np8fGB/Aues6Y0nAhA9y/hId74PlKUcme4pXcBD46NWKr1Q4osN/iseZ17YqO1XfmI8g==}
+ engines: {node: '>=20.0.0'}
- serialize-javascript@6.0.2:
- resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+ seroval@1.6.2:
+ resolution: {integrity: sha512-mPT+SD2TrlB6wvte1KkYOYUkubaTbd6pZ/6Kk3C9nxzrHmCZyhxOO7XGAeL7f+yLKZglzGtM9odUVvg/EhO+vQ==}
+ engines: {node: '>=10'}
serve-placeholder@2.0.2:
resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==}
- serve-static@1.16.2:
- resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
- engines: {node: '>= 0.8.0'}
-
- server-destroy@1.0.1:
- resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==}
+ serve-static@2.2.1:
+ resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
+ engines: {node: '>= 18'}
set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
- set-function-name@2.0.1:
- resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
- engines: {node: '>= 0.4'}
-
- set-value@2.0.1:
- resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
- engines: {node: '>=0.10.0'}
-
- setimmediate@1.0.5:
- resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
-
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
- sha.js@2.4.11:
- resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
- hasBin: true
+ sharp@0.35.3:
+ resolution: {integrity: sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==}
+ engines: {node: '>=20.9.0'}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
@@ -7927,11 +6547,13 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- shell-quote@1.8.1:
- resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
+ shell-quote@1.10.0:
+ resolution: {integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==}
+ engines: {node: '>= 0.4'}
- side-channel@1.0.4:
- resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+ shiki@4.3.1:
+ resolution: {integrity: sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==}
+ engines: {node: '>=20'}
signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
@@ -7940,22 +6562,20 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
- sirv@2.0.3:
- resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==}
- engines: {node: '>= 10'}
+ simple-git@3.36.0:
+ resolution: {integrity: sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==}
- sitemap@4.1.1:
- resolution: {integrity: sha512-+8yd66IxyIFEMFkFpVoPuoPwBvdiL7Ap/HS5YD7igqO4phkyTPFIprCAE9NMHehAY5ZGN3MkAze4lDrOAX3sVQ==}
- engines: {node: '>=8.9.0', npm: '>=5.6.0'}
- hasBin: true
+ sirv@3.0.2:
+ resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
+ engines: {node: '>=18'}
- slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
- slash@4.0.0:
- resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
- engines: {node: '>=12'}
+ site-config-stack@4.1.1:
+ resolution: {integrity: sha512-sJoqaL3ihMkAGgOXBfg28zL55qZdzgNj0BQBQf3QSw2ilCYSGRNYWgg6kucxmmcyFtRC89WlOXAqG0OR422Xng==}
+ peerDependencies:
+ vue: ^3.5.30
slash@5.1.0:
resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
@@ -7965,71 +6585,25 @@ packages:
resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
engines: {node: '>=10'}
- slice-ansi@5.0.0:
- resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
- engines: {node: '>=12'}
-
- slice-ansi@7.1.0:
- resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ slice-ansi@7.1.2:
+ resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
engines: {node: '>=18'}
- snapdragon-node@2.1.1:
- resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
- engines: {node: '>=0.10.0'}
-
- snapdragon-util@3.0.1:
- resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==}
- engines: {node: '>=0.10.0'}
-
- snapdragon@0.8.2:
- resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==}
- engines: {node: '>=0.10.0'}
-
- sort-keys@1.1.2:
- resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==}
- engines: {node: '>=0.10.0'}
-
- sort-keys@2.0.0:
- resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==}
- engines: {node: '>=4'}
-
- source-list-map@2.0.1:
- resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==}
-
- source-map-js@1.0.2:
- resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
- engines: {node: '>=0.10.0'}
+ slice-ansi@8.0.0:
+ resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==}
+ engines: {node: '>=20'}
- source-map-js@1.2.0:
- resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
- engines: {node: '>=0.10.0'}
+ smob@1.6.2:
+ resolution: {integrity: sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==}
+ engines: {node: '>=20.0.0'}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
- source-map-resolve@0.5.3:
- resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
- deprecated: See https://github.com/lydell/source-map-resolve#deprecated
-
- source-map-support@0.5.13:
- resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
-
source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
- source-map-url@0.4.1:
- resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
- deprecated: See https://github.com/lydell/source-map-url#deprecated
-
- source-map@0.5.6:
- resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==}
- engines: {node: '>=0.10.0'}
-
- source-map@0.5.7:
- resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
- engines: {node: '>=0.10.0'}
-
source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
@@ -8038,92 +6612,48 @@ packages:
resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
engines: {node: '>= 12'}
- spdx-correct@3.2.0:
- resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- spdx-exceptions@2.3.0:
- resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
+ spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
- spdx-expression-parse@3.0.1:
- resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+ spdx-expression-parse@4.0.0:
+ resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
- spdx-license-ids@3.0.15:
- resolution: {integrity: sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==}
+ spdx-license-ids@3.0.23:
+ resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==}
- split-string@3.1.0:
- resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
+ speakingurl@14.0.1:
+ resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
engines: {node: '>=0.10.0'}
- split2@4.2.0:
- resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
- engines: {node: '>= 10.x'}
-
- sprintf-js@1.0.3:
- resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
-
- ssri@6.0.2:
- resolution: {integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==}
-
- ssri@8.0.1:
- resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==}
- engines: {node: '>= 8'}
-
- stable@0.1.8:
- resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
- deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
-
- stack-trace@0.0.10:
- resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
-
- stack-utils@2.0.6:
- resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
- engines: {node: '>=10'}
-
- stackframe@1.3.4:
- resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
+ srvx@0.11.22:
+ resolution: {integrity: sha512-LqZxxBDMKuMAZzFzJnDCkFOrs9MZQZr0LvHiO/SuSZVdQaXD7xQ5UWTUxheJrQPve1qk9MG2B/yttUvJxw8egQ==}
+ engines: {node: '>=20.16.0'}
+ hasBin: true
- static-extend@0.1.2:
- resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==}
- engines: {node: '>=0.10.0'}
+ stable-hash-x@0.2.0:
+ resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
+ engines: {node: '>=12.0.0'}
- statuses@1.5.0:
- resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
- engines: {node: '>= 0.6'}
+ standard-as-callback@2.1.0:
+ resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
- statuses@2.0.1:
- resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ statuses@2.0.2:
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
engines: {node: '>= 0.8'}
- std-env@3.7.0:
- resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
-
- stream-browserify@2.0.2:
- resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==}
-
- stream-each@1.2.3:
- resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==}
-
- stream-events@1.0.5:
- resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==}
+ std-env@4.2.0:
+ resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==}
- stream-http@2.8.3:
- resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==}
-
- stream-shift@1.0.1:
- resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==}
-
- strict-uri-encode@1.1.0:
- resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==}
- engines: {node: '>=0.10.0'}
+ streamx@2.28.0:
+ resolution: {integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==}
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
- string-length@4.0.2:
- resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
- engines: {node: '>=10'}
-
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -8136,15 +6666,13 @@ packages:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
- string.prototype.trim@1.2.8:
- resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
- engines: {node: '>= 0.4'}
-
- string.prototype.trimend@1.0.7:
- resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
+ string-width@8.2.1:
+ resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==}
+ engines: {node: '>=20'}
- string.prototype.trimstart@1.0.7:
- resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
+ string-width@8.2.2:
+ resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==}
+ engines: {node: '>=20'}
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
@@ -8152,83 +6680,42 @@ packages:
string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
- strip-ansi@3.0.1:
- resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
- engines: {node: '>=0.10.0'}
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
- strip-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
- engines: {node: '>=12'}
-
- strip-ansi@7.1.2:
- resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ strip-ansi@7.2.0:
+ resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==}
engines: {node: '>=12'}
- strip-bom@3.0.0:
- resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
- engines: {node: '>=4'}
-
- strip-bom@4.0.0:
- resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
- engines: {node: '>=8'}
-
- strip-final-newline@2.0.0:
- resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
- engines: {node: '>=6'}
-
strip-final-newline@3.0.0:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
- strip-indent@3.0.0:
- resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
- engines: {node: '>=8'}
-
- strip-indent@4.0.0:
- resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==}
+ strip-indent@4.1.1:
+ resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
engines: {node: '>=12'}
- strip-json-comments@2.0.1:
- resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
- engines: {node: '>=0.10.0'}
-
- strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
-
- strip-literal@1.3.0:
- resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
+ strip-literal@3.1.0:
+ resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
- strip-literal@2.1.0:
- resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==}
+ strip-literal@4.0.0:
+ resolution: {integrity: sha512-PaqAvfUZKBwc/SLmNZtHmzK+v19Z4O4eS3cKPeGvbIv/U3pnyEq4Tuw3/4v/FwfM8VQaEawsyCcOQ0P+kpwWWw==}
- stubs@3.0.0:
- resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==}
+ strnum@2.4.1:
+ resolution: {integrity: sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==}
- style-resources-loader@1.5.0:
- resolution: {integrity: sha512-fIfyvQ+uvXaCBGGAgfh+9v46ARQB1AWdaop2RpQw0PBVuROsTBqGvx8dj0kxwjGOAyq3vepe4AOK3M6+Q/q2jw==}
- engines: {node: '>=8.9'}
- peerDependencies:
- webpack: ^3.0.0 || ^4.0.0 || ^5.0.0
-
- style-search@0.1.0:
- resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
-
- stylehacks@5.1.1:
- resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
+ structured-clone-es@2.0.1:
+ resolution: {integrity: sha512-10ZL5r77LhknxlP1FBiCW+VdnuWOEFLdSS2SKtjyEV+L4qP1hUEIMIZW94LC3jKxRmT/Dj7KkD1mqh/IY6lhKQ==}
- stylehacks@7.0.2:
- resolution: {integrity: sha512-HdkWZS9b4gbgYTdMg4gJLmm7biAUug1qTqXjS+u8X+/pUd+9Px1E+520GnOW3rST9MNsVOVpsJG+mPHNosxjOQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ stylehacks@8.0.2:
+ resolution: {integrity: sha512-3d5vjQODiMc4VwED1w24fAYSfeAjdIRLy88cJQ9NAYkZr/6ozCVbusda5N+0kXsfGWW3pizUgYK2TOZxiU0cSQ==}
+ engines: {node: ^22.11.0 || ^24.11.0 || >=26.0}
peerDependencies:
- postcss: ^8.4.31
+ postcss: ^8.5.25
stylelint-config-html@1.1.0:
resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==}
@@ -8237,63 +6724,41 @@ packages:
postcss-html: ^1.0.0
stylelint: '>=14.0.0'
- stylelint-config-prettier@9.0.5:
- resolution: {integrity: sha512-U44lELgLZhbAD/xy/vncZ2Pq8sh2TnpiPvo38Ifg9+zeioR+LAkHu0i6YORIOxFafZoVg0xqQwex6e6F25S5XA==}
- engines: {node: '>= 12'}
- hasBin: true
- peerDependencies:
- stylelint: '>= 11.x < 15'
-
- stylelint-config-recommended-vue@1.5.0:
- resolution: {integrity: sha512-65TAK/clUqkNtkZLcuytoxU0URQYlml+30Nhop7sRkCZ/mtWdXt7T+spPSB3KMKlb+82aEVJ4OrcstyDBdbosg==}
+ stylelint-config-recommended-vue@1.6.1:
+ resolution: {integrity: sha512-lLW7hTIMBiTfjenGuDq2kyHA6fBWd/+Df7MO4/AWOxiFeXP9clbpKgg27kHfwA3H7UNMGC7aeP3mNlZB5LMmEQ==}
engines: {node: ^12 || >=14}
peerDependencies:
postcss-html: ^1.0.0
stylelint: '>=14.0.0'
- stylelint-config-recommended@13.0.0:
- resolution: {integrity: sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==}
- engines: {node: ^14.13.1 || >=16.0.0}
- peerDependencies:
- stylelint: ^15.10.0
-
- stylelint-config-standard@34.0.0:
- resolution: {integrity: sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==}
- engines: {node: ^14.13.1 || >=16.0.0}
+ stylelint-config-recommended@18.0.0:
+ resolution: {integrity: sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- stylelint: ^15.10.0
+ stylelint: ^17.0.0
- stylelint-webpack-plugin@5.0.1:
- resolution: {integrity: sha512-07lpo1uVoFctKv0EOOg/YSrUppcLMjNBSMRqgooNnlbfAOgQfMzvLK+EbXz0HQiEgZobr+XQX9md/TgwTGdzbw==}
- engines: {node: '>= 18.12.0'}
+ stylelint-config-standard@40.0.0:
+ resolution: {integrity: sha512-EznGJxOUhtWck2r6dJpbgAdPATIzvpLdK9+i5qPd4Lx70es66TkBPljSg4wN3Qnc6c4h2n+WbUrUynQ3fanjHw==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- stylelint: ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
- webpack: ^5.0.0
+ stylelint: ^17.0.0
- stylelint@15.11.0:
- resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==}
- engines: {node: ^14.13.1 || >=16.0.0}
+ stylelint@17.13.0:
+ resolution: {integrity: sha512-G1WYzMerp7ihOaIe9VJCHLt12MoAD2QLf1AFerYP37+BCRBUK5UCpq8e/mN+zCIaJPKQcaxhE4WlPmqdiOx/gw==}
+ engines: {node: '>=20.19.0'}
hasBin: true
- supports-color@2.0.0:
- resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
- engines: {node: '>=0.8.0'}
-
- supports-color@5.5.0:
- resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
- engines: {node: '>=4'}
-
- supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
+ superjson@2.2.6:
+ resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==}
+ engines: {node: '>=16'}
- supports-color@8.1.1:
- resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
- engines: {node: '>=10'}
+ supports-color@10.2.2:
+ resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
+ engines: {node: '>=18'}
- supports-hyperlinks@3.0.0:
- resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==}
- engines: {node: '>=14.18'}
+ supports-hyperlinks@4.5.0:
+ resolution: {integrity: sha512-ZW2OvfeCXrNTbLakPUzjQG922EeGCOteFSVoek5DKStTh898wf7zgtuFlzQN8HfZCxC3Eh02yJVrRW51hADf+w==}
+ engines: {node: '>=20'}
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
@@ -8302,161 +6767,94 @@ packages:
svg-tags@1.0.0:
resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
- svgo@2.8.0:
- resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==}
- engines: {node: '>=10.13.0'}
- hasBin: true
-
- svgo@3.3.2:
- resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
- engines: {node: '>=14.0.0'}
+ svgo@4.0.2:
+ resolution: {integrity: sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==}
+ engines: {node: '>=16'}
hasBin: true
- symbol-tree@3.2.4:
- resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
-
- synckit@0.11.11:
- resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==}
- engines: {node: ^14.18.0 || >=16.0.0}
-
- table@6.8.1:
- resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==}
+ table@6.9.0:
+ resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==}
engines: {node: '>=10.0.0'}
- tapable@1.1.3:
- resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==}
- engines: {node: '>=6'}
-
- tapable@2.2.3:
- resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==}
- engines: {node: '>=6'}
-
- tar@6.2.0:
- resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==}
- engines: {node: '>=10'}
-
- teeny-request@7.2.0:
- resolution: {integrity: sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==}
- engines: {node: '>=10'}
-
- terser-webpack-plugin@1.4.6:
- resolution: {integrity: sha512-2lBVf/VMVIddjSn3GqbT90GvIJ/eYXJkt8cTzU7NbjKqK8fwv18Ftr4PlbF46b/e88743iZFL5Dtr/rC4hjIeA==}
- engines: {node: '>= 6.9.0'}
- peerDependencies:
- webpack: ^4.0.0
+ tagged-tag@1.0.0:
+ resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
+ engines: {node: '>=20'}
- terser-webpack-plugin@4.2.3:
- resolution: {integrity: sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- webpack: ^4.0.0 || ^5.0.0
+ tailwind-merge@3.6.0:
+ resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==}
- terser-webpack-plugin@5.3.14:
- resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
- engines: {node: '>= 10.13.0'}
+ tailwind-variants@3.2.2:
+ resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==}
+ engines: {node: '>=16.x', pnpm: '>=7.x'}
peerDependencies:
- '@swc/core': '*'
- esbuild: '*'
- uglify-js: '*'
- webpack: ^5.1.0
+ tailwind-merge: '>=3.0.0'
+ tailwindcss: '*'
peerDependenciesMeta:
- '@swc/core':
- optional: true
- esbuild:
- optional: true
- uglify-js:
+ tailwind-merge:
optional: true
- terser@4.8.1:
- resolution: {integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
- terser@5.44.0:
- resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==}
- engines: {node: '>=10'}
- hasBin: true
-
- test-exclude@6.0.0:
- resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
- engines: {node: '>=8'}
-
- text-decoding@1.0.0:
- resolution: {integrity: sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==}
-
- text-extensions@2.4.0:
- resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==}
- engines: {node: '>=8'}
+ tailwindcss@4.3.2:
+ resolution: {integrity: sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==}
- text-table@0.2.0:
- resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
-
- thingies@1.21.0:
- resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==}
- engines: {node: '>=10.18'}
- peerDependencies:
- tslib: ^2
-
- thread-loader@3.0.4:
- resolution: {integrity: sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- webpack: ^4.27.0 || ^5.0.0
+ tapable@2.3.3:
+ resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
+ engines: {node: '>=6'}
- through2@2.0.5:
- resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
+ tar-stream@3.2.0:
+ resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==}
- through@2.3.8:
- resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+ tar@7.5.22:
+ resolution: {integrity: sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==}
+ engines: {node: '>=18'}
- time-fix-plugin@2.0.7:
- resolution: {integrity: sha512-uVFet1LQToeUX0rTcSiYVYVoGuBpc8gP/2jnlUzuHMHe+gux6XLsNzxLUweabMwiUj5ejhoIMsUI55nVSEa/Vw==}
- peerDependencies:
- webpack: '>=4.0.0'
+ teex@1.0.1:
+ resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
- timers-browserify@2.0.12:
- resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==}
- engines: {node: '>=0.6.0'}
+ terser@5.49.2:
+ resolution: {integrity: sha512-rGbJiKeQ4WDe3EXlDAIaQcwftVfv2Q8o1awFNfvXolJYKkb1AuZY1RTOmqx4LJXZENbWZA7eIsYGHuEzHsi1nQ==}
+ engines: {node: '>=10'}
+ hasBin: true
- tinyexec@1.0.1:
- resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
+ text-decoder@1.2.7:
+ resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
- tldts-core@6.1.86:
- resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
+ tiny-inflate@1.0.3:
+ resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
- tldts@6.1.86:
- resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
- hasBin: true
+ tiny-invariant@1.3.3:
+ resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
- tmp@0.0.33:
- resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
- engines: {node: '>=0.6.0'}
+ tinyclip@0.1.15:
+ resolution: {integrity: sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==}
+ engines: {node: ^16.14.0 || >= 17.3.0}
- tmpl@1.0.5:
- resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
+ tinyexec@1.2.2:
+ resolution: {integrity: sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==}
+ engines: {node: '>=18'}
- to-arraybuffer@1.0.1:
- resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==}
+ tinyexec@1.2.4:
+ resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==}
+ engines: {node: '>=18'}
- to-fast-properties@1.0.3:
- resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==}
- engines: {node: '>=0.10.0'}
+ tinyexec@1.3.0:
+ resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==}
+ engines: {node: '>=18'}
- to-object-path@0.3.0:
- resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
- engines: {node: '>=0.10.0'}
+ tinyglobby@0.2.16:
+ resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
+ engines: {node: '>=12.0.0'}
- to-regex-range@2.1.1:
- resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==}
- engines: {node: '>=0.10.0'}
+ tinyglobby@0.2.17:
+ resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
+ engines: {node: '>=12.0.0'}
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
- to-regex@3.0.2:
- resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
- engines: {node: '>=0.10.0'}
+ to-valid-identifier@1.0.0:
+ resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==}
+ engines: {node: '>=20'}
toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
@@ -8466,93 +6864,25 @@ packages:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
- tough-cookie@5.1.2:
- resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
- engines: {node: '>=16'}
-
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
- tr46@5.1.1:
- resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
- engines: {node: '>=18'}
-
- tree-dump@1.0.2:
- resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- trim-newlines@4.1.1:
- resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==}
- engines: {node: '>=12'}
-
- ts-api-utils@1.0.3:
- resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
- engines: {node: '>=16.13.0'}
- peerDependencies:
- typescript: '>=4.2.0'
-
- ts-jest@29.4.4:
- resolution: {integrity: sha512-ccVcRABct5ZELCT5U0+DZwkXMCcOCLi2doHRrKy1nK/s7J7bch6TzJMsrY09WxgUUIP/ITfmcDS8D2yl63rnXw==}
- engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
- hasBin: true
- peerDependencies:
- '@babel/core': '>=7.0.0-beta.0 <8'
- '@jest/transform': ^29.0.0 || ^30.0.0
- '@jest/types': ^29.0.0 || ^30.0.0
- babel-jest: ^29.0.0 || ^30.0.0
- esbuild: '*'
- jest: ^29.0.0 || ^30.0.0
- jest-util: ^29.0.0 || ^30.0.0
- typescript: '>=4.3 <6'
- peerDependenciesMeta:
- '@babel/core':
- optional: true
- '@jest/transform':
- optional: true
- '@jest/types':
- optional: true
- babel-jest:
- optional: true
- esbuild:
- optional: true
- jest-util:
- optional: true
-
- ts-loader@8.4.0:
- resolution: {integrity: sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- typescript: '*'
- webpack: '*'
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
- ts-pnp@1.2.0:
- resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==}
- engines: {node: '>=6'}
+ ts-api-utils@2.5.0:
+ resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
+ engines: {node: '>=18.12'}
peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- tsconfig-paths@3.14.2:
- resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
-
- tsconfig@7.0.0:
- resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==}
-
- tslib@1.14.1:
- resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
-
- tslib@2.6.2:
- resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+ typescript: '>=4.8.4'
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- tty-browserify@0.0.0:
- resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==}
+ tsx@4.22.3:
+ resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
tweetnacl@1.0.3:
resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
@@ -8561,492 +6891,553 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- type-detect@4.0.8:
- resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
- engines: {node: '>=4'}
-
- type-fest@0.20.2:
- resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
- engines: {node: '>=10'}
-
- type-fest@0.21.3:
- resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
- engines: {node: '>=10'}
-
- type-fest@0.6.0:
- resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
- engines: {node: '>=8'}
-
- type-fest@0.8.1:
- resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
- engines: {node: '>=8'}
-
- type-fest@1.4.0:
- resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
- engines: {node: '>=10'}
-
- type-fest@4.41.0:
- resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
- engines: {node: '>=16'}
-
- typed-array-buffer@1.0.0:
- resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
- engines: {node: '>= 0.4'}
-
- typed-array-byte-length@1.0.0:
- resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
- engines: {node: '>= 0.4'}
-
- typed-array-byte-offset@1.0.0:
- resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==}
- engines: {node: '>= 0.4'}
-
- typed-array-length@1.0.4:
- resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
-
- typedarray-to-buffer@3.1.5:
- resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
+ type-fest@5.8.0:
+ resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==}
+ engines: {node: '>=20'}
- typedarray@0.0.6:
- resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
+ type-level-regexp@0.1.17:
+ resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==}
- typescript@4.9.5:
- resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
- engines: {node: '>=4.2.0'}
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
hasBin: true
- ua-parser-js@1.0.38:
- resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==}
+ ufo@1.6.4:
+ resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==}
- ufo@1.6.1:
- resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+ ultrahtml@1.7.0:
+ resolution: {integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==}
- uglify-js@3.19.3:
- resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
- engines: {node: '>=0.8.0'}
- hasBin: true
+ unconfig-core@7.5.0:
+ resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
- unbox-primitive@1.0.2:
- resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ unconfig@0.6.1:
+ resolution: {integrity: sha512-cVU+/sPloZqOyJEAfNwnQSFCzFrZm85vcVkryH7lnlB/PiTycUkAjt5Ds79cfIshGOZ+M5v3PBDnKgpmlE5DtA==}
+
+ unconfig@7.5.0:
+ resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==}
uncrypto@0.1.3:
resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
- unctx@2.3.1:
- resolution: {integrity: sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==}
-
- undici-types@7.13.0:
- resolution: {integrity: sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ==}
+ unctx@2.5.0:
+ resolution: {integrity: sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==}
- undici@6.19.7:
- resolution: {integrity: sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==}
- engines: {node: '>=18.17'}
+ unctx@3.0.0:
+ resolution: {integrity: sha512-DoXdZVeyi2jyEsn86i8MO5RTItm1kffUkH9/+DQORn3Q688AMOy2551CIl6AdGL2UpwD675wtbNOl75wIQN/uA==}
+ peerDependencies:
+ magic-string: '>=0.30.21'
+ oxc-parser: '>=0.140.0'
+ rolldown: ^1.1.5
+ unplugin: ^3.3.0
+ peerDependenciesMeta:
+ magic-string:
+ optional: true
+ oxc-parser:
+ optional: true
+ rolldown:
+ optional: true
+ unplugin:
+ optional: true
- unfetch@5.0.0:
- resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==}
+ undici-types@7.24.6:
+ resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
- unicode-canonical-property-names-ecmascript@2.0.0:
- resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
- engines: {node: '>=4'}
+ undici@8.10.0:
+ resolution: {integrity: sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ==}
+ engines: {node: '>=22.19.0'}
- unicode-match-property-ecmascript@2.0.0:
- resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
- engines: {node: '>=4'}
+ unenv@2.0.0-rc.24:
+ resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
- unicode-match-property-value-ecmascript@2.1.0:
- resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
- engines: {node: '>=4'}
+ unhead@2.1.17:
+ resolution: {integrity: sha512-HLMKXOszRhAPBrr6VlqCeVeJq2kbC4kXwzGLEZvvojPLWNYTJw22xG7Bfwhsvs31+IBet3Wl8ADg9dwYdyphfQ==}
- unicode-property-aliases-ecmascript@2.1.0:
- resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
- engines: {node: '>=4'}
+ unhead@3.3.1:
+ resolution: {integrity: sha512-eqHlbLyuvIXw898WopQmosTml4PdYW5ZhXDom/sf7ysAqQB9uvYrw2/dNvbrmkJTufSkmNmgGCjoQcvoT2mS/A==}
+ peerDependencies:
+ vite: '>=6.4.2'
+ peerDependenciesMeta:
+ vite:
+ optional: true
- unicorn-magic@0.1.0:
- resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
+ unicorn-magic@0.3.0:
+ resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
- unimport@3.4.0:
- resolution: {integrity: sha512-M/lfFEgufIT156QAr/jWHLUn55kEmxBBiQsMxvRSIbquwmeJEyQYgshHDEvQDWlSJrVOOTAgnJ3FvlsrpGkanA==}
-
- unimport@3.7.2:
- resolution: {integrity: sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==}
-
- union-value@1.0.1:
- resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
- engines: {node: '>=0.10.0'}
-
- unique-filename@1.1.1:
- resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==}
-
- unique-slug@2.0.2:
- resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==}
-
- unique-string@2.0.0:
- resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
- engines: {node: '>=8'}
-
- universalify@0.1.2:
- resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
- engines: {node: '>= 4.0.0'}
-
- universalify@2.0.0:
- resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
- engines: {node: '>= 10.0.0'}
+ unicorn-magic@0.4.0:
+ resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==}
+ engines: {node: '>=20'}
- unpipe@1.0.0:
- resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
- engines: {node: '>= 0.8'}
+ unifont@0.7.4:
+ resolution: {integrity: sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==}
- unplugin@1.11.0:
- resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==}
- engines: {node: '>=14.0.0'}
+ unimport@5.7.0:
+ resolution: {integrity: sha512-njnL6sp8lEA8QQbZrt+52p/g4X0rw3bnGGmUcJnt1jeG8+iiqO779aGz0PirCtydAIVcuTBRlJ52F0u46z309Q==}
+ engines: {node: '>=18.12.0'}
- unplugin@1.5.0:
- resolution: {integrity: sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==}
+ unimport@6.3.0:
+ resolution: {integrity: sha512-M+Dxk5W9WRd+8j56W9tp8lGW/dmMc7g5zj7BWQnEjKQhryBstqsi1V0izb0zHwSkEN8cSYV7K75/bykairV2tA==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ oxc-parser: '*'
+ rolldown: ^1.0.0
+ peerDependenciesMeta:
+ oxc-parser:
+ optional: true
+ rolldown:
+ optional: true
- unrs-resolver@1.11.1:
- resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
+ unimport@6.4.0:
+ resolution: {integrity: sha512-JJOOuNMFq8b4ZPBKwQUxEcba4MplskDzYI1Lvrf8rJfWphZTWvPNXWa493qsPngHUmub89w6C7j+SeLWTE/UIQ==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ oxc-parser: '*'
+ rolldown: ^1.0.0
+ peerDependenciesMeta:
+ oxc-parser:
+ optional: true
+ rolldown:
+ optional: true
- unset-value@1.0.0:
- resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
- engines: {node: '>=0.10.0'}
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
- untyped@1.4.0:
- resolution: {integrity: sha512-Egkr/s4zcMTEuulcIb7dgURS6QpN7DyqQYdf+jBtiaJvQ+eRsrtWUoX84SbvQWuLkXsOjM+8sJC9u6KoMK/U7Q==}
- hasBin: true
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
- untyped@1.4.2:
- resolution: {integrity: sha512-nC5q0DnPEPVURPhfPQLahhSTnemVtPzdx7ofiRxXpOB2SYnb3MfdU3DVGyJdS8Lx+tBWeAePO8BfU/3EgksM7Q==}
- hasBin: true
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
- upath@1.2.0:
- resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==}
- engines: {node: '>=4'}
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
- upath@2.0.1:
- resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==}
- engines: {node: '>=4'}
+ unist-util-visit@5.1.0:
+ resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
- update-browserslist-db@1.1.3:
- resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
- hasBin: true
+ unplugin-auto-import@21.0.0:
+ resolution: {integrity: sha512-vWuC8SwqJmxZFYwPojhOhOXDb5xFhNNcEVb9K/RFkyk/3VnfaOjzitWN7v+8DEKpMjSsY2AEGXNgt6I0yQrhRQ==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- browserslist: '>= 4.21.0'
+ '@nuxt/kit': ^4.0.0
+ '@vueuse/core': '*'
+ peerDependenciesMeta:
+ '@nuxt/kit':
+ optional: true
+ '@vueuse/core':
+ optional: true
- uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ unplugin-utils@0.3.1:
+ resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==}
+ engines: {node: '>=20.19.0'}
- urix@0.1.0:
- resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
- deprecated: Please see https://github.com/lydell/urix#deprecated
+ unplugin-utils@0.3.2:
+ resolution: {integrity: sha512-xVToRh2CTmLk2HnEG7ac4rl1MJTT3RFkpS8B++/SnB0kXvuaavD+n3m/vrzyWQOdJNSZQACnbz01pnppbwV5BA==}
+ engines: {node: '>=20.19.0'}
- url-loader@4.1.1:
- resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==}
- engines: {node: '>= 10.13.0'}
+ unplugin-vue-components@32.1.0:
+ resolution: {integrity: sha512-YiUkSxuRjab18XFOrX5VsIxXzccrfmHVGsGeJgSgklb829DQmCy9E4vvDUE4tuvZZdxyFJZX0Oc4TPnnxiiMyg==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- file-loader: '*'
- webpack: ^4.0.0 || ^5.0.0
+ '@nuxt/kit': ^3.2.2 || ^4.0.0
+ vue: ^3.0.0
peerDependenciesMeta:
- file-loader:
+ '@nuxt/kit':
optional: true
- url@0.11.3:
- resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==}
-
- use@3.1.1:
- resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
- engines: {node: '>=0.10.0'}
-
- util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
- util.promisify@1.0.0:
- resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==}
-
- util@0.10.4:
- resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==}
-
- util@0.11.1:
- resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==}
+ unplugin@2.3.11:
+ resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
+ engines: {node: '>=18.12.0'}
- utila@0.4.0:
- resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==}
+ unplugin@3.0.0:
+ resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
- utils-merge@1.0.1:
- resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
- engines: {node: '>= 0.4.0'}
-
- uuid@8.3.2:
- resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
- hasBin: true
-
- v8-to-istanbul@9.3.0:
- resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
- engines: {node: '>=10.12.0'}
-
- validate-npm-package-license@3.0.4:
- resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
-
- vary@1.1.2:
- resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
- engines: {node: '>= 0.8'}
-
- vite-plugin-eslint@1.8.1:
- resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==}
- peerDependencies:
- eslint: '>=7'
- vite: '>=2'
-
- vite-plugin-stylelint@5.3.1:
- resolution: {integrity: sha512-M/hSdfOwnOVghbJDeuuYIU2xO/MMukYR8QcEyNKFPG8ro1L+DlTdViix2B2d/FvAw14WPX88ckA5A7NvUjJz8w==}
- engines: {node: '>=14.18'}
+ unplugin@3.3.0:
+ resolution: {integrity: sha512-qa66K+crbfyE6JK10GjvbJeRrOsuC/JpbnHctfyp/i4oBTxWOzJfRZyDiOk1PtErMFRu8JhsU/wPvOdBNWe5Rg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- '@types/stylelint': ^13.0.0
- postcss: ^7.0.0 || ^8.0.0
- rollup: ^2.0.0 || ^3.0.0 || ^4.0.0
- stylelint: ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
- vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
+ '@farmfe/core': '*'
+ '@rspack/core': '*'
+ bun-types-no-globals: '*'
+ esbuild: '*'
+ rolldown: '*'
+ rollup: '*'
+ unloader: '*'
+ vite: '*'
+ webpack: '*'
peerDependenciesMeta:
- '@types/stylelint':
+ '@farmfe/core':
+ optional: true
+ '@rspack/core':
optional: true
- postcss:
+ bun-types-no-globals:
+ optional: true
+ esbuild:
+ optional: true
+ rolldown:
optional: true
rollup:
optional: true
+ unloader:
+ optional: true
+ vite:
+ optional: true
+ webpack:
+ optional: true
- vite@4.5.3:
- resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==}
- engines: {node: ^14.18.0 || >=16.0.0}
- hasBin: true
- peerDependencies:
- '@types/node': '>= 14'
- less: '*'
- lightningcss: ^1.21.0
- sass: '*'
- stylus: '*'
- sugarss: '*'
- terser: ^5.4.0
+ unrouting@0.2.2:
+ resolution: {integrity: sha512-EoCab68s1o9AWFq9fjKsMEsmjKrPO11SAsvopikks2eEm/KLXgZMCof4cgpVgdy0Vz71OFBJw6DoDqu1oOSFGw==}
+
+ unrs-resolver@1.12.2:
+ resolution: {integrity: sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==}
+
+ unstorage@1.17.5:
+ resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==}
+ peerDependencies:
+ '@azure/app-configuration': ^1.8.0
+ '@azure/cosmos': ^4.2.0
+ '@azure/data-tables': ^13.3.0
+ '@azure/identity': ^4.6.0
+ '@azure/keyvault-secrets': ^4.9.0
+ '@azure/storage-blob': ^12.26.0
+ '@capacitor/preferences': ^6 || ^7 || ^8
+ '@deno/kv': '>=0.9.0'
+ '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0
+ '@planetscale/database': ^1.19.0
+ '@upstash/redis': ^1.34.3
+ '@vercel/blob': '>=0.27.1'
+ '@vercel/functions': ^2.2.12 || ^3.0.0
+ '@vercel/kv': ^1 || ^2 || ^3
+ aws4fetch: ^1.0.20
+ db0: '>=0.2.1'
+ idb-keyval: ^6.2.1
+ ioredis: ^5.4.2
+ uploadthing: ^7.4.4
peerDependenciesMeta:
- '@types/node':
+ '@azure/app-configuration':
optional: true
- less:
+ '@azure/cosmos':
optional: true
- lightningcss:
+ '@azure/data-tables':
optional: true
- sass:
+ '@azure/identity':
optional: true
- stylus:
+ '@azure/keyvault-secrets':
optional: true
- sugarss:
+ '@azure/storage-blob':
optional: true
- terser:
+ '@capacitor/preferences':
+ optional: true
+ '@deno/kv':
+ optional: true
+ '@netlify/blobs':
+ optional: true
+ '@planetscale/database':
+ optional: true
+ '@upstash/redis':
+ optional: true
+ '@vercel/blob':
+ optional: true
+ '@vercel/functions':
+ optional: true
+ '@vercel/kv':
+ optional: true
+ aws4fetch:
+ optional: true
+ db0:
+ optional: true
+ idb-keyval:
+ optional: true
+ ioredis:
+ optional: true
+ uploadthing:
optional: true
- vm-browserify@1.1.2:
- resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}
+ untun@0.2.2:
+ resolution: {integrity: sha512-+NnOJcSiEtYsVgJmXUzQbJeRAFXJC4yPJYuh6kF9B0Rm6zunXcs/3GZOTllyocSbUDIxD6Bj7e/4ATw7sph1Sw==}
+ hasBin: true
- vue-chartjs@5.3.2:
- resolution: {integrity: sha512-NrkbRRoYshbXbWqJkTN6InoDVwVb90C0R7eAVgMWcB9dPikbruaOoTFjFYHE/+tNPdIe6qdLCDjfjPHQ0fw4jw==}
- peerDependencies:
- chart.js: ^4.1.1
- vue: ^3.0.0-0 || ^2.7.0
+ untyped@2.0.0:
+ resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==}
+ hasBin: true
- vue-class-component@7.2.6:
- resolution: {integrity: sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==}
- peerDependencies:
- vue: ^2.0.0
+ unwasm@0.5.3:
+ resolution: {integrity: sha512-keBgTSfp3r6+s9ZcSma+0chwxQdmLbB5+dAD9vjtB21UTMYuKAxHXCU1K2CbCtnP09EaWeRvACnXk0EJtUx+hw==}
- vue-client-only@2.1.0:
- resolution: {integrity: sha512-vKl1skEKn8EK9f8P2ZzhRnuaRHLHrlt1sbRmazlvsx6EiC3A8oWF8YCBrMJzoN+W3OnElwIGbVjsx6/xelY1AA==}
+ upath@2.0.1:
+ resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==}
+ engines: {node: '>=4'}
- vue-eslint-parser@9.3.1:
- resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==}
- engines: {node: ^14.17.0 || >=16.0.0}
+ update-browserslist-db@1.3.0:
+ resolution: {integrity: sha512-x/M6q3w4Ybp91CNaS4S69UnliqR3BzRpOT6LWbksjth0S/+jhfaPJsWjt/TewpT8j9eLIojUf5jr29WextHroA==}
+ hasBin: true
peerDependencies:
- eslint: '>=6.0.0'
+ browserslist: '>= 4.21.0'
- vue-eslint-parser@9.4.3:
- resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==}
- engines: {node: ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: '>=6.0.0'
+ uqr@0.1.3:
+ resolution: {integrity: sha512-0rjE8iEJe4YmT9TOhwsZtqCMRLc5DXZUI2UEYUUg63ikBkqqE5EYWaI0etFe/5KUcmcYwLih2RND1kq+hrUJXA==}
- vue-glow@1.4.2:
- resolution: {integrity: sha512-MDC5Q817fH51OhCpYopAcXwMZ49yVAjEgiJ1sXlc3Kyul0AU343AbB0zflr+LnuiuS/EegfVkxYh0I67xSMYZw==}
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
- vue-hot-reload-api@2.3.4:
- resolution: {integrity: sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==}
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- vue-jest@3.0.7:
- resolution: {integrity: sha512-PIOxFM+wsBMry26ZpfBvUQ/DGH2hvp5khDQ1n51g3bN0TwFwTy4J85XVfxTRMukqHji/GnAoGUnlZ5Ao73K62w==}
+ v-phone-input@7.0.0:
+ resolution: {integrity: sha512-kMlb0qFpOZqC/61LFjQMlpLC3+555YCJYhoVMsxP8PXwX/kN31mGXh14w1fiNR7Y29Mph9KFVb+NpRjZLFg7QA==}
+ engines: {node: '>=12'}
peerDependencies:
- babel-core: ^6.25.0 || ^7.0.0-0
- vue: ^2.x
- vue-template-compiler: ^2.x
+ vue: ^3.5.0
- vue-loader@15.11.1:
- resolution: {integrity: sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==}
+ valibot@1.4.1:
+ resolution: {integrity: sha512-klCmFTz2jeDluy9RwX+F884TCiogtdBJ/YaxSx1EOBYXa3NXNWj8kR1jjN8rzluwojJVWWaHJ4r1U5LfICnM3g==}
peerDependencies:
- '@vue/compiler-sfc': ^3.0.8
- cache-loader: '*'
- css-loader: '*'
- prettier: '*'
- vue-template-compiler: '*'
- webpack: ^3.0.0 || ^4.1.0 || ^5.0.0-0
+ typescript: '>=5'
peerDependenciesMeta:
- '@vue/compiler-sfc':
- optional: true
- cache-loader:
- optional: true
- prettier:
- optional: true
- vue-template-compiler:
+ typescript:
optional: true
- vue-meta@2.4.0:
- resolution: {integrity: sha512-XEeZUmlVeODclAjCNpWDnjgw+t3WA6gdzs6ENoIAgwO1J1d5p1tezDhtteLUFwcaQaTtayRrsx7GL6oXp/m2Jw==}
-
- vue-no-ssr@1.1.1:
- resolution: {integrity: sha512-ZMjqRpWabMPqPc7gIrG0Nw6vRf1+itwf0Itft7LbMXs2g3Zs/NFmevjZGN1x7K3Q95GmIjWbQZTVerxiBxI+0g==}
-
- vue-property-decorator@9.1.2:
- resolution: {integrity: sha512-xYA8MkZynPBGd/w5QFJ2d/NM0z/YeegMqYTphy7NJQXbZcuU6FC6AOdUAcy4SXP+YnkerC6AfH+ldg7PDk9ESQ==}
+ vaul-vue@0.4.1:
+ resolution: {integrity: sha512-A6jOWOZX5yvyo1qMn7IveoWN91mJI5L3BUKsIwkg6qrTGgHs1Sb1JF/vyLJgnbN1rH4OOOxFbtqL9A46bOyGUQ==}
peerDependencies:
- vue: '*'
- vue-class-component: '*'
+ reka-ui: ^2.0.0
+ vue: ^3.3.0
- vue-router@3.6.5:
- resolution: {integrity: sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==}
- peerDependencies:
- vue: ^2
+ verkit@0.2.0:
+ resolution: {integrity: sha512-6M8R2xSKplkQ+0mAm07IMh548GLLPUnRQZJCCe/W4rfk/SXW2bs8ZJSWa5kjdIdsx3hLG5oLWROJ4+N5hpX08g==}
+ engines: {node: '>=18.12.0'}
- vue-server-renderer@2.7.16:
- resolution: {integrity: sha512-U7GgR4rYmHmbs3Z2gqsasfk7JNuTsy/xrR5EMMGRLkjN8+ryDlqQq6Uu3DcmbCATAei814YOxyl0eq2HNqgXyQ==}
+ vfile-message@4.0.3:
+ resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
- vue-style-loader@4.1.3:
- resolution: {integrity: sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==}
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
- vue-template-compiler@2.7.16:
- resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
+ vite-dev-rpc@2.0.0:
+ resolution: {integrity: sha512-yKwbTwdHKSD2k/aGqyWpPHepo45OQc8lH3/6IfT4ZqeKE26ooKvi4WIEKzqWav8v+9Is8u1k8q54hvOmqASazA==}
+ peerDependencies:
+ vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 || ^8.0.0
- vue-template-es2015-compiler@1.9.1:
- resolution: {integrity: sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==}
+ vite-hot-client@2.2.0:
+ resolution: {integrity: sha512-76Zs9zrHbH7M7wqeyooGQKdX+yg0pQ0xuQ1PbFp4z5a0Lzn2e5IPFoCswnmqZ4GiwqB4Jo3WcDAMO9jARTJl8w==}
+ peerDependencies:
+ vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0
- vue@2.7.16:
- resolution: {integrity: sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==}
- deprecated: Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.
+ vite-node@6.0.0:
+ resolution: {integrity: sha512-oj4PVrT+pDh6GYf5wfUXkcZyekYS8kKPfLPXVl8qe324Ec6l4K2DUKNadRbZ3LQl0qGcDz+PyOo7ZAh00Y+JjQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
- vuetify-loader@1.9.2:
- resolution: {integrity: sha512-8PP2w7aAs/rjA+Izec6qY7sHVb75MNrGQrDOTZJ5IEnvl+NiFhVpU2iWdRDZ3eMS842cWxSWStvkr+KJJKy+Iw==}
+ vite-plugin-checker@0.14.5:
+ resolution: {integrity: sha512-c9lQ92eisUO+F7Fd93aelojmiOS+NQpPgQ1XR2LTQHox1/laZf4yAoQj+L3RA9Vgh10e2nFd9b8r2LLyYZsbpA==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- gm: ^1.23.0
- pug: ^2.0.0 || ^3.0.0
- sharp: '*'
- vue: ^2.7.2
- vuetify: ^1.3.0 || ^2.0.0
- webpack: ^4.0.0 || ^5.0.0
+ '@biomejs/biome': '>=2.4.12'
+ eslint: '>=9.39.4'
+ meow: ^13.2.0 || ^14.0.0
+ optionator: ^0.9.4
+ oxlint: '>=1'
+ stylelint: '>=16.26.1'
+ typescript: '*'
+ vite: '>=5.4.21'
+ vue-tsc: ~2.2.10 || ^3.0.0
peerDependenciesMeta:
- gm:
+ '@biomejs/biome':
+ optional: true
+ eslint:
optional: true
- pug:
+ meow:
optional: true
- sharp:
+ optionator:
+ optional: true
+ oxlint:
+ optional: true
+ stylelint:
+ optional: true
+ typescript:
+ optional: true
+ vue-tsc:
optional: true
- vuetify@2.7.2:
- resolution: {integrity: sha512-qr04ww7uzAPQbpk751x4fSdjsJ+zREzjQ/rBlcQGuWS6MIMFMXcXcwvp4+/tnGsULZxPMWfQ0kmZmg5Yc/XzgQ==}
- deprecated: This version is deprecated
+ vite-plugin-inspect@11.4.1:
+ resolution: {integrity: sha512-ShOFe2PURXGvRS5OrgmOLZOCwDTD7dEBVt0tMpFPKb9AsvqXKCRGM8QgKrUbRbJYFXScHvDPpGRd28rYidC0tA==}
+ engines: {node: '>=14'}
peerDependencies:
- vue: ^2.6.4
+ '@nuxt/kit': '*'
+ vite: ^6.0.0 || ^7.0.0-0 || ^8.0.0-0
+ peerDependenciesMeta:
+ '@nuxt/kit':
+ optional: true
- vuex@3.6.2:
- resolution: {integrity: sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==}
+ vite-plugin-vue-tracer@1.4.0:
+ resolution: {integrity: sha512-0tQCjCqZWVSK6UeRW9S4ABbf47lKQ68zvrT2FNvZmiL+alDydCVyH/T3Jlfbdc3T3C2Iuyyl5aVsMbF8IQIoxA==}
peerDependencies:
- vue: ^2.0.0
-
- w3c-xmlserializer@5.0.0:
- resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
- engines: {node: '>=18'}
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ vue: ^3.5.0
- walker@1.0.8:
- resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+ vite-plugin-vuetify@2.1.3:
+ resolution: {integrity: sha512-Q4SC/4TqbNvaZIFb9YsfBqkGlYHbJJJ6uU3CnRBZqLUF3s5eCMVZAaV4GkTbehIH/bhSj42lMXztOwc71u6rVw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: '>=5'
+ vue: ^3.0.0
+ vuetify: '>=3'
- watchpack-chokidar2@2.0.1:
- resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==}
+ vite@8.2.1:
+ resolution: {integrity: sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.4.0
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
- watchpack@1.7.5:
- resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==}
+ vue-bundle-renderer@2.3.1:
+ resolution: {integrity: sha512-7F4LNMopUw5RgYWo4zCmVUHCc6aQRC6dCKHUYkM/n+fux4AUGdL1x6m5A515WWyFysRRN7cx3hBzVqoisfRfzw==}
- watchpack@2.4.4:
- resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==}
- engines: {node: '>=10.13.0'}
+ vue-chartjs@5.3.3:
+ resolution: {integrity: sha512-jqxtL8KZ6YJ5NTv6XzrzLS7osyegOi28UGNZW0h9OkDL7Sh1396ht4Dorh04aKrl2LiSalQ84WtqiG0RIJb0tA==}
+ peerDependencies:
+ chart.js: ^4.1.1
+ vue: ^3.0.0-0 || ^2.7.0
- webidl-conversions@3.0.1:
- resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ vue-component-type-helpers@3.3.6:
+ resolution: {integrity: sha512-FkljacAwJ9BUoSUdpFe3VDy0sGigNlTH9+2zcXUWmZOjN8swiCkl3t48wOJun0OsUd2cEIda1l04tsxMiKIIrQ==}
- webidl-conversions@7.0.0:
- resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
+ vue-demi@0.14.10:
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
engines: {node: '>=12'}
-
- webpack-bundle-analyzer@4.10.2:
- resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==}
- engines: {node: '>= 10.13.0'}
hasBin: true
-
- webpack-dev-middleware@5.3.4:
- resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==}
- engines: {node: '>= 12.13.0'}
peerDependencies:
- webpack: ^4.0.0 || ^5.0.0
-
- webpack-hot-middleware@2.26.1:
- resolution: {integrity: sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==}
-
- webpack-node-externals@3.0.0:
- resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==}
- engines: {node: '>=6'}
-
- webpack-sources@1.4.3:
- resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==}
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
- webpack-sources@3.3.3:
- resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
- engines: {node: '>=10.13.0'}
+ vue-devtools-stub@0.1.0:
+ resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==}
- webpack-virtual-modules@0.5.0:
- resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}
+ vue-eslint-parser@10.4.1:
+ resolution: {integrity: sha512-Gk6gRDj0n/fkRa3C3l0bBheoBckUq/Rs0F/TvMWIS6nzzx67amAViMe9CkNgsP2tXyQONvGiHQESHwFtZ3aYDA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- webpack-virtual-modules@0.6.2:
- resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+ vue-router@5.0.7:
+ resolution: {integrity: sha512-dqfk8kvRbCutmCOCj/XLDqDEYxc1wBdAOGLuVy5M93ifYMsBd5fIjfaPN4tQAbxr5IprdBDIox1gr4wYyOx/SA==}
+ peerDependencies:
+ '@pinia/colada': '>=0.21.2'
+ '@vue/compiler-sfc': ^3.5.34
+ pinia: ^3.0.4
+ vue: ^3.5.34
+ peerDependenciesMeta:
+ '@pinia/colada':
+ optional: true
+ '@vue/compiler-sfc':
+ optional: true
+ pinia:
+ optional: true
- webpack@4.47.0:
- resolution: {integrity: sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==}
- engines: {node: '>=6.11.5'}
- hasBin: true
+ vue-router@5.2.0:
+ resolution: {integrity: sha512-QAC5i0LEb1GLG0LXDQmHu8L7FX12j0KwU/JTKmLQUJMrn04gQdKP6Du+p0QwpHb3iy71vBlqnHQ8WAfOSAWhqw==}
peerDependencies:
- webpack-cli: '*'
- webpack-command: '*'
+ '@pinia/colada': '>=0.21.2'
+ '@vue/compiler-sfc': ^3.5.34 || ^4.0.0
+ pinia: ^3.0.4 || ^4.0.2
+ vite: ^7.3.0 || ^8.0.0
+ vue: ^3.5.34 || ^4.0.0
peerDependenciesMeta:
- webpack-cli:
+ '@pinia/colada':
+ optional: true
+ '@vue/compiler-sfc':
optional: true
- webpack-command:
+ pinia:
+ optional: true
+ vite:
optional: true
- webpack@5.102.0:
- resolution: {integrity: sha512-hUtqAR3ZLVEYDEABdBioQCIqSoguHbFn1K7WlPPWSuXmx0031BD73PSE35jKyftdSh4YLDoQNgK4pqBt5Q82MA==}
- engines: {node: '>=10.13.0'}
- hasBin: true
+ vue@3.5.34:
+ resolution: {integrity: sha512-WdLBG9gm02OgJIG9axd5Hpx0TFLdzVgfG2evFFu8Rur5O/IoGc5cMjnjh3tPL6GnRGsYvUhBSKVPYVcxRKpMCA==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ vue@3.5.41:
+ resolution: {integrity: sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg==}
peerDependencies:
- webpack-cli: '*'
+ typescript: '*'
peerDependenciesMeta:
- webpack-cli:
+ typescript:
optional: true
- webpackbar@6.0.1:
- resolution: {integrity: sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==}
- engines: {node: '>=14.21.3'}
+ vuetify-nuxt-module@0.19.5:
+ resolution: {integrity: sha512-B4SgLFqNlxaF/PZacxy+Wdy09G33E/aZXAPjNbFIblT7JOs07+VuNPrGUQuAzKwiGmU30xgkm5PL9opNpVcXTg==}
+
+ vuetify@4.0.7:
+ resolution: {integrity: sha512-SV+YJkBmudY3s9qfZO2ZGUsrD0TDQU8pMBH1ERga9AEyjGvioZuXXh93V9wHxXJphvqRC2NW10Nt2lW9IZQcPw==}
peerDependencies:
- webpack: 3 || 4 || 5
+ typescript: '>=4.7'
+ vite-plugin-vuetify: '>=2.1.0'
+ vue: ^3.5.0
+ webpack-plugin-vuetify: '>=3.1.0'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ vite-plugin-vuetify:
+ optional: true
+ webpack-plugin-vuetify:
+ optional: true
+
+ w3c-keyname@2.2.8:
+ resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
+
+ web-vitals@4.2.4:
+ resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
websocket-driver@0.7.4:
resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
@@ -9056,31 +7447,16 @@ packages:
resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
engines: {node: '>=0.8.0'}
- whatwg-encoding@3.1.1:
- resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
- engines: {node: '>=18'}
-
- whatwg-mimetype@4.0.0:
- resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
- engines: {node: '>=18'}
-
- whatwg-url@14.2.0:
- resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
- engines: {node: '>=18'}
-
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
- which-boxed-primitive@1.0.2:
- resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+ wheel-gestures@2.2.48:
+ resolution: {integrity: sha512-f+Gy33Oa5Z14XY9679Zze+7VFhbsQfBFXodnU2x589l4kxGM9L5Y8zETTmcMR5pWOPQyRv4Z0lNax6xCO0NSlA==}
+ engines: {node: '>=18'}
which-module@2.0.1:
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
- which-typed-array@1.1.11:
- resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==}
- engines: {node: '>= 0.4'}
-
which@1.3.1:
resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
hasBin: true
@@ -9090,15 +7466,21 @@ packages:
engines: {node: '>= 8'}
hasBin: true
- widest-line@3.1.0:
- resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
- engines: {node: '>=8'}
+ which@6.0.1:
+ resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==}
+ engines: {node: ^20.17.0 || >=22.9.0}
+ hasBin: true
- wordwrap@1.0.0:
- resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ world-flags-sprite@0.0.2:
+ resolution: {integrity: sha512-v4Qjd8+5hBNVyn9AKFcVTaKZWaz0fZliHZ7FK0ugPMbAv+oI5BZrT72rBxmGiD6D86yshA08FTo/CcAaZW7buw==}
- worker-farm@1.7.0:
- resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==}
+ wrap-ansi@10.0.0:
+ resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==}
+ engines: {node: '>=20'}
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
@@ -9112,41 +7494,16 @@ packages:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
- wrap-ansi@9.0.0:
- resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
engines: {node: '>=18'}
- wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
- write-file-atomic@2.4.3:
- resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
+ write-file-atomic@7.0.1:
+ resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==}
+ engines: {node: ^20.17.0 || >=22.9.0}
- write-file-atomic@3.0.3:
- resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==}
-
- write-file-atomic@5.0.1:
- resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-
- write-json-file@2.3.0:
- resolution: {integrity: sha512-84+F0igFp2dPD6UpAQjOUX3CdKUOqUzn6oE9sDBNzUXINR5VceJ1rauZltqQB/bcYsx3EpKys4C7/PivKUAiWQ==}
- engines: {node: '>=4'}
-
- ws@7.5.10:
- resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
- engines: {node: '>=8.3.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ^5.0.2
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
- ws@8.18.3:
- resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
+ ws@8.21.3:
+ resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -9157,31 +7514,23 @@ packages:
utf-8-validate:
optional: true
- xdg-basedir@4.0.0:
- resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==}
- engines: {node: '>=8'}
+ wsl-utils@0.3.1:
+ resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==}
+ engines: {node: '>=20'}
xml-name-validator@4.0.0:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}
- xml-name-validator@5.0.0:
- resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
- engines: {node: '>=18'}
-
- xmlbuilder@13.0.2:
- resolution: {integrity: sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==}
- engines: {node: '>=6.0'}
-
- xmlchars@2.2.0:
- resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
-
- xtend@4.0.2:
- resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
- engines: {node: '>=0.4'}
+ xml-naming@0.1.0:
+ resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==}
+ engines: {node: '>=16.0.0'}
- xxhashjs@0.2.2:
- resolution: {integrity: sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==}
+ y-protocols@1.0.7:
+ resolution: {integrity: sha512-YSVsLoXxO67J6eE/nV4AtFtT3QEotZf5sK5BHxFBXso7VDUT3Tx07IfA6hsu5Q5OmBdMkQVmFZ9QOA7fikWvnw==}
+ engines: {node: '>=16.0.0', npm: '>=8.0.0'}
+ peerDependencies:
+ yjs: ^13.0.0
y18n@4.0.3:
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
@@ -9190,9602 +7539,7574 @@ packages:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
- yallist@2.1.2:
- resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
-
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- yallist@4.0.0:
- resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
-
- yaml@1.10.2:
- resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
- engines: {node: '>= 6'}
-
- yaml@2.8.1:
- resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==}
- engines: {node: '>= 14.6'}
- hasBin: true
-
- yargs-parser@18.1.3:
- resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
- engines: {node: '>=6'}
-
- yargs-parser@20.2.9:
- resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
- engines: {node: '>=10'}
-
- yargs-parser@21.1.1:
- resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
- engines: {node: '>=12'}
-
- yargs@15.4.1:
- resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
- engines: {node: '>=8'}
-
- yargs@16.2.0:
- resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
- engines: {node: '>=10'}
-
- yargs@17.7.2:
- resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
- engines: {node: '>=12'}
-
- yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
-
- yocto-queue@1.2.1:
- resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
- engines: {node: '>=12.20'}
-
-snapshots:
-
- '@aashutoshrathi/word-wrap@1.2.6': {}
-
- '@ampproject/remapping@2.2.1':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.31
-
- '@asamuzakjp/css-color@3.2.0':
- dependencies:
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- lru-cache: 10.4.3
-
- '@babel/code-frame@7.22.13':
- dependencies:
- '@babel/highlight': 7.23.4
- chalk: 2.4.2
-
- '@babel/code-frame@7.23.5':
- dependencies:
- '@babel/highlight': 7.23.4
- chalk: 2.4.2
-
- '@babel/code-frame@7.24.7':
- dependencies:
- '@babel/highlight': 7.24.7
- picocolors: 1.1.1
-
- '@babel/code-frame@7.27.1':
- dependencies:
- '@babel/helper-validator-identifier': 7.27.1
- js-tokens: 4.0.0
- picocolors: 1.1.1
-
- '@babel/compat-data@7.24.7': {}
-
- '@babel/compat-data@7.28.4': {}
-
- '@babel/core@7.24.7':
- dependencies:
- '@ampproject/remapping': 2.2.1
- '@babel/code-frame': 7.24.7
- '@babel/generator': 7.24.7
- '@babel/helper-compilation-targets': 7.24.7
- '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7)
- '@babel/helpers': 7.24.7
- '@babel/parser': 7.28.0
- '@babel/template': 7.24.7
- '@babel/traverse': 7.24.7
- '@babel/types': 7.28.2
- convert-source-map: 2.0.0
- debug: 4.4.1
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/core@7.28.4':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
- '@babel/helpers': 7.28.4
- '@babel/parser': 7.28.4
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- '@jridgewell/remapping': 2.3.5
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/eslint-parser@7.27.5(@babel/core@7.28.4)(eslint@8.57.1)':
- dependencies:
- '@babel/core': 7.28.4
- '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
- eslint: 8.57.1
- eslint-visitor-keys: 2.1.0
- semver: 6.3.1
-
- '@babel/generator@7.24.7':
- dependencies:
- '@babel/types': 7.28.4
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.31
- jsesc: 2.5.2
-
- '@babel/generator@7.28.3':
- dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- jsesc: 3.1.0
-
- '@babel/helper-annotate-as-pure@7.22.5':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/helper-annotate-as-pure@7.24.7':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7':
- dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-compilation-targets@7.24.7':
- dependencies:
- '@babel/compat-data': 7.24.7
- '@babel/helper-validator-option': 7.24.7
- browserslist: 4.26.2
- lru-cache: 5.1.1
- semver: 6.3.1
-
- '@babel/helper-compilation-targets@7.27.2':
- dependencies:
- '@babel/compat-data': 7.28.4
- '@babel/helper-validator-option': 7.27.1
- browserslist: 4.26.3
- lru-cache: 5.1.1
- semver: 6.3.1
-
- '@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-member-expression-to-functions': 7.24.5
- '@babel/helper-optimise-call-expression': 7.22.5
- '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.7)
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/helper-split-export-declaration': 7.24.5
- semver: 6.3.1
-
- '@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-annotate-as-pure': 7.24.7
- '@babel/helper-environment-visitor': 7.24.7
- '@babel/helper-function-name': 7.24.7
- '@babel/helper-member-expression-to-functions': 7.24.7
- '@babel/helper-optimise-call-expression': 7.24.7
- '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-skip-transparent-expression-wrappers': 7.24.7
- '@babel/helper-split-export-declaration': 7.24.7
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-annotate-as-pure': 7.22.5
- regexpu-core: 5.3.2
- semver: 6.3.1
-
- '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-annotate-as-pure': 7.24.7
- regexpu-core: 5.3.2
- semver: 6.3.1
-
- '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-plugin-utils': 7.27.1
- debug: 4.4.3
- lodash.debounce: 4.0.8
- resolve: 1.22.6
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-environment-visitor@7.22.20': {}
-
- '@babel/helper-environment-visitor@7.24.7':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/helper-function-name@7.23.0':
- dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.28.4
-
- '@babel/helper-function-name@7.24.7':
- dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.28.4
-
- '@babel/helper-globals@7.28.0': {}
-
- '@babel/helper-hoist-variables@7.24.7':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/helper-member-expression-to-functions@7.24.5':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/helper-member-expression-to-functions@7.24.7':
- dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-imports@7.24.7':
- dependencies:
- '@babel/traverse': 7.24.7
- '@babel/types': 7.28.2
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-imports@7.27.1':
- dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-environment-visitor': 7.24.7
- '@babel/helper-module-imports': 7.24.7
- '@babel/helper-simple-access': 7.24.7
- '@babel/helper-split-export-declaration': 7.24.7
- '@babel/helper-validator-identifier': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.28.3(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.28.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.28.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-optimise-call-expression@7.22.5':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/helper-optimise-call-expression@7.24.7':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/helper-plugin-utils@7.27.1': {}
-
- '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-annotate-as-pure': 7.24.7
- '@babel/helper-environment-visitor': 7.24.7
- '@babel/helper-wrap-function': 7.24.7
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-member-expression-to-functions': 7.24.5
- '@babel/helper-optimise-call-expression': 7.22.5
-
- '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-environment-visitor': 7.24.7
- '@babel/helper-member-expression-to-functions': 7.24.7
- '@babel/helper-optimise-call-expression': 7.24.7
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-simple-access@7.24.7':
- dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-skip-transparent-expression-wrappers@7.22.5':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/helper-skip-transparent-expression-wrappers@7.24.7':
- dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-split-export-declaration@7.24.5':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/helper-split-export-declaration@7.24.7':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/helper-string-parser@7.27.1': {}
-
- '@babel/helper-validator-identifier@7.24.5': {}
-
- '@babel/helper-validator-identifier@7.27.1': {}
-
- '@babel/helper-validator-option@7.24.7': {}
-
- '@babel/helper-validator-option@7.27.1': {}
-
- '@babel/helper-wrap-function@7.24.7':
- dependencies:
- '@babel/helper-function-name': 7.24.7
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helpers@7.24.7':
- dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.28.4
-
- '@babel/helpers@7.28.4':
- dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.28.4
-
- '@babel/highlight@7.23.4':
- dependencies:
- '@babel/helper-validator-identifier': 7.27.1
- chalk: 2.4.2
- js-tokens: 4.0.0
-
- '@babel/highlight@7.24.7':
- dependencies:
- '@babel/helper-validator-identifier': 7.27.1
- chalk: 2.4.2
- js-tokens: 4.0.0
- picocolors: 1.1.1
-
- '@babel/parser@7.24.0':
- dependencies:
- '@babel/types': 7.28.2
-
- '@babel/parser@7.28.0':
- dependencies:
- '@babel/types': 7.28.2
-
- '@babel/parser@7.28.4':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-environment-visitor': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.24.7
- '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-environment-visitor': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.24.7)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7)
-
- '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7)
-
- '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
-
- '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7)
-
- '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-environment-visitor': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-module-imports': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-classes@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-annotate-as-pure': 7.24.7
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-environment-visitor': 7.24.7
- '@babel/helper-function-name': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-split-export-declaration': 7.24.7
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/template': 7.27.2
-
- '@babel/plugin-transform-destructuring@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7)
-
- '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7)
-
- '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.24.7
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-function-name': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7)
-
- '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7)
-
- '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-modules-commonjs@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-simple-access': 7.24.7
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-hoist-variables': 7.24.7
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7)
-
- '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7)
-
- '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7)
- '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7)
-
- '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7)
-
- '@babel/plugin-transform-optional-chaining@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.24.7
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-annotate-as-pure': 7.24.7
- '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- regenerator-transform: 0.15.2
-
- '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-runtime@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-module-imports': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7)
- babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7)
- babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7)
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.24.7
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-typeof-symbol@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/preset-env@7.24.7(@babel/core@7.24.7)':
- dependencies:
- '@babel/compat-data': 7.24.7
- '@babel/core': 7.24.7
- '@babel/helper-compilation-targets': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-validator-option': 7.24.7
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7)
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7)
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7)
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7)
- '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7)
- '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7)
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7)
- '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7)
- '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-classes': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-destructuring': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-typeof-symbol': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7)
- '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7)
- babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7)
- babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7)
- babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7)
- core-js-compat: 3.37.1
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/types': 7.28.4
- esutils: 2.0.3
-
- '@babel/regjsgen@0.8.0': {}
-
- '@babel/runtime@7.24.5':
- dependencies:
- regenerator-runtime: 0.14.1
-
- '@babel/runtime@7.24.7':
- dependencies:
- regenerator-runtime: 0.14.1
-
- '@babel/standalone@7.23.1': {}
-
- '@babel/standalone@7.24.7': {}
-
- '@babel/template@7.24.7':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
-
- '@babel/template@7.27.2':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
-
- '@babel/traverse@7.24.7':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
- '@babel/helper-environment-visitor': 7.24.7
- '@babel/helper-function-name': 7.24.7
- '@babel/helper-hoist-variables': 7.24.7
- '@babel/helper-split-export-declaration': 7.24.7
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
- debug: 4.4.3
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/traverse@7.28.4':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
- '@babel/helper-globals': 7.28.0
- '@babel/parser': 7.28.4
- '@babel/template': 7.27.2
- '@babel/types': 7.28.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- '@babel/types@7.28.2':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
-
- '@babel/types@7.28.4':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
-
- '@bcoe/v8-coverage@0.2.3': {}
-
- '@commitlint/cli@20.1.0(@types/node@24.6.2)(typescript@4.9.5)':
- dependencies:
- '@commitlint/format': 20.0.0
- '@commitlint/lint': 20.0.0
- '@commitlint/load': 20.1.0(@types/node@24.6.2)(typescript@4.9.5)
- '@commitlint/read': 20.0.0
- '@commitlint/types': 20.0.0
- tinyexec: 1.0.1
- yargs: 17.7.2
- transitivePeerDependencies:
- - '@types/node'
- - typescript
-
- '@commitlint/config-conventional@19.8.0':
- dependencies:
- '@commitlint/types': 19.8.0
- conventional-changelog-conventionalcommits: 7.0.2
-
- '@commitlint/config-validator@20.0.0':
- dependencies:
- '@commitlint/types': 20.0.0
- ajv: 8.17.1
-
- '@commitlint/ensure@20.0.0':
- dependencies:
- '@commitlint/types': 20.0.0
- lodash.camelcase: 4.3.0
- lodash.kebabcase: 4.1.1
- lodash.snakecase: 4.1.1
- lodash.startcase: 4.4.0
- lodash.upperfirst: 4.3.1
-
- '@commitlint/execute-rule@20.0.0': {}
-
- '@commitlint/format@20.0.0':
- dependencies:
- '@commitlint/types': 20.0.0
- chalk: 5.6.2
-
- '@commitlint/is-ignored@20.0.0':
- dependencies:
- '@commitlint/types': 20.0.0
- semver: 7.7.2
-
- '@commitlint/lint@20.0.0':
- dependencies:
- '@commitlint/is-ignored': 20.0.0
- '@commitlint/parse': 20.0.0
- '@commitlint/rules': 20.0.0
- '@commitlint/types': 20.0.0
-
- '@commitlint/load@20.1.0(@types/node@24.6.2)(typescript@4.9.5)':
- dependencies:
- '@commitlint/config-validator': 20.0.0
- '@commitlint/execute-rule': 20.0.0
- '@commitlint/resolve-extends': 20.1.0
- '@commitlint/types': 20.0.0
- chalk: 5.6.2
- cosmiconfig: 9.0.0(typescript@4.9.5)
- cosmiconfig-typescript-loader: 6.1.0(@types/node@24.6.2)(cosmiconfig@9.0.0(typescript@4.9.5))(typescript@4.9.5)
- lodash.isplainobject: 4.0.6
- lodash.merge: 4.6.2
- lodash.uniq: 4.5.0
- transitivePeerDependencies:
- - '@types/node'
- - typescript
-
- '@commitlint/message@20.0.0': {}
-
- '@commitlint/parse@20.0.0':
- dependencies:
- '@commitlint/types': 20.0.0
- conventional-changelog-angular: 7.0.0
- conventional-commits-parser: 5.0.0
-
- '@commitlint/read@20.0.0':
- dependencies:
- '@commitlint/top-level': 20.0.0
- '@commitlint/types': 20.0.0
- git-raw-commits: 4.0.0
- minimist: 1.2.8
- tinyexec: 1.0.1
-
- '@commitlint/resolve-extends@20.1.0':
- dependencies:
- '@commitlint/config-validator': 20.0.0
- '@commitlint/types': 20.0.0
- global-directory: 4.0.1
- import-meta-resolve: 4.2.0
- lodash.mergewith: 4.6.2
- resolve-from: 5.0.0
-
- '@commitlint/rules@20.0.0':
- dependencies:
- '@commitlint/ensure': 20.0.0
- '@commitlint/message': 20.0.0
- '@commitlint/to-lines': 20.0.0
- '@commitlint/types': 20.0.0
-
- '@commitlint/to-lines@20.0.0': {}
-
- '@commitlint/top-level@20.0.0':
- dependencies:
- find-up: 7.0.0
-
- '@commitlint/types@19.8.0':
- dependencies:
- '@types/conventional-commits-parser': 5.0.1
- chalk: 5.5.0
-
- '@commitlint/types@20.0.0':
- dependencies:
- '@types/conventional-commits-parser': 5.0.1
- chalk: 5.6.2
-
- '@csstools/cascade-layer-name-parser@1.0.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)':
- dependencies:
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
-
- '@csstools/color-helpers@4.2.1': {}
-
- '@csstools/color-helpers@5.1.0': {}
-
- '@csstools/css-calc@1.2.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)':
- dependencies:
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
-
- '@csstools/css-calc@1.2.4(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)':
- dependencies:
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
-
- '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/css-color-parser@2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)':
- dependencies:
- '@csstools/color-helpers': 4.2.1
- '@csstools/css-calc': 1.2.4(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
-
- '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/color-helpers': 5.1.0
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/css-parser-algorithms@2.3.2(@csstools/css-tokenizer@2.2.1)':
- dependencies:
- '@csstools/css-tokenizer': 2.2.1
-
- '@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2)':
- dependencies:
- '@csstools/css-tokenizer': 2.3.2
-
- '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/css-tokenizer@2.2.1': {}
-
- '@csstools/css-tokenizer@2.3.2': {}
-
- '@csstools/css-tokenizer@3.0.4': {}
-
- '@csstools/media-query-list-parser@2.1.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)':
- dependencies:
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
-
- '@csstools/media-query-list-parser@2.1.5(@csstools/css-parser-algorithms@2.3.2(@csstools/css-tokenizer@2.2.1))(@csstools/css-tokenizer@2.2.1)':
- dependencies:
- '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1)
- '@csstools/css-tokenizer': 2.2.1
-
- '@csstools/postcss-cascade-layers@4.0.6(postcss@8.4.39)':
- dependencies:
- '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2)
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
-
- '@csstools/postcss-color-function@3.0.17(postcss@8.4.39)':
- dependencies:
- '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
-
- '@csstools/postcss-color-mix-function@2.0.17(postcss@8.4.39)':
- dependencies:
- '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
-
- '@csstools/postcss-exponential-functions@1.0.8(postcss@8.4.39)':
- dependencies:
- '@csstools/css-calc': 1.2.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- postcss: 8.4.39
-
- '@csstools/postcss-font-format-keywords@3.0.2(postcss@8.4.39)':
- dependencies:
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-gamut-mapping@1.0.10(postcss@8.4.39)':
- dependencies:
- '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- postcss: 8.4.39
-
- '@csstools/postcss-gradients-interpolation-method@4.0.18(postcss@8.4.39)':
- dependencies:
- '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
-
- '@csstools/postcss-hwb-function@3.0.16(postcss@8.4.39)':
- dependencies:
- '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
-
- '@csstools/postcss-ic-unit@3.0.6(postcss@8.4.39)':
- dependencies:
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-initial@1.0.1(postcss@8.4.39)':
- dependencies:
- postcss: 8.4.39
-
- '@csstools/postcss-is-pseudo-class@4.0.8(postcss@8.4.39)':
- dependencies:
- '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2)
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
-
- '@csstools/postcss-light-dark-function@1.0.6(postcss@8.4.39)':
- dependencies:
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
-
- '@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.4.39)':
- dependencies:
- postcss: 8.4.39
-
- '@csstools/postcss-logical-overflow@1.0.1(postcss@8.4.39)':
- dependencies:
- postcss: 8.4.39
-
- '@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.4.39)':
- dependencies:
- postcss: 8.4.39
-
- '@csstools/postcss-logical-resize@2.0.1(postcss@8.4.39)':
- dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-logical-viewport-units@2.0.10(postcss@8.4.39)':
- dependencies:
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
-
- '@csstools/postcss-media-minmax@1.1.7(postcss@8.4.39)':
- dependencies:
- '@csstools/css-calc': 1.2.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/media-query-list-parser': 2.1.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- postcss: 8.4.39
-
- '@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.10(postcss@8.4.39)':
- dependencies:
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/media-query-list-parser': 2.1.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- postcss: 8.4.39
-
- '@csstools/postcss-nested-calc@3.0.2(postcss@8.4.39)':
- dependencies:
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-normalize-display-values@3.0.2(postcss@8.4.39)':
- dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-oklab-function@3.0.17(postcss@8.4.39)':
- dependencies:
- '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
-
- '@csstools/postcss-progressive-custom-properties@3.2.0(postcss@8.4.39)':
- dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-relative-color-syntax@2.0.17(postcss@8.4.39)':
- dependencies:
- '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
-
- '@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.4.39)':
- dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
-
- '@csstools/postcss-stepped-value-functions@3.0.9(postcss@8.4.39)':
- dependencies:
- '@csstools/css-calc': 1.2.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- postcss: 8.4.39
-
- '@csstools/postcss-text-decoration-shorthand@3.0.7(postcss@8.4.39)':
- dependencies:
- '@csstools/color-helpers': 4.2.1
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
-
- '@csstools/postcss-trigonometric-functions@3.0.9(postcss@8.4.39)':
- dependencies:
- '@csstools/css-calc': 1.2.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- postcss: 8.4.39
-
- '@csstools/postcss-unset-value@3.0.1(postcss@8.4.39)':
- dependencies:
- postcss: 8.4.39
-
- '@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.1.2)':
- dependencies:
- postcss-selector-parser: 6.1.2
-
- '@csstools/selector-specificity@3.0.0(postcss-selector-parser@6.0.13)':
- dependencies:
- postcss-selector-parser: 6.0.13
-
- '@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.1.2)':
- dependencies:
- postcss-selector-parser: 6.1.2
-
- '@csstools/utilities@1.0.0(postcss@8.4.39)':
- dependencies:
- postcss: 8.4.39
-
- '@discoveryjs/json-ext@0.5.7': {}
-
- '@emnapi/core@1.5.0':
- dependencies:
- '@emnapi/wasi-threads': 1.1.0
- tslib: 2.8.1
- optional: true
-
- '@emnapi/runtime@1.5.0':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@emnapi/wasi-threads@1.1.0':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@esbuild/android-arm64@0.18.20':
- optional: true
-
- '@esbuild/android-arm@0.18.20':
- optional: true
-
- '@esbuild/android-x64@0.18.20':
- optional: true
-
- '@esbuild/darwin-arm64@0.18.20':
- optional: true
-
- '@esbuild/darwin-x64@0.18.20':
- optional: true
-
- '@esbuild/freebsd-arm64@0.18.20':
- optional: true
-
- '@esbuild/freebsd-x64@0.18.20':
- optional: true
-
- '@esbuild/linux-arm64@0.18.20':
- optional: true
-
- '@esbuild/linux-arm@0.18.20':
- optional: true
-
- '@esbuild/linux-ia32@0.18.20':
- optional: true
-
- '@esbuild/linux-loong64@0.18.20':
- optional: true
-
- '@esbuild/linux-mips64el@0.18.20':
- optional: true
-
- '@esbuild/linux-ppc64@0.18.20':
- optional: true
-
- '@esbuild/linux-riscv64@0.18.20':
- optional: true
-
- '@esbuild/linux-s390x@0.18.20':
- optional: true
-
- '@esbuild/linux-x64@0.18.20':
- optional: true
-
- '@esbuild/netbsd-x64@0.18.20':
- optional: true
-
- '@esbuild/openbsd-x64@0.18.20':
- optional: true
-
- '@esbuild/sunos-x64@0.18.20':
- optional: true
-
- '@esbuild/win32-arm64@0.18.20':
- optional: true
-
- '@esbuild/win32-ia32@0.18.20':
- optional: true
-
- '@esbuild/win32-x64@0.18.20':
- optional: true
-
- '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)':
- dependencies:
- eslint: 8.57.1
- eslint-visitor-keys: 3.4.3
-
- '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)':
- dependencies:
- eslint: 8.57.1
- eslint-visitor-keys: 3.4.3
-
- '@eslint-community/regexpp@4.9.0': {}
-
- '@eslint/eslintrc@2.1.4':
- dependencies:
- ajv: 6.12.6
- debug: 4.3.6
- espree: 9.6.1
- globals: 13.24.0
- ignore: 5.3.1
- import-fresh: 3.3.0
- js-yaml: 4.1.0
- minimatch: 3.1.2
- strip-json-comments: 3.1.1
- transitivePeerDependencies:
- - supports-color
-
- '@eslint/js@8.57.1': {}
-
- '@fastify/busboy@1.2.1':
- dependencies:
- text-decoding: 1.0.0
- optional: true
-
- '@firebase/analytics-compat@0.2.14(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/analytics': 0.10.8(@firebase/app@0.10.13)
- '@firebase/analytics-types': 0.8.2
- '@firebase/app-compat': 0.2.43
- '@firebase/component': 0.6.9
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app'
-
- '@firebase/analytics-types@0.8.2': {}
-
- '@firebase/analytics@0.10.8(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/component': 0.6.9
- '@firebase/installations': 0.6.9(@firebase/app@0.10.13)
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
-
- '@firebase/app-check-compat@0.3.15(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app-check': 0.8.8(@firebase/app@0.10.13)
- '@firebase/app-check-types': 0.5.2
- '@firebase/app-compat': 0.2.43
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app'
-
- '@firebase/app-check-interop-types@0.3.2': {}
-
- '@firebase/app-check-types@0.5.2': {}
-
- '@firebase/app-check@0.8.8(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
-
- '@firebase/app-compat@0.2.43':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
-
- '@firebase/app-types@0.8.1':
- optional: true
-
- '@firebase/app-types@0.9.2': {}
-
- '@firebase/app@0.10.13':
- dependencies:
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- idb: 7.1.1
- tslib: 2.6.2
-
- '@firebase/auth-compat@0.5.14(@firebase/app-compat@0.2.43)(@firebase/app-types@0.9.2)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app-compat': 0.2.43
- '@firebase/auth': 1.7.9(@firebase/app@0.10.13)
- '@firebase/auth-types': 0.12.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0)
- '@firebase/component': 0.6.9
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- undici: 6.19.7
- transitivePeerDependencies:
- - '@firebase/app'
- - '@firebase/app-types'
- - '@react-native-async-storage/async-storage'
-
- '@firebase/auth-interop-types@0.1.7(@firebase/app-types@0.9.2)(@firebase/util@1.7.3)':
- dependencies:
- '@firebase/app-types': 0.9.2
- '@firebase/util': 1.7.3
- optional: true
-
- '@firebase/auth-interop-types@0.2.3': {}
-
- '@firebase/auth-types@0.12.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0)':
- dependencies:
- '@firebase/app-types': 0.9.2
- '@firebase/util': 1.10.0
-
- '@firebase/auth@1.7.9(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- undici: 6.19.7
-
- '@firebase/component@0.5.21':
- dependencies:
- '@firebase/util': 1.7.3
- tslib: 2.6.2
- optional: true
-
- '@firebase/component@0.6.9':
- dependencies:
- '@firebase/util': 1.10.0
- tslib: 2.6.2
-
- '@firebase/data-connect@0.1.0(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/auth-interop-types': 0.2.3
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
-
- '@firebase/database-compat@0.2.10(@firebase/app-types@0.9.2)':
- dependencies:
- '@firebase/component': 0.5.21
- '@firebase/database': 0.13.10(@firebase/app-types@0.9.2)
- '@firebase/database-types': 0.9.17
- '@firebase/logger': 0.3.4
- '@firebase/util': 1.7.3
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app-types'
- optional: true
-
- '@firebase/database-compat@1.0.8':
- dependencies:
- '@firebase/component': 0.6.9
- '@firebase/database': 1.0.8
- '@firebase/database-types': 1.0.5
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
-
- '@firebase/database-types@0.9.17':
- dependencies:
- '@firebase/app-types': 0.8.1
- '@firebase/util': 1.7.3
- optional: true
-
- '@firebase/database-types@1.0.5':
- dependencies:
- '@firebase/app-types': 0.9.2
- '@firebase/util': 1.10.0
-
- '@firebase/database@0.13.10(@firebase/app-types@0.9.2)':
- dependencies:
- '@firebase/auth-interop-types': 0.1.7(@firebase/app-types@0.9.2)(@firebase/util@1.7.3)
- '@firebase/component': 0.5.21
- '@firebase/logger': 0.3.4
- '@firebase/util': 1.7.3
- faye-websocket: 0.11.4
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app-types'
- optional: true
-
- '@firebase/database@1.0.8':
- dependencies:
- '@firebase/app-check-interop-types': 0.3.2
- '@firebase/auth-interop-types': 0.2.3
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- faye-websocket: 0.11.4
- tslib: 2.6.2
-
- '@firebase/firestore-compat@0.3.38(@firebase/app-compat@0.2.43)(@firebase/app-types@0.9.2)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app-compat': 0.2.43
- '@firebase/component': 0.6.9
- '@firebase/firestore': 4.7.3(@firebase/app@0.10.13)
- '@firebase/firestore-types': 3.0.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0)
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app'
- - '@firebase/app-types'
-
- '@firebase/firestore-types@3.0.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0)':
- dependencies:
- '@firebase/app-types': 0.9.2
- '@firebase/util': 1.10.0
-
- '@firebase/firestore@4.7.3(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- '@firebase/webchannel-wrapper': 1.0.1
- '@grpc/grpc-js': 1.9.15
- '@grpc/proto-loader': 0.7.10
- tslib: 2.6.2
- undici: 6.19.7
-
- '@firebase/functions-compat@0.3.14(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app-compat': 0.2.43
- '@firebase/component': 0.6.9
- '@firebase/functions': 0.11.8(@firebase/app@0.10.13)
- '@firebase/functions-types': 0.6.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app'
-
- '@firebase/functions-types@0.6.2': {}
-
- '@firebase/functions@0.11.8(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/app-check-interop-types': 0.3.2
- '@firebase/auth-interop-types': 0.2.3
- '@firebase/component': 0.6.9
- '@firebase/messaging-interop-types': 0.2.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- undici: 6.19.7
-
- '@firebase/installations-compat@0.2.9(@firebase/app-compat@0.2.43)(@firebase/app-types@0.9.2)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app-compat': 0.2.43
- '@firebase/component': 0.6.9
- '@firebase/installations': 0.6.9(@firebase/app@0.10.13)
- '@firebase/installations-types': 0.5.2(@firebase/app-types@0.9.2)
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app'
- - '@firebase/app-types'
-
- '@firebase/installations-types@0.5.2(@firebase/app-types@0.9.2)':
- dependencies:
- '@firebase/app-types': 0.9.2
-
- '@firebase/installations@0.6.9(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/component': 0.6.9
- '@firebase/util': 1.10.0
- idb: 7.1.1
- tslib: 2.6.2
-
- '@firebase/logger@0.3.4':
- dependencies:
- tslib: 2.6.2
- optional: true
-
- '@firebase/logger@0.4.2':
- dependencies:
- tslib: 2.6.2
-
- '@firebase/messaging-compat@0.2.12(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app-compat': 0.2.43
- '@firebase/component': 0.6.9
- '@firebase/messaging': 0.12.12(@firebase/app@0.10.13)
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app'
-
- '@firebase/messaging-interop-types@0.2.2': {}
-
- '@firebase/messaging@0.12.12(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/component': 0.6.9
- '@firebase/installations': 0.6.9(@firebase/app@0.10.13)
- '@firebase/messaging-interop-types': 0.2.2
- '@firebase/util': 1.10.0
- idb: 7.1.1
- tslib: 2.6.2
-
- '@firebase/performance-compat@0.2.9(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app-compat': 0.2.43
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/performance': 0.6.9(@firebase/app@0.10.13)
- '@firebase/performance-types': 0.2.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app'
-
- '@firebase/performance-types@0.2.2': {}
-
- '@firebase/performance@0.6.9(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/component': 0.6.9
- '@firebase/installations': 0.6.9(@firebase/app@0.10.13)
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
-
- '@firebase/remote-config-compat@0.2.9(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app-compat': 0.2.43
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/remote-config': 0.4.9(@firebase/app@0.10.13)
- '@firebase/remote-config-types': 0.3.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app'
-
- '@firebase/remote-config-types@0.3.2': {}
-
- '@firebase/remote-config@0.4.9(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/component': 0.6.9
- '@firebase/installations': 0.6.9(@firebase/app@0.10.13)
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
-
- '@firebase/storage-compat@0.3.12(@firebase/app-compat@0.2.43)(@firebase/app-types@0.9.2)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app-compat': 0.2.43
- '@firebase/component': 0.6.9
- '@firebase/storage': 0.13.2(@firebase/app@0.10.13)
- '@firebase/storage-types': 0.8.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0)
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@firebase/app'
- - '@firebase/app-types'
-
- '@firebase/storage-types@0.8.2(@firebase/app-types@0.9.2)(@firebase/util@1.10.0)':
- dependencies:
- '@firebase/app-types': 0.9.2
- '@firebase/util': 1.10.0
-
- '@firebase/storage@0.13.2(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/component': 0.6.9
- '@firebase/util': 1.10.0
- tslib: 2.6.2
- undici: 6.19.7
-
- '@firebase/util@1.10.0':
- dependencies:
- tslib: 2.6.2
-
- '@firebase/util@1.7.3':
- dependencies:
- tslib: 2.6.2
- optional: true
-
- '@firebase/vertexai-preview@0.0.4(@firebase/app-types@0.9.2)(@firebase/app@0.10.13)':
- dependencies:
- '@firebase/app': 0.10.13
- '@firebase/app-check-interop-types': 0.3.2
- '@firebase/app-types': 0.9.2
- '@firebase/component': 0.6.9
- '@firebase/logger': 0.4.2
- '@firebase/util': 1.10.0
- tslib: 2.6.2
-
- '@firebase/webchannel-wrapper@1.0.1': {}
-
- '@gar/promisify@1.1.3': {}
-
- '@google-cloud/firestore@4.15.1':
- dependencies:
- fast-deep-equal: 3.1.3
- functional-red-black-tree: 1.0.1
- google-gax: 2.30.5
- protobufjs: 6.11.4
- transitivePeerDependencies:
- - encoding
- - supports-color
- optional: true
-
- '@google-cloud/paginator@3.0.7':
- dependencies:
- arrify: 2.0.1
- extend: 3.0.2
- optional: true
-
- '@google-cloud/projectify@2.1.1':
- optional: true
-
- '@google-cloud/promisify@2.0.4':
- optional: true
-
- '@google-cloud/storage@5.20.5':
- dependencies:
- '@google-cloud/paginator': 3.0.7
- '@google-cloud/projectify': 2.1.1
- '@google-cloud/promisify': 2.0.4
- abort-controller: 3.0.0
- arrify: 2.0.1
- async-retry: 1.3.3
- compressible: 2.0.18
- configstore: 5.0.1
- duplexify: 4.1.2
- ent: 2.2.0
- extend: 3.0.2
- gaxios: 4.3.3
- google-auth-library: 7.14.1
- hash-stream-validation: 0.2.4
- mime: 3.0.0
- mime-types: 2.1.35
- p-limit: 3.1.0
- pumpify: 2.0.1
- retry-request: 4.2.2
- stream-events: 1.0.5
- teeny-request: 7.2.0
- uuid: 8.3.2
- xdg-basedir: 4.0.0
- transitivePeerDependencies:
- - encoding
- - supports-color
- optional: true
-
- '@grpc/grpc-js@1.6.12':
- dependencies:
- '@grpc/proto-loader': 0.7.10
- '@types/node': 24.6.2
- optional: true
-
- '@grpc/grpc-js@1.9.15':
- dependencies:
- '@grpc/proto-loader': 0.7.10
- '@types/node': 24.6.2
-
- '@grpc/proto-loader@0.6.13':
- dependencies:
- '@types/long': 4.0.2
- lodash.camelcase: 4.3.0
- long: 4.0.0
- protobufjs: 6.11.4
- yargs: 16.2.0
- optional: true
-
- '@grpc/proto-loader@0.7.10':
- dependencies:
- lodash.camelcase: 4.3.0
- long: 5.2.3
- protobufjs: 7.2.5
- yargs: 17.7.2
-
- '@humanwhocodes/config-array@0.13.0':
- dependencies:
- '@humanwhocodes/object-schema': 2.0.3
- debug: 4.3.6
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
-
- '@humanwhocodes/module-importer@1.0.1': {}
-
- '@humanwhocodes/object-schema@2.0.3': {}
-
- '@isaacs/cliui@8.0.2':
- dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.2
- strip-ansi-cjs: strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: wrap-ansi@7.0.0
-
- '@istanbuljs/load-nyc-config@1.1.0':
- dependencies:
- camelcase: 5.3.1
- find-up: 4.1.0
- get-package-type: 0.1.0
- js-yaml: 3.14.1
- resolve-from: 5.0.0
-
- '@istanbuljs/schema@0.1.3': {}
-
- '@jest/console@30.2.0':
- dependencies:
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- chalk: 4.1.2
- jest-message-util: 30.2.0
- jest-util: 30.2.0
- slash: 3.0.0
-
- '@jest/core@30.2.0':
- dependencies:
- '@jest/console': 30.2.0
- '@jest/pattern': 30.0.1
- '@jest/reporters': 30.2.0
- '@jest/test-result': 30.2.0
- '@jest/transform': 30.2.0
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- ci-info: 4.3.0
- exit-x: 0.2.2
- graceful-fs: 4.2.11
- jest-changed-files: 30.2.0
- jest-config: 30.2.0(@types/node@24.6.2)
- jest-haste-map: 30.2.0
- jest-message-util: 30.2.0
- jest-regex-util: 30.0.1
- jest-resolve: 30.2.0
- jest-resolve-dependencies: 30.2.0
- jest-runner: 30.2.0
- jest-runtime: 30.2.0
- jest-snapshot: 30.2.0
- jest-util: 30.2.0
- jest-validate: 30.2.0
- jest-watcher: 30.2.0
- micromatch: 4.0.8
- pretty-format: 30.2.0
- slash: 3.0.0
- transitivePeerDependencies:
- - babel-plugin-macros
- - esbuild-register
- - supports-color
- - ts-node
-
- '@jest/diff-sequences@30.0.1': {}
-
- '@jest/environment-jsdom-abstract@30.2.0(jsdom@26.1.0)':
- dependencies:
- '@jest/environment': 30.2.0
- '@jest/fake-timers': 30.2.0
- '@jest/types': 30.2.0
- '@types/jsdom': 21.1.7
- '@types/node': 24.6.2
- jest-mock: 30.2.0
- jest-util: 30.2.0
- jsdom: 26.1.0
-
- '@jest/environment@30.2.0':
- dependencies:
- '@jest/fake-timers': 30.2.0
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- jest-mock: 30.2.0
-
- '@jest/expect-utils@30.2.0':
- dependencies:
- '@jest/get-type': 30.1.0
-
- '@jest/expect@30.2.0':
- dependencies:
- expect: 30.2.0
- jest-snapshot: 30.2.0
- transitivePeerDependencies:
- - supports-color
-
- '@jest/fake-timers@30.2.0':
- dependencies:
- '@jest/types': 30.2.0
- '@sinonjs/fake-timers': 13.0.5
- '@types/node': 24.6.2
- jest-message-util: 30.2.0
- jest-mock: 30.2.0
- jest-util: 30.2.0
-
- '@jest/get-type@30.1.0': {}
-
- '@jest/globals@30.2.0':
- dependencies:
- '@jest/environment': 30.2.0
- '@jest/expect': 30.2.0
- '@jest/types': 30.2.0
- jest-mock: 30.2.0
- transitivePeerDependencies:
- - supports-color
-
- '@jest/pattern@30.0.1':
- dependencies:
- '@types/node': 24.6.2
- jest-regex-util: 30.0.1
-
- '@jest/reporters@30.2.0':
- dependencies:
- '@bcoe/v8-coverage': 0.2.3
- '@jest/console': 30.2.0
- '@jest/test-result': 30.2.0
- '@jest/transform': 30.2.0
- '@jest/types': 30.2.0
- '@jridgewell/trace-mapping': 0.3.31
- '@types/node': 24.6.2
- chalk: 4.1.2
- collect-v8-coverage: 1.0.2
- exit-x: 0.2.2
- glob: 10.4.5
- graceful-fs: 4.2.11
- istanbul-lib-coverage: 3.2.2
- istanbul-lib-instrument: 6.0.3
- istanbul-lib-report: 3.0.1
- istanbul-lib-source-maps: 5.0.6
- istanbul-reports: 3.2.0
- jest-message-util: 30.2.0
- jest-util: 30.2.0
- jest-worker: 30.2.0
- slash: 3.0.0
- string-length: 4.0.2
- v8-to-istanbul: 9.3.0
- transitivePeerDependencies:
- - supports-color
-
- '@jest/schemas@29.6.3':
- dependencies:
- '@sinclair/typebox': 0.27.8
-
- '@jest/schemas@30.0.5':
- dependencies:
- '@sinclair/typebox': 0.34.41
-
- '@jest/snapshot-utils@30.2.0':
- dependencies:
- '@jest/types': 30.2.0
- chalk: 4.1.2
- graceful-fs: 4.2.11
- natural-compare: 1.4.0
-
- '@jest/source-map@30.0.1':
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- callsites: 3.1.0
- graceful-fs: 4.2.11
-
- '@jest/test-result@30.2.0':
- dependencies:
- '@jest/console': 30.2.0
- '@jest/types': 30.2.0
- '@types/istanbul-lib-coverage': 2.0.6
- collect-v8-coverage: 1.0.2
-
- '@jest/test-sequencer@30.2.0':
- dependencies:
- '@jest/test-result': 30.2.0
- graceful-fs: 4.2.11
- jest-haste-map: 30.2.0
- slash: 3.0.0
-
- '@jest/transform@30.2.0':
- dependencies:
- '@babel/core': 7.28.4
- '@jest/types': 30.2.0
- '@jridgewell/trace-mapping': 0.3.31
- babel-plugin-istanbul: 7.0.1
- chalk: 4.1.2
- convert-source-map: 2.0.0
- fast-json-stable-stringify: 2.1.0
- graceful-fs: 4.2.11
- jest-haste-map: 30.2.0
- jest-regex-util: 30.0.1
- jest-util: 30.2.0
- micromatch: 4.0.8
- pirates: 4.0.7
- slash: 3.0.0
- write-file-atomic: 5.0.1
- transitivePeerDependencies:
- - supports-color
-
- '@jest/types@29.6.3':
- dependencies:
- '@jest/schemas': 29.6.3
- '@types/istanbul-lib-coverage': 2.0.6
- '@types/istanbul-reports': 3.0.4
- '@types/node': 24.6.2
- '@types/yargs': 17.0.33
- chalk: 4.1.2
-
- '@jest/types@30.2.0':
- dependencies:
- '@jest/pattern': 30.0.1
- '@jest/schemas': 30.0.5
- '@types/istanbul-lib-coverage': 2.0.6
- '@types/istanbul-reports': 3.0.4
- '@types/node': 24.6.2
- '@types/yargs': 17.0.33
- chalk: 4.1.2
-
- '@jridgewell/gen-mapping@0.3.13':
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/gen-mapping@0.3.3':
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/gen-mapping@0.3.5':
- dependencies:
- '@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.5.5
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/remapping@2.3.5':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/set-array@1.1.2': {}
-
- '@jridgewell/set-array@1.2.1': {}
-
- '@jridgewell/source-map@0.3.11':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/sourcemap-codec@1.5.5': {}
-
- '@jridgewell/trace-mapping@0.3.31':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
-
- '@jsonjoy.com/base64@1.1.2(tslib@2.6.2)':
- dependencies:
- tslib: 2.6.2
-
- '@jsonjoy.com/json-pack@1.0.4(tslib@2.6.2)':
- dependencies:
- '@jsonjoy.com/base64': 1.1.2(tslib@2.6.2)
- '@jsonjoy.com/util': 1.2.0(tslib@2.6.2)
- hyperdyperid: 1.2.0
- thingies: 1.21.0(tslib@2.6.2)
- tslib: 2.6.2
-
- '@jsonjoy.com/util@1.2.0(tslib@2.6.2)':
- dependencies:
- tslib: 2.6.2
-
- '@kurkle/color@0.3.4': {}
-
- '@mdi/js@7.4.47': {}
-
- '@napi-rs/wasm-runtime@0.2.12':
- dependencies:
- '@emnapi/core': 1.5.0
- '@emnapi/runtime': 1.5.0
- '@tybys/wasm-util': 0.10.1
- optional: true
-
- '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1':
- dependencies:
- eslint-scope: 5.1.1
-
- '@nodelib/fs.scandir@2.1.5':
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
-
- '@nodelib/fs.stat@2.0.5': {}
-
- '@nodelib/fs.walk@1.2.8':
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.15.0
-
- '@npmcli/fs@1.1.1':
- dependencies:
- '@gar/promisify': 1.1.3
- semver: 7.7.2
-
- '@npmcli/move-file@1.1.2':
- dependencies:
- mkdirp: 1.0.4
- rimraf: 3.0.2
-
- '@nuxt/babel-preset-app@2.18.1(vue@2.7.16)':
- dependencies:
- '@babel/compat-data': 7.24.7
- '@babel/core': 7.24.7
- '@babel/helper-compilation-targets': 7.24.7
- '@babel/helper-module-imports': 7.24.7
- '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.7)
- '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.24.7)
- '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.7)
- '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.7)
- '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.7)
- '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.24.7)
- '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7)
- '@babel/preset-env': 7.24.7(@babel/core@7.24.7)
- '@babel/runtime': 7.24.7
- '@vue/babel-preset-jsx': 1.4.0(@babel/core@7.24.7)(vue@2.7.16)
- core-js: 3.45.1
- core-js-compat: 3.37.1
- regenerator-runtime: 0.14.1
- transitivePeerDependencies:
- - supports-color
- - vue
-
- '@nuxt/builder@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.6.2)(typescript@4.9.5)(vue@2.7.16)':
- dependencies:
- '@nuxt/devalue': 2.0.2
- '@nuxt/utils': 2.18.1
- '@nuxt/vue-app': 2.18.1
- '@nuxt/webpack': 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.6.2)(typescript@4.9.5)(vue@2.7.16)
- chalk: 4.1.2
- chokidar: 3.6.0
- consola: 3.2.3
- fs-extra: 11.2.0
- glob: 8.1.0
- hash-sum: 2.0.0
- ignore: 5.3.1
- lodash: 4.17.21
- pify: 5.0.0
- serialize-javascript: 6.0.2
- upath: 2.0.1
- transitivePeerDependencies:
- - '@vue/compiler-sfc'
- - arc-templates
- - atpl
- - babel-core
- - bluebird
- - bracket-template
- - bufferutil
- - coffee-script
- - dot
- - dust
- - dustjs-helpers
- - dustjs-linkedin
- - eco
- - ect
- - ejs
- - haml-coffee
- - hamlet
- - hamljs
- - handlebars
- - hogan.js
- - htmling
- - jade
- - jazz
- - jqtpl
- - just
- - liquid-node
- - liquor
- - marko
- - mote
- - mustache
- - nunjucks
- - plates
- - prettier
- - pug
- - qejs
- - ractive
- - razor-tmpl
- - react
- - react-dom
- - slm
- - squirrelly
- - supports-color
- - swig
- - swig-templates
- - teacup
- - templayed
- - then-jade
- - then-pug
- - tinyliquid
- - toffee
- - twig
- - twing
- - typescript
- - underscore
- - utf-8-validate
- - vash
- - velocityjs
- - vue
- - walrus
- - webpack-cli
- - webpack-command
- - whiskers
-
- '@nuxt/cli@2.18.1':
- dependencies:
- '@nuxt/config': 2.18.1
- '@nuxt/utils': 2.18.1
- boxen: 5.1.2
- chalk: 4.1.2
- compression: 1.7.4
- connect: 3.7.0
- consola: 3.2.3
- crc: 4.3.2
- defu: 6.1.4
- destr: 2.0.3
- execa: 5.1.1
- exit: 0.1.2
- fs-extra: 11.2.0
- globby: 11.1.0
- hookable: 4.4.1
- lodash: 4.17.21
- minimist: 1.2.8
- opener: 1.5.2
- pretty-bytes: 5.6.0
- semver: 7.7.2
- serve-static: 1.16.2
- std-env: 3.7.0
- upath: 2.0.1
- wrap-ansi: 7.0.0
- transitivePeerDependencies:
- - buffer
- - supports-color
-
- '@nuxt/components@2.2.1(consola@3.2.3)':
- dependencies:
- chalk: 4.1.2
- chokidar: 3.6.0
- consola: 3.2.3
- glob: 7.2.3
- globby: 11.1.0
- scule: 0.2.1
- semver: 7.7.2
- upath: 2.0.1
- vue-template-compiler: 2.7.16
-
- '@nuxt/config@2.18.1':
- dependencies:
- '@nuxt/utils': 2.18.1
- consola: 3.2.3
- defu: 6.1.4
- destr: 2.0.3
- dotenv: 16.6.1
- lodash: 4.17.21
- rc9: 2.1.2
- std-env: 3.7.0
- ufo: 1.6.1
-
- '@nuxt/core@2.18.1':
- dependencies:
- '@nuxt/config': 2.18.1
- '@nuxt/server': 2.18.1
- '@nuxt/utils': 2.18.1
- consola: 3.2.3
- fs-extra: 11.2.0
- hash-sum: 2.0.0
- hookable: 4.4.1
- lodash: 4.17.21
- transitivePeerDependencies:
- - supports-color
-
- '@nuxt/devalue@2.0.2': {}
-
- '@nuxt/friendly-errors-webpack-plugin@2.6.0(webpack@4.47.0)':
- dependencies:
- chalk: 2.4.2
- consola: 3.2.3
- error-stack-parser: 2.1.4
- string-width: 4.2.3
- webpack: 4.47.0
-
- '@nuxt/generator@2.18.1':
- dependencies:
- '@nuxt/utils': 2.18.1
- chalk: 4.1.2
- consola: 3.2.3
- defu: 6.1.4
- devalue: 2.0.1
- fs-extra: 11.2.0
- html-minifier-terser: 7.2.0
- node-html-parser: 6.1.13
- ufo: 1.6.1
-
- '@nuxt/kit@3.12.2(rollup@3.29.5)':
- dependencies:
- '@nuxt/schema': 3.12.2(rollup@3.29.5)
- c12: 1.11.1
- consola: 3.2.3
- defu: 6.1.4
- destr: 2.0.3
- globby: 14.0.2
- hash-sum: 2.0.0
- ignore: 5.3.1
- jiti: 1.21.6
- klona: 2.0.6
- knitwork: 1.1.0
- mlly: 1.7.1
- pathe: 1.1.2
- pkg-types: 1.1.2
- scule: 1.3.0
- semver: 7.7.2
- ufo: 1.6.1
- unctx: 2.3.1
- unimport: 3.7.2(rollup@3.29.5)
- untyped: 1.4.2
- transitivePeerDependencies:
- - magicast
- - rollup
- - supports-color
-
- '@nuxt/kit@3.7.4(rollup@3.29.5)':
- dependencies:
- '@nuxt/schema': 3.7.4(rollup@3.29.5)
- c12: 1.4.2
- consola: 3.2.3
- defu: 6.1.4
- globby: 13.2.2
- hash-sum: 2.0.0
- ignore: 5.3.1
- jiti: 1.20.0
- knitwork: 1.0.0
- mlly: 1.4.2
- pathe: 1.1.2
- pkg-types: 1.1.2
- scule: 1.0.0
- semver: 7.7.2
- ufo: 1.6.1
- unctx: 2.3.1
- unimport: 3.4.0(rollup@3.29.5)
- untyped: 1.4.0
- transitivePeerDependencies:
- - rollup
- - supports-color
-
- '@nuxt/loading-screen@2.0.4':
- dependencies:
- connect: 3.7.0
- defu: 5.0.1
- get-port-please: 2.6.1
- node-res: 5.0.1
- serve-static: 1.16.2
- transitivePeerDependencies:
- - supports-color
-
- '@nuxt/opencollective@0.4.0':
- dependencies:
- chalk: 4.1.2
- consola: 3.2.3
- node-fetch-native: 1.6.7
-
- '@nuxt/schema@3.12.2(rollup@3.29.5)':
- dependencies:
- compatx: 0.1.8
- consola: 3.2.3
- defu: 6.1.4
- hookable: 5.5.3
- pathe: 1.1.2
- pkg-types: 1.1.2
- scule: 1.3.0
- std-env: 3.7.0
- ufo: 1.6.1
- uncrypto: 0.1.3
- unimport: 3.7.2(rollup@3.29.5)
- untyped: 1.4.2
- transitivePeerDependencies:
- - rollup
- - supports-color
-
- '@nuxt/schema@3.7.4(rollup@3.29.5)':
- dependencies:
- '@nuxt/ui-templates': 1.3.1
- consola: 3.2.3
- defu: 6.1.4
- hookable: 5.5.3
- pathe: 1.1.2
- pkg-types: 1.1.2
- postcss-import-resolver: 2.0.0
- std-env: 3.7.0
- ufo: 1.6.1
- unimport: 3.7.2(rollup@3.29.5)
- untyped: 1.4.2
- transitivePeerDependencies:
- - rollup
- - supports-color
-
- '@nuxt/server@2.18.1':
- dependencies:
- '@nuxt/utils': 2.18.1
- '@nuxt/vue-renderer': 2.18.1
- '@nuxtjs/youch': 4.2.3
- compression: 1.7.4
- connect: 3.7.0
- consola: 3.2.3
- etag: 1.8.1
- fresh: 0.5.2
- fs-extra: 11.2.0
- ip: 2.0.1
- launch-editor-middleware: 2.8.0
- on-headers: 1.0.2
- pify: 5.0.0
- serve-placeholder: 2.0.2
- serve-static: 1.16.2
- server-destroy: 1.0.1
- ufo: 1.6.1
- transitivePeerDependencies:
- - supports-color
-
- '@nuxt/telemetry@1.5.0':
- dependencies:
- arg: 5.0.2
- chalk: 4.1.2
- ci-info: 3.8.0
- consola: 3.2.3
- create-require: 1.1.1
- defu: 6.1.4
- destr: 2.0.3
- dotenv: 9.0.2
- fs-extra: 8.1.0
- git-url-parse: 13.1.1
- inquirer: 7.3.3
- jiti: 1.21.0
- nanoid: 3.3.8
- node-fetch: 2.7.0
- parse-git-config: 3.0.0
- rc9: 2.1.1
- std-env: 3.7.0
- transitivePeerDependencies:
- - encoding
-
- '@nuxt/types@2.18.1':
- dependencies:
- '@types/babel__core': 7.20.5
- '@types/compression': 1.7.5
- '@types/connect': 3.4.38
- '@types/etag': 1.8.3
- '@types/file-loader': 5.0.4
- '@types/html-minifier-terser': 7.0.2
- '@types/less': 3.0.6
- '@types/node': 16.18.55
- '@types/optimize-css-assets-webpack-plugin': 5.0.8
- '@types/pug': 2.0.10
- '@types/serve-static': 1.15.7
- '@types/terser-webpack-plugin': 4.2.1
- '@types/webpack': 4.41.38
- '@types/webpack-bundle-analyzer': 3.9.5
- '@types/webpack-hot-middleware': 2.25.5
-
- '@nuxt/typescript-build@3.0.2(@nuxt/types@2.18.1)(eslint@8.57.1)(typescript@4.9.5)(vue-template-compiler@2.7.16)(webpack@5.102.0)':
- dependencies:
- '@nuxt/types': 2.18.1
- consola: 3.2.3
- defu: 6.1.2
- fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.1)(typescript@4.9.5)(vue-template-compiler@2.7.16)(webpack@5.102.0)
- ts-loader: 8.4.0(typescript@4.9.5)(webpack@5.102.0)
- typescript: 4.9.5
- transitivePeerDependencies:
- - eslint
- - vue-template-compiler
- - webpack
-
- '@nuxt/ui-templates@1.3.1': {}
-
- '@nuxt/utils@2.18.1':
- dependencies:
- consola: 3.2.3
- create-require: 1.1.1
- fs-extra: 11.2.0
- hash-sum: 2.0.0
- jiti: 1.21.6
- lodash: 4.17.21
- proper-lockfile: 4.1.2
- semver: 7.7.2
- serialize-javascript: 6.0.2
- signal-exit: 4.1.0
- ua-parser-js: 1.0.38
- ufo: 1.6.1
-
- '@nuxt/vue-app@2.18.1':
- dependencies:
- node-fetch-native: 1.6.7
- ufo: 1.6.1
- unfetch: 5.0.0
- vue: 2.7.16
- vue-client-only: 2.1.0
- vue-meta: 2.4.0
- vue-no-ssr: 1.1.1
- vue-router: 3.6.5(vue@2.7.16)
- vue-template-compiler: 2.7.16
- vuex: 3.6.2(vue@2.7.16)
-
- '@nuxt/vue-renderer@2.18.1':
- dependencies:
- '@nuxt/devalue': 2.0.2
- '@nuxt/utils': 2.18.1
- consola: 3.2.3
- defu: 6.1.4
- fs-extra: 11.2.0
- lodash: 4.17.21
- lru-cache: 5.1.1
- ufo: 1.6.1
- vue: 2.7.16
- vue-meta: 2.4.0
- vue-server-renderer: 2.7.16
-
- '@nuxt/webpack@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.6.2)(typescript@4.9.5)(vue@2.7.16)':
- dependencies:
- '@babel/core': 7.24.7
- '@nuxt/babel-preset-app': 2.18.1(vue@2.7.16)
- '@nuxt/friendly-errors-webpack-plugin': 2.6.0(webpack@4.47.0)
- '@nuxt/utils': 2.18.1
- babel-loader: 8.3.0(@babel/core@7.24.7)(webpack@4.47.0)
- cache-loader: 4.1.0(webpack@4.47.0)
- caniuse-lite: 1.0.30001639
- consola: 3.2.3
- css-loader: 5.2.7(webpack@4.47.0)
- cssnano: 7.0.3(postcss@8.4.39)
- eventsource-polyfill: 0.9.6
- extract-css-chunks-webpack-plugin: 4.10.0(webpack@4.47.0)
- file-loader: 6.2.0(webpack@4.47.0)
- glob: 8.1.0
- hard-source-webpack-plugin: 0.13.1(webpack@4.47.0)
- hash-sum: 2.0.0
- html-webpack-plugin: 4.5.2(webpack@4.47.0)
- lodash: 4.17.21
- memfs: 4.9.3
- mkdirp: 0.5.6
- optimize-css-assets-webpack-plugin: 6.0.1(webpack@4.47.0)
- pify: 5.0.0
- pnp-webpack-plugin: 1.7.0(typescript@4.9.5)
- postcss: 8.4.39
- postcss-import: 15.1.0(postcss@8.4.39)
- postcss-import-resolver: 2.0.0
- postcss-loader: 4.3.0(postcss@8.4.39)(webpack@4.47.0)
- postcss-preset-env: 9.5.15(postcss@8.4.39)
- postcss-url: 10.1.3(postcss@8.4.39)
- semver: 7.7.2
- std-env: 3.7.0
- style-resources-loader: 1.5.0(webpack@4.47.0)
- terser-webpack-plugin: 4.2.3(webpack@4.47.0)
- thread-loader: 3.0.4(webpack@4.47.0)
- time-fix-plugin: 2.0.7(webpack@4.47.0)
- ufo: 1.6.1
- upath: 2.0.1
- url-loader: 4.1.1(file-loader@6.2.0(webpack@5.102.0))(webpack@4.47.0)
- vue-loader: 15.11.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(cache-loader@4.1.0(webpack@4.47.0))(css-loader@5.2.7(webpack@5.102.0))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.6.2)(vue-template-compiler@2.7.16)(webpack@4.47.0)
- vue-style-loader: 4.1.3
- vue-template-compiler: 2.7.16
- watchpack: 2.4.4
- webpack: 4.47.0
- webpack-bundle-analyzer: 4.10.2
- webpack-dev-middleware: 5.3.4(webpack@4.47.0)
- webpack-hot-middleware: 2.26.1
- webpack-node-externals: 3.0.0
- webpackbar: 6.0.1(webpack@4.47.0)
- transitivePeerDependencies:
- - '@vue/compiler-sfc'
- - arc-templates
- - atpl
- - babel-core
- - bluebird
- - bracket-template
- - bufferutil
- - coffee-script
- - dot
- - dust
- - dustjs-helpers
- - dustjs-linkedin
- - eco
- - ect
- - ejs
- - haml-coffee
- - hamlet
- - hamljs
- - handlebars
- - hogan.js
- - htmling
- - jade
- - jazz
- - jqtpl
- - just
- - liquid-node
- - liquor
- - marko
- - mote
- - mustache
- - nunjucks
- - plates
- - prettier
- - pug
- - qejs
- - ractive
- - razor-tmpl
- - react
- - react-dom
- - slm
- - squirrelly
- - supports-color
- - swig
- - swig-templates
- - teacup
- - templayed
- - then-jade
- - then-pug
- - tinyliquid
- - toffee
- - twig
- - twing
- - typescript
- - underscore
- - utf-8-validate
- - vash
- - velocityjs
- - vue
- - walrus
- - webpack-cli
- - webpack-command
- - whiskers
-
- '@nuxtjs/dotenv@1.4.2':
- dependencies:
- consola: 3.2.3
- dotenv: 8.6.0
-
- '@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.57.1)(typescript@4.9.5)':
- dependencies:
- '@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1)
- '@typescript-eslint/eslint-plugin': 6.7.3(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)
- '@typescript-eslint/parser': 6.7.3(eslint@8.57.1)(typescript@4.9.5)
- eslint: 8.57.1
- eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-plugin-import@2.28.1)(eslint@8.57.1)
- eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1)
- eslint-plugin-vue: 9.33.0(eslint@8.57.1)
- transitivePeerDependencies:
- - eslint-import-resolver-node
- - eslint-import-resolver-webpack
- - supports-color
- - typescript
-
- '@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1)':
- dependencies:
- eslint: 8.57.1
- eslint-config-standard: 17.1.0(eslint-plugin-import@2.28.1)(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.1.1(eslint@8.57.1))(eslint@8.57.1)
- eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1)
- eslint-plugin-n: 15.7.0(eslint@8.57.1)
- eslint-plugin-node: 11.1.0(eslint@8.57.1)
- eslint-plugin-promise: 6.1.1(eslint@8.57.1)
- eslint-plugin-unicorn: 44.0.2(eslint@8.57.1)
- eslint-plugin-vue: 9.33.0(eslint@8.57.1)
- local-pkg: 0.4.3
- transitivePeerDependencies:
- - '@typescript-eslint/parser'
- - eslint-import-resolver-typescript
- - eslint-import-resolver-webpack
- - supports-color
-
- '@nuxtjs/eslint-module@4.1.0(eslint@8.57.1)(rollup@3.29.5)(vite@4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0))(webpack@5.102.0)':
- dependencies:
- '@nuxt/kit': 3.7.4(rollup@3.29.5)
- chokidar: 3.5.3
- eslint: 8.57.1
- eslint-webpack-plugin: 4.0.1(eslint@8.57.1)(webpack@5.102.0)
- pathe: 1.1.1
- vite-plugin-eslint: 1.8.1(eslint@8.57.1)(vite@4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0))
- transitivePeerDependencies:
- - rollup
- - supports-color
- - vite
- - webpack
-
- '@nuxtjs/firebase@8.2.2(@firebase/app-types@0.9.2)(firebase@10.14.1)(nuxt@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.6.2)(typescript@4.9.5)(vue@2.7.16))':
- dependencies:
- consola: 2.15.3
- firebase: 10.14.1
- nuxt: 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.6.2)(typescript@4.9.5)(vue@2.7.16)
- optionalDependencies:
- firebase-admin: 10.3.0(@firebase/app-types@0.9.2)
- transitivePeerDependencies:
- - '@firebase/app-types'
- - encoding
- - supports-color
-
- '@nuxtjs/sitemap@2.4.0':
- dependencies:
- async-cache: 1.1.0
- consola: 2.15.3
- etag: 1.8.1
- fresh: 0.5.2
- fs-extra: 8.1.0
- is-https: 2.0.2
- lodash.unionby: 4.8.0
- minimatch: 3.1.2
- sitemap: 4.1.1
-
- '@nuxtjs/stylelint-module@5.2.0(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0))(webpack@5.102.0)':
- dependencies:
- '@nuxt/kit': 3.12.2(rollup@3.29.5)
- chokidar: 3.6.0
- pathe: 1.1.2
- stylelint: 15.11.0(typescript@4.9.5)
- stylelint-webpack-plugin: 5.0.1(stylelint@15.11.0(typescript@4.9.5))(webpack@5.102.0)
- vite-plugin-stylelint: 5.3.1(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0))
- transitivePeerDependencies:
- - '@types/stylelint'
- - magicast
- - postcss
- - rollup
- - supports-color
- - vite
- - webpack
-
- '@nuxtjs/vuetify@1.12.3(vue@2.7.16)(webpack@5.102.0)':
- dependencies:
- deepmerge: 4.3.1
- sass: 1.32.13
- sass-loader: 10.4.1(sass@1.32.13)(webpack@5.102.0)
- vuetify: 2.7.2(vue@2.7.16)
- vuetify-loader: 1.9.2(vue@2.7.16)(vuetify@2.7.2(vue@2.7.16))(webpack@5.102.0)
- transitivePeerDependencies:
- - fibers
- - gm
- - node-sass
- - pug
- - sharp
- - vue
- - webpack
-
- '@nuxtjs/youch@4.2.3':
- dependencies:
- cookie: 0.3.1
- mustache: 2.3.2
- stack-trace: 0.0.10
-
- '@one-ini/wasm@0.1.1': {}
-
- '@panva/asn1.js@1.0.0':
- optional: true
-
- '@pkgjs/parseargs@0.11.0':
- optional: true
-
- '@pkgr/core@0.2.9': {}
-
- '@polka/url@1.0.0-next.23': {}
-
- '@protobufjs/aspromise@1.1.2': {}
-
- '@protobufjs/base64@1.1.2': {}
-
- '@protobufjs/codegen@2.0.4': {}
-
- '@protobufjs/eventemitter@1.1.0': {}
-
- '@protobufjs/fetch@1.1.0':
- dependencies:
- '@protobufjs/aspromise': 1.1.2
- '@protobufjs/inquire': 1.1.0
-
- '@protobufjs/float@1.0.2': {}
-
- '@protobufjs/inquire@1.1.0': {}
-
- '@protobufjs/path@1.1.2': {}
-
- '@protobufjs/pool@1.1.0': {}
-
- '@protobufjs/utf8@1.1.0': {}
-
- '@rollup/pluginutils@4.2.1':
- dependencies:
- estree-walker: 2.0.2
- picomatch: 2.3.1
+ yallist@5.0.0:
+ resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
+ engines: {node: '>=18'}
- '@rollup/pluginutils@5.0.4(rollup@3.29.5)':
- dependencies:
- '@types/estree': 1.0.8
- estree-walker: 2.0.2
- picomatch: 2.3.1
- optionalDependencies:
- rollup: 3.29.5
+ yaml@2.9.0:
+ resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
- '@rollup/pluginutils@5.1.0(rollup@3.29.5)':
- dependencies:
- '@types/estree': 1.0.8
- estree-walker: 2.0.2
- picomatch: 2.3.1
- optionalDependencies:
- rollup: 3.29.5
+ yargs-parser@18.1.3:
+ resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
+ engines: {node: '>=6'}
- '@sinclair/typebox@0.27.8': {}
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
- '@sinclair/typebox@0.34.41': {}
+ yargs-parser@22.0.0:
+ resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
- '@sindresorhus/merge-streams@2.3.0': {}
+ yargs@15.4.1:
+ resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
+ engines: {node: '>=8'}
- '@sinonjs/commons@3.0.1':
- dependencies:
- type-detect: 4.0.8
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
- '@sinonjs/fake-timers@13.0.5':
- dependencies:
- '@sinonjs/commons': 3.0.1
+ yargs@18.0.0:
+ resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
- '@tootallnate/once@2.0.0':
- optional: true
+ yargs@18.1.0:
+ resolution: {integrity: sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
- '@trysound/sax@0.2.0': {}
+ yjs@13.6.31:
+ resolution: {integrity: sha512-Eq+5BRfbeGyqGVrTJL3bEcr8gKkxPuyuoHmAwpk52fDb8kOVMrfVSTRPd6yiGgX5Fskb96qCRjzjbRjrL4YEnw==}
+ engines: {node: '>=16.0.0', npm: '>=8.0.0'}
- '@tybys/wasm-util@0.10.1':
- dependencies:
- tslib: 2.8.1
- optional: true
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
- '@types/babel__core@7.20.5':
- dependencies:
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.2
- '@types/babel__generator': 7.27.0
- '@types/babel__template': 7.4.4
- '@types/babel__traverse': 7.28.0
+ yocto-queue@1.2.2:
+ resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
+ engines: {node: '>=12.20'}
- '@types/babel__generator@7.27.0':
- dependencies:
- '@babel/types': 7.28.2
+ youch-core@0.3.3:
+ resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==}
- '@types/babel__template@7.4.4':
- dependencies:
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.2
+ youch@4.1.1:
+ resolution: {integrity: sha512-mxW3qiSnl+GRxXsaUMzv2Mbada1Y8CDltET9UxejDQe6DBYlSekghl5U5K0ReAikcHDi0G1vKZEmmo/NWAGKLA==}
- '@types/babel__traverse@7.28.0':
- dependencies:
- '@babel/types': 7.28.2
+ zip-stream@6.0.1:
+ resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
+ engines: {node: '>= 14'}
- '@types/body-parser@1.19.3':
- dependencies:
- '@types/connect': 3.4.38
- '@types/node': 24.6.2
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
- '@types/compression@1.7.5':
- dependencies:
- '@types/express': 4.17.18
+snapshots:
- '@types/connect@3.4.38':
- dependencies:
- '@types/node': 16.18.55
+ '@alloc/quick-lru@5.2.0': {}
- '@types/conventional-commits-parser@5.0.1':
+ '@antfu/install-pkg@1.1.0':
dependencies:
- '@types/node': 24.6.2
+ package-manager-detector: 1.6.0
+ tinyexec: 1.3.0
- '@types/eslint-scope@3.7.7':
- dependencies:
- '@types/eslint': 9.6.1
- '@types/estree': 1.0.8
+ '@antfu/utils@8.1.1': {}
- '@types/eslint@8.44.3':
+ '@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)':
dependencies:
- '@types/estree': 1.0.8
'@types/json-schema': 7.0.15
+ js-yaml: 4.2.0
- '@types/eslint@9.6.1':
+ '@babel/code-frame@7.29.7':
dependencies:
- '@types/estree': 1.0.8
- '@types/json-schema': 7.0.15
-
- '@types/estree@1.0.8': {}
+ '@babel/helper-validator-identifier': 7.29.7
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
- '@types/etag@1.8.3':
- dependencies:
- '@types/node': 16.18.55
+ '@babel/compat-data@7.29.7': {}
- '@types/express-serve-static-core@4.17.37':
+ '@babel/core@7.29.7':
dependencies:
- '@types/node': 24.6.2
- '@types/qs': 6.9.8
- '@types/range-parser': 1.2.5
- '@types/send': 0.17.2
+ '@babel/code-frame': 7.29.7
+ '@babel/generator': 7.29.8
+ '@babel/helper-compilation-targets': 7.29.7
+ '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7)
+ '@babel/helpers': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/template': 7.29.7
+ '@babel/traverse': 7.29.8
+ '@babel/types': 7.29.8
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
- '@types/express@4.17.18':
+ '@babel/generator@7.29.8':
dependencies:
- '@types/body-parser': 1.19.3
- '@types/express-serve-static-core': 4.17.37
- '@types/qs': 6.9.8
- '@types/serve-static': 1.15.7
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
- '@types/file-loader@5.0.4':
+ '@babel/generator@8.0.0':
dependencies:
- '@types/webpack': 4.41.38
-
- '@types/html-minifier-terser@5.1.2': {}
-
- '@types/html-minifier-terser@7.0.2': {}
-
- '@types/http-errors@2.0.4': {}
-
- '@types/istanbul-lib-coverage@2.0.6': {}
+ '@babel/parser': 8.0.4
+ '@babel/types': 8.0.4
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/jsesc': 2.5.1
+ jsesc: 3.1.0
- '@types/istanbul-lib-report@3.0.3':
+ '@babel/generator@8.0.0-rc.6':
dependencies:
- '@types/istanbul-lib-coverage': 2.0.6
+ '@babel/parser': 8.0.0-rc.6
+ '@babel/types': 8.0.0-rc.6
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/jsesc': 2.5.1
+ jsesc: 3.1.0
- '@types/istanbul-reports@3.0.4':
+ '@babel/helper-annotate-as-pure@7.29.7':
dependencies:
- '@types/istanbul-lib-report': 3.0.3
+ '@babel/types': 7.29.8
- '@types/jsdom@21.1.7':
+ '@babel/helper-compilation-targets@7.29.7':
dependencies:
- '@types/node': 24.6.2
- '@types/tough-cookie': 4.0.5
- parse5: 7.3.0
-
- '@types/json-schema@7.0.15': {}
-
- '@types/json5@0.0.29': {}
+ '@babel/compat-data': 7.29.7
+ '@babel/helper-validator-option': 7.29.7
+ browserslist: 4.28.7
+ lru-cache: 5.1.1
+ semver: 6.3.1
- '@types/jsonwebtoken@8.5.9':
+ '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)':
dependencies:
- '@types/node': 24.6.2
- optional: true
-
- '@types/less@3.0.6': {}
-
- '@types/long@4.0.2':
- optional: true
-
- '@types/mime@1.3.3': {}
-
- '@types/minimist@1.2.3': {}
-
- '@types/node@12.20.55': {}
-
- '@types/node@16.18.55': {}
+ '@babel/core': 7.29.7
+ '@babel/helper-annotate-as-pure': 7.29.7
+ '@babel/helper-member-expression-to-functions': 7.29.7
+ '@babel/helper-optimise-call-expression': 7.29.7
+ '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.29.7
+ '@babel/traverse': 7.29.8
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
- '@types/node@20.8.0': {}
+ '@babel/helper-globals@7.29.7': {}
- '@types/node@24.6.2':
+ '@babel/helper-member-expression-to-functions@7.29.7':
dependencies:
- undici-types: 7.13.0
-
- '@types/normalize-package-data@2.4.2': {}
+ '@babel/traverse': 7.29.8
+ '@babel/types': 7.29.8
+ transitivePeerDependencies:
+ - supports-color
- '@types/optimize-css-assets-webpack-plugin@5.0.8':
+ '@babel/helper-module-imports@7.29.7':
dependencies:
- '@types/webpack': 4.41.38
-
- '@types/parse-json@4.0.0': {}
-
- '@types/pug@2.0.10': {}
+ '@babel/traverse': 7.29.8
+ '@babel/types': 7.29.8
+ transitivePeerDependencies:
+ - supports-color
- '@types/qrcode@1.5.5':
+ '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)':
dependencies:
- '@types/node': 20.8.0
-
- '@types/qs@6.9.8': {}
-
- '@types/range-parser@1.2.5': {}
+ '@babel/core': 7.29.7
+ '@babel/helper-module-imports': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
+ '@babel/traverse': 7.29.8
+ transitivePeerDependencies:
+ - supports-color
- '@types/sax@1.2.7':
+ '@babel/helper-optimise-call-expression@7.29.7':
dependencies:
- '@types/node': 24.6.2
+ '@babel/types': 7.29.8
- '@types/semver@7.5.3': {}
+ '@babel/helper-plugin-utils@7.29.7': {}
- '@types/send@0.17.2':
+ '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)':
dependencies:
- '@types/mime': 1.3.3
- '@types/node': 24.6.2
+ '@babel/core': 7.29.7
+ '@babel/helper-member-expression-to-functions': 7.29.7
+ '@babel/helper-optimise-call-expression': 7.29.7
+ '@babel/traverse': 7.29.8
+ transitivePeerDependencies:
+ - supports-color
- '@types/serve-static@1.15.7':
+ '@babel/helper-skip-transparent-expression-wrappers@7.29.7':
dependencies:
- '@types/http-errors': 2.0.4
- '@types/node': 16.18.55
- '@types/send': 0.17.2
+ '@babel/traverse': 7.29.8
+ '@babel/types': 7.29.8
+ transitivePeerDependencies:
+ - supports-color
- '@types/source-list-map@0.1.3': {}
+ '@babel/helper-string-parser@7.29.7': {}
- '@types/stack-utils@2.0.3': {}
+ '@babel/helper-string-parser@8.0.0': {}
- '@types/strip-bom@3.0.0': {}
+ '@babel/helper-string-parser@8.0.0-rc.6': {}
- '@types/strip-json-comments@0.0.30': {}
+ '@babel/helper-validator-identifier@7.29.7': {}
- '@types/tapable@1.0.9': {}
+ '@babel/helper-validator-identifier@8.0.0-rc.6': {}
- '@types/terser-webpack-plugin@4.2.1':
- dependencies:
- '@types/webpack': 4.41.38
- terser: 4.8.1
+ '@babel/helper-validator-identifier@8.0.4': {}
- '@types/tough-cookie@4.0.5': {}
+ '@babel/helper-validator-option@7.29.7': {}
- '@types/uglify-js@3.17.2':
+ '@babel/helpers@7.29.7':
dependencies:
- source-map: 0.6.1
+ '@babel/template': 7.29.7
+ '@babel/types': 7.29.8
- '@types/webpack-bundle-analyzer@3.9.5':
+ '@babel/parser@7.29.7':
dependencies:
- '@types/webpack': 4.41.38
+ '@babel/types': 7.29.7
- '@types/webpack-hot-middleware@2.25.5':
+ '@babel/parser@7.29.8':
dependencies:
- '@types/connect': 3.4.38
- '@types/webpack': 4.41.38
+ '@babel/types': 7.29.8
- '@types/webpack-sources@3.2.1':
+ '@babel/parser@8.0.0-rc.6':
dependencies:
- '@types/node': 24.6.2
- '@types/source-list-map': 0.1.3
- source-map: 0.7.6
+ '@babel/types': 8.0.0-rc.6
- '@types/webpack@4.41.38':
+ '@babel/parser@8.0.4':
dependencies:
- '@types/node': 16.18.55
- '@types/tapable': 1.0.9
- '@types/uglify-js': 3.17.2
- '@types/webpack-sources': 3.2.1
- anymatch: 3.1.3
- source-map: 0.6.1
+ '@babel/types': 8.0.4
- '@types/yargs-parser@21.0.3': {}
-
- '@types/yargs@17.0.33':
+ '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)':
dependencies:
- '@types/yargs-parser': 21.0.3
+ '@babel/core': 7.29.7
+ '@babel/helper-plugin-utils': 7.29.7
- '@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)':
+ '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)':
dependencies:
- '@eslint-community/regexpp': 4.9.0
- '@typescript-eslint/parser': 6.7.3(eslint@8.57.1)(typescript@4.9.5)
- '@typescript-eslint/scope-manager': 6.7.3
- '@typescript-eslint/type-utils': 6.7.3(eslint@8.57.1)(typescript@4.9.5)
- '@typescript-eslint/utils': 6.7.3(eslint@8.57.1)(typescript@4.9.5)
- '@typescript-eslint/visitor-keys': 6.7.3
- debug: 4.4.1
- eslint: 8.57.1
- graphemer: 1.4.0
- ignore: 5.3.1
- natural-compare: 1.4.0
- semver: 7.7.2
- ts-api-utils: 1.0.3(typescript@4.9.5)
- optionalDependencies:
- typescript: 4.9.5
- transitivePeerDependencies:
- - supports-color
+ '@babel/core': 7.29.7
+ '@babel/helper-plugin-utils': 7.29.7
- '@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5)':
+ '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)':
dependencies:
- '@typescript-eslint/scope-manager': 6.7.3
- '@typescript-eslint/types': 6.7.3
- '@typescript-eslint/typescript-estree': 6.7.3(typescript@4.9.5)
- '@typescript-eslint/visitor-keys': 6.7.3
- debug: 4.4.1
- eslint: 8.57.1
- optionalDependencies:
- typescript: 4.9.5
+ '@babel/core': 7.29.7
+ '@babel/helper-annotate-as-pure': 7.29.7
+ '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7)
+ '@babel/helper-plugin-utils': 7.29.7
+ '@babel/helper-skip-transparent-expression-wrappers': 7.29.7
+ '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@6.7.3':
+ '@babel/template@7.29.7':
dependencies:
- '@typescript-eslint/types': 6.7.3
- '@typescript-eslint/visitor-keys': 6.7.3
+ '@babel/code-frame': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
- '@typescript-eslint/type-utils@6.7.3(eslint@8.57.1)(typescript@4.9.5)':
+ '@babel/traverse@7.29.8':
dependencies:
- '@typescript-eslint/typescript-estree': 6.7.3(typescript@4.9.5)
- '@typescript-eslint/utils': 6.7.3(eslint@8.57.1)(typescript@4.9.5)
- debug: 4.4.1
- eslint: 8.57.1
- ts-api-utils: 1.0.3(typescript@4.9.5)
- optionalDependencies:
- typescript: 4.9.5
+ '@babel/code-frame': 7.29.7
+ '@babel/generator': 7.29.8
+ '@babel/helper-globals': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/template': 7.29.7
+ '@babel/types': 7.29.8
+ debug: 4.4.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@6.7.3': {}
-
- '@typescript-eslint/typescript-estree@6.7.3(typescript@4.9.5)':
+ '@babel/types@7.29.7':
dependencies:
- '@typescript-eslint/types': 6.7.3
- '@typescript-eslint/visitor-keys': 6.7.3
- debug: 4.4.1
- globby: 11.1.0
- is-glob: 4.0.3
- semver: 7.7.2
- ts-api-utils: 1.0.3(typescript@4.9.5)
- optionalDependencies:
- typescript: 4.9.5
- transitivePeerDependencies:
- - supports-color
+ '@babel/helper-string-parser': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
- '@typescript-eslint/utils@6.7.3(eslint@8.57.1)(typescript@4.9.5)':
+ '@babel/types@7.29.8':
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
- '@types/json-schema': 7.0.15
- '@types/semver': 7.5.3
- '@typescript-eslint/scope-manager': 6.7.3
- '@typescript-eslint/types': 6.7.3
- '@typescript-eslint/typescript-estree': 6.7.3(typescript@4.9.5)
- eslint: 8.57.1
- semver: 7.7.2
- transitivePeerDependencies:
- - supports-color
- - typescript
+ '@babel/helper-string-parser': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
- '@typescript-eslint/visitor-keys@6.7.3':
+ '@babel/types@8.0.0-rc.6':
dependencies:
- '@typescript-eslint/types': 6.7.3
- eslint-visitor-keys: 3.4.3
+ '@babel/helper-string-parser': 8.0.0-rc.6
+ '@babel/helper-validator-identifier': 8.0.0-rc.6
- '@ungap/structured-clone@1.2.0': {}
-
- '@ungap/structured-clone@1.3.0': {}
-
- '@unrs/resolver-binding-android-arm-eabi@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-android-arm64@1.11.1':
- optional: true
+ '@babel/types@8.0.4':
+ dependencies:
+ '@babel/helper-string-parser': 8.0.0
+ '@babel/helper-validator-identifier': 8.0.4
- '@unrs/resolver-binding-darwin-arm64@1.11.1':
- optional: true
+ '@bomb.sh/tab@0.0.19(cac@6.7.14)(citty@0.2.2)':
+ optionalDependencies:
+ cac: 6.7.14
+ citty: 0.2.2
- '@unrs/resolver-binding-darwin-x64@1.11.1':
- optional: true
+ '@cacheable/memory@2.0.9':
+ dependencies:
+ '@cacheable/utils': 2.4.1
+ '@keyv/bigmap': 1.3.1(keyv@5.6.0)
+ hookified: 1.15.1
+ keyv: 5.6.0
- '@unrs/resolver-binding-freebsd-x64@1.11.1':
- optional: true
+ '@cacheable/utils@2.4.1':
+ dependencies:
+ hashery: 1.5.1
+ keyv: 5.6.0
- '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
- optional: true
+ '@capsizecss/unpack@4.0.1':
+ dependencies:
+ fontkitten: 1.0.3
- '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
- optional: true
+ '@clack/core@1.4.2':
+ dependencies:
+ fast-wrap-ansi: 0.2.2
+ sisteransi: 1.0.5
- '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
- optional: true
+ '@clack/core@1.4.3':
+ dependencies:
+ fast-wrap-ansi: 0.2.2
+ sisteransi: 1.0.5
- '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
- optional: true
+ '@clack/prompts@1.6.0':
+ dependencies:
+ '@clack/core': 1.4.2
+ fast-string-width: 3.0.2
+ fast-wrap-ansi: 0.2.2
+ sisteransi: 1.0.5
- '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
- optional: true
+ '@clack/prompts@1.7.0':
+ dependencies:
+ '@clack/core': 1.4.3
+ fast-string-width: 3.0.2
+ fast-wrap-ansi: 0.2.2
+ sisteransi: 1.0.5
- '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
- optional: true
+ '@cloudflare/kv-asset-handler@0.4.2': {}
- '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
- optional: true
+ '@colordx/core@5.5.0': {}
- '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
- optional: true
+ '@commitlint/cli@21.0.2(@types/node@25.9.1)(conventional-commits-parser@6.4.0)(typescript@5.9.3)':
+ dependencies:
+ '@commitlint/format': 21.0.1
+ '@commitlint/lint': 21.0.2
+ '@commitlint/load': 21.0.2(@types/node@25.9.1)(typescript@5.9.3)
+ '@commitlint/read': 21.0.2(conventional-commits-parser@6.4.0)
+ '@commitlint/types': 21.0.1
+ tinyexec: 1.2.2
+ yargs: 18.0.0
+ transitivePeerDependencies:
+ - '@types/node'
+ - conventional-commits-filter
+ - conventional-commits-parser
+ - typescript
- '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
- optional: true
+ '@commitlint/config-conventional@21.0.2':
+ dependencies:
+ '@commitlint/types': 21.0.1
+ conventional-changelog-conventionalcommits: 9.3.1
- '@unrs/resolver-binding-linux-x64-musl@1.11.1':
- optional: true
+ '@commitlint/config-validator@21.0.1':
+ dependencies:
+ '@commitlint/types': 21.0.1
+ ajv: 8.20.0
- '@unrs/resolver-binding-wasm32-wasi@1.11.1':
+ '@commitlint/ensure@21.0.1':
dependencies:
- '@napi-rs/wasm-runtime': 0.2.12
- optional: true
+ '@commitlint/types': 21.0.1
+ es-toolkit: 1.48.1
- '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
- optional: true
+ '@commitlint/execute-rule@21.0.1': {}
- '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
- optional: true
+ '@commitlint/format@21.0.1':
+ dependencies:
+ '@commitlint/types': 21.0.1
+ picocolors: 1.1.1
- '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
- optional: true
+ '@commitlint/is-ignored@21.0.2':
+ dependencies:
+ '@commitlint/types': 21.0.1
+ semver: 7.8.5
- '@vue/babel-helper-vue-jsx-merge-props@1.4.0': {}
+ '@commitlint/lint@21.0.2':
+ dependencies:
+ '@commitlint/is-ignored': 21.0.2
+ '@commitlint/parse': 21.0.2
+ '@commitlint/rules': 21.0.2
+ '@commitlint/types': 21.0.1
- '@vue/babel-plugin-transform-vue-jsx@1.4.0(@babel/core@7.24.7)':
+ '@commitlint/load@21.0.2(@types/node@25.9.1)(typescript@5.9.3)':
dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-module-imports': 7.24.7
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7)
- '@vue/babel-helper-vue-jsx-merge-props': 1.4.0
- html-tags: 2.0.0
- lodash.kebabcase: 4.1.1
- svg-tags: 1.0.0
+ '@commitlint/config-validator': 21.0.1
+ '@commitlint/execute-rule': 21.0.1
+ '@commitlint/resolve-extends': 21.0.1
+ '@commitlint/types': 21.0.1
+ cosmiconfig: 9.0.2(typescript@5.9.3)
+ cosmiconfig-typescript-loader: 6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.2(typescript@5.9.3))(typescript@5.9.3)
+ es-toolkit: 1.48.1
+ is-plain-obj: 4.1.0
+ picocolors: 1.1.1
transitivePeerDependencies:
- - supports-color
+ - '@types/node'
+ - typescript
- '@vue/babel-preset-jsx@1.4.0(@babel/core@7.24.7)(vue@2.7.16)':
- dependencies:
- '@babel/core': 7.24.7
- '@vue/babel-helper-vue-jsx-merge-props': 1.4.0
- '@vue/babel-plugin-transform-vue-jsx': 1.4.0(@babel/core@7.24.7)
- '@vue/babel-sugar-composition-api-inject-h': 1.4.0(@babel/core@7.24.7)
- '@vue/babel-sugar-composition-api-render-instance': 1.4.0(@babel/core@7.24.7)
- '@vue/babel-sugar-functional-vue': 1.4.0(@babel/core@7.24.7)
- '@vue/babel-sugar-inject-h': 1.4.0(@babel/core@7.24.7)
- '@vue/babel-sugar-v-model': 1.4.0(@babel/core@7.24.7)
- '@vue/babel-sugar-v-on': 1.4.0(@babel/core@7.24.7)
- optionalDependencies:
- vue: 2.7.16
- transitivePeerDependencies:
- - supports-color
+ '@commitlint/message@21.0.2': {}
- '@vue/babel-sugar-composition-api-inject-h@1.4.0(@babel/core@7.24.7)':
+ '@commitlint/parse@21.0.2':
dependencies:
- '@babel/core': 7.24.7
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7)
+ '@commitlint/types': 21.0.1
+ conventional-changelog-angular: 8.3.1
+ conventional-commits-parser: 6.4.0
- '@vue/babel-sugar-composition-api-render-instance@1.4.0(@babel/core@7.24.7)':
+ '@commitlint/read@21.0.2(conventional-commits-parser@6.4.0)':
dependencies:
- '@babel/core': 7.24.7
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7)
+ '@commitlint/top-level': 21.0.2
+ '@commitlint/types': 21.0.1
+ git-raw-commits: 5.0.1(conventional-commits-parser@6.4.0)
+ tinyexec: 1.2.2
+ transitivePeerDependencies:
+ - conventional-commits-filter
+ - conventional-commits-parser
- '@vue/babel-sugar-functional-vue@1.4.0(@babel/core@7.24.7)':
+ '@commitlint/resolve-extends@21.0.1':
dependencies:
- '@babel/core': 7.24.7
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7)
+ '@commitlint/config-validator': 21.0.1
+ '@commitlint/types': 21.0.1
+ es-toolkit: 1.48.1
+ global-directory: 5.0.0
+ resolve-from: 5.0.0
- '@vue/babel-sugar-inject-h@1.4.0(@babel/core@7.24.7)':
+ '@commitlint/rules@21.0.2':
dependencies:
- '@babel/core': 7.24.7
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7)
+ '@commitlint/ensure': 21.0.1
+ '@commitlint/message': 21.0.2
+ '@commitlint/to-lines': 21.0.1
+ '@commitlint/types': 21.0.1
- '@vue/babel-sugar-v-model@1.4.0(@babel/core@7.24.7)':
- dependencies:
- '@babel/core': 7.24.7
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7)
- '@vue/babel-helper-vue-jsx-merge-props': 1.4.0
- '@vue/babel-plugin-transform-vue-jsx': 1.4.0(@babel/core@7.24.7)
- camelcase: 5.3.1
- html-tags: 2.0.0
- svg-tags: 1.0.0
- transitivePeerDependencies:
- - supports-color
+ '@commitlint/to-lines@21.0.1': {}
- '@vue/babel-sugar-v-on@1.4.0(@babel/core@7.24.7)':
+ '@commitlint/top-level@21.0.2':
dependencies:
- '@babel/core': 7.24.7
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.24.7)
- '@vue/babel-plugin-transform-vue-jsx': 1.4.0(@babel/core@7.24.7)
- camelcase: 5.3.1
- transitivePeerDependencies:
- - supports-color
+ escalade: 3.2.0
- '@vue/compiler-sfc@2.7.16':
+ '@commitlint/types@21.0.1':
dependencies:
- '@babel/parser': 7.24.0
- postcss: 8.4.35
- source-map: 0.6.1
- optionalDependencies:
- prettier: 2.8.8
+ conventional-commits-parser: 6.4.0
+ picocolors: 1.1.1
- '@vue/component-compiler-utils@3.3.0(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)':
+ '@conventional-changelog/git-client@2.7.0(conventional-commits-parser@6.4.0)':
dependencies:
- consolidate: 0.15.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)
- hash-sum: 1.0.2
- lru-cache: 4.1.5
- merge-source-map: 1.1.0
- postcss: 7.0.39
- postcss-selector-parser: 6.1.2
- source-map: 0.6.1
- vue-template-es2015-compiler: 1.9.1
+ '@simple-libs/child-process-utils': 1.0.2
+ '@simple-libs/stream-utils': 1.2.0
+ semver: 7.8.5
optionalDependencies:
- prettier: 2.8.8
- transitivePeerDependencies:
- - arc-templates
- - atpl
- - babel-core
- - bracket-template
- - coffee-script
- - dot
- - dust
- - dustjs-helpers
- - dustjs-linkedin
- - eco
- - ect
- - ejs
- - haml-coffee
- - hamlet
- - hamljs
- - handlebars
- - hogan.js
- - htmling
- - jade
- - jazz
- - jqtpl
- - just
- - liquid-node
- - liquor
- - lodash
- - marko
- - mote
- - mustache
- - nunjucks
- - plates
- - pug
- - qejs
- - ractive
- - razor-tmpl
- - react
- - react-dom
- - slm
- - squirrelly
- - swig
- - swig-templates
- - teacup
- - templayed
- - then-jade
- - then-pug
- - tinyliquid
- - toffee
- - twig
- - twing
- - underscore
- - vash
- - velocityjs
- - walrus
- - whiskers
-
- '@vue/test-utils@1.3.6(vue-template-compiler@2.7.16)(vue@2.7.16)':
- dependencies:
- dom-event-types: 1.1.0
- lodash: 4.17.21
- pretty: 2.0.0
- vue: 2.7.16
- vue-template-compiler: 2.7.16
+ conventional-commits-parser: 6.4.0
- '@webassemblyjs/ast@1.14.1':
+ '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
dependencies:
- '@webassemblyjs/helper-numbers': 1.13.2
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-tokenizer': 4.0.0
- '@webassemblyjs/ast@1.9.0':
+ '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)':
dependencies:
- '@webassemblyjs/helper-module-context': 1.9.0
- '@webassemblyjs/helper-wasm-bytecode': 1.9.0
- '@webassemblyjs/wast-parser': 1.9.0
-
- '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
+ '@csstools/css-tokenizer': 4.0.0
- '@webassemblyjs/floating-point-hex-parser@1.9.0': {}
+ '@csstools/css-syntax-patches-for-csstree@1.1.5(css-tree@3.2.1)':
+ optionalDependencies:
+ css-tree: 3.2.1
- '@webassemblyjs/helper-api-error@1.13.2': {}
+ '@csstools/css-tokenizer@4.0.0': {}
- '@webassemblyjs/helper-api-error@1.9.0': {}
+ '@csstools/media-query-list-parser@5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
+ dependencies:
+ '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-tokenizer': 4.0.0
- '@webassemblyjs/helper-buffer@1.14.1': {}
+ '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)':
+ dependencies:
+ postcss-selector-parser: 7.1.1
- '@webassemblyjs/helper-buffer@1.9.0': {}
+ '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.1)':
+ dependencies:
+ postcss-selector-parser: 7.1.1
- '@webassemblyjs/helper-code-frame@1.9.0':
+ '@devframes/hub@0.5.4(devframe@0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
dependencies:
- '@webassemblyjs/wast-printer': 1.9.0
+ birpc: 4.0.0
+ devframe: 0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ nostics: 0.2.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ tinyexec: 1.3.0
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - rolldown
+ - rollup
+ - unloader
+ - vite
+ - webpack
- '@webassemblyjs/helper-fsm@1.9.0': {}
+ '@dxup/nuxt@0.5.6(esbuild@0.25.12)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
+ dependencies:
+ '@dxup/unimport': 0.1.2
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@vue/compiler-dom': 3.5.41
+ chokidar: 5.0.0
+ knitwork: 1.3.0
+ magic-string: 1.1.0
+ pathe: 2.0.3
+ tinyglobby: 0.2.17
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - magicast
+ - oxc-parser
+ - rolldown
+ - rollup
+ - unloader
+ - vite
+ - webpack
- '@webassemblyjs/helper-module-context@1.9.0':
- dependencies:
- '@webassemblyjs/ast': 1.9.0
+ '@dxup/unimport@0.1.2': {}
- '@webassemblyjs/helper-numbers@1.13.2':
+ '@emnapi/core@1.10.0':
dependencies:
- '@webassemblyjs/floating-point-hex-parser': 1.13.2
- '@webassemblyjs/helper-api-error': 1.13.2
- '@xtuc/long': 4.2.2
-
- '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
+ '@emnapi/wasi-threads': 1.2.1
+ tslib: 2.8.1
+ optional: true
- '@webassemblyjs/helper-wasm-bytecode@1.9.0': {}
+ '@emnapi/core@1.11.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.2
+ tslib: 2.8.1
+ optional: true
- '@webassemblyjs/helper-wasm-section@1.14.1':
+ '@emnapi/runtime@1.10.0':
dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-buffer': 1.14.1
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/wasm-gen': 1.14.1
+ tslib: 2.8.1
+ optional: true
- '@webassemblyjs/helper-wasm-section@1.9.0':
+ '@emnapi/runtime@1.11.1':
dependencies:
- '@webassemblyjs/ast': 1.9.0
- '@webassemblyjs/helper-buffer': 1.9.0
- '@webassemblyjs/helper-wasm-bytecode': 1.9.0
- '@webassemblyjs/wasm-gen': 1.9.0
+ tslib: 2.8.1
+ optional: true
- '@webassemblyjs/ieee754@1.13.2':
+ '@emnapi/runtime@1.11.2':
dependencies:
- '@xtuc/ieee754': 1.2.0
+ tslib: 2.8.1
+ optional: true
- '@webassemblyjs/ieee754@1.9.0':
+ '@emnapi/wasi-threads@1.2.1':
dependencies:
- '@xtuc/ieee754': 1.2.0
+ tslib: 2.8.1
+ optional: true
- '@webassemblyjs/leb128@1.13.2':
+ '@emnapi/wasi-threads@1.2.2':
dependencies:
- '@xtuc/long': 4.2.2
+ tslib: 2.8.1
+ optional: true
- '@webassemblyjs/leb128@1.9.0':
+ '@es-joy/jsdoccomment@0.87.0':
dependencies:
- '@xtuc/long': 4.2.2
+ '@types/estree': 1.0.9
+ '@typescript-eslint/types': 8.62.0
+ comment-parser: 1.4.7
+ esquery: 1.7.0
+ jsdoc-type-pratt-parser: 7.2.0
- '@webassemblyjs/utf8@1.13.2': {}
+ '@es-joy/resolve.exports@1.2.0': {}
- '@webassemblyjs/utf8@1.9.0': {}
+ '@esbuild/aix-ppc64@0.25.12':
+ optional: true
- '@webassemblyjs/wasm-edit@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-buffer': 1.14.1
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/helper-wasm-section': 1.14.1
- '@webassemblyjs/wasm-gen': 1.14.1
- '@webassemblyjs/wasm-opt': 1.14.1
- '@webassemblyjs/wasm-parser': 1.14.1
- '@webassemblyjs/wast-printer': 1.14.1
+ '@esbuild/aix-ppc64@0.27.7':
+ optional: true
- '@webassemblyjs/wasm-edit@1.9.0':
- dependencies:
- '@webassemblyjs/ast': 1.9.0
- '@webassemblyjs/helper-buffer': 1.9.0
- '@webassemblyjs/helper-wasm-bytecode': 1.9.0
- '@webassemblyjs/helper-wasm-section': 1.9.0
- '@webassemblyjs/wasm-gen': 1.9.0
- '@webassemblyjs/wasm-opt': 1.9.0
- '@webassemblyjs/wasm-parser': 1.9.0
- '@webassemblyjs/wast-printer': 1.9.0
+ '@esbuild/aix-ppc64@0.28.1':
+ optional: true
- '@webassemblyjs/wasm-gen@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/ieee754': 1.13.2
- '@webassemblyjs/leb128': 1.13.2
- '@webassemblyjs/utf8': 1.13.2
+ '@esbuild/android-arm64@0.25.12':
+ optional: true
- '@webassemblyjs/wasm-gen@1.9.0':
- dependencies:
- '@webassemblyjs/ast': 1.9.0
- '@webassemblyjs/helper-wasm-bytecode': 1.9.0
- '@webassemblyjs/ieee754': 1.9.0
- '@webassemblyjs/leb128': 1.9.0
- '@webassemblyjs/utf8': 1.9.0
+ '@esbuild/android-arm64@0.27.7':
+ optional: true
- '@webassemblyjs/wasm-opt@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-buffer': 1.14.1
- '@webassemblyjs/wasm-gen': 1.14.1
- '@webassemblyjs/wasm-parser': 1.14.1
+ '@esbuild/android-arm64@0.28.1':
+ optional: true
- '@webassemblyjs/wasm-opt@1.9.0':
- dependencies:
- '@webassemblyjs/ast': 1.9.0
- '@webassemblyjs/helper-buffer': 1.9.0
- '@webassemblyjs/wasm-gen': 1.9.0
- '@webassemblyjs/wasm-parser': 1.9.0
+ '@esbuild/android-arm@0.25.12':
+ optional: true
- '@webassemblyjs/wasm-parser@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-api-error': 1.13.2
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/ieee754': 1.13.2
- '@webassemblyjs/leb128': 1.13.2
- '@webassemblyjs/utf8': 1.13.2
+ '@esbuild/android-arm@0.27.7':
+ optional: true
- '@webassemblyjs/wasm-parser@1.9.0':
- dependencies:
- '@webassemblyjs/ast': 1.9.0
- '@webassemblyjs/helper-api-error': 1.9.0
- '@webassemblyjs/helper-wasm-bytecode': 1.9.0
- '@webassemblyjs/ieee754': 1.9.0
- '@webassemblyjs/leb128': 1.9.0
- '@webassemblyjs/utf8': 1.9.0
+ '@esbuild/android-arm@0.28.1':
+ optional: true
- '@webassemblyjs/wast-parser@1.9.0':
- dependencies:
- '@webassemblyjs/ast': 1.9.0
- '@webassemblyjs/floating-point-hex-parser': 1.9.0
- '@webassemblyjs/helper-api-error': 1.9.0
- '@webassemblyjs/helper-code-frame': 1.9.0
- '@webassemblyjs/helper-fsm': 1.9.0
- '@xtuc/long': 4.2.2
+ '@esbuild/android-x64@0.25.12':
+ optional: true
- '@webassemblyjs/wast-printer@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@xtuc/long': 4.2.2
+ '@esbuild/android-x64@0.27.7':
+ optional: true
- '@webassemblyjs/wast-printer@1.9.0':
- dependencies:
- '@webassemblyjs/ast': 1.9.0
- '@webassemblyjs/wast-parser': 1.9.0
- '@xtuc/long': 4.2.2
+ '@esbuild/android-x64@0.28.1':
+ optional: true
- '@xtuc/ieee754@1.2.0': {}
+ '@esbuild/darwin-arm64@0.25.12':
+ optional: true
- '@xtuc/long@4.2.2': {}
+ '@esbuild/darwin-arm64@0.27.7':
+ optional: true
- JSONStream@1.3.5:
- dependencies:
- jsonparse: 1.3.1
- through: 2.3.8
+ '@esbuild/darwin-arm64@0.28.1':
+ optional: true
- abbrev@1.1.1: {}
+ '@esbuild/darwin-x64@0.25.12':
+ optional: true
- abort-controller@3.0.0:
- dependencies:
- event-target-shim: 5.0.1
+ '@esbuild/darwin-x64@0.27.7':
+ optional: true
+
+ '@esbuild/darwin-x64@0.28.1':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.25.12':
optional: true
- accepts@1.3.8:
- dependencies:
- mime-types: 2.1.35
- negotiator: 0.6.3
+ '@esbuild/freebsd-arm64@0.27.7':
+ optional: true
- acorn-import-phases@1.0.4(acorn@8.15.0):
- dependencies:
- acorn: 8.15.0
+ '@esbuild/freebsd-arm64@0.28.1':
+ optional: true
- acorn-jsx@5.3.2(acorn@8.15.0):
- dependencies:
- acorn: 8.15.0
+ '@esbuild/freebsd-x64@0.25.12':
+ optional: true
- acorn-walk@8.2.0: {}
+ '@esbuild/freebsd-x64@0.27.7':
+ optional: true
- acorn@6.4.2: {}
+ '@esbuild/freebsd-x64@0.28.1':
+ optional: true
- acorn@8.15.0: {}
+ '@esbuild/linux-arm64@0.25.12':
+ optional: true
- agent-base@6.0.2:
- dependencies:
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
+ '@esbuild/linux-arm64@0.27.7':
+ optional: true
- agent-base@7.1.4: {}
+ '@esbuild/linux-arm64@0.28.1':
+ optional: true
- aggregate-error@3.1.0:
- dependencies:
- clean-stack: 2.2.0
- indent-string: 4.0.0
+ '@esbuild/linux-arm@0.25.12':
+ optional: true
- ajv-errors@1.0.1(ajv@6.12.6):
- dependencies:
- ajv: 6.12.6
+ '@esbuild/linux-arm@0.27.7':
+ optional: true
- ajv-formats@2.1.1(ajv@8.17.1):
- optionalDependencies:
- ajv: 8.17.1
+ '@esbuild/linux-arm@0.28.1':
+ optional: true
- ajv-keywords@3.5.2(ajv@6.12.6):
- dependencies:
- ajv: 6.12.6
+ '@esbuild/linux-ia32@0.25.12':
+ optional: true
- ajv-keywords@5.1.0(ajv@8.17.1):
- dependencies:
- ajv: 8.17.1
- fast-deep-equal: 3.1.3
+ '@esbuild/linux-ia32@0.27.7':
+ optional: true
- ajv@6.12.6:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-json-stable-stringify: 2.1.0
- json-schema-traverse: 0.4.1
- uri-js: 4.4.1
+ '@esbuild/linux-ia32@0.28.1':
+ optional: true
- ajv@8.12.0:
- dependencies:
- fast-deep-equal: 3.1.3
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
- uri-js: 4.4.1
+ '@esbuild/linux-loong64@0.25.12':
+ optional: true
- ajv@8.17.1:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-uri: 3.1.0
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
+ '@esbuild/linux-loong64@0.27.7':
+ optional: true
- ansi-align@3.0.1:
- dependencies:
- string-width: 4.2.3
+ '@esbuild/linux-loong64@0.28.1':
+ optional: true
- ansi-escapes@4.3.2:
- dependencies:
- type-fest: 0.21.3
+ '@esbuild/linux-mips64el@0.25.12':
+ optional: true
- ansi-escapes@7.1.1:
- dependencies:
- environment: 1.1.0
+ '@esbuild/linux-mips64el@0.27.7':
+ optional: true
- ansi-html-community@0.0.8: {}
+ '@esbuild/linux-mips64el@0.28.1':
+ optional: true
- ansi-regex@2.1.1: {}
+ '@esbuild/linux-ppc64@0.25.12':
+ optional: true
- ansi-regex@5.0.1: {}
+ '@esbuild/linux-ppc64@0.27.7':
+ optional: true
- ansi-regex@6.1.0: {}
+ '@esbuild/linux-ppc64@0.28.1':
+ optional: true
- ansi-styles@2.2.1: {}
+ '@esbuild/linux-riscv64@0.25.12':
+ optional: true
- ansi-styles@3.2.1:
- dependencies:
- color-convert: 1.9.3
+ '@esbuild/linux-riscv64@0.27.7':
+ optional: true
- ansi-styles@4.3.0:
- dependencies:
- color-convert: 2.0.1
+ '@esbuild/linux-riscv64@0.28.1':
+ optional: true
- ansi-styles@5.2.0: {}
+ '@esbuild/linux-s390x@0.25.12':
+ optional: true
- ansi-styles@6.2.3: {}
+ '@esbuild/linux-s390x@0.27.7':
+ optional: true
- anymatch@2.0.0:
- dependencies:
- micromatch: 3.1.10
- normalize-path: 2.1.1
- transitivePeerDependencies:
- - supports-color
+ '@esbuild/linux-s390x@0.28.1':
optional: true
- anymatch@3.1.3:
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
+ '@esbuild/linux-x64@0.25.12':
+ optional: true
- aproba@1.2.0: {}
+ '@esbuild/linux-x64@0.27.7':
+ optional: true
- arg@4.1.3: {}
+ '@esbuild/linux-x64@0.28.1':
+ optional: true
- arg@5.0.2: {}
+ '@esbuild/netbsd-arm64@0.25.12':
+ optional: true
- argparse@1.0.10:
- dependencies:
- sprintf-js: 1.0.3
+ '@esbuild/netbsd-arm64@0.27.7':
+ optional: true
- argparse@2.0.1: {}
+ '@esbuild/netbsd-arm64@0.28.1':
+ optional: true
- arr-diff@4.0.0: {}
+ '@esbuild/netbsd-x64@0.25.12':
+ optional: true
- arr-flatten@1.1.0: {}
+ '@esbuild/netbsd-x64@0.27.7':
+ optional: true
- arr-union@3.1.0: {}
+ '@esbuild/netbsd-x64@0.28.1':
+ optional: true
- array-buffer-byte-length@1.0.0:
- dependencies:
- call-bind: 1.0.2
- is-array-buffer: 3.0.2
+ '@esbuild/openbsd-arm64@0.25.12':
+ optional: true
- array-ify@1.0.0: {}
+ '@esbuild/openbsd-arm64@0.27.7':
+ optional: true
- array-includes@3.1.7:
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
- get-intrinsic: 1.2.1
- is-string: 1.0.7
+ '@esbuild/openbsd-arm64@0.28.1':
+ optional: true
- array-union@2.1.0: {}
+ '@esbuild/openbsd-x64@0.25.12':
+ optional: true
- array-unique@0.3.2: {}
+ '@esbuild/openbsd-x64@0.27.7':
+ optional: true
- array.prototype.findlastindex@1.2.3:
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
- es-shim-unscopables: 1.0.0
- get-intrinsic: 1.2.1
+ '@esbuild/openbsd-x64@0.28.1':
+ optional: true
- array.prototype.flat@1.3.2:
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
- es-shim-unscopables: 1.0.0
+ '@esbuild/openharmony-arm64@0.25.12':
+ optional: true
- array.prototype.flatmap@1.3.2:
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
- es-shim-unscopables: 1.0.0
+ '@esbuild/openharmony-arm64@0.27.7':
+ optional: true
- array.prototype.reduce@1.0.6:
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
- es-array-method-boxes-properly: 1.0.0
- is-string: 1.0.7
+ '@esbuild/openharmony-arm64@0.28.1':
+ optional: true
- arraybuffer.prototype.slice@1.0.2:
- dependencies:
- array-buffer-byte-length: 1.0.0
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
- get-intrinsic: 1.3.0
- is-array-buffer: 3.0.2
- is-shared-array-buffer: 1.0.2
+ '@esbuild/sunos-x64@0.25.12':
+ optional: true
- arrify@1.0.1: {}
+ '@esbuild/sunos-x64@0.27.7':
+ optional: true
- arrify@2.0.1:
+ '@esbuild/sunos-x64@0.28.1':
optional: true
- asn1.js@5.4.1:
- dependencies:
- bn.js: 4.12.0
- inherits: 2.0.4
- minimalistic-assert: 1.0.1
- safer-buffer: 2.1.2
+ '@esbuild/win32-arm64@0.25.12':
+ optional: true
- assert@1.5.1:
- dependencies:
- object.assign: 4.1.4
- util: 0.10.4
+ '@esbuild/win32-arm64@0.27.7':
+ optional: true
- assign-symbols@1.0.0: {}
+ '@esbuild/win32-arm64@0.28.1':
+ optional: true
- astral-regex@2.0.0: {}
+ '@esbuild/win32-ia32@0.25.12':
+ optional: true
- async-cache@1.1.0:
- dependencies:
- lru-cache: 4.1.5
+ '@esbuild/win32-ia32@0.27.7':
+ optional: true
- async-each@1.0.6:
+ '@esbuild/win32-ia32@0.28.1':
optional: true
- async-retry@1.3.3:
- dependencies:
- retry: 0.13.1
+ '@esbuild/win32-x64@0.25.12':
optional: true
- async@3.2.6:
+ '@esbuild/win32-x64@0.27.7':
optional: true
- asynckit@0.4.0: {}
+ '@esbuild/win32-x64@0.28.1':
+ optional: true
- at-least-node@1.0.0: {}
+ '@eslint-community/eslint-utils@4.9.1(eslint@10.5.0(jiti@2.7.0))':
+ dependencies:
+ eslint: 10.5.0(jiti@2.7.0)
+ eslint-visitor-keys: 3.4.3
- atob@2.1.2: {}
+ '@eslint-community/regexpp@4.12.2': {}
- autoprefixer@10.4.19(postcss@8.4.39):
+ '@eslint/compat@2.1.0(eslint@10.5.0(jiti@2.7.0))':
dependencies:
- browserslist: 4.26.2
- caniuse-lite: 1.0.30001746
- fraction.js: 4.3.7
- normalize-range: 0.1.2
- picocolors: 1.1.1
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
-
- available-typed-arrays@1.0.5: {}
+ '@eslint/core': 1.2.1
+ optionalDependencies:
+ eslint: 10.5.0(jiti@2.7.0)
- axios@0.30.2:
+ '@eslint/config-array@0.23.5':
dependencies:
- follow-redirects: 1.15.11
- form-data: 4.0.4
- proxy-from-env: 1.1.0
+ '@eslint/object-schema': 3.0.5
+ debug: 4.4.3
+ minimatch: 10.2.5
transitivePeerDependencies:
- - debug
+ - supports-color
- babel-code-frame@6.26.0:
+ '@eslint/config-helpers@0.5.5':
dependencies:
- chalk: 1.1.3
- esutils: 2.0.3
- js-tokens: 3.0.2
+ '@eslint/core': 1.2.1
- babel-core@7.0.0-bridge.0(@babel/core@7.28.4):
+ '@eslint/config-helpers@0.6.0':
dependencies:
- '@babel/core': 7.28.4
+ '@eslint/core': 1.2.1
- babel-jest@30.2.0(@babel/core@7.28.4):
+ '@eslint/config-inspector@3.0.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
dependencies:
- '@babel/core': 7.28.4
- '@jest/transform': 30.2.0
- '@types/babel__core': 7.20.5
- babel-plugin-istanbul: 7.0.1
- babel-preset-jest: 30.2.0(@babel/core@7.28.4)
- chalk: 4.1.2
- graceful-fs: 4.2.11
- slash: 3.0.0
+ ansis: 4.3.0
+ cac: 7.0.0
+ chokidar: 5.0.0
+ devframe: 0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ eslint: 10.5.0(jiti@2.7.0)
+ jiti: 2.7.0
+ tinyglobby: 0.2.17
transitivePeerDependencies:
- - supports-color
+ - '@farmfe/core'
+ - '@modelcontextprotocol/sdk'
+ - '@rspack/core'
+ - bufferutil
+ - bun-types-no-globals
+ - crossws
+ - esbuild
+ - rolldown
+ - rollup
+ - typescript
+ - unloader
+ - utf-8-validate
+ - vite
+ - webpack
- babel-loader@8.3.0(@babel/core@7.24.7)(webpack@4.47.0):
+ '@eslint/core@1.2.1':
dependencies:
- '@babel/core': 7.24.7
- find-cache-dir: 3.3.2
- loader-utils: 2.0.4
- make-dir: 3.1.0
- schema-utils: 2.7.1
- webpack: 4.47.0
+ '@types/json-schema': 7.0.15
- babel-messages@6.23.0:
- dependencies:
- babel-runtime: 6.26.0
+ '@eslint/js@10.0.1(eslint@10.5.0(jiti@2.7.0))':
+ optionalDependencies:
+ eslint: 10.5.0(jiti@2.7.0)
- babel-plugin-istanbul@7.0.1:
- dependencies:
- '@babel/helper-plugin-utils': 7.27.1
- '@istanbuljs/load-nyc-config': 1.1.0
- '@istanbuljs/schema': 0.1.3
- istanbul-lib-instrument: 6.0.3
- test-exclude: 6.0.0
- transitivePeerDependencies:
- - supports-color
+ '@eslint/object-schema@3.0.5': {}
- babel-plugin-jest-hoist@30.2.0:
+ '@eslint/plugin-kit@0.7.2':
dependencies:
- '@types/babel__core': 7.20.5
+ '@eslint/core': 1.2.1
+ levn: 0.4.1
- babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7):
+ '@fingerprintjs/botd@2.0.0': {}
+
+ '@firebase/ai@2.12.0(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)':
dependencies:
- '@babel/compat-data': 7.24.7
- '@babel/core': 7.24.7
- '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7)
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
+ '@firebase/app': 0.14.12
+ '@firebase/app-check-interop-types': 0.3.4
+ '@firebase/app-types': 0.9.5
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7):
+ '@firebase/analytics-compat@0.2.28(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)':
dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7)
- core-js-compat: 3.37.1
+ '@firebase/analytics': 0.10.22(@firebase/app@0.14.12)
+ '@firebase/analytics-types': 0.8.4
+ '@firebase/app-compat': 0.5.12
+ '@firebase/component': 0.7.3
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
transitivePeerDependencies:
- - supports-color
+ - '@firebase/app'
- babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7):
+ '@firebase/analytics-types@0.8.4': {}
+
+ '@firebase/analytics@0.10.22(@firebase/app@0.14.12)':
dependencies:
- '@babel/core': 7.24.7
- '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7)
- transitivePeerDependencies:
- - supports-color
+ '@firebase/app': 0.14.12
+ '@firebase/component': 0.7.3
+ '@firebase/installations': 0.6.22(@firebase/app@0.14.12)
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- babel-plugin-transform-es2015-modules-commonjs@6.26.2:
+ '@firebase/app-check-compat@0.4.3(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)':
dependencies:
- babel-plugin-transform-strict-mode: 6.24.1
- babel-runtime: 6.26.0
- babel-template: 6.26.0
- babel-types: 6.26.0
+ '@firebase/app-check': 0.11.3(@firebase/app@0.14.12)
+ '@firebase/app-check-types': 0.5.4
+ '@firebase/app-compat': 0.5.12
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
transitivePeerDependencies:
- - supports-color
+ - '@firebase/app'
+
+ '@firebase/app-check-interop-types@0.3.4': {}
- babel-plugin-transform-strict-mode@6.24.1:
+ '@firebase/app-check-types@0.5.4': {}
+
+ '@firebase/app-check@0.11.3(@firebase/app@0.14.12)':
dependencies:
- babel-runtime: 6.26.0
- babel-types: 6.26.0
+ '@firebase/app': 0.14.12
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.4):
+ '@firebase/app-compat@0.5.12':
dependencies:
- '@babel/core': 7.28.4
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.4)
- '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.4)
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.4)
- '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.4)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.4)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.4)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.4)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.4)
+ '@firebase/app': 0.14.12
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- babel-preset-jest@30.2.0(@babel/core@7.28.4):
+ '@firebase/app-types@0.9.5':
dependencies:
- '@babel/core': 7.28.4
- babel-plugin-jest-hoist: 30.2.0
- babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4)
+ '@firebase/logger': 0.5.1
- babel-runtime@6.26.0:
+ '@firebase/app@0.14.12':
dependencies:
- core-js: 2.6.12
- regenerator-runtime: 0.11.1
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ idb: 7.1.1
+ tslib: 2.8.1
- babel-template@6.26.0:
+ '@firebase/auth-compat@0.6.6(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)':
dependencies:
- babel-runtime: 6.26.0
- babel-traverse: 6.26.0
- babel-types: 6.26.0
- babylon: 6.18.0
- lodash: 4.17.21
+ '@firebase/app-compat': 0.5.12
+ '@firebase/auth': 1.13.1(@firebase/app@0.14.12)
+ '@firebase/auth-types': 0.13.1(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)
+ '@firebase/component': 0.7.3
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
transitivePeerDependencies:
- - supports-color
+ - '@firebase/app'
+ - '@firebase/app-types'
+ - '@react-native-async-storage/async-storage'
- babel-traverse@6.26.0:
- dependencies:
- babel-code-frame: 6.26.0
- babel-messages: 6.23.0
- babel-runtime: 6.26.0
- babel-types: 6.26.0
- babylon: 6.18.0
- debug: 2.6.9
- globals: 9.18.0
- invariant: 2.2.4
- lodash: 4.17.21
- transitivePeerDependencies:
- - supports-color
+ '@firebase/auth-interop-types@0.2.5': {}
- babel-types@6.26.0:
+ '@firebase/auth-types@0.13.1(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)':
dependencies:
- babel-runtime: 6.26.0
- esutils: 2.0.3
- lodash: 4.17.21
- to-fast-properties: 1.0.3
-
- babylon@6.18.0: {}
-
- balanced-match@1.0.2: {}
-
- balanced-match@2.0.0: {}
-
- base64-js@1.5.1: {}
+ '@firebase/app-types': 0.9.5
+ '@firebase/util': 1.15.1
- base@0.11.2:
+ '@firebase/auth@1.13.1(@firebase/app@0.14.12)':
dependencies:
- cache-base: 1.0.1
- class-utils: 0.3.6
- component-emitter: 1.3.0
- define-property: 1.0.0
- isobject: 3.0.1
- mixin-deep: 1.3.2
- pascalcase: 0.1.1
-
- baseline-browser-mapping@2.8.10: {}
+ '@firebase/app': 0.14.12
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- baseline-browser-mapping@2.8.9: {}
+ '@firebase/component@0.7.3':
+ dependencies:
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- big.js@5.2.2: {}
+ '@firebase/data-connect@0.7.0(@firebase/app@0.14.12)':
+ dependencies:
+ '@firebase/app': 0.14.12
+ '@firebase/auth-interop-types': 0.2.5
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- bignumber.js@9.1.2:
- optional: true
+ '@firebase/database-compat@2.1.4':
+ dependencies:
+ '@firebase/component': 0.7.3
+ '@firebase/database': 1.1.3
+ '@firebase/database-types': 1.0.20
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- binary-extensions@1.13.1:
- optional: true
+ '@firebase/database-types@1.0.20':
+ dependencies:
+ '@firebase/app-types': 0.9.5
+ '@firebase/util': 1.15.1
- binary-extensions@2.2.0: {}
+ '@firebase/database@1.1.3':
+ dependencies:
+ '@firebase/app-check-interop-types': 0.3.4
+ '@firebase/auth-interop-types': 0.2.5
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ faye-websocket: 0.11.4
+ tslib: 2.8.1
- bindings@1.5.0:
+ '@firebase/firestore-compat@0.4.9(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)':
dependencies:
- file-uri-to-path: 1.0.0
+ '@firebase/app-compat': 0.5.12
+ '@firebase/component': 0.7.3
+ '@firebase/firestore': 4.14.1(@firebase/app@0.14.12)
+ '@firebase/firestore-types': 3.0.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+ - '@firebase/app-types'
- bluebird@3.7.2: {}
+ '@firebase/firestore-types@3.0.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)':
+ dependencies:
+ '@firebase/app-types': 0.9.5
+ '@firebase/util': 1.15.1
- bn.js@4.12.0: {}
+ '@firebase/firestore@4.14.1(@firebase/app@0.14.12)':
+ dependencies:
+ '@firebase/app': 0.14.12
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ '@firebase/webchannel-wrapper': 1.0.6
+ '@grpc/grpc-js': 1.9.16
+ '@grpc/proto-loader': 0.7.15
+ tslib: 2.8.1
- bn.js@5.2.1: {}
+ '@firebase/functions-compat@0.4.4(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)':
+ dependencies:
+ '@firebase/app-compat': 0.5.12
+ '@firebase/component': 0.7.3
+ '@firebase/functions': 0.13.4(@firebase/app@0.14.12)
+ '@firebase/functions-types': 0.6.4
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
- boolbase@1.0.0: {}
+ '@firebase/functions-types@0.6.4': {}
- boxen@5.1.2:
+ '@firebase/functions@0.13.4(@firebase/app@0.14.12)':
dependencies:
- ansi-align: 3.0.1
- camelcase: 6.3.0
- chalk: 4.1.2
- cli-boxes: 2.2.1
- string-width: 4.2.3
- type-fest: 0.20.2
- widest-line: 3.1.0
- wrap-ansi: 7.0.0
+ '@firebase/app': 0.14.12
+ '@firebase/app-check-interop-types': 0.3.4
+ '@firebase/auth-interop-types': 0.2.5
+ '@firebase/component': 0.7.3
+ '@firebase/messaging-interop-types': 0.2.4
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- brace-expansion@1.1.11:
+ '@firebase/installations-compat@0.2.22(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)':
dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
+ '@firebase/app-compat': 0.5.12
+ '@firebase/component': 0.7.3
+ '@firebase/installations': 0.6.22(@firebase/app@0.14.12)
+ '@firebase/installations-types': 0.5.4(@firebase/app-types@0.9.5)
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+ - '@firebase/app-types'
- brace-expansion@2.0.1:
+ '@firebase/installations-types@0.5.4(@firebase/app-types@0.9.5)':
dependencies:
- balanced-match: 1.0.2
+ '@firebase/app-types': 0.9.5
- brace-expansion@2.0.2:
+ '@firebase/installations@0.6.22(@firebase/app@0.14.12)':
dependencies:
- balanced-match: 1.0.2
-
- braces@2.3.2:
- dependencies:
- arr-flatten: 1.1.0
- array-unique: 0.3.2
- extend-shallow: 2.0.1
- fill-range: 4.0.0
- isobject: 3.0.1
- repeat-element: 1.1.4
- snapdragon: 0.8.2
- snapdragon-node: 2.1.1
- split-string: 3.1.0
- to-regex: 3.0.2
- transitivePeerDependencies:
- - supports-color
+ '@firebase/app': 0.14.12
+ '@firebase/component': 0.7.3
+ '@firebase/util': 1.15.1
+ idb: 7.1.1
+ tslib: 2.8.1
- braces@3.0.2:
+ '@firebase/logger@0.5.1':
dependencies:
- fill-range: 7.0.1
+ tslib: 2.8.1
- braces@3.0.3:
+ '@firebase/messaging-compat@0.2.26(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)':
dependencies:
- fill-range: 7.1.1
+ '@firebase/app-compat': 0.5.12
+ '@firebase/component': 0.7.3
+ '@firebase/messaging': 0.12.26(@firebase/app@0.14.12)
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
- brorand@1.1.0: {}
+ '@firebase/messaging-interop-types@0.2.4': {}
- browserify-aes@1.2.0:
+ '@firebase/messaging@0.12.26(@firebase/app@0.14.12)':
dependencies:
- buffer-xor: 1.0.3
- cipher-base: 1.0.4
- create-hash: 1.2.0
- evp_bytestokey: 1.0.3
- inherits: 2.0.4
- safe-buffer: 5.2.1
+ '@firebase/app': 0.14.12
+ '@firebase/component': 0.7.3
+ '@firebase/installations': 0.6.22(@firebase/app@0.14.12)
+ '@firebase/messaging-interop-types': 0.2.4
+ '@firebase/util': 1.15.1
+ idb: 7.1.1
+ tslib: 2.8.1
- browserify-cipher@1.0.1:
+ '@firebase/performance-compat@0.2.25(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)':
dependencies:
- browserify-aes: 1.2.0
- browserify-des: 1.0.2
- evp_bytestokey: 1.0.3
+ '@firebase/app-compat': 0.5.12
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/performance': 0.7.12(@firebase/app@0.14.12)
+ '@firebase/performance-types': 0.2.4
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
- browserify-des@1.0.2:
- dependencies:
- cipher-base: 1.0.4
- des.js: 1.1.0
- inherits: 2.0.4
- safe-buffer: 5.2.1
+ '@firebase/performance-types@0.2.4': {}
- browserify-rsa@4.1.0:
+ '@firebase/performance@0.7.12(@firebase/app@0.14.12)':
dependencies:
- bn.js: 5.2.1
- randombytes: 2.1.0
+ '@firebase/app': 0.14.12
+ '@firebase/component': 0.7.3
+ '@firebase/installations': 0.6.22(@firebase/app@0.14.12)
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
+ web-vitals: 4.2.4
- browserify-sign@4.2.2:
+ '@firebase/remote-config-compat@0.2.24(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)':
dependencies:
- bn.js: 5.2.1
- browserify-rsa: 4.1.0
- create-hash: 1.2.0
- create-hmac: 1.1.7
- elliptic: 6.6.0
- inherits: 2.0.4
- parse-asn1: 5.1.6
- readable-stream: 3.6.2
- safe-buffer: 5.2.1
+ '@firebase/app-compat': 0.5.12
+ '@firebase/component': 0.7.3
+ '@firebase/logger': 0.5.1
+ '@firebase/remote-config': 0.8.3(@firebase/app@0.14.12)
+ '@firebase/remote-config-types': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
- browserify-zlib@0.2.0:
- dependencies:
- pako: 1.0.11
+ '@firebase/remote-config-types@0.5.1': {}
- browserslist@4.26.2:
+ '@firebase/remote-config@0.8.3(@firebase/app@0.14.12)':
dependencies:
- baseline-browser-mapping: 2.8.9
- caniuse-lite: 1.0.30001746
- electron-to-chromium: 1.5.227
- node-releases: 2.0.21
- update-browserslist-db: 1.1.3(browserslist@4.26.2)
+ '@firebase/app': 0.14.12
+ '@firebase/component': 0.7.3
+ '@firebase/installations': 0.6.22(@firebase/app@0.14.12)
+ '@firebase/logger': 0.5.1
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- browserslist@4.26.3:
+ '@firebase/storage-compat@0.4.3(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)':
dependencies:
- baseline-browser-mapping: 2.8.10
- caniuse-lite: 1.0.30001746
- electron-to-chromium: 1.5.228
- node-releases: 2.0.21
- update-browserslist-db: 1.1.3(browserslist@4.26.3)
+ '@firebase/app-compat': 0.5.12
+ '@firebase/component': 0.7.3
+ '@firebase/storage': 0.14.3(@firebase/app@0.14.12)
+ '@firebase/storage-types': 0.8.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@firebase/app'
+ - '@firebase/app-types'
- bs-logger@0.2.6:
+ '@firebase/storage-types@0.8.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)':
dependencies:
- fast-json-stable-stringify: 2.1.0
+ '@firebase/app-types': 0.9.5
+ '@firebase/util': 1.15.1
- bser@2.1.1:
+ '@firebase/storage@0.14.3(@firebase/app@0.14.12)':
dependencies:
- node-int64: 0.4.0
-
- buffer-equal-constant-time@1.0.1:
- optional: true
-
- buffer-from@1.1.2: {}
+ '@firebase/app': 0.14.12
+ '@firebase/component': 0.7.3
+ '@firebase/util': 1.15.1
+ tslib: 2.8.1
- buffer-json@2.0.0: {}
+ '@firebase/util@1.15.1':
+ dependencies:
+ tslib: 2.8.1
- buffer-xor@1.0.3: {}
+ '@firebase/webchannel-wrapper@1.0.6': {}
- buffer@4.9.2:
+ '@floating-ui/core@1.7.5':
dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
- isarray: 1.0.0
+ '@floating-ui/utils': 0.2.11
- builtin-modules@3.3.0: {}
+ '@floating-ui/core@1.8.0':
+ dependencies:
+ '@floating-ui/utils': 0.2.12
- builtin-status-codes@3.0.0: {}
+ '@floating-ui/dom@1.7.6':
+ dependencies:
+ '@floating-ui/core': 1.7.5
+ '@floating-ui/utils': 0.2.11
- builtins@5.0.1:
+ '@floating-ui/dom@1.8.0':
dependencies:
- semver: 7.7.2
+ '@floating-ui/core': 1.8.0
+ '@floating-ui/utils': 0.2.12
- bytes@3.0.0: {}
+ '@floating-ui/utils@0.2.11': {}
- c12@1.11.1:
- dependencies:
- chokidar: 3.6.0
- confbox: 0.1.7
- defu: 6.1.4
- dotenv: 16.6.1
- giget: 1.2.3
- jiti: 1.21.6
- mlly: 1.7.1
- ohash: 1.1.3
- pathe: 1.1.2
- perfect-debounce: 1.0.0
- pkg-types: 1.1.2
- rc9: 2.1.2
-
- c12@1.4.2:
- dependencies:
- chokidar: 3.6.0
- defu: 6.1.4
- dotenv: 16.6.1
- giget: 1.1.2
- jiti: 1.21.6
- mlly: 1.7.1
- ohash: 1.1.3
- pathe: 1.1.2
- perfect-debounce: 1.0.0
- pkg-types: 1.1.2
- rc9: 2.1.1
- transitivePeerDependencies:
- - supports-color
+ '@floating-ui/utils@0.2.12': {}
- cacache@12.0.4:
+ '@floating-ui/vue@1.1.11(vue@3.5.34(typescript@5.9.3))':
dependencies:
- bluebird: 3.7.2
- chownr: 1.1.4
- figgy-pudding: 3.5.2
- glob: 7.2.3
- graceful-fs: 4.2.11
- infer-owner: 1.0.4
- lru-cache: 5.1.1
- mississippi: 3.0.0
- mkdirp: 0.5.6
- move-concurrently: 1.0.1
- promise-inflight: 1.0.1(bluebird@3.7.2)
- rimraf: 2.7.1
- ssri: 6.0.2
- unique-filename: 1.1.1
- y18n: 4.0.3
-
- cacache@15.3.0:
- dependencies:
- '@npmcli/fs': 1.1.1
- '@npmcli/move-file': 1.1.2
- chownr: 2.0.0
- fs-minipass: 2.1.0
- glob: 7.2.3
- infer-owner: 1.0.4
- lru-cache: 6.0.0
- minipass: 3.3.6
- minipass-collect: 1.0.2
- minipass-flush: 1.0.5
- minipass-pipeline: 1.2.4
- mkdirp: 1.0.4
- p-map: 4.0.0
- promise-inflight: 1.0.1(bluebird@3.7.2)
- rimraf: 3.0.2
- ssri: 8.0.1
- tar: 6.2.0
- unique-filename: 1.1.1
+ '@floating-ui/dom': 1.7.6
+ '@floating-ui/utils': 0.2.11
+ vue-demi: 0.14.10(vue@3.5.34(typescript@5.9.3))
transitivePeerDependencies:
- - bluebird
+ - '@vue/composition-api'
+ - vue
- cache-base@1.0.1:
+ '@grpc/grpc-js@1.9.16':
dependencies:
- collection-visit: 1.0.0
- component-emitter: 1.3.0
- get-value: 2.0.6
- has-value: 1.0.0
- isobject: 3.0.1
- set-value: 2.0.1
- to-object-path: 0.3.0
- union-value: 1.0.1
- unset-value: 1.0.0
+ '@grpc/proto-loader': 0.7.15
+ '@types/node': 25.9.1
- cache-loader@4.1.0(webpack@4.47.0):
+ '@grpc/proto-loader@0.7.15':
dependencies:
- buffer-json: 2.0.0
- find-cache-dir: 3.3.2
- loader-utils: 1.4.2
- mkdirp: 0.5.6
- neo-async: 2.6.2
- schema-utils: 2.7.1
- webpack: 4.47.0
+ lodash.camelcase: 4.3.0
+ long: 5.3.2
+ protobufjs: 7.6.1
+ yargs: 17.7.2
- call-bind-apply-helpers@1.0.2:
+ '@humanfs/core@0.19.2':
dependencies:
- es-errors: 1.3.0
- function-bind: 1.1.2
+ '@humanfs/types': 0.15.0
- call-bind@1.0.2:
+ '@humanfs/node@0.16.8':
dependencies:
- function-bind: 1.1.2
- get-intrinsic: 1.3.0
+ '@humanfs/core': 0.19.2
+ '@humanfs/types': 0.15.0
+ '@humanwhocodes/retry': 0.4.3
- callsite@1.0.0: {}
+ '@humanfs/types@0.15.0': {}
- callsites@3.1.0: {}
+ '@humanwhocodes/module-importer@1.0.1': {}
- camel-case@4.1.2:
+ '@humanwhocodes/retry@0.4.3': {}
+
+ '@iconify-json/carbon@1.2.24':
dependencies:
- pascal-case: 3.1.2
- tslib: 2.6.2
+ '@iconify/types': 2.0.0
- camelcase-keys@7.0.2:
+ '@iconify/collections@1.0.705':
dependencies:
- camelcase: 6.3.0
- map-obj: 4.3.0
- quick-lru: 5.1.1
- type-fest: 1.4.0
+ '@iconify/types': 2.0.0
- camelcase@5.3.1: {}
+ '@iconify/types@2.0.0': {}
- camelcase@6.3.0: {}
+ '@iconify/utils@3.1.3':
+ dependencies:
+ '@antfu/install-pkg': 1.1.0
+ '@iconify/types': 2.0.0
+ import-meta-resolve: 4.2.0
- caniuse-api@3.0.0:
+ '@iconify/vue@5.0.1(vue@3.5.34(typescript@5.9.3))':
dependencies:
- browserslist: 4.26.3
- caniuse-lite: 1.0.30001746
- lodash.memoize: 4.1.2
- lodash.uniq: 4.5.0
+ '@iconify/types': 2.0.0
+ vue: 3.5.34(typescript@5.9.3)
- caniuse-lite@1.0.30001639: {}
+ '@img/colour@1.1.0':
+ optional: true
- caniuse-lite@1.0.30001746: {}
+ '@img/sharp-darwin-arm64@0.35.3':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.3.2
+ optional: true
- chalk@1.1.3:
- dependencies:
- ansi-styles: 2.2.1
- escape-string-regexp: 1.0.5
- has-ansi: 2.0.0
- strip-ansi: 3.0.1
- supports-color: 2.0.0
+ '@img/sharp-darwin-x64@0.35.3':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.3.2
+ optional: true
- chalk@2.4.2:
+ '@img/sharp-freebsd-wasm32@0.35.3':
dependencies:
- ansi-styles: 3.2.1
- escape-string-regexp: 1.0.5
- supports-color: 5.5.0
+ '@img/sharp-wasm32': 0.35.3
+ optional: true
- chalk@4.1.2:
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
+ '@img/sharp-libvips-darwin-arm64@1.3.2':
+ optional: true
- chalk@5.5.0: {}
+ '@img/sharp-libvips-darwin-x64@1.3.2':
+ optional: true
- chalk@5.6.2: {}
+ '@img/sharp-libvips-linux-arm64@1.3.2':
+ optional: true
- char-regex@1.0.2: {}
+ '@img/sharp-libvips-linux-arm@1.3.2':
+ optional: true
- chardet@0.7.0: {}
+ '@img/sharp-libvips-linux-ppc64@1.3.2':
+ optional: true
- chart.js@4.5.0:
- dependencies:
- '@kurkle/color': 0.3.4
+ '@img/sharp-libvips-linux-riscv64@1.3.2':
+ optional: true
- chartjs-adapter-moment@1.0.1(chart.js@4.5.0)(moment@2.30.1):
- dependencies:
- chart.js: 4.5.0
- moment: 2.30.1
+ '@img/sharp-libvips-linux-s390x@1.3.2':
+ optional: true
- chokidar@2.1.8:
- dependencies:
- anymatch: 2.0.0
- async-each: 1.0.6
- braces: 2.3.2
- glob-parent: 3.1.0
- inherits: 2.0.4
- is-binary-path: 1.0.1
- is-glob: 4.0.3
- normalize-path: 3.0.0
- path-is-absolute: 1.0.1
- readdirp: 2.2.1
- upath: 1.2.0
- optionalDependencies:
- fsevents: 1.2.13
- transitivePeerDependencies:
- - supports-color
+ '@img/sharp-libvips-linux-x64@1.3.2':
optional: true
- chokidar@3.5.3:
- dependencies:
- anymatch: 3.1.3
- braces: 3.0.2
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
+ '@img/sharp-libvips-linuxmusl-arm64@1.3.2':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-x64@1.3.2':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.35.3':
optionalDependencies:
- fsevents: 2.3.3
+ '@img/sharp-libvips-linux-arm64': 1.3.2
+ optional: true
- chokidar@3.6.0:
- dependencies:
- anymatch: 3.1.3
- braces: 3.0.3
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
+ '@img/sharp-linux-arm@0.35.3':
optionalDependencies:
- fsevents: 2.3.3
+ '@img/sharp-libvips-linux-arm': 1.3.2
+ optional: true
- chownr@1.1.4: {}
+ '@img/sharp-linux-ppc64@0.35.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-ppc64': 1.3.2
+ optional: true
- chownr@2.0.0: {}
+ '@img/sharp-linux-riscv64@0.35.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-riscv64': 1.3.2
+ optional: true
- chrome-trace-event@1.0.4: {}
+ '@img/sharp-linux-s390x@0.35.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.3.2
+ optional: true
- ci-info@3.8.0: {}
+ '@img/sharp-linux-x64@0.35.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.3.2
+ optional: true
- ci-info@3.9.0: {}
+ '@img/sharp-linuxmusl-arm64@0.35.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.3.2
+ optional: true
- ci-info@4.3.0: {}
+ '@img/sharp-linuxmusl-x64@0.35.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.3.2
+ optional: true
- cipher-base@1.0.4:
+ '@img/sharp-wasm32@0.35.3':
dependencies:
- inherits: 2.0.4
- safe-buffer: 5.2.1
+ '@emnapi/runtime': 1.11.2
+ optional: true
- citty@0.1.6:
+ '@img/sharp-webcontainers-wasm32@0.35.3':
dependencies:
- consola: 3.2.3
+ '@img/sharp-wasm32': 0.35.3
+ optional: true
- cjs-module-lexer@2.1.0: {}
+ '@img/sharp-win32-arm64@0.35.3':
+ optional: true
- class-utils@0.3.6:
- dependencies:
- arr-union: 3.1.0
- define-property: 0.2.5
- isobject: 3.0.1
- static-extend: 0.1.2
+ '@img/sharp-win32-ia32@0.35.3':
+ optional: true
- clean-css@4.2.4:
- dependencies:
- source-map: 0.6.1
+ '@img/sharp-win32-x64@0.35.3':
+ optional: true
- clean-css@5.3.3:
+ '@internationalized/date@3.12.2':
dependencies:
- source-map: 0.6.1
+ '@swc/helpers': 0.5.23
- clean-regexp@1.0.0:
+ '@internationalized/number@3.6.7':
dependencies:
- escape-string-regexp: 1.0.5
+ '@swc/helpers': 0.5.23
- clean-stack@2.2.0: {}
+ '@ioredis/commands@1.10.0': {}
- cli-boxes@2.2.1: {}
-
- cli-cursor@3.1.0:
+ '@isaacs/cliui@8.0.2':
dependencies:
- restore-cursor: 3.1.0
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.2.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
- cli-cursor@5.0.0:
+ '@isaacs/fs-minipass@4.0.1':
dependencies:
- restore-cursor: 5.1.0
+ minipass: 7.1.3
- cli-truncate@4.0.0:
+ '@jridgewell/gen-mapping@0.3.13':
dependencies:
- slice-ansi: 5.0.0
- string-width: 7.2.0
-
- cli-width@3.0.0: {}
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
- cliui@6.0.0:
+ '@jridgewell/remapping@2.3.5':
dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 6.2.0
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
- cliui@7.0.4:
- dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
- optional: true
+ '@jridgewell/resolve-uri@3.1.2': {}
- cliui@8.0.1:
+ '@jridgewell/source-map@0.3.11':
dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
-
- clone@2.1.2: {}
-
- co@4.6.0: {}
-
- collect-v8-coverage@1.0.2: {}
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
- collection-visit@1.0.0:
- dependencies:
- map-visit: 1.0.0
- object-visit: 1.0.1
+ '@jridgewell/sourcemap-codec@1.5.5': {}
- color-convert@1.9.3:
+ '@jridgewell/trace-mapping@0.3.31':
dependencies:
- color-name: 1.1.3
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
- color-convert@2.0.1:
+ '@keyv/bigmap@1.3.1(keyv@5.6.0)':
dependencies:
- color-name: 1.1.4
+ hashery: 1.5.1
+ hookified: 1.15.1
+ keyv: 5.6.0
- color-name@1.1.3: {}
+ '@keyv/serialize@1.1.1': {}
- color-name@1.1.4: {}
+ '@kurkle/color@0.3.4': {}
- colord@2.9.3: {}
+ '@kwsites/file-exists@1.1.1':
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
- colorette@2.0.20: {}
+ '@kwsites/promise-deferred@1.1.1': {}
- combined-stream@1.0.8:
+ '@mapbox/node-pre-gyp@2.0.3':
dependencies:
- delayed-stream: 1.0.0
-
- commander@10.0.1: {}
+ consola: 3.4.2
+ detect-libc: 2.1.2
+ https-proxy-agent: 7.0.6
+ node-fetch: 2.7.0
+ nopt: 8.1.0
+ semver: 7.8.5
+ tar: 7.5.22
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
- commander@14.0.0: {}
+ '@mdi/js@7.4.47': {}
- commander@2.20.3: {}
+ '@napi-rs/lzma-linux-x64-gnu@1.5.1':
+ optional: true
- commander@4.1.1: {}
+ '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
+ dependencies:
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@tybys/wasm-util': 0.10.2
+ optional: true
- commander@7.2.0: {}
+ '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
+ dependencies:
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@tybys/wasm-util': 0.10.3
+ optional: true
- commondir@1.0.1: {}
+ '@nodable/entities@2.2.0': {}
- compare-func@2.0.0:
+ '@nodelib/fs.scandir@2.1.5':
dependencies:
- array-ify: 1.0.0
- dot-prop: 5.3.0
-
- compatx@0.1.8: {}
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
- component-emitter@1.3.0: {}
+ '@nodelib/fs.stat@2.0.5': {}
- compressible@2.0.18:
+ '@nodelib/fs.walk@1.2.8':
dependencies:
- mime-db: 1.54.0
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.20.1
- compression@1.7.4:
+ '@nuxt/cli@3.37.0(@nuxt/schema@4.5.1)(@parcel/watcher@2.5.6)(cac@6.7.14)(magicast@0.5.4)':
dependencies:
- accepts: 1.3.8
- bytes: 3.0.0
- compressible: 2.0.18
- debug: 2.6.9
- on-headers: 1.0.2
- safe-buffer: 5.1.2
- vary: 1.1.2
+ '@bomb.sh/tab': 0.0.19(cac@6.7.14)(citty@0.2.2)
+ '@clack/prompts': 1.7.0
+ c12: 3.3.4(magicast@0.5.4)
+ citty: 0.2.2
+ confbox: 0.2.4
+ consola: 3.4.2
+ debug: 4.4.3
+ defu: 6.1.7
+ exsolve: 1.1.1
+ fuse.js: 7.5.0
+ fzf: 0.5.2
+ giget: 3.3.1
+ jiti: 2.7.0
+ listhen: 1.10.1(@parcel/watcher@2.5.6)(srvx@0.11.22)
+ nypm: 0.6.9
+ ofetch: 1.5.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.1
+ scule: 1.3.0
+ semver: 7.8.5
+ srvx: 0.11.22
+ std-env: 4.2.0
+ tinyclip: 0.1.15
+ tinyexec: 1.3.0
+ ufo: 1.6.4
+ youch: 4.1.1
+ optionalDependencies:
+ '@nuxt/schema': 4.5.1
transitivePeerDependencies:
+ - '@parcel/watcher'
+ - cac
+ - commander
+ - magicast
- supports-color
- concat-map@0.0.1: {}
+ '@nuxt/devalue@2.0.2': {}
- concat-stream@1.6.2:
+ '@nuxt/devtools-kit@3.2.4(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
dependencies:
- buffer-from: 1.1.2
- inherits: 2.0.4
- readable-stream: 2.3.8
- typedarray: 0.0.6
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ execa: 8.0.1
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+
+ '@nuxt/devtools-kit@3.4.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
+ dependencies:
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ execa: 8.0.1
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
- condense-newlines@0.2.1:
+ '@nuxt/devtools-kit@3.4.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
dependencies:
- extend-shallow: 2.0.1
- is-whitespace: 0.3.0
- kind-of: 3.2.2
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ execa: 8.0.1
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
- confbox@0.1.7: {}
+ '@nuxt/devtools-kit@4.0.0-alpha.3(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
+ dependencies:
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ tinyexec: 1.3.0
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
- confbox@0.1.8: {}
+ '@nuxt/devtools-kit@4.0.0-alpha.3(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
+ dependencies:
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ tinyexec: 1.3.0
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
- config-chain@1.1.13:
+ '@nuxt/devtools-kit@4.0.0-alpha.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
dependencies:
- ini: 1.3.8
- proto-list: 1.2.4
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ tinyexec: 1.3.0
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
- configstore@5.0.1:
+ '@nuxt/devtools-wizard@3.4.1':
dependencies:
- dot-prop: 5.3.0
- graceful-fs: 4.2.11
- make-dir: 3.1.0
- unique-string: 2.0.0
- write-file-atomic: 3.0.3
- xdg-basedir: 4.0.0
- optional: true
+ '@clack/prompts': 1.7.0
+ consola: 3.4.2
+ diff: 8.0.4
+ execa: 8.0.1
+ magicast: 0.5.4
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ semver: 7.8.5
+
+ '@nuxt/devtools@3.4.1(db0@0.3.4)(ioredis@5.11.1)(magic-string@1.1.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))':
+ dependencies:
+ '@nuxt/devtools-kit': 3.4.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/devtools-wizard': 3.4.1
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@vue/devtools-core': 8.2.1(vue@3.5.41(typescript@5.9.3))
+ '@vue/devtools-kit': 8.2.1
+ birpc: 4.0.0
+ consola: 3.4.2
+ destr: 2.0.5
+ error-stack-parser-es: 2.0.1
+ execa: 8.0.1
+ fast-npm-meta: 2.2.0
+ get-port-please: 3.2.0
+ hookable: 6.1.1
+ image-meta: 0.2.2
+ is-installed-globally: 1.0.0
+ launch-editor: 2.14.1
+ local-pkg: 1.2.1
+ magicast: 0.5.4
+ nypm: 0.6.9
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.1
+ semver: 7.8.5
+ simple-git: 3.36.0
+ sirv: 3.0.2
+ structured-clone-es: 2.0.1
+ tinyglobby: 0.2.17
+ unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1)
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ vite-plugin-inspect: 11.4.1(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ vite-plugin-vue-tracer: 1.4.0(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))
+ which: 6.0.1
+ ws: 8.21.3
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - idb-keyval
+ - ioredis
+ - magic-string
+ - oxc-parser
+ - rolldown
+ - supports-color
+ - unplugin
+ - uploadthing
+ - utf-8-validate
+ - vue
+
+ '@nuxt/eslint-config@1.16.0(@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(@vue/compiler-sfc@3.5.41)(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)':
+ dependencies:
+ '@antfu/install-pkg': 1.1.0
+ '@clack/prompts': 1.6.0
+ '@eslint/js': 10.0.1(eslint@10.5.0(jiti@2.7.0))
+ '@nuxt/eslint-plugin': 1.16.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ '@stylistic/eslint-plugin': 5.10.0(eslint@10.5.0(jiti@2.7.0))
+ '@typescript-eslint/eslint-plugin': 8.62.0(@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ eslint: 10.5.0(jiti@2.7.0)
+ eslint-config-flat-gitignore: 2.3.0(eslint@10.5.0(jiti@2.7.0))
+ eslint-flat-config-utils: 3.2.0
+ eslint-merge-processors: 2.0.0(eslint@10.5.0(jiti@2.7.0))
+ eslint-plugin-import-lite: 0.6.0(eslint@10.5.0(jiti@2.7.0))
+ eslint-plugin-import-x: 4.17.0(@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))
+ eslint-plugin-jsdoc: 63.0.7(eslint@10.5.0(jiti@2.7.0))
+ eslint-plugin-regexp: 3.1.0(eslint@10.5.0(jiti@2.7.0))
+ eslint-plugin-unicorn: 65.0.1(eslint@10.5.0(jiti@2.7.0))
+ eslint-plugin-vue: 10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.5.0(jiti@2.7.0)))(@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.5.0(jiti@2.7.0)))
+ eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.41)(eslint@10.5.0(jiti@2.7.0))
+ globals: 17.7.0
+ local-pkg: 1.2.1
+ pathe: 2.0.3
+ vue-eslint-parser: 10.4.1(eslint@10.5.0(jiti@2.7.0))
+ transitivePeerDependencies:
+ - '@typescript-eslint/utils'
+ - '@vue/compiler-sfc'
+ - eslint-import-resolver-node
+ - supports-color
+ - typescript
- connect@3.7.0:
+ '@nuxt/eslint-plugin@1.16.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)':
dependencies:
- debug: 2.6.9
- finalhandler: 1.1.2
- parseurl: 1.3.3
- utils-merge: 1.0.1
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ eslint: 10.5.0(jiti@2.7.0)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@nuxt/eslint@1.16.0(@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(@vue/compiler-sfc@3.5.41)(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
+ dependencies:
+ '@eslint/config-inspector': 3.0.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/devtools-kit': 3.2.4(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/eslint-config': 1.16.0(@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(@vue/compiler-sfc@3.5.41)(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ '@nuxt/eslint-plugin': 1.16.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ '@nuxt/kit': 4.4.8(magicast@0.5.4)
+ chokidar: 5.0.0
+ eslint: 10.5.0(jiti@2.7.0)
+ eslint-flat-config-utils: 3.2.0
+ eslint-typegen: 2.3.1(eslint@10.5.0(jiti@2.7.0))
+ find-up: 8.0.0
+ get-port-please: 3.2.0
+ mlly: 1.8.2
+ pathe: 2.0.3
+ unimport: 6.3.0(esbuild@0.25.12)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@modelcontextprotocol/sdk'
+ - '@rspack/core'
+ - '@typescript-eslint/utils'
+ - '@vue/compiler-sfc'
+ - bufferutil
+ - bun-types-no-globals
+ - crossws
+ - esbuild
+ - eslint-import-resolver-node
+ - eslint-plugin-format
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - rollup
- supports-color
+ - typescript
+ - unloader
+ - unplugin
+ - utf-8-validate
+ - vite
+ - webpack
+
+ '@nuxt/fonts@0.14.0(db0@0.3.4)(esbuild@0.25.12)(ioredis@5.11.1)(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
+ dependencies:
+ '@nuxt/devtools-kit': 3.4.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ consola: 3.4.2
+ defu: 6.1.7
+ fontless: 0.2.1(db0@0.3.4)(ioredis@5.11.1)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ h3: 1.15.11
+ magic-regexp: 0.10.0
+ ofetch: 1.5.1
+ pathe: 2.0.3
+ sirv: 3.0.2
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ unifont: 0.7.4
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@farmfe/core'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@rspack/core'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bun-types-no-globals
+ - db0
+ - esbuild
+ - idb-keyval
+ - ioredis
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - rollup
+ - unloader
+ - uploadthing
+ - vite
+ - webpack
- consola@2.15.3: {}
+ '@nuxt/icon@2.3.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))':
+ dependencies:
+ '@iconify/collections': 1.0.705
+ '@iconify/types': 2.0.0
+ '@iconify/utils': 3.1.3
+ '@iconify/vue': 5.0.1(vue@3.5.34(typescript@5.9.3))
+ '@nuxt/devtools-kit': 3.4.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ consola: 3.4.2
+ local-pkg: 1.2.1
+ mlly: 1.8.2
+ ohash: 2.0.11
+ picomatch: 4.0.5
+ std-env: 4.2.0
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vite
+ - vue
- consola@3.2.3: {}
+ '@nuxt/kit@3.21.6(magicast@0.5.4)':
+ dependencies:
+ c12: 3.3.4(magicast@0.5.4)
+ consola: 3.4.2
+ defu: 6.1.7
+ destr: 2.0.5
+ errx: 0.1.2
+ exsolve: 1.1.1
+ ignore: 7.0.6
+ jiti: 2.7.0
+ klona: 2.0.6
+ knitwork: 1.3.0
+ mlly: 1.8.2
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ rc9: 3.0.1
+ scule: 1.3.0
+ semver: 7.8.1
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ unctx: 2.5.0
+ untyped: 2.0.0
+ transitivePeerDependencies:
+ - magicast
- console-browserify@1.2.0: {}
+ '@nuxt/kit@4.4.6(magicast@0.5.4)':
+ dependencies:
+ c12: 3.3.4(magicast@0.5.4)
+ consola: 3.4.2
+ defu: 6.1.7
+ destr: 2.0.5
+ errx: 0.1.2
+ exsolve: 1.1.1
+ ignore: 7.0.6
+ jiti: 2.7.0
+ klona: 2.0.6
+ mlly: 1.8.2
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ rc9: 3.0.1
+ scule: 1.3.0
+ semver: 7.8.1
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ unctx: 2.5.0
+ untyped: 2.0.0
+ transitivePeerDependencies:
+ - magicast
- consolidate@0.15.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21):
+ '@nuxt/kit@4.4.8(magicast@0.5.4)':
dependencies:
- bluebird: 3.7.2
- optionalDependencies:
- babel-core: 7.0.0-bridge.0(@babel/core@7.28.4)
- ejs: 3.1.10
- handlebars: 4.7.8
- lodash: 4.17.21
-
- constants-browserify@1.0.0: {}
+ c12: 3.3.4(magicast@0.5.4)
+ consola: 3.4.2
+ defu: 6.1.7
+ destr: 2.0.5
+ errx: 0.1.2
+ exsolve: 1.1.1
+ ignore: 7.0.6
+ jiti: 2.7.0
+ klona: 2.0.6
+ mlly: 1.8.2
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ rc9: 3.0.1
+ scule: 1.3.0
+ semver: 7.8.1
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ unctx: 2.5.0
+ untyped: 2.0.0
+ transitivePeerDependencies:
+ - magicast
- conventional-changelog-angular@7.0.0:
+ '@nuxt/kit@4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))':
dependencies:
- compare-func: 2.0.0
+ c12: 3.3.4(magicast@0.5.3)
+ consola: 3.4.2
+ defu: 6.1.7
+ destr: 2.0.5
+ errx: 0.1.2
+ exsolve: 1.1.1
+ ignore: 7.0.6
+ jiti: 2.7.0
+ klona: 2.0.6
+ mlly: 1.8.2
+ nostics: 1.2.0
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ rc9: 3.0.1
+ scule: 1.3.0
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ unctx: 3.0.0(magic-string@0.30.21)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ untyped: 2.0.0
+ verkit: 0.2.0
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+
+ '@nuxt/kit@4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))':
+ dependencies:
+ c12: 3.3.4(magicast@0.5.4)
+ consola: 3.4.2
+ defu: 6.1.7
+ destr: 2.0.5
+ errx: 0.1.2
+ exsolve: 1.1.1
+ ignore: 7.0.6
+ jiti: 2.7.0
+ klona: 2.0.6
+ mlly: 1.8.2
+ nostics: 1.2.0
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ rc9: 3.0.1
+ scule: 1.3.0
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ unctx: 3.0.0(magic-string@0.30.21)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ untyped: 2.0.0
+ verkit: 0.2.0
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+
+ '@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))':
+ dependencies:
+ c12: 3.3.4(magicast@0.5.4)
+ consola: 3.4.2
+ defu: 6.1.7
+ destr: 2.0.5
+ errx: 0.1.2
+ exsolve: 1.1.1
+ ignore: 7.0.6
+ jiti: 2.7.0
+ klona: 2.0.6
+ mlly: 1.8.2
+ nostics: 1.2.0
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ rc9: 3.0.1
+ scule: 1.3.0
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ untyped: 2.0.0
+ verkit: 0.2.0
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
- conventional-changelog-conventionalcommits@7.0.2:
+ '@nuxt/nitro-server@4.5.1(e10a0efb5e23c0fd36d3ace2a5e3aeb3)':
dependencies:
- compare-func: 2.0.0
+ '@nuxt/devalue': 2.0.2
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@unhead/vue': 3.3.1(@oxc-project/types@0.143.0)(esbuild@0.25.12)(lightningcss@1.33.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))
+ '@vue/shared': 3.5.41
+ consola: 3.4.2
+ defu: 6.1.7
+ destr: 2.0.5
+ devalue: 5.9.0
+ errx: 0.1.2
+ escape-string-regexp: 5.0.0
+ exsolve: 1.1.1
+ h3: 1.15.11
+ impound: 1.1.6(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ klona: 2.0.6
+ mocked-exports: 0.1.1
+ nitropack: 2.13.4(@parcel/watcher@2.5.6)(oxc-parser@0.138.0)(rolldown@1.2.3)(srvx@0.11.22)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ nostics: 1.2.0
+ nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0)
+ nypm: 0.6.9
+ ohash: 2.0.11
+ pathe: 2.0.3
+ rou3: 0.9.1
+ std-env: 4.2.0
+ ufo: 1.6.4
+ unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1)
+ vue: 3.5.41(typescript@5.9.3)
+ vue-bundle-renderer: 2.3.1
+ vue-devtools-stub: 0.1.0
+ optionalDependencies:
+ '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@electric-sql/pglite'
+ - '@farmfe/core'
+ - '@libsql/client'
+ - '@netlify/blobs'
+ - '@oxc-project/types'
+ - '@parcel/watcher'
+ - '@planetscale/database'
+ - '@rspack/core'
+ - '@unhead/cli'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vitejs/devtools-kit'
+ - aws4fetch
+ - bare-abort-controller
+ - bare-buffer
+ - better-sqlite3
+ - bun-types-no-globals
+ - db0
+ - drizzle-orm
+ - encoding
+ - esbuild
+ - idb-keyval
+ - ioredis
+ - lightningcss
+ - magic-string
+ - magicast
+ - mysql2
+ - oxc-parser
+ - react-native-b4a
+ - rolldown
+ - rollup
+ - sqlite3
+ - srvx
+ - supports-color
+ - typescript
+ - unloader
+ - unplugin
+ - uploadthing
+ - vite
+ - webpack
+ - xml2js
+
+ '@nuxt/schema@4.5.1':
+ dependencies:
+ '@vue/shared': 3.5.41
+ defu: 6.1.7
+ nostics: 1.2.0
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ std-env: 4.2.0
+
+ '@nuxt/schema@4.5.2':
+ dependencies:
+ '@vue/shared': 3.5.41
+ defu: 6.1.7
+ nostics: 1.2.0
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ std-env: 4.2.0
+
+ '@nuxt/telemetry@2.8.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))))':
+ dependencies:
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ citty: 0.2.2
+ consola: 3.4.2
+ ofetch: 2.0.0-alpha.3
+ rc9: 3.0.1
+ std-env: 4.2.0
+
+ '@nuxt/ui@4.9.0(58502101345dd8570863426db89bf8e6)':
+ dependencies:
+ '@floating-ui/dom': 1.7.6
+ '@iconify/vue': 5.0.1(vue@3.5.34(typescript@5.9.3))
+ '@nuxt/fonts': 0.14.0(db0@0.3.4)(esbuild@0.25.12)(ioredis@5.11.1)(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/icon': 2.3.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@nuxt/schema': 4.5.2
+ '@nuxtjs/color-mode': 4.0.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@standard-schema/spec': 1.1.0
+ '@tailwindcss/postcss': 4.3.2
+ '@tailwindcss/vite': 4.3.2(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@tanstack/vue-table': 8.21.3(vue@3.5.34(typescript@5.9.3))
+ '@tanstack/vue-virtual': 3.13.31(vue@3.5.34(typescript@5.9.3))
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/extension-bubble-menu': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/extension-code': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-collaboration': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))(yjs@13.6.31)
+ '@tiptap/extension-drag-handle': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/extension-collaboration@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))(yjs@13.6.31))(@tiptap/extension-node-range@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))
+ '@tiptap/extension-drag-handle-vue-3': 3.27.1(@tiptap/extension-drag-handle@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/extension-collaboration@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))(yjs@13.6.31))(@tiptap/extension-node-range@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31)))(@tiptap/pm@3.27.1)(@tiptap/vue-3@3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))
+ '@tiptap/extension-floating-menu': 3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/extension-horizontal-rule': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/extension-image': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-mention': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/suggestion@3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))
+ '@tiptap/extension-node-range': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/extension-placeholder': 3.27.1(@tiptap/extensions@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))
+ '@tiptap/markdown': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
+ '@tiptap/starter-kit': 3.27.1
+ '@tiptap/suggestion': 3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/vue-3': 3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(vue@3.5.34(typescript@5.9.3))
+ '@unhead/vue': 2.1.17(vue@3.5.34(typescript@5.9.3))
+ '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ '@vueuse/integrations': 14.3.0(change-case@5.4.4)(fuse.js@7.5.0)(qrcode@1.5.4)(vue@3.5.34(typescript@5.9.3))
+ '@vueuse/shared': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ colortranslator: 5.0.0
+ consola: 3.4.2
+ defu: 6.1.7
+ embla-carousel-auto-height: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-auto-scroll: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-fade: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-vue: 8.6.0(vue@3.5.34(typescript@5.9.3))
+ embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0)
+ fuse.js: 7.5.0
+ hookable: 6.1.1
+ knitwork: 1.3.0
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ motion-v: 2.3.0(@vueuse/core@14.3.0(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))
+ ohash: 2.0.11
+ pathe: 2.0.3
+ reka-ui: 2.9.10(vue@3.5.34(typescript@5.9.3))
+ scule: 1.3.0
+ tailwind-merge: 3.6.0
+ tailwind-variants: 3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.2)
+ tailwindcss: 4.3.2
+ tinyglobby: 0.2.17
+ typescript: 5.9.3
+ ufo: 1.6.4
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin-auto-import: 21.0.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))))(@vueuse/core@14.3.0(vue@3.5.34(typescript@5.9.3)))
+ unplugin-vue-components: 32.1.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))
+ vaul-vue: 0.4.1(reka-ui@2.9.10(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))
+ vue-component-type-helpers: 3.3.6
+ optionalDependencies:
+ '@internationalized/date': 3.12.2
+ '@internationalized/number': 3.6.7
+ valibot: 1.4.1(typescript@5.9.3)
+ vue-router: 5.0.7(@vue/compiler-sfc@3.5.41)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@emotion/is-prop-valid'
+ - '@farmfe/core'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@rspack/core'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vue/composition-api'
+ - async-validator
+ - aws4fetch
+ - axios
+ - bun-types-no-globals
+ - change-case
+ - db0
+ - drauu
+ - embla-carousel
+ - esbuild
+ - focus-trap
+ - idb-keyval
+ - ioredis
+ - jwt-decode
+ - magicast
+ - nprogress
+ - oxc-parser
+ - qrcode
+ - react
+ - react-dom
+ - rolldown
+ - rollup
+ - sortablejs
+ - universal-cookie
+ - unloader
+ - uploadthing
+ - vite
+ - vue
+ - webpack
- conventional-commits-parser@5.0.0:
+ '@nuxt/vite-builder@4.5.1(0261b043a53150a2c4b40251899787e8)':
dependencies:
- JSONStream: 1.3.5
- is-text-path: 2.0.0
- meow: 12.1.1
- split2: 4.2.0
-
- convert-source-map@2.0.0: {}
-
- cookie@0.3.1: {}
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@vitejs/plugin-vue': 6.0.8(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))
+ '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))
+ autoprefixer: 10.5.4(postcss@8.5.26)
+ consola: 3.4.2
+ cssnano: 8.0.4(postcss@8.5.26)
+ defu: 6.1.7
+ escape-string-regexp: 5.0.0
+ exsolve: 1.1.1
+ generic-names: 4.0.0
+ get-port-please: 3.2.0
+ jiti: 2.7.0
+ js-tokens: 10.0.0
+ knitwork: 1.3.0
+ mlly: 1.8.2
+ mocked-exports: 0.1.1
+ nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0)
+ nypm: 0.6.9
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ postcss: 8.5.26
+ rolldown-string: 0.3.1(rolldown@1.2.3)
+ seroval: 1.6.2
+ std-env: 4.2.0
+ ufo: 1.6.4
+ unenv: 2.0.0-rc.24
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ vite-node: 6.0.0(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ vite-plugin-checker: 0.14.5(eslint@10.5.0(jiti@2.7.0))(meow@14.1.0)(optionator@0.9.4)(stylelint@17.13.0(typescript@5.9.3))(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ vue: 3.5.41(typescript@5.9.3)
+ vue-bundle-renderer: 2.3.1
+ optionalDependencies:
+ '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
+ rolldown: 1.2.3
+ rollup-plugin-visualizer: 7.0.1(rolldown@1.2.3)(rollup@4.62.4)
+ transitivePeerDependencies:
+ - '@biomejs/biome'
+ - '@types/node'
+ - '@vitejs/devtools'
+ - esbuild
+ - eslint
+ - less
+ - magic-string
+ - magicast
+ - meow
+ - optionator
+ - oxc-parser
+ - oxlint
+ - sass
+ - sass-embedded
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - unplugin
+ - vue-tsc
+ - yaml
- copy-concurrently@1.0.5:
+ '@nuxtjs/color-mode@4.0.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))':
dependencies:
- aproba: 1.2.0
- fs-write-stream-atomic: 1.0.10
- iferr: 0.1.5
- mkdirp: 0.5.6
- rimraf: 2.7.1
- run-queue: 1.0.3
-
- copy-descriptor@0.1.1: {}
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ exsolve: 1.1.1
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ semver: 7.8.5
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
- core-js-compat@3.37.1:
+ '@nuxtjs/google-fonts@3.2.0(magicast@0.5.4)':
dependencies:
- browserslist: 4.26.2
+ '@nuxt/kit': 3.21.6(magicast@0.5.4)
+ google-fonts-helper: 3.7.4
+ pathe: 1.1.2
+ transitivePeerDependencies:
+ - magicast
- core-js@2.6.12: {}
+ '@nuxtjs/robots@6.1.2(4d79e2cd154eafd0ae5acf0b0945c71b)':
+ dependencies:
+ '@fingerprintjs/botd': 2.0.0
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ consola: 3.4.2
+ defu: 6.1.7
+ h3: 1.15.11
+ nuxt-site-config: 4.1.1(4d79e2cd154eafd0ae5acf0b0945c71b)
+ nuxtseo-shared: 5.3.2(043985539a50ea96924caeb25844c44e)
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ ufo: 1.6.4
+ transitivePeerDependencies:
+ - '@nuxt/schema'
+ - magic-string
+ - magicast
+ - nuxt
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vite
+ - vue
- core-js@3.45.1: {}
+ '@nuxtjs/seo@5.3.2(cbbecbeff1ef288b5e7e848ce0fbb97f)':
+ dependencies:
+ '@nuxt/kit': 4.4.8(magicast@0.5.4)
+ '@nuxtjs/robots': 6.1.2(4d79e2cd154eafd0ae5acf0b0945c71b)
+ '@nuxtjs/sitemap': 8.2.2(4d79e2cd154eafd0ae5acf0b0945c71b)
+ nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0)
+ nuxt-link-checker: 5.1.2(44f4b2b7d2f9ee8e362dff21d5ae9b48)
+ nuxt-og-image: 6.7.2(da6d5f553c655a51bde07ce599cb019e)
+ nuxt-schema-org: 6.2.3(932aeff8fdec8e3ce6179ad3f7827f8b)
+ nuxt-seo-utils: 8.3.1(175313bbf896de2adf74b471bfbf40bf)
+ nuxt-site-config: 4.1.1(4d79e2cd154eafd0ae5acf0b0945c71b)
+ nuxtseo-shared: 5.3.2(043985539a50ea96924caeb25844c44e)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@emotion/is-prop-valid'
+ - '@farmfe/core'
+ - '@inertiajs/vue3'
+ - '@internationalized/date'
+ - '@internationalized/number'
+ - '@modelcontextprotocol/sdk'
+ - '@netlify/blobs'
+ - '@nuxt/content'
+ - '@nuxt/schema'
+ - '@oxc-project/types'
+ - '@planetscale/database'
+ - '@resvg/resvg-js'
+ - '@resvg/resvg-wasm'
+ - '@rspack/core'
+ - '@takumi-rs/core'
+ - '@takumi-rs/wasm'
+ - '@tiptap/core'
+ - '@tiptap/extension-bubble-menu'
+ - '@tiptap/extension-code'
+ - '@tiptap/extension-collaboration'
+ - '@tiptap/extension-drag-handle'
+ - '@tiptap/extension-drag-handle-vue-3'
+ - '@tiptap/extension-floating-menu'
+ - '@tiptap/extension-horizontal-rule'
+ - '@tiptap/extension-image'
+ - '@tiptap/extension-mention'
+ - '@tiptap/extension-node-range'
+ - '@tiptap/extension-placeholder'
+ - '@tiptap/markdown'
+ - '@tiptap/pm'
+ - '@tiptap/starter-kit'
+ - '@tiptap/suggestion'
+ - '@tiptap/vue-3'
+ - '@types/node'
+ - '@unhead/cli'
+ - '@unhead/vue'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vue/composition-api'
+ - async-validator
+ - aws4fetch
+ - axios
+ - bufferutil
+ - bun-types-no-globals
+ - change-case
+ - crossws
+ - db0
+ - drauu
+ - embla-carousel
+ - esbuild
+ - focus-trap
+ - fontless
+ - idb-keyval
+ - ioredis
+ - joi
+ - jwt-decode
+ - lightningcss
+ - magic-string
+ - magicast
+ - nitropack
+ - nprogress
+ - oxc-parser
+ - playwright-core
+ - qrcode
+ - react
+ - react-dom
+ - rolldown
+ - rollup
+ - satori
+ - sharp
+ - sortablejs
+ - superstruct
+ - supports-color
+ - tailwindcss
+ - typescript
+ - unhead
+ - unifont
+ - universal-cookie
+ - unloader
+ - unplugin
+ - unstorage
+ - uploadthing
+ - utf-8-validate
+ - valibot
+ - vite
+ - vue
+ - vue-router
+ - webpack
+ - yup
+ - zod
+
+ '@nuxtjs/sitemap@8.2.2(4d79e2cd154eafd0ae5acf0b0945c71b)':
+ dependencies:
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ consola: 3.4.2
+ defu: 6.1.7
+ fast-xml-parser: 5.9.3
+ nuxt-site-config: 4.1.1(4d79e2cd154eafd0ae5acf0b0945c71b)
+ nuxtseo-shared: 5.3.2(043985539a50ea96924caeb25844c44e)
+ ofetch: 1.5.1
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ radix3: 1.1.2
+ ufo: 1.6.4
+ ultrahtml: 1.7.0
+ transitivePeerDependencies:
+ - '@nuxt/schema'
+ - magic-string
+ - magicast
+ - nuxt
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vite
+ - vue
- core-util-is@1.0.3: {}
+ '@oxc-parser/binding-android-arm-eabi@0.132.0':
+ optional: true
- cosmiconfig-typescript-loader@6.1.0(@types/node@24.6.2)(cosmiconfig@9.0.0(typescript@4.9.5))(typescript@4.9.5):
- dependencies:
- '@types/node': 24.6.2
- cosmiconfig: 9.0.0(typescript@4.9.5)
- jiti: 2.6.1
- typescript: 4.9.5
+ '@oxc-parser/binding-android-arm-eabi@0.137.0':
+ optional: true
- cosmiconfig@6.0.0:
- dependencies:
- '@types/parse-json': 4.0.0
- import-fresh: 3.3.0
- parse-json: 5.2.0
- path-type: 4.0.0
- yaml: 1.10.2
+ '@oxc-parser/binding-android-arm-eabi@0.138.0':
+ optional: true
- cosmiconfig@7.1.0:
- dependencies:
- '@types/parse-json': 4.0.0
- import-fresh: 3.3.1
- parse-json: 5.2.0
- path-type: 4.0.0
- yaml: 1.10.2
+ '@oxc-parser/binding-android-arm64@0.132.0':
+ optional: true
- cosmiconfig@8.3.6(typescript@4.9.5):
- dependencies:
- import-fresh: 3.3.0
- js-yaml: 4.1.0
- parse-json: 5.2.0
- path-type: 4.0.0
- optionalDependencies:
- typescript: 4.9.5
+ '@oxc-parser/binding-android-arm64@0.137.0':
+ optional: true
- cosmiconfig@9.0.0(typescript@4.9.5):
- dependencies:
- env-paths: 2.2.1
- import-fresh: 3.3.1
- js-yaml: 4.1.0
- parse-json: 5.2.0
- optionalDependencies:
- typescript: 4.9.5
+ '@oxc-parser/binding-android-arm64@0.138.0':
+ optional: true
- crc@4.3.2: {}
+ '@oxc-parser/binding-darwin-arm64@0.132.0':
+ optional: true
- create-ecdh@4.0.4:
- dependencies:
- bn.js: 4.12.0
- elliptic: 6.6.0
+ '@oxc-parser/binding-darwin-arm64@0.137.0':
+ optional: true
- create-hash@1.2.0:
- dependencies:
- cipher-base: 1.0.4
- inherits: 2.0.4
- md5.js: 1.3.5
- ripemd160: 2.0.2
- sha.js: 2.4.11
+ '@oxc-parser/binding-darwin-arm64@0.138.0':
+ optional: true
- create-hmac@1.1.7:
- dependencies:
- cipher-base: 1.0.4
- create-hash: 1.2.0
- inherits: 2.0.4
- ripemd160: 2.0.2
- safe-buffer: 5.2.1
- sha.js: 2.4.11
+ '@oxc-parser/binding-darwin-x64@0.132.0':
+ optional: true
- create-require@1.1.1: {}
+ '@oxc-parser/binding-darwin-x64@0.137.0':
+ optional: true
- cross-spawn@7.0.6:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
+ '@oxc-parser/binding-darwin-x64@0.138.0':
+ optional: true
- crypto-browserify@3.12.0:
- dependencies:
- browserify-cipher: 1.0.1
- browserify-sign: 4.2.2
- create-ecdh: 4.0.4
- create-hash: 1.2.0
- create-hmac: 1.1.7
- diffie-hellman: 5.0.3
- inherits: 2.0.4
- pbkdf2: 3.1.2
- public-encrypt: 4.0.3
- randombytes: 2.1.0
- randomfill: 1.0.4
+ '@oxc-parser/binding-freebsd-x64@0.132.0':
+ optional: true
- crypto-random-string@2.0.0:
+ '@oxc-parser/binding-freebsd-x64@0.137.0':
optional: true
- css-blank-pseudo@6.0.2(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ '@oxc-parser/binding-freebsd-x64@0.138.0':
+ optional: true
- css-declaration-sorter@6.4.1(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.132.0':
+ optional: true
- css-declaration-sorter@7.2.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.137.0':
+ optional: true
- css-functions-list@3.2.1: {}
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.138.0':
+ optional: true
- css-has-pseudo@6.0.5(postcss@8.4.39):
- dependencies:
- '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2)
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
- postcss-value-parser: 4.2.0
+ '@oxc-parser/binding-linux-arm-musleabihf@0.132.0':
+ optional: true
- css-loader@5.2.7(webpack@4.47.0):
- dependencies:
- icss-utils: 5.1.0(postcss@8.4.39)
- loader-utils: 2.0.4
- postcss: 8.4.39
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.39)
- postcss-modules-local-by-default: 4.0.3(postcss@8.4.39)
- postcss-modules-scope: 3.0.0(postcss@8.4.39)
- postcss-modules-values: 4.0.0(postcss@8.4.39)
- postcss-value-parser: 4.2.0
- schema-utils: 3.3.0
- semver: 7.7.2
- webpack: 4.47.0
-
- css-loader@5.2.7(webpack@5.102.0):
- dependencies:
- icss-utils: 5.1.0(postcss@8.4.39)
- loader-utils: 2.0.4
- postcss: 8.4.39
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.39)
- postcss-modules-local-by-default: 4.0.3(postcss@8.4.39)
- postcss-modules-scope: 3.0.0(postcss@8.4.39)
- postcss-modules-values: 4.0.0(postcss@8.4.39)
- postcss-value-parser: 4.2.0
- schema-utils: 3.3.0
- semver: 7.7.2
- webpack: 5.102.0
+ '@oxc-parser/binding-linux-arm-musleabihf@0.137.0':
+ optional: true
- css-prefers-color-scheme@9.0.1(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ '@oxc-parser/binding-linux-arm-musleabihf@0.138.0':
+ optional: true
- css-select@4.3.0:
- dependencies:
- boolbase: 1.0.0
- css-what: 6.1.0
- domhandler: 4.3.1
- domutils: 2.8.0
- nth-check: 2.1.1
+ '@oxc-parser/binding-linux-arm64-gnu@0.132.0':
+ optional: true
- css-select@5.1.0:
- dependencies:
- boolbase: 1.0.0
- css-what: 6.1.0
- domhandler: 5.0.3
- domutils: 3.1.0
- nth-check: 2.1.1
+ '@oxc-parser/binding-linux-arm64-gnu@0.137.0':
+ optional: true
- css-tree@1.1.3:
- dependencies:
- mdn-data: 2.0.14
- source-map: 0.6.1
+ '@oxc-parser/binding-linux-arm64-gnu@0.138.0':
+ optional: true
- css-tree@2.2.1:
- dependencies:
- mdn-data: 2.0.28
- source-map-js: 1.0.2
+ '@oxc-parser/binding-linux-arm64-musl@0.132.0':
+ optional: true
- css-tree@2.3.1:
- dependencies:
- mdn-data: 2.0.30
- source-map-js: 1.0.2
+ '@oxc-parser/binding-linux-arm64-musl@0.137.0':
+ optional: true
- css-what@6.1.0: {}
+ '@oxc-parser/binding-linux-arm64-musl@0.138.0':
+ optional: true
- css@2.2.4:
- dependencies:
- inherits: 2.0.4
- source-map: 0.6.1
- source-map-resolve: 0.5.3
- urix: 0.1.0
+ '@oxc-parser/binding-linux-ppc64-gnu@0.132.0':
+ optional: true
- cssdb@8.0.2: {}
+ '@oxc-parser/binding-linux-ppc64-gnu@0.137.0':
+ optional: true
- cssesc@3.0.0: {}
+ '@oxc-parser/binding-linux-ppc64-gnu@0.138.0':
+ optional: true
- cssnano-preset-default@5.2.14(postcss@8.4.39):
- dependencies:
- css-declaration-sorter: 6.4.1(postcss@8.4.39)
- cssnano-utils: 3.1.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-calc: 8.2.4(postcss@8.4.39)
- postcss-colormin: 5.3.1(postcss@8.4.39)
- postcss-convert-values: 5.1.3(postcss@8.4.39)
- postcss-discard-comments: 5.1.2(postcss@8.4.39)
- postcss-discard-duplicates: 5.1.0(postcss@8.4.39)
- postcss-discard-empty: 5.1.1(postcss@8.4.39)
- postcss-discard-overridden: 5.1.0(postcss@8.4.39)
- postcss-merge-longhand: 5.1.7(postcss@8.4.39)
- postcss-merge-rules: 5.1.4(postcss@8.4.39)
- postcss-minify-font-values: 5.1.0(postcss@8.4.39)
- postcss-minify-gradients: 5.1.1(postcss@8.4.39)
- postcss-minify-params: 5.1.4(postcss@8.4.39)
- postcss-minify-selectors: 5.2.1(postcss@8.4.39)
- postcss-normalize-charset: 5.1.0(postcss@8.4.39)
- postcss-normalize-display-values: 5.1.0(postcss@8.4.39)
- postcss-normalize-positions: 5.1.1(postcss@8.4.39)
- postcss-normalize-repeat-style: 5.1.1(postcss@8.4.39)
- postcss-normalize-string: 5.1.0(postcss@8.4.39)
- postcss-normalize-timing-functions: 5.1.0(postcss@8.4.39)
- postcss-normalize-unicode: 5.1.1(postcss@8.4.39)
- postcss-normalize-url: 5.1.0(postcss@8.4.39)
- postcss-normalize-whitespace: 5.1.1(postcss@8.4.39)
- postcss-ordered-values: 5.1.3(postcss@8.4.39)
- postcss-reduce-initial: 5.1.2(postcss@8.4.39)
- postcss-reduce-transforms: 5.1.0(postcss@8.4.39)
- postcss-svgo: 5.1.0(postcss@8.4.39)
- postcss-unique-selectors: 5.1.1(postcss@8.4.39)
-
- cssnano-preset-default@7.0.3(postcss@8.4.39):
- dependencies:
- browserslist: 4.26.2
- css-declaration-sorter: 7.2.0(postcss@8.4.39)
- cssnano-utils: 5.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-calc: 10.0.0(postcss@8.4.39)
- postcss-colormin: 7.0.1(postcss@8.4.39)
- postcss-convert-values: 7.0.1(postcss@8.4.39)
- postcss-discard-comments: 7.0.1(postcss@8.4.39)
- postcss-discard-duplicates: 7.0.0(postcss@8.4.39)
- postcss-discard-empty: 7.0.0(postcss@8.4.39)
- postcss-discard-overridden: 7.0.0(postcss@8.4.39)
- postcss-merge-longhand: 7.0.2(postcss@8.4.39)
- postcss-merge-rules: 7.0.2(postcss@8.4.39)
- postcss-minify-font-values: 7.0.0(postcss@8.4.39)
- postcss-minify-gradients: 7.0.0(postcss@8.4.39)
- postcss-minify-params: 7.0.1(postcss@8.4.39)
- postcss-minify-selectors: 7.0.2(postcss@8.4.39)
- postcss-normalize-charset: 7.0.0(postcss@8.4.39)
- postcss-normalize-display-values: 7.0.0(postcss@8.4.39)
- postcss-normalize-positions: 7.0.0(postcss@8.4.39)
- postcss-normalize-repeat-style: 7.0.0(postcss@8.4.39)
- postcss-normalize-string: 7.0.0(postcss@8.4.39)
- postcss-normalize-timing-functions: 7.0.0(postcss@8.4.39)
- postcss-normalize-unicode: 7.0.1(postcss@8.4.39)
- postcss-normalize-url: 7.0.0(postcss@8.4.39)
- postcss-normalize-whitespace: 7.0.0(postcss@8.4.39)
- postcss-ordered-values: 7.0.1(postcss@8.4.39)
- postcss-reduce-initial: 7.0.1(postcss@8.4.39)
- postcss-reduce-transforms: 7.0.0(postcss@8.4.39)
- postcss-svgo: 7.0.1(postcss@8.4.39)
- postcss-unique-selectors: 7.0.1(postcss@8.4.39)
-
- cssnano-utils@3.1.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
-
- cssnano-utils@5.0.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
-
- cssnano@5.1.15(postcss@8.4.39):
- dependencies:
- cssnano-preset-default: 5.2.14(postcss@8.4.39)
- lilconfig: 2.1.0
- postcss: 8.4.39
- yaml: 1.10.2
-
- cssnano@7.0.3(postcss@8.4.39):
- dependencies:
- cssnano-preset-default: 7.0.3(postcss@8.4.39)
- lilconfig: 3.1.3
- postcss: 8.4.39
+ '@oxc-parser/binding-linux-riscv64-gnu@0.132.0':
+ optional: true
- csso@4.2.0:
- dependencies:
- css-tree: 1.1.3
+ '@oxc-parser/binding-linux-riscv64-gnu@0.137.0':
+ optional: true
- csso@5.0.5:
- dependencies:
- css-tree: 2.2.1
+ '@oxc-parser/binding-linux-riscv64-gnu@0.138.0':
+ optional: true
- cssstyle@4.6.0:
- dependencies:
- '@asamuzakjp/css-color': 3.2.0
- rrweb-cssom: 0.8.0
+ '@oxc-parser/binding-linux-riscv64-musl@0.132.0':
+ optional: true
- csstype@3.1.2: {}
+ '@oxc-parser/binding-linux-riscv64-musl@0.137.0':
+ optional: true
- cuint@0.2.2: {}
+ '@oxc-parser/binding-linux-riscv64-musl@0.138.0':
+ optional: true
- cyclist@1.0.2: {}
+ '@oxc-parser/binding-linux-s390x-gnu@0.132.0':
+ optional: true
- dargs@8.1.0: {}
+ '@oxc-parser/binding-linux-s390x-gnu@0.137.0':
+ optional: true
- data-urls@5.0.0:
- dependencies:
- whatwg-mimetype: 4.0.0
- whatwg-url: 14.2.0
+ '@oxc-parser/binding-linux-s390x-gnu@0.138.0':
+ optional: true
- date-fns@2.30.0:
- dependencies:
- '@babel/runtime': 7.24.5
+ '@oxc-parser/binding-linux-x64-gnu@0.132.0':
+ optional: true
- de-indent@1.0.2: {}
+ '@oxc-parser/binding-linux-x64-gnu@0.137.0':
+ optional: true
- deasync@0.1.29:
- dependencies:
- bindings: 1.5.0
- node-addon-api: 1.7.2
+ '@oxc-parser/binding-linux-x64-gnu@0.138.0':
+ optional: true
- debounce@1.2.1: {}
+ '@oxc-parser/binding-linux-x64-musl@0.132.0':
+ optional: true
- debug@2.6.9:
- dependencies:
- ms: 2.0.0
+ '@oxc-parser/binding-linux-x64-musl@0.137.0':
+ optional: true
- debug@3.2.7:
- dependencies:
- ms: 2.1.3
+ '@oxc-parser/binding-linux-x64-musl@0.138.0':
+ optional: true
- debug@4.3.4:
- dependencies:
- ms: 2.1.2
+ '@oxc-parser/binding-openharmony-arm64@0.132.0':
+ optional: true
- debug@4.3.6:
- dependencies:
- ms: 2.1.2
+ '@oxc-parser/binding-openharmony-arm64@0.137.0':
+ optional: true
- debug@4.4.1:
- dependencies:
- ms: 2.1.3
+ '@oxc-parser/binding-openharmony-arm64@0.138.0':
+ optional: true
- debug@4.4.3:
+ '@oxc-parser/binding-wasm32-wasi@0.132.0':
dependencies:
- ms: 2.1.3
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ optional: true
- decache@4.6.2:
+ '@oxc-parser/binding-wasm32-wasi@0.137.0':
dependencies:
- callsite: 1.0.0
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
+ optional: true
- decamelize-keys@1.1.1:
+ '@oxc-parser/binding-wasm32-wasi@0.138.0':
dependencies:
- decamelize: 1.2.0
- map-obj: 1.0.1
-
- decamelize@1.2.0: {}
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
+ optional: true
- decamelize@5.0.1: {}
+ '@oxc-parser/binding-win32-arm64-msvc@0.132.0':
+ optional: true
- decimal.js@10.6.0: {}
+ '@oxc-parser/binding-win32-arm64-msvc@0.137.0':
+ optional: true
- decode-uri-component@0.2.2: {}
+ '@oxc-parser/binding-win32-arm64-msvc@0.138.0':
+ optional: true
- dedent@1.7.0: {}
+ '@oxc-parser/binding-win32-ia32-msvc@0.132.0':
+ optional: true
- deep-is@0.1.4: {}
+ '@oxc-parser/binding-win32-ia32-msvc@0.137.0':
+ optional: true
- deepmerge@4.3.1: {}
+ '@oxc-parser/binding-win32-ia32-msvc@0.138.0':
+ optional: true
- define-data-property@1.1.0:
- dependencies:
- get-intrinsic: 1.3.0
- gopd: 1.2.0
- has-property-descriptors: 1.0.0
+ '@oxc-parser/binding-win32-x64-msvc@0.132.0':
+ optional: true
- define-properties@1.2.1:
- dependencies:
- define-data-property: 1.1.0
- has-property-descriptors: 1.0.0
- object-keys: 1.1.1
+ '@oxc-parser/binding-win32-x64-msvc@0.137.0':
+ optional: true
- define-property@0.2.5:
- dependencies:
- is-descriptor: 0.1.6
+ '@oxc-parser/binding-win32-x64-msvc@0.138.0':
+ optional: true
- define-property@1.0.0:
- dependencies:
- is-descriptor: 1.0.2
+ '@oxc-project/types@0.132.0': {}
- define-property@2.0.2:
- dependencies:
- is-descriptor: 1.0.2
- isobject: 3.0.1
+ '@oxc-project/types@0.137.0': {}
- defu@5.0.1: {}
+ '@oxc-project/types@0.138.0': {}
- defu@6.1.2: {}
+ '@oxc-project/types@0.143.0': {}
- defu@6.1.4: {}
+ '@parcel/watcher-android-arm64@2.5.6':
+ optional: true
- delayed-stream@1.0.0: {}
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ optional: true
- depd@2.0.0: {}
+ '@parcel/watcher-darwin-x64@2.5.6':
+ optional: true
- des.js@1.1.0:
- dependencies:
- inherits: 2.0.4
- minimalistic-assert: 1.0.1
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ optional: true
- destr@2.0.3: {}
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ optional: true
- destroy@1.2.0: {}
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ optional: true
- detect-indent@5.0.0: {}
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ optional: true
- detect-newline@3.1.0: {}
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ optional: true
- devalue@2.0.1: {}
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ optional: true
- dialog-polyfill@0.4.10: {}
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ optional: true
- diffie-hellman@5.0.3:
+ '@parcel/watcher-wasm@2.6.0':
dependencies:
- bn.js: 4.12.0
- miller-rabin: 4.0.1
- randombytes: 2.1.0
+ is-glob: 4.0.3
+ picomatch: 4.0.5
- dijkstrajs@1.0.3: {}
+ '@parcel/watcher-win32-arm64@2.5.6':
+ optional: true
- dir-glob@3.0.1:
- dependencies:
- path-type: 4.0.0
+ '@parcel/watcher-win32-ia32@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-x64@2.5.6':
+ optional: true
- doctrine@2.1.0:
+ '@parcel/watcher@2.5.6':
dependencies:
- esutils: 2.0.3
+ detect-libc: 2.1.2
+ is-glob: 4.0.3
+ node-addon-api: 7.1.1
+ picomatch: 4.0.5
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.5.6
+ '@parcel/watcher-darwin-arm64': 2.5.6
+ '@parcel/watcher-darwin-x64': 2.5.6
+ '@parcel/watcher-freebsd-x64': 2.5.6
+ '@parcel/watcher-linux-arm-glibc': 2.5.6
+ '@parcel/watcher-linux-arm-musl': 2.5.6
+ '@parcel/watcher-linux-arm64-glibc': 2.5.6
+ '@parcel/watcher-linux-arm64-musl': 2.5.6
+ '@parcel/watcher-linux-x64-glibc': 2.5.6
+ '@parcel/watcher-linux-x64-musl': 2.5.6
+ '@parcel/watcher-win32-arm64': 2.5.6
+ '@parcel/watcher-win32-ia32': 2.5.6
+ '@parcel/watcher-win32-x64': 2.5.6
+ optional: true
- doctrine@3.0.0:
+ '@pinia/nuxt@0.11.3(magicast@0.5.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))':
dependencies:
- esutils: 2.0.3
+ '@nuxt/kit': 4.4.6(magicast@0.5.4)
+ pinia: 3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3))
+ transitivePeerDependencies:
+ - magicast
- dom-converter@0.2.0:
- dependencies:
- utila: 0.4.0
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
- dom-event-types@1.1.0: {}
+ '@polka/url@1.0.0-next.29': {}
- dom-serializer@1.4.1:
+ '@poppinss/colors@4.1.6':
dependencies:
- domelementtype: 2.3.0
- domhandler: 4.3.1
- entities: 2.2.0
+ kleur: 4.1.5
- dom-serializer@2.0.0:
+ '@poppinss/dumper@0.7.0':
dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- entities: 4.5.0
+ '@poppinss/colors': 4.1.6
+ '@sindresorhus/is': 7.2.0
+ supports-color: 10.2.2
- domain-browser@1.2.0: {}
+ '@poppinss/exception@1.2.3': {}
- domelementtype@2.3.0: {}
-
- domhandler@4.3.1:
- dependencies:
- domelementtype: 2.3.0
+ '@protobufjs/aspromise@1.1.2': {}
- domhandler@5.0.3:
- dependencies:
- domelementtype: 2.3.0
+ '@protobufjs/base64@1.1.2': {}
- domutils@2.8.0:
- dependencies:
- dom-serializer: 1.4.1
- domelementtype: 2.3.0
- domhandler: 4.3.1
+ '@protobufjs/codegen@2.0.5': {}
- domutils@3.1.0:
- dependencies:
- dom-serializer: 2.0.0
- domelementtype: 2.3.0
- domhandler: 5.0.3
+ '@protobufjs/eventemitter@1.1.1': {}
- dot-case@3.0.4:
+ '@protobufjs/fetch@1.1.1':
dependencies:
- no-case: 3.0.4
- tslib: 2.6.2
+ '@protobufjs/aspromise': 1.1.2
- dot-prop@5.3.0:
- dependencies:
- is-obj: 2.0.0
+ '@protobufjs/float@1.0.2': {}
- dotenv@16.6.1: {}
+ '@protobufjs/inquire@1.1.2': {}
- dotenv@17.2.1: {}
+ '@protobufjs/path@1.1.2': {}
- dotenv@8.6.0: {}
+ '@protobufjs/pool@1.1.0': {}
- dotenv@9.0.2: {}
+ '@protobufjs/utf8@1.1.1': {}
- dunder-proto@1.0.1:
+ '@quansync/fs@1.0.0':
dependencies:
- call-bind-apply-helpers: 1.0.2
- es-errors: 1.3.0
- gopd: 1.2.0
+ quansync: 1.0.0
- duplexer@0.1.2: {}
+ '@rolldown/binding-android-arm64@1.2.3':
+ optional: true
- duplexify@3.7.1:
- dependencies:
- end-of-stream: 1.4.4
- inherits: 2.0.4
- readable-stream: 2.3.8
- stream-shift: 1.0.1
+ '@rolldown/binding-darwin-arm64@1.2.3':
+ optional: true
- duplexify@4.1.2:
- dependencies:
- end-of-stream: 1.4.4
- inherits: 2.0.4
- readable-stream: 3.6.2
- stream-shift: 1.0.1
+ '@rolldown/binding-darwin-x64@1.2.3':
optional: true
- eastasianwidth@0.2.0: {}
+ '@rolldown/binding-freebsd-x64@1.2.3':
+ optional: true
- ecdsa-sig-formatter@1.0.11:
- dependencies:
- safe-buffer: 5.2.1
+ '@rolldown/binding-linux-arm-gnueabihf@1.2.3':
optional: true
- editorconfig@1.0.4:
- dependencies:
- '@one-ini/wasm': 0.1.1
- commander: 10.0.1
- minimatch: 9.0.1
- semver: 7.7.2
+ '@rolldown/binding-linux-arm64-gnu@1.2.3':
+ optional: true
- ee-first@1.1.1: {}
+ '@rolldown/binding-linux-arm64-musl@1.2.3':
+ optional: true
- ejs@3.1.10:
- dependencies:
- jake: 10.9.4
+ '@rolldown/binding-linux-ppc64-gnu@1.2.3':
optional: true
- electron-to-chromium@1.5.227: {}
+ '@rolldown/binding-linux-s390x-gnu@1.2.3':
+ optional: true
- electron-to-chromium@1.5.228: {}
+ '@rolldown/binding-linux-x64-gnu@1.2.3':
+ optional: true
- elliptic@6.6.0:
- dependencies:
- bn.js: 4.12.0
- brorand: 1.1.0
- hash.js: 1.1.7
- hmac-drbg: 1.0.1
- inherits: 2.0.4
- minimalistic-assert: 1.0.1
- minimalistic-crypto-utils: 1.0.1
+ '@rolldown/binding-linux-x64-musl@1.2.3':
+ optional: true
- emittery@0.13.1: {}
+ '@rolldown/binding-openharmony-arm64@1.2.3':
+ optional: true
- emoji-regex@10.4.0: {}
+ '@rolldown/binding-win32-arm64-msvc@1.2.3':
+ optional: true
- emoji-regex@8.0.0: {}
+ '@rolldown/binding-win32-x64-msvc@1.2.3':
+ optional: true
- emoji-regex@9.2.2: {}
+ '@rolldown/pluginutils@1.0.1': {}
- emojis-list@3.0.0: {}
+ '@rollup/plugin-alias@6.0.0(rollup@4.62.4)':
+ optionalDependencies:
+ rollup: 4.62.4
- encodeurl@1.0.2: {}
+ '@rollup/plugin-commonjs@29.0.3(rollup@4.62.4)':
+ dependencies:
+ '@rollup/pluginutils': 5.4.0(rollup@4.62.4)
+ commondir: 1.0.1
+ estree-walker: 2.0.2
+ fdir: 6.5.0(picomatch@4.0.5)
+ is-reference: 1.2.1
+ magic-string: 0.30.21
+ picomatch: 4.0.5
+ optionalDependencies:
+ rollup: 4.62.4
- encodeurl@2.0.0: {}
+ '@rollup/plugin-inject@5.0.5(rollup@4.62.4)':
+ dependencies:
+ '@rollup/pluginutils': 5.4.0(rollup@4.62.4)
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 4.62.4
- end-of-stream@1.4.4:
+ '@rollup/plugin-json@6.1.0(rollup@4.62.4)':
dependencies:
- once: 1.4.0
+ '@rollup/pluginutils': 5.4.0(rollup@4.62.4)
+ optionalDependencies:
+ rollup: 4.62.4
- enhanced-resolve@4.5.0:
+ '@rollup/plugin-node-resolve@16.0.3(rollup@4.62.4)':
dependencies:
- graceful-fs: 4.2.11
- memory-fs: 0.5.0
- tapable: 1.1.3
+ '@rollup/pluginutils': 5.4.0(rollup@4.62.4)
+ '@types/resolve': 1.20.2
+ deepmerge: 4.3.1
+ is-module: 1.0.0
+ resolve: 1.22.12
+ optionalDependencies:
+ rollup: 4.62.4
- enhanced-resolve@5.18.3:
+ '@rollup/plugin-replace@6.0.3(rollup@4.62.4)':
dependencies:
- graceful-fs: 4.2.11
- tapable: 2.2.3
+ '@rollup/pluginutils': 5.4.0(rollup@4.62.4)
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 4.62.4
+
+ '@rollup/plugin-terser@1.0.0(rollup@4.62.4)':
+ dependencies:
+ serialize-javascript: 7.0.7
+ smob: 1.6.2
+ terser: 5.49.2
+ optionalDependencies:
+ rollup: 4.62.4
+
+ '@rollup/pluginutils@5.4.0(rollup@4.62.4)':
+ dependencies:
+ '@types/estree': 1.0.9
+ estree-walker: 2.0.2
+ picomatch: 4.0.5
+ optionalDependencies:
+ rollup: 4.62.4
- ent@2.2.0:
+ '@rollup/rollup-android-arm-eabi@4.62.4':
optional: true
- entities@2.2.0: {}
+ '@rollup/rollup-android-arm64@4.62.4':
+ optional: true
- entities@4.5.0: {}
+ '@rollup/rollup-darwin-arm64@4.62.4':
+ optional: true
- entities@6.0.1: {}
+ '@rollup/rollup-darwin-x64@4.62.4':
+ optional: true
- env-paths@2.2.1: {}
+ '@rollup/rollup-freebsd-arm64@4.62.4':
+ optional: true
- environment@1.1.0: {}
+ '@rollup/rollup-freebsd-x64@4.62.4':
+ optional: true
- errno@0.1.8:
- dependencies:
- prr: 1.0.1
+ '@rollup/rollup-linux-arm-gnueabihf@4.62.4':
+ optional: true
- error-ex@1.3.2:
- dependencies:
- is-arrayish: 0.2.1
+ '@rollup/rollup-linux-arm-musleabihf@4.62.4':
+ optional: true
- error-stack-parser@2.1.4:
- dependencies:
- stackframe: 1.3.4
-
- es-abstract@1.22.2:
- dependencies:
- array-buffer-byte-length: 1.0.0
- arraybuffer.prototype.slice: 1.0.2
- available-typed-arrays: 1.0.5
- call-bind: 1.0.2
- es-set-tostringtag: 2.1.0
- es-to-primitive: 1.2.1
- function.prototype.name: 1.1.6
- get-intrinsic: 1.3.0
- get-symbol-description: 1.0.0
- globalthis: 1.0.3
- gopd: 1.0.1
- has: 1.0.3
- has-property-descriptors: 1.0.0
- has-proto: 1.0.1
- has-symbols: 1.0.3
- internal-slot: 1.0.5
- is-array-buffer: 3.0.2
- is-callable: 1.2.7
- is-negative-zero: 2.0.2
- is-regex: 1.1.4
- is-shared-array-buffer: 1.0.2
- is-string: 1.0.7
- is-typed-array: 1.1.12
- is-weakref: 1.0.2
- object-inspect: 1.12.3
- object-keys: 1.1.1
- object.assign: 4.1.4
- regexp.prototype.flags: 1.5.1
- safe-array-concat: 1.0.1
- safe-regex-test: 1.0.0
- string.prototype.trim: 1.2.8
- string.prototype.trimend: 1.0.7
- string.prototype.trimstart: 1.0.7
- typed-array-buffer: 1.0.0
- typed-array-byte-length: 1.0.0
- typed-array-byte-offset: 1.0.0
- typed-array-length: 1.0.4
- unbox-primitive: 1.0.2
- which-typed-array: 1.1.11
-
- es-array-method-boxes-properly@1.0.0: {}
-
- es-define-property@1.0.1: {}
+ '@rollup/rollup-linux-arm64-gnu@4.62.4':
+ optional: true
- es-errors@1.3.0: {}
+ '@rollup/rollup-linux-arm64-musl@4.62.4':
+ optional: true
- es-module-lexer@1.7.0: {}
+ '@rollup/rollup-linux-loong64-gnu@4.62.4':
+ optional: true
- es-object-atoms@1.1.1:
- dependencies:
- es-errors: 1.3.0
+ '@rollup/rollup-linux-loong64-musl@4.62.4':
+ optional: true
- es-set-tostringtag@2.1.0:
- dependencies:
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- has-tostringtag: 1.0.2
- hasown: 2.0.2
+ '@rollup/rollup-linux-ppc64-gnu@4.62.4':
+ optional: true
- es-shim-unscopables@1.0.0:
- dependencies:
- has: 1.0.3
+ '@rollup/rollup-linux-ppc64-musl@4.62.4':
+ optional: true
- es-to-primitive@1.2.1:
- dependencies:
- is-callable: 1.2.7
- is-date-object: 1.0.5
- is-symbol: 1.0.4
+ '@rollup/rollup-linux-riscv64-gnu@4.62.4':
+ optional: true
- esbuild@0.18.20:
- optionalDependencies:
- '@esbuild/android-arm': 0.18.20
- '@esbuild/android-arm64': 0.18.20
- '@esbuild/android-x64': 0.18.20
- '@esbuild/darwin-arm64': 0.18.20
- '@esbuild/darwin-x64': 0.18.20
- '@esbuild/freebsd-arm64': 0.18.20
- '@esbuild/freebsd-x64': 0.18.20
- '@esbuild/linux-arm': 0.18.20
- '@esbuild/linux-arm64': 0.18.20
- '@esbuild/linux-ia32': 0.18.20
- '@esbuild/linux-loong64': 0.18.20
- '@esbuild/linux-mips64el': 0.18.20
- '@esbuild/linux-ppc64': 0.18.20
- '@esbuild/linux-riscv64': 0.18.20
- '@esbuild/linux-s390x': 0.18.20
- '@esbuild/linux-x64': 0.18.20
- '@esbuild/netbsd-x64': 0.18.20
- '@esbuild/openbsd-x64': 0.18.20
- '@esbuild/sunos-x64': 0.18.20
- '@esbuild/win32-arm64': 0.18.20
- '@esbuild/win32-ia32': 0.18.20
- '@esbuild/win32-x64': 0.18.20
+ '@rollup/rollup-linux-riscv64-musl@4.62.4':
+ optional: true
- escalade@3.2.0: {}
+ '@rollup/rollup-linux-s390x-gnu@4.62.4':
+ optional: true
- escape-html@1.0.3: {}
+ '@rollup/rollup-linux-x64-gnu@4.62.4':
+ optional: true
- escape-string-regexp@1.0.5: {}
+ '@rollup/rollup-linux-x64-musl@4.62.4':
+ optional: true
- escape-string-regexp@2.0.0: {}
+ '@rollup/rollup-openbsd-x64@4.62.4':
+ optional: true
- escape-string-regexp@4.0.0: {}
+ '@rollup/rollup-openharmony-arm64@4.62.4':
+ optional: true
- escape-string-regexp@5.0.0: {}
+ '@rollup/rollup-win32-arm64-msvc@4.62.4':
+ optional: true
- eslint-config-prettier@10.1.8(eslint@8.57.1):
- dependencies:
- eslint: 8.57.1
+ '@rollup/rollup-win32-ia32-msvc@4.62.4':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.62.4':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.62.4':
+ optional: true
- eslint-config-standard@17.1.0(eslint-plugin-import@2.28.1)(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.1.1(eslint@8.57.1))(eslint@8.57.1):
+ '@shikijs/core@4.3.1':
dependencies:
- eslint: 8.57.1
- eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1)
- eslint-plugin-n: 15.7.0(eslint@8.57.1)
- eslint-plugin-promise: 6.1.1(eslint@8.57.1)
+ '@shikijs/primitive': 4.3.1
+ '@shikijs/types': 4.3.1
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.5
- eslint-import-resolver-node@0.3.9:
+ '@shikijs/engine-javascript@4.3.1':
dependencies:
- debug: 3.2.7
- is-core-module: 2.13.0
- resolve: 1.22.6
- transitivePeerDependencies:
- - supports-color
+ '@shikijs/types': 4.3.1
+ '@shikijs/vscode-textmate': 10.0.2
+ oniguruma-to-es: 4.3.6
- eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-plugin-import@2.28.1)(eslint@8.57.1):
+ '@shikijs/engine-oniguruma@4.3.1':
dependencies:
- debug: 4.4.1
- enhanced-resolve: 5.18.3
- eslint: 8.57.1
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1)
- eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1)
- fast-glob: 3.3.1
- get-tsconfig: 4.7.2
- is-core-module: 2.13.0
- is-glob: 4.0.3
- transitivePeerDependencies:
- - '@typescript-eslint/parser'
- - eslint-import-resolver-node
- - eslint-import-resolver-webpack
- - supports-color
+ '@shikijs/types': 4.3.1
+ '@shikijs/vscode-textmate': 10.0.2
- eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1):
+ '@shikijs/langs@4.3.1':
dependencies:
- debug: 3.2.7
- optionalDependencies:
- '@typescript-eslint/parser': 6.7.3(eslint@8.57.1)(typescript@4.9.5)
- eslint: 8.57.1
- eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-plugin-import@2.28.1)(eslint@8.57.1)
- transitivePeerDependencies:
- - supports-color
+ '@shikijs/types': 4.3.1
- eslint-plugin-es@3.0.1(eslint@8.57.1):
+ '@shikijs/primitive@4.3.1':
dependencies:
- eslint: 8.57.1
- eslint-utils: 2.1.0
- regexpp: 3.2.0
+ '@shikijs/types': 4.3.1
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
- eslint-plugin-es@4.1.0(eslint@8.57.1):
+ '@shikijs/themes@4.3.1':
dependencies:
- eslint: 8.57.1
- eslint-utils: 2.1.0
- regexpp: 3.2.0
+ '@shikijs/types': 4.3.1
- eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1):
+ '@shikijs/types@4.3.1':
dependencies:
- array-includes: 3.1.7
- array.prototype.findlastindex: 1.2.3
- array.prototype.flat: 1.3.2
- array.prototype.flatmap: 1.3.2
- debug: 3.2.7
- doctrine: 2.1.0
- eslint: 8.57.1
- eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1)
- has: 1.0.3
- is-core-module: 2.13.0
- is-glob: 4.0.3
- minimatch: 3.1.2
- object.fromentries: 2.0.7
- object.groupby: 1.0.1
- object.values: 1.1.7
- semver: 6.3.1
- tsconfig-paths: 3.14.2
- optionalDependencies:
- '@typescript-eslint/parser': 6.7.3(eslint@8.57.1)(typescript@4.9.5)
- transitivePeerDependencies:
- - eslint-import-resolver-typescript
- - eslint-import-resolver-webpack
- - supports-color
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
- eslint-plugin-n@15.7.0(eslint@8.57.1):
- dependencies:
- builtins: 5.0.1
- eslint: 8.57.1
- eslint-plugin-es: 4.1.0(eslint@8.57.1)
- eslint-utils: 3.0.0(eslint@8.57.1)
- ignore: 5.3.1
- is-core-module: 2.13.0
- minimatch: 3.1.2
- resolve: 1.22.6
- semver: 7.7.2
-
- eslint-plugin-node@11.1.0(eslint@8.57.1):
- dependencies:
- eslint: 8.57.1
- eslint-plugin-es: 3.0.1(eslint@8.57.1)
- eslint-utils: 2.1.0
- ignore: 5.3.1
- minimatch: 3.1.2
- resolve: 1.22.6
- semver: 6.3.1
+ '@shikijs/vscode-textmate@10.0.2': {}
- eslint-plugin-nuxt@4.0.0(eslint@8.57.1):
- dependencies:
- eslint-plugin-vue: 9.33.0(eslint@8.57.1)
- semver: 7.5.4
- vue-eslint-parser: 9.3.1(eslint@8.57.1)
- transitivePeerDependencies:
- - eslint
- - supports-color
+ '@simple-git/args-pathspec@1.0.3': {}
- eslint-plugin-promise@6.1.1(eslint@8.57.1):
+ '@simple-git/argv-parser@1.1.1':
dependencies:
- eslint: 8.57.1
+ '@simple-git/args-pathspec': 1.0.3
- eslint-plugin-unicorn@44.0.2(eslint@8.57.1):
+ '@simple-libs/child-process-utils@1.0.2':
dependencies:
- '@babel/helper-validator-identifier': 7.24.5
- ci-info: 3.9.0
- clean-regexp: 1.0.0
- eslint: 8.57.1
- eslint-utils: 3.0.0(eslint@8.57.1)
- esquery: 1.6.0
- indent-string: 4.0.0
- is-builtin-module: 3.2.1
- lodash: 4.17.21
- pluralize: 8.0.0
- read-pkg-up: 7.0.1
- regexp-tree: 0.1.27
- safe-regex: 2.1.1
- semver: 7.7.2
- strip-indent: 3.0.0
+ '@simple-libs/stream-utils': 1.2.0
- eslint-plugin-vue@9.33.0(eslint@8.57.1):
- dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
- eslint: 8.57.1
- globals: 13.24.0
- natural-compare: 1.4.0
- nth-check: 2.1.1
- postcss-selector-parser: 6.1.2
- semver: 7.7.2
- vue-eslint-parser: 9.4.3(eslint@8.57.1)
- xml-name-validator: 4.0.0
- transitivePeerDependencies:
- - supports-color
+ '@simple-libs/stream-utils@1.2.0': {}
- eslint-scope@4.0.3:
- dependencies:
- esrecurse: 4.3.0
- estraverse: 4.3.0
+ '@sindresorhus/base62@1.0.0': {}
- eslint-scope@5.1.1:
- dependencies:
- esrecurse: 4.3.0
- estraverse: 4.3.0
+ '@sindresorhus/is@7.2.0': {}
- eslint-scope@7.2.2:
+ '@sindresorhus/merge-streams@4.0.0': {}
+
+ '@speed-highlight/core@1.2.23': {}
+
+ '@standard-schema/spec@1.1.0': {}
+
+ '@stylistic/eslint-plugin@5.10.0(eslint@10.5.0(jiti@2.7.0))':
dependencies:
- esrecurse: 4.3.0
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0))
+ '@typescript-eslint/types': 8.62.0
+ eslint: 10.5.0(jiti@2.7.0)
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
estraverse: 5.3.0
+ picomatch: 4.0.5
- eslint-utils@2.1.0:
+ '@swc/helpers@0.5.23':
dependencies:
- eslint-visitor-keys: 1.3.0
+ tslib: 2.8.1
- eslint-utils@3.0.0(eslint@8.57.1):
+ '@tailwindcss/node@4.3.2':
dependencies:
- eslint: 8.57.1
- eslint-visitor-keys: 2.1.0
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.21.6
+ jiti: 2.7.0
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.3.2
- eslint-visitor-keys@1.3.0: {}
+ '@tailwindcss/oxide-android-arm64@4.3.2':
+ optional: true
- eslint-visitor-keys@2.1.0: {}
+ '@tailwindcss/oxide-darwin-arm64@4.3.2':
+ optional: true
- eslint-visitor-keys@3.4.3: {}
+ '@tailwindcss/oxide-darwin-x64@4.3.2':
+ optional: true
- eslint-webpack-plugin@4.0.1(eslint@8.57.1)(webpack@5.102.0):
- dependencies:
- '@types/eslint': 8.44.3
- eslint: 8.57.1
- jest-worker: 29.7.0
- micromatch: 4.0.8
- normalize-path: 3.0.0
- schema-utils: 4.3.2
- webpack: 5.102.0
+ '@tailwindcss/oxide-freebsd-x64@4.3.2':
+ optional: true
- eslint@8.57.1:
- dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
- '@eslint-community/regexpp': 4.9.0
- '@eslint/eslintrc': 2.1.4
- '@eslint/js': 8.57.1
- '@humanwhocodes/config-array': 0.13.0
- '@humanwhocodes/module-importer': 1.0.1
- '@nodelib/fs.walk': 1.2.8
- '@ungap/structured-clone': 1.2.0
- ajv: 6.12.6
- chalk: 4.1.2
- cross-spawn: 7.0.6
- debug: 4.3.6
- doctrine: 3.0.0
- escape-string-regexp: 4.0.0
- eslint-scope: 7.2.2
- eslint-visitor-keys: 3.4.3
- espree: 9.6.1
- esquery: 1.5.0
- esutils: 2.0.3
- fast-deep-equal: 3.1.3
- file-entry-cache: 6.0.1
- find-up: 5.0.0
- glob-parent: 6.0.2
- globals: 13.24.0
- graphemer: 1.4.0
- ignore: 5.3.1
- imurmurhash: 0.1.4
- is-glob: 4.0.3
- is-path-inside: 3.0.3
- js-yaml: 4.1.0
- json-stable-stringify-without-jsonify: 1.0.1
- levn: 0.4.1
- lodash.merge: 4.6.2
- minimatch: 3.1.2
- natural-compare: 1.4.0
- optionator: 0.9.3
- strip-ansi: 6.0.1
- text-table: 0.2.0
- transitivePeerDependencies:
- - supports-color
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2':
+ optional: true
- espree@9.6.1:
- dependencies:
- acorn: 8.15.0
- acorn-jsx: 5.3.2(acorn@8.15.0)
- eslint-visitor-keys: 3.4.3
+ '@tailwindcss/oxide-linux-arm64-gnu@4.3.2':
+ optional: true
- esprima@4.0.1: {}
+ '@tailwindcss/oxide-linux-arm64-musl@4.3.2':
+ optional: true
- esquery@1.5.0:
- dependencies:
- estraverse: 5.3.0
+ '@tailwindcss/oxide-linux-x64-gnu@4.3.2':
+ optional: true
- esquery@1.6.0:
- dependencies:
- estraverse: 5.3.0
+ '@tailwindcss/oxide-linux-x64-musl@4.3.2':
+ optional: true
- esrecurse@4.3.0:
- dependencies:
- estraverse: 5.3.0
+ '@tailwindcss/oxide-wasm32-wasi@4.3.2':
+ optional: true
- estraverse@4.3.0: {}
+ '@tailwindcss/oxide-win32-arm64-msvc@4.3.2':
+ optional: true
- estraverse@5.3.0: {}
+ '@tailwindcss/oxide-win32-x64-msvc@4.3.2':
+ optional: true
- estree-walker@2.0.2: {}
+ '@tailwindcss/oxide@4.3.2':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.3.2
+ '@tailwindcss/oxide-darwin-arm64': 4.3.2
+ '@tailwindcss/oxide-darwin-x64': 4.3.2
+ '@tailwindcss/oxide-freebsd-x64': 4.3.2
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.2
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.3.2
+ '@tailwindcss/oxide-linux-arm64-musl': 4.3.2
+ '@tailwindcss/oxide-linux-x64-gnu': 4.3.2
+ '@tailwindcss/oxide-linux-x64-musl': 4.3.2
+ '@tailwindcss/oxide-wasm32-wasi': 4.3.2
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.3.2
+ '@tailwindcss/oxide-win32-x64-msvc': 4.3.2
- estree-walker@3.0.3:
+ '@tailwindcss/postcss@4.3.2':
dependencies:
- '@types/estree': 1.0.8
+ '@alloc/quick-lru': 5.2.0
+ '@tailwindcss/node': 4.3.2
+ '@tailwindcss/oxide': 4.3.2
+ postcss: 8.5.26
+ tailwindcss: 4.3.2
- esutils@2.0.3: {}
+ '@tailwindcss/vite@4.3.2(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
+ dependencies:
+ '@tailwindcss/node': 4.3.2
+ '@tailwindcss/oxide': 4.3.2
+ tailwindcss: 4.3.2
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
- etag@1.8.1: {}
+ '@tanstack/table-core@8.21.3': {}
- event-target-shim@5.0.1:
- optional: true
+ '@tanstack/virtual-core@3.17.3': {}
- eventemitter3@5.0.1: {}
+ '@tanstack/vue-table@8.21.3(vue@3.5.34(typescript@5.9.3))':
+ dependencies:
+ '@tanstack/table-core': 8.21.3
+ vue: 3.5.34(typescript@5.9.3)
- events@3.3.0: {}
+ '@tanstack/vue-virtual@3.13.31(vue@3.5.34(typescript@5.9.3))':
+ dependencies:
+ '@tanstack/virtual-core': 3.17.3
+ vue: 3.5.34(typescript@5.9.3)
- eventsource-polyfill@0.9.6: {}
+ '@tiptap/core@3.27.1(@tiptap/pm@3.27.1)':
+ dependencies:
+ '@tiptap/pm': 3.27.1
- evp_bytestokey@1.0.3:
+ '@tiptap/extension-blockquote@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
dependencies:
- md5.js: 1.3.5
- safe-buffer: 5.2.1
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- execa@5.1.1:
+ '@tiptap/extension-bold@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
dependencies:
- cross-spawn: 7.0.6
- get-stream: 6.0.1
- human-signals: 2.1.0
- is-stream: 2.0.1
- merge-stream: 2.0.0
- npm-run-path: 4.0.1
- onetime: 5.1.2
- signal-exit: 3.0.7
- strip-final-newline: 2.0.0
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
- execa@8.0.1:
+ '@tiptap/extension-bubble-menu@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
dependencies:
- cross-spawn: 7.0.6
- get-stream: 8.0.1
- human-signals: 5.0.0
- is-stream: 3.0.0
- merge-stream: 2.0.0
- npm-run-path: 5.3.0
- onetime: 6.0.0
- signal-exit: 4.1.0
- strip-final-newline: 3.0.0
+ '@floating-ui/dom': 1.8.0
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- exit-x@0.2.2: {}
+ '@tiptap/extension-bullet-list@3.29.2(@tiptap/extension-list@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))':
+ dependencies:
+ '@tiptap/extension-list': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
- exit@0.1.2: {}
+ '@tiptap/extension-code-block@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
+ dependencies:
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- expand-brackets@2.1.4:
+ '@tiptap/extension-code@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
dependencies:
- debug: 2.6.9
- define-property: 0.2.5
- extend-shallow: 2.0.1
- posix-character-classes: 0.1.1
- regex-not: 1.0.2
- snapdragon: 0.8.2
- to-regex: 3.0.2
- transitivePeerDependencies:
- - supports-color
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
- expect@30.2.0:
+ '@tiptap/extension-collaboration@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))(yjs@13.6.31)':
dependencies:
- '@jest/expect-utils': 30.2.0
- '@jest/get-type': 30.1.0
- jest-matcher-utils: 30.2.0
- jest-message-util: 30.2.0
- jest-mock: 30.2.0
- jest-util: 30.2.0
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
+ '@tiptap/y-tiptap': 3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31)
+ yjs: 13.6.31
- extend-shallow@2.0.1:
+ '@tiptap/extension-document@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
dependencies:
- is-extendable: 0.1.1
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
- extend-shallow@3.0.2:
+ '@tiptap/extension-drag-handle-vue-3@3.27.1(@tiptap/extension-drag-handle@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/extension-collaboration@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))(yjs@13.6.31))(@tiptap/extension-node-range@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31)))(@tiptap/pm@3.27.1)(@tiptap/vue-3@3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))':
dependencies:
- assign-symbols: 1.0.0
- is-extendable: 1.0.1
+ '@tiptap/extension-drag-handle': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/extension-collaboration@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))(yjs@13.6.31))(@tiptap/extension-node-range@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))
+ '@tiptap/pm': 3.27.1
+ '@tiptap/vue-3': 3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(vue@3.5.34(typescript@5.9.3))
+ vue: 3.5.34(typescript@5.9.3)
- extend@3.0.2:
- optional: true
+ '@tiptap/extension-drag-handle@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/extension-collaboration@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))(yjs@13.6.31))(@tiptap/extension-node-range@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))':
+ dependencies:
+ '@floating-ui/dom': 1.8.0
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/extension-collaboration': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31))(yjs@13.6.31)
+ '@tiptap/extension-node-range': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
+ '@tiptap/y-tiptap': 3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31)
- external-editor@3.1.0:
+ '@tiptap/extension-dropcursor@3.29.2(@tiptap/extensions@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))':
dependencies:
- chardet: 0.7.0
- iconv-lite: 0.4.24
- tmp: 0.0.33
+ '@tiptap/extensions': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
- extglob@2.0.4:
+ '@tiptap/extension-floating-menu@3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
dependencies:
- array-unique: 0.3.2
- define-property: 1.0.0
- expand-brackets: 2.1.4
- extend-shallow: 2.0.1
- fragment-cache: 0.2.1
- regex-not: 1.0.2
- snapdragon: 0.8.2
- to-regex: 3.0.2
- transitivePeerDependencies:
- - supports-color
+ '@floating-ui/dom': 1.8.0
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- extract-css-chunks-webpack-plugin@4.10.0(webpack@4.47.0):
+ '@tiptap/extension-gapcursor@3.29.2(@tiptap/extensions@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))':
dependencies:
- loader-utils: 2.0.4
- normalize-url: 1.9.1
- schema-utils: 1.0.0
- webpack: 4.47.0
- webpack-sources: 1.4.3
+ '@tiptap/extensions': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
- extract-from-css@0.4.4:
+ '@tiptap/extension-hard-break@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
dependencies:
- css: 2.2.4
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
- fast-deep-equal@3.1.3: {}
+ '@tiptap/extension-heading@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
+ dependencies:
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
- fast-glob@3.3.1:
+ '@tiptap/extension-horizontal-rule@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.8
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- fast-glob@3.3.2:
+ '@tiptap/extension-image@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.8
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+
+ '@tiptap/extension-italic@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
+ dependencies:
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
- fast-json-stable-stringify@2.1.0: {}
+ '@tiptap/extension-link@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
+ dependencies:
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
+ linkifyjs: 4.3.3
- fast-levenshtein@2.0.6: {}
+ '@tiptap/extension-list-item@3.29.2(@tiptap/extension-list@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))':
+ dependencies:
+ '@tiptap/extension-list': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
- fast-text-encoding@1.0.6:
- optional: true
+ '@tiptap/extension-list-keymap@3.29.2(@tiptap/extension-list@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))':
+ dependencies:
+ '@tiptap/extension-list': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
- fast-uri@3.1.0: {}
+ '@tiptap/extension-list@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
+ dependencies:
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- fastest-levenshtein@1.0.16: {}
+ '@tiptap/extension-mention@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(@tiptap/suggestion@3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))':
+ dependencies:
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
+ '@tiptap/suggestion': 3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
- fastq@1.15.0:
+ '@tiptap/extension-node-range@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
dependencies:
- reusify: 1.0.4
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- faye-websocket@0.11.4:
+ '@tiptap/extension-ordered-list@3.29.2(@tiptap/extension-list@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))':
dependencies:
- websocket-driver: 0.7.4
+ '@tiptap/extension-list': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
- fb-watchman@2.0.2:
+ '@tiptap/extension-paragraph@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
dependencies:
- bser: 2.1.1
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
- figgy-pudding@3.5.2: {}
+ '@tiptap/extension-placeholder@3.27.1(@tiptap/extensions@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))':
+ dependencies:
+ '@tiptap/extensions': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
- figures@3.2.0:
+ '@tiptap/extension-strike@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
dependencies:
- escape-string-regexp: 1.0.5
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
- file-entry-cache@6.0.1:
+ '@tiptap/extension-text@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
dependencies:
- flat-cache: 3.1.1
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
- file-entry-cache@7.0.1:
+ '@tiptap/extension-underline@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))':
dependencies:
- flat-cache: 3.1.1
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
- file-loader@6.2.0(webpack@4.47.0):
+ '@tiptap/extensions@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
dependencies:
- loader-utils: 2.0.4
- schema-utils: 3.3.0
- webpack: 4.47.0
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- file-loader@6.2.0(webpack@5.102.0):
+ '@tiptap/extensions@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
dependencies:
- loader-utils: 2.0.4
- schema-utils: 3.3.0
- webpack: 5.102.0
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- file-uri-to-path@1.0.0: {}
+ '@tiptap/markdown@3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
+ dependencies:
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
+ marked: 17.0.6
- filelist@1.0.4:
+ '@tiptap/pm@3.27.1':
dependencies:
- minimatch: 5.1.6
- optional: true
+ prosemirror-changeset: 2.4.1
+ prosemirror-commands: 1.7.2
+ prosemirror-dropcursor: 1.8.3
+ prosemirror-gapcursor: 1.4.1
+ prosemirror-history: 1.5.0
+ prosemirror-inputrules: 1.5.1
+ prosemirror-keymap: 1.2.3
+ prosemirror-model: 1.25.11
+ prosemirror-schema-list: 1.5.1
+ prosemirror-state: 1.4.4
+ prosemirror-tables: 1.8.5
+ prosemirror-transform: 1.12.0
+ prosemirror-view: 1.42.2
- fill-range@4.0.0:
+ '@tiptap/starter-kit@3.27.1':
dependencies:
- extend-shallow: 2.0.1
- is-number: 3.0.0
- repeat-string: 1.6.1
- to-regex-range: 2.1.1
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/extension-blockquote': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/extension-bold': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-bullet-list': 3.29.2(@tiptap/extension-list@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))
+ '@tiptap/extension-code': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-code-block': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/extension-document': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-dropcursor': 3.29.2(@tiptap/extensions@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))
+ '@tiptap/extension-gapcursor': 3.29.2(@tiptap/extensions@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))
+ '@tiptap/extension-hard-break': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-heading': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-horizontal-rule': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/extension-italic': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-link': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/extension-list': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/extension-list-item': 3.29.2(@tiptap/extension-list@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))
+ '@tiptap/extension-list-keymap': 3.29.2(@tiptap/extension-list@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))
+ '@tiptap/extension-ordered-list': 3.29.2(@tiptap/extension-list@3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1))
+ '@tiptap/extension-paragraph': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-strike': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-text': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extension-underline': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))
+ '@tiptap/extensions': 3.29.2(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- fill-range@7.0.1:
+ '@tiptap/suggestion@3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)':
dependencies:
- to-regex-range: 5.0.1
+ '@floating-ui/dom': 1.8.0
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
- fill-range@7.1.1:
+ '@tiptap/vue-3@3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)(vue@3.5.34(typescript@5.9.3))':
dependencies:
- to-regex-range: 5.0.1
+ '@floating-ui/dom': 1.8.0
+ '@tiptap/core': 3.27.1(@tiptap/pm@3.27.1)
+ '@tiptap/pm': 3.27.1
+ vue: 3.5.34(typescript@5.9.3)
+ optionalDependencies:
+ '@tiptap/extension-bubble-menu': 3.27.1(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
+ '@tiptap/extension-floating-menu': 3.27.1(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.1(@tiptap/pm@3.27.1))(@tiptap/pm@3.27.1)
- finalhandler@1.1.2:
+ '@tiptap/y-tiptap@3.0.6(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.31))(yjs@13.6.31)':
dependencies:
- debug: 2.6.9
- encodeurl: 1.0.2
- escape-html: 1.0.3
- on-finished: 2.3.0
- parseurl: 1.3.3
- statuses: 1.5.0
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
+ lib0: 0.2.117
+ prosemirror-model: 1.25.11
+ prosemirror-state: 1.4.4
+ prosemirror-view: 1.42.2
+ y-protocols: 1.0.7(yjs@13.6.31)
+ yjs: 13.6.31
- find-babel-config@1.2.0:
+ '@tybys/wasm-util@0.10.2':
dependencies:
- json5: 0.5.1
- path-exists: 3.0.0
+ tslib: 2.8.1
+ optional: true
- find-cache-dir@2.1.0:
+ '@tybys/wasm-util@0.10.3':
dependencies:
- commondir: 1.0.1
- make-dir: 2.1.0
- pkg-dir: 3.0.0
+ tslib: 2.8.1
+ optional: true
- find-cache-dir@3.3.2:
+ '@types/esrecurse@4.3.1': {}
+
+ '@types/estree@1.0.9': {}
+
+ '@types/hast@3.0.4':
dependencies:
- commondir: 1.0.1
- make-dir: 3.1.0
- pkg-dir: 4.2.0
+ '@types/unist': 3.0.3
+
+ '@types/jsesc@2.5.1': {}
- find-up@3.0.0:
+ '@types/json-schema@7.0.15': {}
+
+ '@types/mdast@4.0.4':
dependencies:
- locate-path: 3.0.0
+ '@types/unist': 3.0.3
- find-up@4.1.0:
+ '@types/node@25.9.1':
dependencies:
- locate-path: 5.0.0
- path-exists: 4.0.0
+ undici-types: 7.24.6
- find-up@5.0.0:
+ '@types/qrcode@1.5.6':
dependencies:
- locate-path: 6.0.0
- path-exists: 4.0.0
+ '@types/node': 25.9.1
- find-up@7.0.0:
+ '@types/resolve@1.20.2': {}
+
+ '@types/unist@3.0.3': {}
+
+ '@types/web-bluetooth@0.0.20': {}
+
+ '@types/web-bluetooth@0.0.21': {}
+
+ '@typescript-eslint/eslint-plugin@8.62.0(@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)':
dependencies:
- locate-path: 7.2.0
- path-exists: 5.0.0
- unicorn-magic: 0.1.0
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.62.0
+ '@typescript-eslint/type-utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.62.0
+ eslint: 10.5.0(jiti@2.7.0)
+ ignore: 7.0.6
+ natural-compare: 1.4.0
+ ts-api-utils: 2.5.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- firebase-admin@10.3.0(@firebase/app-types@0.9.2):
+ '@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)':
dependencies:
- '@fastify/busboy': 1.2.1
- '@firebase/database-compat': 0.2.10(@firebase/app-types@0.9.2)
- '@firebase/database-types': 0.9.17
- '@types/node': 24.6.2
- jsonwebtoken: 8.5.1
- jwks-rsa: 2.1.5
- node-forge: 1.3.1
- uuid: 8.3.2
- optionalDependencies:
- '@google-cloud/firestore': 4.15.1
- '@google-cloud/storage': 5.20.5
+ '@typescript-eslint/scope-manager': 8.62.0
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/typescript-estree': 8.62.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.62.0
+ debug: 4.4.3
+ eslint: 10.5.0(jiti@2.7.0)
+ typescript: 5.9.3
transitivePeerDependencies:
- - '@firebase/app-types'
- - encoding
- supports-color
- optional: true
- firebase@10.14.1:
- dependencies:
- '@firebase/analytics': 0.10.8(@firebase/app@0.10.13)
- '@firebase/analytics-compat': 0.2.14(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)
- '@firebase/app': 0.10.13
- '@firebase/app-check': 0.8.8(@firebase/app@0.10.13)
- '@firebase/app-check-compat': 0.3.15(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)
- '@firebase/app-compat': 0.2.43
- '@firebase/app-types': 0.9.2
- '@firebase/auth': 1.7.9(@firebase/app@0.10.13)
- '@firebase/auth-compat': 0.5.14(@firebase/app-compat@0.2.43)(@firebase/app-types@0.9.2)(@firebase/app@0.10.13)
- '@firebase/data-connect': 0.1.0(@firebase/app@0.10.13)
- '@firebase/database': 1.0.8
- '@firebase/database-compat': 1.0.8
- '@firebase/firestore': 4.7.3(@firebase/app@0.10.13)
- '@firebase/firestore-compat': 0.3.38(@firebase/app-compat@0.2.43)(@firebase/app-types@0.9.2)(@firebase/app@0.10.13)
- '@firebase/functions': 0.11.8(@firebase/app@0.10.13)
- '@firebase/functions-compat': 0.3.14(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)
- '@firebase/installations': 0.6.9(@firebase/app@0.10.13)
- '@firebase/installations-compat': 0.2.9(@firebase/app-compat@0.2.43)(@firebase/app-types@0.9.2)(@firebase/app@0.10.13)
- '@firebase/messaging': 0.12.12(@firebase/app@0.10.13)
- '@firebase/messaging-compat': 0.2.12(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)
- '@firebase/performance': 0.6.9(@firebase/app@0.10.13)
- '@firebase/performance-compat': 0.2.9(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)
- '@firebase/remote-config': 0.4.9(@firebase/app@0.10.13)
- '@firebase/remote-config-compat': 0.2.9(@firebase/app-compat@0.2.43)(@firebase/app@0.10.13)
- '@firebase/storage': 0.13.2(@firebase/app@0.10.13)
- '@firebase/storage-compat': 0.3.12(@firebase/app-compat@0.2.43)(@firebase/app-types@0.9.2)(@firebase/app@0.10.13)
- '@firebase/util': 1.10.0
- '@firebase/vertexai-preview': 0.0.4(@firebase/app-types@0.9.2)(@firebase/app@0.10.13)
+ '@typescript-eslint/project-service@8.62.0(typescript@5.9.3)':
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.62.0
+ debug: 4.4.3
+ typescript: 5.9.3
transitivePeerDependencies:
- - '@react-native-async-storage/async-storage'
+ - supports-color
- firebaseui@6.1.0(firebase@10.14.1):
+ '@typescript-eslint/scope-manager@8.62.0':
dependencies:
- dialog-polyfill: 0.4.10
- firebase: 10.14.1
- material-design-lite: 1.3.0
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/visitor-keys': 8.62.0
- flat-cache@3.1.1:
+ '@typescript-eslint/tsconfig-utils@8.62.0(typescript@5.9.3)':
dependencies:
- flatted: 3.2.9
- keyv: 4.5.3
- rimraf: 3.0.2
+ typescript: 5.9.3
- flat@5.0.2: {}
+ '@typescript-eslint/type-utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/typescript-estree': 8.62.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ debug: 4.4.3
+ eslint: 10.5.0(jiti@2.7.0)
+ ts-api-utils: 2.5.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- flatted@3.2.9: {}
+ '@typescript-eslint/types@8.62.0': {}
- flush-write-stream@1.1.1:
+ '@typescript-eslint/typescript-estree@8.62.0(typescript@5.9.3)':
dependencies:
- inherits: 2.0.4
- readable-stream: 2.3.8
+ '@typescript-eslint/project-service': 8.62.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/visitor-keys': 8.62.0
+ debug: 4.4.3
+ minimatch: 10.2.5
+ semver: 7.8.5
+ tinyglobby: 0.2.17
+ ts-api-utils: 2.5.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- follow-redirects@1.15.11: {}
+ '@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0))
+ '@typescript-eslint/scope-manager': 8.62.0
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/typescript-estree': 8.62.0(typescript@5.9.3)
+ eslint: 10.5.0(jiti@2.7.0)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- for-each@0.3.3:
+ '@typescript-eslint/visitor-keys@8.62.0':
dependencies:
- is-callable: 1.2.7
+ '@typescript-eslint/types': 8.62.0
+ eslint-visitor-keys: 5.0.1
- for-in@1.0.2: {}
+ '@ungap/structured-clone@1.3.2': {}
- foreground-child@3.3.1:
+ '@unhead/bundler@3.1.7(@oxc-project/types@0.143.0)(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(lightningcss@1.33.0)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(unhead@3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
dependencies:
- cross-spawn: 7.0.6
- signal-exit: 4.1.0
+ '@vitejs/devtools-kit': 0.3.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ magic-string: 0.30.21
+ oxc-parser: 0.137.0
+ oxc-walker: 1.1.1(@oxc-project/types@0.143.0)(oxc-parser@0.137.0)(rolldown@1.2.3)
+ ufo: 1.6.4
+ unhead: 3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ optionalDependencies:
+ esbuild: 0.25.12
+ lightningcss: 1.33.0
+ rolldown: 1.2.3
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@modelcontextprotocol/sdk'
+ - '@oxc-project/types'
+ - '@rspack/core'
+ - bufferutil
+ - bun-types-no-globals
+ - crossws
+ - rollup
+ - typescript
+ - unloader
+ - utf-8-validate
- fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.1)(typescript@4.9.5)(vue-template-compiler@2.7.16)(webpack@5.102.0):
+ '@unhead/bundler@3.3.1(@oxc-project/types@0.143.0)(esbuild@0.25.12)(lightningcss@1.33.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
dependencies:
- '@babel/code-frame': 7.22.13
- '@types/json-schema': 7.0.15
- chalk: 4.1.2
- chokidar: 3.5.3
- cosmiconfig: 6.0.0
- deepmerge: 4.3.1
- fs-extra: 9.1.0
- glob: 7.2.3
- memfs: 3.5.3
- minimatch: 3.1.2
- schema-utils: 2.7.0
- semver: 7.7.2
- tapable: 1.1.3
- typescript: 4.9.5
- webpack: 5.102.0
+ magic-string: 1.1.0
+ oxc-walker: 1.1.1(@oxc-project/types@0.143.0)(oxc-parser@0.138.0)(rolldown@1.2.3)
+ unhead: 3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
optionalDependencies:
- eslint: 8.57.1
- vue-template-compiler: 2.7.16
+ esbuild: 0.25.12
+ lightningcss: 1.33.0
+ oxc-parser: 0.138.0
+ rolldown: 1.2.3
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@oxc-project/types'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - rollup
+ - unloader
- form-data@4.0.4:
+ '@unhead/vue@2.1.17(vue@3.5.34(typescript@5.9.3))':
dependencies:
- asynckit: 0.4.0
- combined-stream: 1.0.8
- es-set-tostringtag: 2.1.0
- hasown: 2.0.2
- mime-types: 2.1.35
-
- fraction.js@4.3.7: {}
+ hookable: 6.1.1
+ unhead: 2.1.17
+ vue: 3.5.34(typescript@5.9.3)
- fragment-cache@0.2.1:
+ '@unhead/vue@3.3.1(@oxc-project/types@0.143.0)(esbuild@0.25.12)(lightningcss@1.33.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))':
dependencies:
- map-cache: 0.2.2
-
- fresh@0.5.2: {}
+ '@unhead/bundler': 3.3.1(@oxc-project/types@0.143.0)(esbuild@0.25.12)(lightningcss@1.33.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ hookable: 6.1.1
+ unhead: 3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ vue: 3.5.34(typescript@5.9.3)
+ optionalDependencies:
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@oxc-project/types'
+ - '@rspack/core'
+ - '@unhead/cli'
+ - '@vitejs/devtools-kit'
+ - bun-types-no-globals
+ - esbuild
+ - lightningcss
+ - oxc-parser
+ - rolldown
+ - rollup
+ - unloader
- from2@2.3.0:
+ '@unhead/vue@3.3.1(@oxc-project/types@0.143.0)(esbuild@0.25.12)(lightningcss@1.33.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))':
dependencies:
- inherits: 2.0.4
- readable-stream: 2.3.8
+ '@unhead/bundler': 3.3.1(@oxc-project/types@0.143.0)(esbuild@0.25.12)(lightningcss@1.33.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(unhead@3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ hookable: 6.1.1
+ unhead: 3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ vue: 3.5.41(typescript@5.9.3)
+ optionalDependencies:
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@oxc-project/types'
+ - '@rspack/core'
+ - '@unhead/cli'
+ - '@vitejs/devtools-kit'
+ - bun-types-no-globals
+ - esbuild
+ - lightningcss
+ - oxc-parser
+ - rolldown
+ - rollup
+ - unloader
- fs-extra@11.2.0:
+ '@unocss/config@66.7.4':
dependencies:
- graceful-fs: 4.2.11
- jsonfile: 6.1.0
- universalify: 2.0.0
+ '@unocss/core': 66.7.4
+ colorette: 2.0.20
+ consola: 3.4.2
+ unconfig: 7.5.0
- fs-extra@8.1.0:
- dependencies:
- graceful-fs: 4.2.11
- jsonfile: 4.0.0
- universalify: 0.1.2
+ '@unocss/core@66.7.4': {}
- fs-extra@9.1.0:
- dependencies:
- at-least-node: 1.0.0
- graceful-fs: 4.2.11
- jsonfile: 6.1.0
- universalify: 2.0.0
+ '@unrs/resolver-binding-android-arm-eabi@1.12.2':
+ optional: true
- fs-memo@1.2.0: {}
+ '@unrs/resolver-binding-android-arm64@1.12.2':
+ optional: true
- fs-minipass@2.1.0:
- dependencies:
- minipass: 3.3.6
+ '@unrs/resolver-binding-darwin-arm64@1.12.2':
+ optional: true
- fs-monkey@1.0.5: {}
+ '@unrs/resolver-binding-darwin-x64@1.12.2':
+ optional: true
- fs-write-stream-atomic@1.0.10:
- dependencies:
- graceful-fs: 4.2.11
- iferr: 0.1.5
- imurmurhash: 0.1.4
- readable-stream: 2.3.8
+ '@unrs/resolver-binding-freebsd-x64@1.12.2':
+ optional: true
- fs.realpath@1.0.0: {}
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2':
+ optional: true
- fsevents@1.2.13:
- dependencies:
- bindings: 1.5.0
- nan: 2.18.0
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2':
optional: true
- fsevents@2.3.3:
+ '@unrs/resolver-binding-linux-arm64-gnu@1.12.2':
optional: true
- function-bind@1.1.1: {}
+ '@unrs/resolver-binding-linux-arm64-musl@1.12.2':
+ optional: true
- function-bind@1.1.2: {}
+ '@unrs/resolver-binding-linux-loong64-gnu@1.12.2':
+ optional: true
- function.prototype.name@1.1.6:
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
- functions-have-names: 1.2.3
+ '@unrs/resolver-binding-linux-loong64-musl@1.12.2':
+ optional: true
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2':
+ optional: true
+
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2':
+ optional: true
+
+ '@unrs/resolver-binding-linux-riscv64-musl@1.12.2':
+ optional: true
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.12.2':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.12.2':
+ optional: true
- functional-red-black-tree@1.0.1:
+ '@unrs/resolver-binding-linux-x64-musl@1.12.2':
optional: true
- functions-have-names@1.2.3: {}
+ '@unrs/resolver-binding-openharmony-arm64@1.12.2':
+ optional: true
- gaxios@4.3.3:
+ '@unrs/resolver-binding-wasm32-wasi@1.12.2':
dependencies:
- abort-controller: 3.0.0
- extend: 3.0.2
- https-proxy-agent: 5.0.1
- is-stream: 2.0.1
- node-fetch: 2.7.0
- transitivePeerDependencies:
- - encoding
- - supports-color
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ optional: true
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.12.2':
+ optional: true
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.12.2':
+ optional: true
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.12.2':
optional: true
- gcp-metadata@4.3.1:
+ '@valibot/to-json-schema@1.7.1(valibot@1.4.1(typescript@5.9.3))':
+ dependencies:
+ valibot: 1.4.1(typescript@5.9.3)
+
+ '@vercel/nft@1.10.2(rollup@4.62.4)':
dependencies:
- gaxios: 4.3.3
- json-bigint: 1.0.0
+ '@mapbox/node-pre-gyp': 2.0.3
+ '@rollup/pluginutils': 5.4.0(rollup@4.62.4)
+ acorn: 8.18.0
+ acorn-import-attributes: 1.9.5(acorn@8.18.0)
+ async-sema: 3.1.1
+ bindings: 1.5.0
+ estree-walker: 2.0.2
+ glob: 13.0.6
+ graceful-fs: 4.2.11
+ node-gyp-build: 4.8.4
+ picomatch: 4.0.5
+ resolve-from: 5.0.0
transitivePeerDependencies:
- encoding
+ - rollup
- supports-color
- optional: true
- gensync@1.0.0-beta.2: {}
+ '@vitejs/devtools-kit@0.3.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))':
+ dependencies:
+ '@devframes/hub': 0.5.4(devframe@0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ birpc: 4.0.0
+ devframe: 0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ mlly: 1.8.2
+ nostics: 1.2.0
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ tinyexec: 1.3.0
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@modelcontextprotocol/sdk'
+ - '@rspack/core'
+ - bufferutil
+ - bun-types-no-globals
+ - crossws
+ - esbuild
+ - rolldown
+ - rollup
+ - typescript
+ - unloader
+ - utf-8-validate
+ - webpack
- get-caller-file@2.0.5: {}
+ '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))':
+ dependencies:
+ '@babel/core': 7.29.7
+ '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
+ '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7)
+ '@rolldown/pluginutils': 1.0.1
+ '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7)
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ vue: 3.5.41(typescript@5.9.3)
+ transitivePeerDependencies:
+ - supports-color
- get-east-asian-width@1.3.0: {}
+ '@vitejs/plugin-vue@6.0.8(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))':
+ dependencies:
+ '@rolldown/pluginutils': 1.0.1
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ vue: 3.5.41(typescript@5.9.3)
- get-intrinsic@1.2.1:
+ '@vue-macros/common@3.1.2(vue@3.5.34(typescript@5.9.3))':
dependencies:
- function-bind: 1.1.2
- has: 1.0.3
- has-proto: 1.0.1
- has-symbols: 1.0.3
+ '@vue/compiler-sfc': 3.5.41
+ ast-kit: 2.2.0
+ local-pkg: 1.2.1
+ magic-string-ast: 1.0.3
+ unplugin-utils: 0.3.1
+ optionalDependencies:
+ vue: 3.5.34(typescript@5.9.3)
- get-intrinsic@1.3.0:
+ '@vue-macros/common@3.1.4(vue@3.5.41(typescript@5.9.3))':
dependencies:
- call-bind-apply-helpers: 1.0.2
- es-define-property: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- function-bind: 1.1.2
- get-proto: 1.0.1
- gopd: 1.2.0
- has-symbols: 1.1.0
- hasown: 2.0.2
- math-intrinsics: 1.1.0
+ '@vue/compiler-sfc': 3.5.41
+ ast-kit: 2.2.0
+ local-pkg: 1.2.1
+ magic-string-ast: 1.0.3
+ unplugin-utils: 0.3.2
+ optionalDependencies:
+ vue: 3.5.41(typescript@5.9.3)
- get-package-type@0.1.0: {}
+ '@vue/babel-helper-vue-transform-on@2.0.1': {}
- get-port-please@2.6.1:
+ '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7)':
dependencies:
- fs-memo: 1.2.0
+ '@babel/helper-module-imports': 7.29.7
+ '@babel/helper-plugin-utils': 7.29.7
+ '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
+ '@babel/template': 7.29.7
+ '@babel/traverse': 7.29.8
+ '@babel/types': 7.29.8
+ '@vue/babel-helper-vue-transform-on': 2.0.1
+ '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7)
+ '@vue/shared': 3.5.41
+ optionalDependencies:
+ '@babel/core': 7.29.7
+ transitivePeerDependencies:
+ - supports-color
- get-proto@1.0.1:
+ '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7)':
dependencies:
- dunder-proto: 1.0.1
- es-object-atoms: 1.1.1
+ '@babel/code-frame': 7.29.7
+ '@babel/core': 7.29.7
+ '@babel/helper-module-imports': 7.29.7
+ '@babel/helper-plugin-utils': 7.29.7
+ '@babel/parser': 7.29.8
+ '@vue/compiler-sfc': 3.5.41
+ transitivePeerDependencies:
+ - supports-color
- get-stream@6.0.1: {}
+ '@vue/compiler-core@3.5.34':
+ dependencies:
+ '@babel/parser': 7.29.7
+ '@vue/shared': 3.5.34
+ entities: 7.0.1
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
- get-stream@8.0.1: {}
+ '@vue/compiler-core@3.5.39':
+ dependencies:
+ '@babel/parser': 7.29.8
+ '@vue/shared': 3.5.39
+ entities: 7.0.1
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
- get-symbol-description@1.0.0:
+ '@vue/compiler-core@3.5.41':
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.3.0
+ '@babel/parser': 7.29.8
+ '@vue/shared': 3.5.41
+ entities: 7.0.1
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
- get-tsconfig@4.7.2:
+ '@vue/compiler-dom@3.5.34':
dependencies:
- resolve-pkg-maps: 1.0.0
+ '@vue/compiler-core': 3.5.34
+ '@vue/shared': 3.5.34
- get-value@2.0.6: {}
+ '@vue/compiler-dom@3.5.39':
+ dependencies:
+ '@vue/compiler-core': 3.5.39
+ '@vue/shared': 3.5.39
- giget@1.1.2:
+ '@vue/compiler-dom@3.5.41':
dependencies:
- colorette: 2.0.20
- defu: 6.1.4
- https-proxy-agent: 5.0.1
- mri: 1.2.0
- node-fetch-native: 1.6.7
- pathe: 1.1.2
- tar: 6.2.0
- transitivePeerDependencies:
- - supports-color
+ '@vue/compiler-core': 3.5.41
+ '@vue/shared': 3.5.41
- giget@1.2.3:
+ '@vue/compiler-sfc@3.5.34':
dependencies:
- citty: 0.1.6
- consola: 3.2.3
- defu: 6.1.4
- node-fetch-native: 1.6.7
- nypm: 0.3.9
- ohash: 1.1.4
- pathe: 1.1.2
- tar: 6.2.0
+ '@babel/parser': 7.29.7
+ '@vue/compiler-core': 3.5.34
+ '@vue/compiler-dom': 3.5.34
+ '@vue/compiler-ssr': 3.5.34
+ '@vue/shared': 3.5.34
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ postcss: 8.5.15
+ source-map-js: 1.2.1
- git-config-path@2.0.0: {}
+ '@vue/compiler-sfc@3.5.39':
+ dependencies:
+ '@babel/parser': 7.29.7
+ '@vue/compiler-core': 3.5.39
+ '@vue/compiler-dom': 3.5.39
+ '@vue/compiler-ssr': 3.5.39
+ '@vue/shared': 3.5.39
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ postcss: 8.5.26
+ source-map-js: 1.2.1
- git-raw-commits@4.0.0:
+ '@vue/compiler-sfc@3.5.41':
dependencies:
- dargs: 8.1.0
- meow: 12.1.1
- split2: 4.2.0
+ '@babel/parser': 7.29.8
+ '@vue/compiler-core': 3.5.41
+ '@vue/compiler-dom': 3.5.41
+ '@vue/compiler-ssr': 3.5.41
+ '@vue/shared': 3.5.41
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ postcss: 8.5.26
+ source-map-js: 1.2.1
- git-up@7.0.0:
+ '@vue/compiler-ssr@3.5.34':
dependencies:
- is-ssh: 1.4.0
- parse-url: 8.1.0
+ '@vue/compiler-dom': 3.5.34
+ '@vue/shared': 3.5.34
- git-url-parse@13.1.1:
+ '@vue/compiler-ssr@3.5.39':
dependencies:
- git-up: 7.0.0
+ '@vue/compiler-dom': 3.5.39
+ '@vue/shared': 3.5.39
- glob-parent@3.1.0:
+ '@vue/compiler-ssr@3.5.41':
dependencies:
- is-glob: 3.1.0
- path-dirname: 1.0.2
- optional: true
+ '@vue/compiler-dom': 3.5.41
+ '@vue/shared': 3.5.41
- glob-parent@5.1.2:
+ '@vue/devtools-api@7.7.9':
dependencies:
- is-glob: 4.0.3
+ '@vue/devtools-kit': 7.7.9
- glob-parent@6.0.2:
+ '@vue/devtools-api@8.1.2':
dependencies:
- is-glob: 4.0.3
+ '@vue/devtools-kit': 8.1.2
- glob-to-regexp@0.4.1: {}
+ '@vue/devtools-api@8.2.1':
+ dependencies:
+ '@vue/devtools-kit': 8.2.1
- glob@10.4.5:
+ '@vue/devtools-core@8.2.1(vue@3.5.41(typescript@5.9.3))':
dependencies:
- foreground-child: 3.3.1
- jackspeak: 3.4.3
- minimatch: 9.0.5
- minipass: 7.1.2
- package-json-from-dist: 1.0.1
- path-scurry: 1.11.1
+ '@vue/devtools-kit': 8.2.1
+ '@vue/devtools-shared': 8.2.1
+ vue: 3.5.41(typescript@5.9.3)
- glob@7.2.3:
+ '@vue/devtools-kit@7.7.9':
dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
+ '@vue/devtools-shared': 7.7.9
+ birpc: 2.9.0
+ hookable: 5.5.3
+ mitt: 3.0.1
+ perfect-debounce: 1.0.0
+ speakingurl: 14.0.1
+ superjson: 2.2.6
- glob@8.1.0:
+ '@vue/devtools-kit@8.1.2':
dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 5.1.6
- once: 1.4.0
+ '@vue/devtools-shared': 8.1.2
+ birpc: 2.9.0
+ hookable: 5.5.3
+ perfect-debounce: 2.1.0
- global-directory@4.0.1:
+ '@vue/devtools-kit@8.2.1':
dependencies:
- ini: 4.1.1
+ '@vue/devtools-shared': 8.2.1
+ birpc: 2.9.0
+ hookable: 5.5.3
+ perfect-debounce: 2.1.0
- global-modules@2.0.0:
+ '@vue/devtools-shared@7.7.9':
dependencies:
- global-prefix: 3.0.0
+ rfdc: 1.4.1
- global-prefix@3.0.0:
+ '@vue/devtools-shared@8.1.2': {}
+
+ '@vue/devtools-shared@8.2.1': {}
+
+ '@vue/reactivity@3.5.34':
dependencies:
- ini: 1.3.8
- kind-of: 6.0.3
- which: 1.3.1
+ '@vue/shared': 3.5.34
- globals@11.12.0: {}
+ '@vue/reactivity@3.5.41':
+ dependencies:
+ '@vue/shared': 3.5.41
- globals@13.24.0:
+ '@vue/runtime-core@3.5.34':
dependencies:
- type-fest: 0.20.2
+ '@vue/reactivity': 3.5.34
+ '@vue/shared': 3.5.34
- globals@9.18.0: {}
+ '@vue/runtime-core@3.5.41':
+ dependencies:
+ '@vue/reactivity': 3.5.41
+ '@vue/shared': 3.5.41
- globalthis@1.0.3:
+ '@vue/runtime-dom@3.5.34':
dependencies:
- define-properties: 1.2.1
+ '@vue/reactivity': 3.5.34
+ '@vue/runtime-core': 3.5.34
+ '@vue/shared': 3.5.34
+ csstype: 3.2.3
- globby@11.1.0:
+ '@vue/runtime-dom@3.5.41':
dependencies:
- array-union: 2.1.0
- dir-glob: 3.0.1
- fast-glob: 3.3.1
- ignore: 5.3.1
- merge2: 1.4.1
- slash: 3.0.0
+ '@vue/reactivity': 3.5.41
+ '@vue/runtime-core': 3.5.41
+ '@vue/shared': 3.5.41
+ csstype: 3.2.3
- globby@13.2.2:
+ '@vue/server-renderer@3.5.34(vue@3.5.34(typescript@5.9.3))':
dependencies:
- dir-glob: 3.0.1
- fast-glob: 3.3.1
- ignore: 5.3.1
- merge2: 1.4.1
- slash: 4.0.0
+ '@vue/compiler-ssr': 3.5.34
+ '@vue/shared': 3.5.34
+ vue: 3.5.34(typescript@5.9.3)
- globby@14.0.2:
+ '@vue/server-renderer@3.5.41':
dependencies:
- '@sindresorhus/merge-streams': 2.3.0
- fast-glob: 3.3.2
- ignore: 5.3.1
- path-type: 5.0.0
- slash: 5.1.0
- unicorn-magic: 0.1.0
+ '@vue/compiler-ssr': 3.5.41
+ '@vue/runtime-dom': 3.5.41
+ '@vue/shared': 3.5.41
- globjoin@0.1.4: {}
+ '@vue/shared@3.5.34': {}
+
+ '@vue/shared@3.5.39': {}
- google-auth-library@7.14.1:
+ '@vue/shared@3.5.41': {}
+
+ '@vuetify/loader-shared@2.1.2(vue@3.5.34(typescript@5.9.3))(vuetify@4.0.7)':
dependencies:
- arrify: 2.0.1
- base64-js: 1.5.1
- ecdsa-sig-formatter: 1.0.11
- fast-text-encoding: 1.0.6
- gaxios: 4.3.3
- gcp-metadata: 4.3.1
- gtoken: 5.3.2
- jws: 4.0.0
- lru-cache: 6.0.0
- transitivePeerDependencies:
- - encoding
- - supports-color
- optional: true
+ upath: 2.0.1
+ vue: 3.5.34(typescript@5.9.3)
+ vuetify: 4.0.7(typescript@5.9.3)(vite-plugin-vuetify@2.1.3)(vue@3.5.34(typescript@5.9.3))
- google-gax@2.30.5:
+ '@vueuse/core@10.11.1(vue@3.5.34(typescript@5.9.3))':
dependencies:
- '@grpc/grpc-js': 1.6.12
- '@grpc/proto-loader': 0.6.13
- '@types/long': 4.0.2
- abort-controller: 3.0.0
- duplexify: 4.1.2
- fast-text-encoding: 1.0.6
- google-auth-library: 7.14.1
- is-stream-ended: 0.1.4
- node-fetch: 2.7.0
- object-hash: 3.0.0
- proto3-json-serializer: 0.1.9
- protobufjs: 6.11.3
- retry-request: 4.2.2
+ '@types/web-bluetooth': 0.0.20
+ '@vueuse/metadata': 10.11.1
+ '@vueuse/shared': 10.11.1(vue@3.5.34(typescript@5.9.3))
+ vue-demi: 0.14.10(vue@3.5.34(typescript@5.9.3))
transitivePeerDependencies:
- - encoding
- - supports-color
- optional: true
+ - '@vue/composition-api'
+ - vue
- google-p12-pem@3.1.4:
+ '@vueuse/core@14.3.0(vue@3.5.34(typescript@5.9.3))':
dependencies:
- node-forge: 1.3.1
- optional: true
+ '@types/web-bluetooth': 0.0.21
+ '@vueuse/metadata': 14.3.0
+ '@vueuse/shared': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ vue: 3.5.34(typescript@5.9.3)
- gopd@1.0.1:
+ '@vueuse/integrations@14.3.0(change-case@5.4.4)(fuse.js@7.5.0)(qrcode@1.5.4)(vue@3.5.34(typescript@5.9.3))':
dependencies:
- get-intrinsic: 1.3.0
-
- gopd@1.2.0: {}
+ '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ '@vueuse/shared': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ vue: 3.5.34(typescript@5.9.3)
+ optionalDependencies:
+ change-case: 5.4.4
+ fuse.js: 7.5.0
+ qrcode: 1.5.4
- graceful-fs@4.2.11: {}
+ '@vueuse/metadata@10.11.1': {}
- graphemer@1.4.0: {}
+ '@vueuse/metadata@14.3.0': {}
- gtoken@5.3.2:
+ '@vueuse/nuxt@14.3.0(d41a3947a020e9f1740412568023ae47)':
dependencies:
- gaxios: 4.3.3
- google-p12-pem: 3.1.4
- jws: 4.0.0
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ '@vueuse/metadata': 14.3.0
+ local-pkg: 1.2.1
+ nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0)
+ vue: 3.5.34(typescript@5.9.3)
transitivePeerDependencies:
- - encoding
- - supports-color
- optional: true
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
- gzip-size@6.0.0:
+ '@vueuse/shared@10.11.1(vue@3.5.34(typescript@5.9.3))':
dependencies:
- duplexer: 0.1.2
+ vue-demi: 0.14.10(vue@3.5.34(typescript@5.9.3))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
- handlebars@4.7.8:
+ '@vueuse/shared@14.3.0(vue@3.5.34(typescript@5.9.3))':
dependencies:
- minimist: 1.2.8
- neo-async: 2.6.2
- source-map: 0.6.1
- wordwrap: 1.0.0
- optionalDependencies:
- uglify-js: 3.19.3
+ vue: 3.5.34(typescript@5.9.3)
- hard-rejection@2.1.0: {}
+ abbrev@3.0.1: {}
- hard-source-webpack-plugin@0.13.1(webpack@4.47.0):
+ abort-controller@3.0.0:
dependencies:
- chalk: 2.4.2
- find-cache-dir: 2.1.0
- graceful-fs: 4.2.11
- lodash: 4.17.21
- mkdirp: 0.5.6
- node-object-hash: 1.4.2
- parse-json: 4.0.0
- pkg-dir: 3.0.0
- rimraf: 2.7.1
- semver: 5.7.2
- tapable: 1.1.3
- webpack: 4.47.0
- webpack-sources: 1.4.3
- write-json-file: 2.3.0
+ event-target-shim: 5.0.1
- has-ansi@2.0.0:
+ acorn-import-attributes@1.9.5(acorn@8.18.0):
dependencies:
- ansi-regex: 2.1.1
-
- has-bigints@1.0.2: {}
+ acorn: 8.18.0
- has-flag@3.0.0: {}
-
- has-flag@4.0.0: {}
+ acorn-jsx@5.3.2(acorn@8.16.0):
+ dependencies:
+ acorn: 8.16.0
- has-property-descriptors@1.0.0:
+ acorn-jsx@5.3.2(acorn@8.18.0):
dependencies:
- get-intrinsic: 1.3.0
+ acorn: 8.18.0
- has-proto@1.0.1: {}
+ acorn@8.16.0: {}
- has-symbols@1.0.3: {}
+ acorn@8.18.0: {}
- has-symbols@1.1.0: {}
+ agent-base@7.1.4: {}
- has-tostringtag@1.0.2:
+ ajv@6.15.0:
dependencies:
- has-symbols: 1.1.0
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
- has-value@0.3.1:
+ ajv@8.20.0:
dependencies:
- get-value: 2.0.6
- has-values: 0.1.4
- isobject: 2.1.0
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.2
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
- has-value@1.0.0:
+ ansi-escapes@7.3.0:
dependencies:
- get-value: 2.0.6
- has-values: 1.0.0
- isobject: 3.0.1
+ environment: 1.1.0
- has-values@0.1.4: {}
+ ansi-regex@5.0.1: {}
- has-values@1.0.0:
- dependencies:
- is-number: 3.0.0
- kind-of: 4.0.0
+ ansi-regex@6.2.2: {}
- has@1.0.3:
+ ansi-styles@4.3.0:
dependencies:
- function-bind: 1.1.1
+ color-convert: 2.0.1
- hash-base@3.1.0:
- dependencies:
- inherits: 2.0.4
- readable-stream: 3.6.2
- safe-buffer: 5.2.1
+ ansi-styles@6.2.3: {}
- hash-stream-validation@0.2.4:
- optional: true
+ ansis@4.3.0: {}
- hash-sum@1.0.2: {}
+ ansis@4.3.1: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.2
- hash-sum@2.0.0: {}
+ anynum@1.0.1: {}
- hash.js@1.1.7:
+ archiver-utils@5.0.2:
dependencies:
- inherits: 2.0.4
- minimalistic-assert: 1.0.1
+ glob: 10.5.0
+ graceful-fs: 4.2.11
+ is-stream: 2.0.1
+ lazystream: 1.0.1
+ lodash: 4.18.1
+ normalize-path: 3.0.0
+ readable-stream: 4.7.0
- hasown@2.0.2:
+ archiver@7.0.1:
dependencies:
- function-bind: 1.1.2
+ archiver-utils: 5.0.2
+ async: 3.2.6
+ buffer-crc32: 1.0.0
+ readable-stream: 4.7.0
+ readdir-glob: 1.1.3
+ tar-stream: 3.2.0
+ zip-stream: 6.0.1
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - react-native-b4a
- he@1.2.0: {}
+ are-docs-informative@0.0.2: {}
- highlight.js@11.11.1: {}
+ argparse@2.0.1: {}
- hmac-drbg@1.0.1:
+ aria-hidden@1.2.6:
dependencies:
- hash.js: 1.1.7
- minimalistic-assert: 1.0.1
- minimalistic-crypto-utils: 1.0.1
-
- hookable@4.4.1: {}
+ tslib: 2.8.1
- hookable@5.5.3: {}
+ array-ify@1.0.0: {}
- hosted-git-info@2.8.9: {}
+ ast-kit@2.2.0:
+ dependencies:
+ '@babel/parser': 7.29.7
+ pathe: 2.0.3
- hosted-git-info@4.1.0:
+ ast-walker-scope@0.8.3:
dependencies:
- lru-cache: 6.0.0
+ '@babel/parser': 7.29.7
+ ast-kit: 2.2.0
- html-encoding-sniffer@4.0.0:
+ ast-walker-scope@0.9.0:
dependencies:
- whatwg-encoding: 3.1.1
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
+ ast-kit: 2.2.0
- html-entities@2.4.0: {}
+ astral-regex@2.0.0: {}
- html-escaper@2.0.2: {}
+ async-sema@3.1.1: {}
- html-minifier-terser@5.1.1:
- dependencies:
- camel-case: 4.1.2
- clean-css: 4.2.4
- commander: 4.1.1
- he: 1.2.0
- param-case: 3.0.4
- relateurl: 0.2.7
- terser: 4.8.1
+ async@3.2.6: {}
- html-minifier-terser@7.2.0:
+ autoprefixer@10.5.4(postcss@8.5.26):
dependencies:
- camel-case: 4.1.2
- clean-css: 5.3.3
- commander: 10.0.1
- entities: 4.5.0
- param-case: 3.0.4
- relateurl: 0.2.7
- terser: 5.44.0
+ browserslist: 4.28.7
+ caniuse-lite: 1.0.30001809
+ fraction.js: 5.3.4
+ picocolors: 1.1.1
+ postcss: 8.5.26
+ postcss-value-parser: 4.2.0
- html-tags@2.0.0: {}
+ awesome-phonenumber@7.8.0: {}
- html-tags@3.3.1: {}
+ b4a@1.8.1: {}
- html-webpack-plugin@4.5.2(webpack@4.47.0):
- dependencies:
- '@types/html-minifier-terser': 5.1.2
- '@types/tapable': 1.0.9
- '@types/webpack': 4.41.38
- html-minifier-terser: 5.1.1
- loader-utils: 1.4.2
- lodash: 4.17.21
- pretty-error: 2.1.2
- tapable: 1.1.3
- util.promisify: 1.0.0
- webpack: 4.47.0
+ balanced-match@1.0.2: {}
- htmlparser2@6.1.0:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 4.3.1
- domutils: 2.8.0
- entities: 2.2.0
+ balanced-match@4.0.4: {}
- htmlparser2@8.0.2:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- domutils: 3.1.0
- entities: 4.5.0
+ bare-events@2.9.1: {}
- http-errors@2.0.0:
+ bare-fs@4.8.0:
dependencies:
- depd: 2.0.0
- inherits: 2.0.4
- setprototypeof: 1.2.0
- statuses: 2.0.1
- toidentifier: 1.0.1
+ bare-events: 2.9.1
+ bare-path: 3.1.1
+ bare-stream: 2.13.3(bare-events@2.9.1)
+ bare-url: 2.5.1
+ fast-fifo: 1.3.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
- http-parser-js@0.5.8: {}
+ bare-path@3.1.1: {}
- http-proxy-agent@5.0.0:
+ bare-stream@2.13.3(bare-events@2.9.1):
dependencies:
- '@tootallnate/once': 2.0.0
- agent-base: 6.0.2
- debug: 4.4.3
+ b4a: 1.8.1
+ streamx: 2.28.0
+ teex: 1.0.1
+ optionalDependencies:
+ bare-events: 2.9.1
transitivePeerDependencies:
- - supports-color
- optional: true
+ - react-native-b4a
- http-proxy-agent@7.0.2:
+ bare-url@2.5.1:
dependencies:
- agent-base: 7.1.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
+ bare-path: 3.1.1
- https-browserify@1.0.0: {}
+ base64-js@1.5.1: {}
- https-proxy-agent@5.0.1:
- dependencies:
- agent-base: 6.0.2
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
+ baseline-browser-mapping@2.11.12: {}
- https-proxy-agent@7.0.6:
+ bindings@1.5.0:
dependencies:
- agent-base: 7.1.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
+ file-uri-to-path: 1.0.0
- human-signals@2.1.0: {}
+ birpc@2.9.0: {}
- human-signals@5.0.0: {}
+ birpc@4.0.0: {}
- hyperdyperid@1.2.0: {}
+ boolbase@1.0.0: {}
- iconv-lite@0.4.24:
+ brace-expansion@2.1.4:
dependencies:
- safer-buffer: 2.1.2
+ balanced-match: 1.0.2
- iconv-lite@0.6.3:
+ brace-expansion@5.0.6:
dependencies:
- safer-buffer: 2.1.2
+ balanced-match: 4.0.4
- icss-utils@5.1.0(postcss@8.4.39):
+ brace-expansion@5.0.9:
dependencies:
- postcss: 8.4.39
-
- idb@7.1.1: {}
+ balanced-match: 4.0.4
- ieee754@1.2.1: {}
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
- iferr@0.1.5: {}
+ browserslist@4.28.7:
+ dependencies:
+ baseline-browser-mapping: 2.11.12
+ caniuse-lite: 1.0.30001809
+ electron-to-chromium: 1.5.402
+ node-releases: 2.0.53
+ update-browserslist-db: 1.3.0(browserslist@4.28.7)
- ignore@5.2.4: {}
+ buffer-crc32@1.0.0: {}
- ignore@5.3.1: {}
+ buffer-from@1.1.2: {}
- import-fresh@3.3.0:
+ buffer@6.0.3:
dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
+ base64-js: 1.5.1
+ ieee754: 1.2.1
- import-fresh@3.3.1:
+ builtin-modules@5.2.0: {}
+
+ bundle-name@4.1.0:
dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
+ run-applescript: 7.1.0
- import-lazy@4.0.0: {}
+ bundle-require@5.1.0(esbuild@0.25.12):
+ dependencies:
+ esbuild: 0.25.12
+ load-tsconfig: 0.2.5
- import-local@3.2.0:
+ c12@3.3.4(magicast@0.5.3):
dependencies:
- pkg-dir: 4.2.0
- resolve-cwd: 3.0.0
+ chokidar: 5.0.0
+ confbox: 0.2.4
+ defu: 6.1.7
+ dotenv: 17.4.2
+ exsolve: 1.1.1
+ giget: 3.3.1
+ jiti: 2.7.0
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.1
+ rc9: 3.0.1
+ optionalDependencies:
+ magicast: 0.5.3
+
+ c12@3.3.4(magicast@0.5.4):
+ dependencies:
+ chokidar: 5.0.0
+ confbox: 0.2.4
+ defu: 6.1.7
+ dotenv: 17.4.2
+ exsolve: 1.1.1
+ giget: 3.3.1
+ jiti: 2.7.0
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.1
+ rc9: 3.0.1
+ optionalDependencies:
+ magicast: 0.5.4
- import-meta-resolve@4.2.0: {}
+ cac@6.7.14:
+ optional: true
- imurmurhash@0.1.4: {}
+ cac@7.0.0: {}
- indent-string@4.0.0: {}
+ cacheable@2.3.5:
+ dependencies:
+ '@cacheable/memory': 2.0.9
+ '@cacheable/utils': 2.4.1
+ hookified: 1.15.1
+ keyv: 5.6.0
+ qified: 0.10.1
- indent-string@5.0.0: {}
+ callsites@3.1.0: {}
- infer-owner@1.0.4: {}
+ camelcase@5.3.1: {}
- inflight@1.0.6:
+ caniuse-api@4.0.0:
dependencies:
- once: 1.4.0
- wrappy: 1.0.2
+ browserslist: 4.28.7
+ caniuse-lite: 1.0.30001809
- inherits@2.0.3: {}
+ caniuse-lite@1.0.30001809: {}
- inherits@2.0.4: {}
+ ccount@2.0.1: {}
- ini@1.3.8: {}
+ change-case@5.4.4: {}
- ini@4.1.1: {}
+ character-entities-html4@2.1.0: {}
- inquirer@7.3.3:
- dependencies:
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- cli-cursor: 3.1.0
- cli-width: 3.0.0
- external-editor: 3.1.0
- figures: 3.2.0
- lodash: 4.17.21
- mute-stream: 0.0.8
- run-async: 2.4.1
- rxjs: 6.6.7
- string-width: 4.2.3
- strip-ansi: 6.0.1
- through: 2.3.8
+ character-entities-legacy@3.0.0: {}
- internal-slot@1.0.5:
+ chart.js@4.5.1:
dependencies:
- get-intrinsic: 1.3.0
- has: 1.0.3
- side-channel: 1.0.4
+ '@kurkle/color': 0.3.4
- invariant@2.2.4:
+ chartjs-adapter-moment@1.0.1(chart.js@4.5.1)(moment@2.30.1):
dependencies:
- loose-envify: 1.4.0
-
- ip@2.0.1: {}
+ chart.js: 4.5.1
+ moment: 2.30.1
- is-accessor-descriptor@0.1.6:
+ chokidar@5.0.0:
dependencies:
- kind-of: 3.2.2
+ readdirp: 5.1.1
- is-accessor-descriptor@1.0.0:
- dependencies:
- kind-of: 6.0.3
+ chownr@3.0.0: {}
- is-array-buffer@3.0.2:
+ chrome-launcher@1.2.1:
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.3.0
- is-typed-array: 1.1.12
+ '@types/node': 25.9.1
+ escape-string-regexp: 4.0.0
+ is-wsl: 2.2.0
+ lighthouse-logger: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
- is-arrayish@0.2.1: {}
+ ci-info@4.4.0: {}
- is-bigint@1.0.4:
+ citty@0.1.6:
dependencies:
- has-bigints: 1.0.2
+ consola: 3.4.2
- is-binary-path@1.0.1:
- dependencies:
- binary-extensions: 1.13.1
- optional: true
+ citty@0.2.2: {}
- is-binary-path@2.1.0:
+ cli-cursor@5.0.0:
dependencies:
- binary-extensions: 2.2.0
+ restore-cursor: 5.1.0
- is-boolean-object@1.1.2:
+ cli-truncate@5.2.0:
dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.2
-
- is-buffer@1.1.6: {}
+ slice-ansi: 8.0.0
+ string-width: 8.2.1
- is-builtin-module@3.2.1:
+ cliui@6.0.0:
dependencies:
- builtin-modules: 3.3.0
-
- is-callable@1.2.7: {}
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 6.2.0
- is-core-module@2.13.0:
+ cliui@8.0.1:
dependencies:
- has: 1.0.3
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
- is-data-descriptor@0.1.4:
+ cliui@9.0.1:
dependencies:
- kind-of: 3.2.2
+ string-width: 7.2.0
+ strip-ansi: 7.2.0
+ wrap-ansi: 9.0.2
- is-data-descriptor@1.0.0:
- dependencies:
- kind-of: 6.0.3
+ cluster-key-slot@1.1.1: {}
- is-date-object@1.0.5:
+ color-convert@2.0.1:
dependencies:
- has-tostringtag: 1.0.2
+ color-name: 1.1.4
- is-descriptor@0.1.6:
- dependencies:
- is-accessor-descriptor: 0.1.6
- is-data-descriptor: 0.1.4
- kind-of: 5.1.0
+ color-name@1.1.4: {}
- is-descriptor@1.0.2:
- dependencies:
- is-accessor-descriptor: 1.0.0
- is-data-descriptor: 1.0.0
- kind-of: 6.0.3
+ colord@2.9.3: {}
- is-extendable@0.1.1: {}
+ colorette@2.0.20: {}
- is-extendable@1.0.1:
- dependencies:
- is-plain-object: 2.0.4
+ colortranslator@5.0.0: {}
- is-extglob@2.1.1: {}
+ comma-separated-tokens@2.0.3: {}
- is-fullwidth-code-point@3.0.0: {}
+ commander@11.1.0: {}
- is-fullwidth-code-point@4.0.0: {}
+ commander@2.20.3: {}
- is-fullwidth-code-point@5.0.0:
- dependencies:
- get-east-asian-width: 1.3.0
+ comment-parser@1.4.7: {}
- is-generator-fn@2.1.0: {}
+ commondir@1.0.1: {}
- is-glob@3.1.0:
+ compare-func@2.0.0:
dependencies:
- is-extglob: 2.1.1
- optional: true
+ array-ify: 1.0.0
+ dot-prop: 5.3.0
- is-glob@4.0.3:
+ compatx@0.2.0: {}
+
+ compress-commons@6.0.2:
dependencies:
- is-extglob: 2.1.1
+ crc-32: 1.2.2
+ crc32-stream: 6.0.0
+ is-stream: 2.0.1
+ normalize-path: 3.0.0
+ readable-stream: 4.7.0
- is-https@2.0.2: {}
+ confbox@0.1.8: {}
+
+ confbox@0.2.4: {}
- is-negative-zero@2.0.2: {}
+ consola@3.4.2: {}
- is-number-object@1.0.7:
+ conventional-changelog-angular@8.3.1:
dependencies:
- has-tostringtag: 1.0.2
+ compare-func: 2.0.0
- is-number@3.0.0:
+ conventional-changelog-conventionalcommits@9.3.1:
dependencies:
- kind-of: 3.2.2
+ compare-func: 2.0.0
- is-number@7.0.0: {}
+ conventional-commits-parser@6.4.0:
+ dependencies:
+ '@simple-libs/stream-utils': 1.2.0
+ meow: 13.2.0
- is-obj@2.0.0: {}
+ convert-source-map@2.0.0: {}
- is-path-inside@3.0.3: {}
+ cookie-es@1.2.3: {}
- is-plain-obj@1.1.0: {}
+ cookie-es@2.0.1: {}
- is-plain-object@2.0.4:
+ cookie-es@3.1.1: {}
+
+ copy-anything@4.0.5:
dependencies:
- isobject: 3.0.1
+ is-what: 5.5.0
- is-plain-object@5.0.0: {}
+ core-js-compat@3.49.0:
+ dependencies:
+ browserslist: 4.28.7
- is-potential-custom-element-name@1.0.1: {}
+ core-util-is@1.0.3: {}
- is-regex@1.1.4:
+ cosmiconfig-typescript-loader@6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.2(typescript@5.9.3))(typescript@5.9.3):
dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.2
+ '@types/node': 25.9.1
+ cosmiconfig: 9.0.2(typescript@5.9.3)
+ jiti: 2.6.1
+ typescript: 5.9.3
- is-shared-array-buffer@1.0.2:
+ cosmiconfig@9.0.2(typescript@5.9.3):
dependencies:
- call-bind: 1.0.2
+ env-paths: 2.2.1
+ import-fresh: 3.3.1
+ js-yaml: 4.2.0
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 5.9.3
- is-ssh@1.4.0:
- dependencies:
- protocols: 2.0.1
+ countries-list@3.3.0: {}
- is-stream-ended@0.1.4:
- optional: true
+ crc-32@1.2.2: {}
- is-stream@2.0.1: {}
+ crc32-stream@6.0.0:
+ dependencies:
+ crc-32: 1.2.2
+ readable-stream: 4.7.0
- is-stream@3.0.0: {}
+ croner@10.0.1: {}
- is-string@1.0.7:
+ cross-spawn@7.0.6:
dependencies:
- has-tostringtag: 1.0.2
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
- is-symbol@1.0.4:
+ crossws@0.3.5:
dependencies:
- has-symbols: 1.1.0
+ uncrypto: 0.1.3
- is-text-path@2.0.0:
- dependencies:
- text-extensions: 2.4.0
+ crossws@0.4.10(srvx@0.11.22):
+ optionalDependencies:
+ srvx: 0.11.22
- is-typed-array@1.1.12:
- dependencies:
- which-typed-array: 1.1.11
+ css-functions-list@3.3.3: {}
- is-typedarray@1.0.0:
- optional: true
+ css-select@5.2.2:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.2.2
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ nth-check: 2.1.1
- is-weakref@1.0.2:
+ css-tree@2.2.1:
dependencies:
- call-bind: 1.0.2
+ mdn-data: 2.0.28
+ source-map-js: 1.2.1
- is-whitespace@0.3.0: {}
+ css-tree@3.2.1:
+ dependencies:
+ mdn-data: 2.27.1
+ source-map-js: 1.2.1
- is-windows@1.0.2: {}
+ css-what@6.2.2: {}
- is-wsl@1.1.0: {}
+ cssesc@3.0.0: {}
- isarray@1.0.0: {}
+ cssnano-preset-default@8.0.4(postcss@8.5.26):
+ dependencies:
+ browserslist: 4.28.7
+ cssnano-utils: 6.0.2(postcss@8.5.26)
+ postcss: 8.5.26
+ postcss-calc: 10.1.1(postcss@8.5.26)
+ postcss-colormin: 8.0.2(postcss@8.5.26)
+ postcss-convert-values: 8.0.2(postcss@8.5.26)
+ postcss-discard-comments: 8.0.2(postcss@8.5.26)
+ postcss-discard-duplicates: 8.0.2(postcss@8.5.26)
+ postcss-discard-empty: 8.0.2(postcss@8.5.26)
+ postcss-discard-overridden: 8.0.2(postcss@8.5.26)
+ postcss-merge-longhand: 8.0.2(postcss@8.5.26)
+ postcss-merge-rules: 8.0.2(postcss@8.5.26)
+ postcss-minify-font-values: 8.0.2(postcss@8.5.26)
+ postcss-minify-gradients: 8.0.2(postcss@8.5.26)
+ postcss-minify-params: 8.0.2(postcss@8.5.26)
+ postcss-minify-selectors: 8.0.3(postcss@8.5.26)
+ postcss-normalize-charset: 8.0.2(postcss@8.5.26)
+ postcss-normalize-display-values: 8.0.2(postcss@8.5.26)
+ postcss-normalize-positions: 8.0.2(postcss@8.5.26)
+ postcss-normalize-repeat-style: 8.0.2(postcss@8.5.26)
+ postcss-normalize-string: 8.0.2(postcss@8.5.26)
+ postcss-normalize-timing-functions: 8.0.2(postcss@8.5.26)
+ postcss-normalize-unicode: 8.0.2(postcss@8.5.26)
+ postcss-normalize-url: 8.0.2(postcss@8.5.26)
+ postcss-normalize-whitespace: 8.0.2(postcss@8.5.26)
+ postcss-ordered-values: 8.0.2(postcss@8.5.26)
+ postcss-reduce-initial: 8.0.2(postcss@8.5.26)
+ postcss-reduce-transforms: 8.0.2(postcss@8.5.26)
+ postcss-svgo: 8.0.3(postcss@8.5.26)
+ postcss-unique-selectors: 8.0.2(postcss@8.5.26)
+
+ cssnano-utils@6.0.2(postcss@8.5.26):
+ dependencies:
+ postcss: 8.5.26
+
+ cssnano@8.0.4(postcss@8.5.26):
+ dependencies:
+ cssnano-preset-default: 8.0.4(postcss@8.5.26)
+ lilconfig: 3.1.3
+ postcss: 8.5.26
- isarray@2.0.5: {}
+ csso@5.0.5:
+ dependencies:
+ css-tree: 2.2.1
- isexe@2.0.0: {}
+ csstype@3.2.3: {}
- isobject@2.1.0:
- dependencies:
- isarray: 1.0.0
+ culori@4.0.2: {}
- isobject@3.0.1: {}
+ date-fns@4.3.0: {}
- istanbul-lib-coverage@3.2.2: {}
+ db0@0.3.4: {}
- istanbul-lib-instrument@6.0.3:
+ debug@4.4.3:
dependencies:
- '@babel/core': 7.28.4
- '@babel/parser': 7.28.4
- '@istanbuljs/schema': 0.1.3
- istanbul-lib-coverage: 3.2.2
- semver: 7.7.2
- transitivePeerDependencies:
- - supports-color
+ ms: 2.1.3
- istanbul-lib-report@3.0.1:
- dependencies:
- istanbul-lib-coverage: 3.2.2
- make-dir: 4.0.0
- supports-color: 7.2.0
+ decamelize@1.2.0: {}
- istanbul-lib-source-maps@5.0.6:
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- debug: 4.4.3
- istanbul-lib-coverage: 3.2.2
- transitivePeerDependencies:
- - supports-color
+ deep-is@0.1.4: {}
- istanbul-reports@3.2.0:
- dependencies:
- html-escaper: 2.0.2
- istanbul-lib-report: 3.0.1
+ deepmerge@4.3.1: {}
- jackspeak@3.4.3:
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
+ default-browser-id@5.0.1: {}
- jake@10.9.4:
+ default-browser@5.5.0:
dependencies:
- async: 3.2.6
- filelist: 1.0.4
- picocolors: 1.1.1
- optional: true
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.1
- jest-changed-files@30.2.0:
- dependencies:
- execa: 5.1.1
- jest-util: 30.2.0
- p-limit: 3.1.0
+ define-lazy-prop@3.0.0: {}
- jest-circus@30.2.0:
- dependencies:
- '@jest/environment': 30.2.0
- '@jest/expect': 30.2.0
- '@jest/test-result': 30.2.0
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- chalk: 4.1.2
- co: 4.6.0
- dedent: 1.7.0
- is-generator-fn: 2.1.0
- jest-each: 30.2.0
- jest-matcher-utils: 30.2.0
- jest-message-util: 30.2.0
- jest-runtime: 30.2.0
- jest-snapshot: 30.2.0
- jest-util: 30.2.0
- p-limit: 3.1.0
- pretty-format: 30.2.0
- pure-rand: 7.0.1
- slash: 3.0.0
- stack-utils: 2.0.6
- transitivePeerDependencies:
- - babel-plugin-macros
- - supports-color
+ defu@6.1.7: {}
- jest-cli@30.2.0(@types/node@24.6.2):
- dependencies:
- '@jest/core': 30.2.0
- '@jest/test-result': 30.2.0
- '@jest/types': 30.2.0
- chalk: 4.1.2
- exit-x: 0.2.2
- import-local: 3.2.0
- jest-config: 30.2.0(@types/node@24.6.2)
- jest-util: 30.2.0
- jest-validate: 30.2.0
- yargs: 17.7.2
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - esbuild-register
- - supports-color
- - ts-node
-
- jest-config@30.2.0(@types/node@24.6.2):
- dependencies:
- '@babel/core': 7.28.4
- '@jest/get-type': 30.1.0
- '@jest/pattern': 30.0.1
- '@jest/test-sequencer': 30.2.0
- '@jest/types': 30.2.0
- babel-jest: 30.2.0(@babel/core@7.28.4)
- chalk: 4.1.2
- ci-info: 4.3.0
- deepmerge: 4.3.1
- glob: 10.4.5
- graceful-fs: 4.2.11
- jest-circus: 30.2.0
- jest-docblock: 30.2.0
- jest-environment-node: 30.2.0
- jest-regex-util: 30.0.1
- jest-resolve: 30.2.0
- jest-runner: 30.2.0
- jest-util: 30.2.0
- jest-validate: 30.2.0
- micromatch: 4.0.8
- parse-json: 5.2.0
- pretty-format: 30.2.0
- slash: 3.0.0
- strip-json-comments: 3.1.1
- optionalDependencies:
- '@types/node': 24.6.2
- transitivePeerDependencies:
- - babel-plugin-macros
- - supports-color
+ denque@2.1.0: {}
+
+ depd@2.0.0: {}
- jest-diff@30.2.0:
- dependencies:
- '@jest/diff-sequences': 30.0.1
- '@jest/get-type': 30.1.0
- chalk: 4.1.2
- pretty-format: 30.2.0
+ dequal@2.0.3: {}
- jest-docblock@30.2.0:
- dependencies:
- detect-newline: 3.1.0
+ destr@2.0.5: {}
- jest-each@30.2.0:
- dependencies:
- '@jest/get-type': 30.1.0
- '@jest/types': 30.2.0
- chalk: 4.1.2
- jest-util: 30.2.0
- pretty-format: 30.2.0
+ detect-indent@7.0.2: {}
+
+ detect-libc@2.1.2: {}
- jest-environment-jsdom@30.2.0:
+ devalue@5.9.0: {}
+
+ devframe@0.5.4(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
dependencies:
- '@jest/environment': 30.2.0
- '@jest/environment-jsdom-abstract': 30.2.0(jsdom@26.1.0)
- '@types/jsdom': 21.1.7
- '@types/node': 24.6.2
- jsdom: 26.1.0
+ '@valibot/to-json-schema': 1.7.1(valibot@1.4.1(typescript@5.9.3))
+ birpc: 4.0.0
+ cac: 7.0.0
+ h3: 2.0.1-rc.22(crossws@0.4.10(srvx@0.11.22))
+ mrmime: 2.0.1
+ nostics: 0.2.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ pathe: 2.0.3
+ valibot: 1.4.1(typescript@5.9.3)
+ ws: 8.21.3
transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
- bufferutil
- - supports-color
+ - bun-types-no-globals
+ - crossws
+ - esbuild
+ - rolldown
+ - rollup
+ - typescript
+ - unloader
- utf-8-validate
+ - vite
+ - webpack
- jest-environment-node@30.2.0:
+ devlop@1.1.0:
dependencies:
- '@jest/environment': 30.2.0
- '@jest/fake-timers': 30.2.0
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- jest-mock: 30.2.0
- jest-util: 30.2.0
- jest-validate: 30.2.0
+ dequal: 2.0.3
- jest-haste-map@30.2.0:
- dependencies:
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- anymatch: 3.1.3
- fb-watchman: 2.0.2
- graceful-fs: 4.2.11
- jest-regex-util: 30.0.1
- jest-util: 30.2.0
- jest-worker: 30.2.0
- micromatch: 4.0.8
- walker: 1.0.8
- optionalDependencies:
- fsevents: 2.3.3
+ diff@8.0.4: {}
- jest-leak-detector@30.2.0:
- dependencies:
- '@jest/get-type': 30.1.0
- pretty-format: 30.2.0
+ diff@9.0.0: {}
- jest-matcher-utils@30.2.0:
- dependencies:
- '@jest/get-type': 30.1.0
- chalk: 4.1.2
- jest-diff: 30.2.0
- pretty-format: 30.2.0
+ dijkstrajs@1.0.3: {}
- jest-message-util@30.2.0:
+ dom-serializer@2.0.0:
dependencies:
- '@babel/code-frame': 7.27.1
- '@jest/types': 30.2.0
- '@types/stack-utils': 2.0.3
- chalk: 4.1.2
- graceful-fs: 4.2.11
- micromatch: 4.0.8
- pretty-format: 30.2.0
- slash: 3.0.0
- stack-utils: 2.0.6
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
- jest-mock@30.2.0:
- dependencies:
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- jest-util: 30.2.0
+ domelementtype@2.3.0: {}
- jest-pnp-resolver@1.2.3(jest-resolve@30.2.0):
- optionalDependencies:
- jest-resolve: 30.2.0
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
- jest-regex-util@30.0.1: {}
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
- jest-resolve-dependencies@30.2.0:
+ dot-prop@10.2.0:
dependencies:
- jest-regex-util: 30.0.1
- jest-snapshot: 30.2.0
- transitivePeerDependencies:
- - supports-color
+ type-fest: 5.8.0
- jest-resolve@30.2.0:
+ dot-prop@5.3.0:
dependencies:
- chalk: 4.1.2
- graceful-fs: 4.2.11
- jest-haste-map: 30.2.0
- jest-pnp-resolver: 1.2.3(jest-resolve@30.2.0)
- jest-util: 30.2.0
- jest-validate: 30.2.0
- slash: 3.0.0
- unrs-resolver: 1.11.1
-
- jest-runner@30.2.0:
- dependencies:
- '@jest/console': 30.2.0
- '@jest/environment': 30.2.0
- '@jest/test-result': 30.2.0
- '@jest/transform': 30.2.0
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- chalk: 4.1.2
- emittery: 0.13.1
- exit-x: 0.2.2
- graceful-fs: 4.2.11
- jest-docblock: 30.2.0
- jest-environment-node: 30.2.0
- jest-haste-map: 30.2.0
- jest-leak-detector: 30.2.0
- jest-message-util: 30.2.0
- jest-resolve: 30.2.0
- jest-runtime: 30.2.0
- jest-util: 30.2.0
- jest-watcher: 30.2.0
- jest-worker: 30.2.0
- p-limit: 3.1.0
- source-map-support: 0.5.13
- transitivePeerDependencies:
- - supports-color
+ is-obj: 2.0.0
- jest-runtime@30.2.0:
- dependencies:
- '@jest/environment': 30.2.0
- '@jest/fake-timers': 30.2.0
- '@jest/globals': 30.2.0
- '@jest/source-map': 30.0.1
- '@jest/test-result': 30.2.0
- '@jest/transform': 30.2.0
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- chalk: 4.1.2
- cjs-module-lexer: 2.1.0
- collect-v8-coverage: 1.0.2
- glob: 10.4.5
- graceful-fs: 4.2.11
- jest-haste-map: 30.2.0
- jest-message-util: 30.2.0
- jest-mock: 30.2.0
- jest-regex-util: 30.0.1
- jest-resolve: 30.2.0
- jest-snapshot: 30.2.0
- jest-util: 30.2.0
- slash: 3.0.0
- strip-bom: 4.0.0
- transitivePeerDependencies:
- - supports-color
+ dotenv@17.4.2: {}
- jest-snapshot@30.2.0:
- dependencies:
- '@babel/core': 7.28.4
- '@babel/generator': 7.28.3
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4)
- '@babel/types': 7.28.4
- '@jest/expect-utils': 30.2.0
- '@jest/get-type': 30.1.0
- '@jest/snapshot-utils': 30.2.0
- '@jest/transform': 30.2.0
- '@jest/types': 30.2.0
- babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4)
- chalk: 4.1.2
- expect: 30.2.0
- graceful-fs: 4.2.11
- jest-diff: 30.2.0
- jest-matcher-utils: 30.2.0
- jest-message-util: 30.2.0
- jest-util: 30.2.0
- pretty-format: 30.2.0
- semver: 7.7.2
- synckit: 0.11.11
- transitivePeerDependencies:
- - supports-color
+ duplexer@0.1.2: {}
- jest-util@29.7.0:
- dependencies:
- '@jest/types': 29.6.3
- '@types/node': 24.6.2
- chalk: 4.1.2
- ci-info: 3.9.0
- graceful-fs: 4.2.11
- picomatch: 2.3.1
+ eastasianwidth@0.2.0: {}
+
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.402: {}
- jest-util@30.2.0:
+ embla-carousel-auto-height@8.6.0(embla-carousel@8.6.0):
dependencies:
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- chalk: 4.1.2
- ci-info: 4.3.0
- graceful-fs: 4.2.11
- picomatch: 4.0.3
+ embla-carousel: 8.6.0
- jest-validate@30.2.0:
+ embla-carousel-auto-scroll@8.6.0(embla-carousel@8.6.0):
dependencies:
- '@jest/get-type': 30.1.0
- '@jest/types': 30.2.0
- camelcase: 6.3.0
- chalk: 4.1.2
- leven: 3.1.0
- pretty-format: 30.2.0
+ embla-carousel: 8.6.0
- jest-watcher@30.2.0:
+ embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0):
dependencies:
- '@jest/test-result': 30.2.0
- '@jest/types': 30.2.0
- '@types/node': 24.6.2
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- emittery: 0.13.1
- jest-util: 30.2.0
- string-length: 4.0.2
+ embla-carousel: 8.6.0
- jest-worker@26.6.2:
+ embla-carousel-class-names@8.6.0(embla-carousel@8.6.0):
dependencies:
- '@types/node': 24.6.2
- merge-stream: 2.0.0
- supports-color: 7.2.0
+ embla-carousel: 8.6.0
- jest-worker@27.5.1:
+ embla-carousel-fade@8.6.0(embla-carousel@8.6.0):
dependencies:
- '@types/node': 24.6.2
- merge-stream: 2.0.0
- supports-color: 8.1.1
+ embla-carousel: 8.6.0
- jest-worker@29.7.0:
+ embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0):
dependencies:
- '@types/node': 24.6.2
- jest-util: 29.7.0
- merge-stream: 2.0.0
- supports-color: 8.1.1
+ embla-carousel: 8.6.0
- jest-worker@30.2.0:
+ embla-carousel-vue@8.6.0(vue@3.5.34(typescript@5.9.3)):
dependencies:
- '@types/node': 24.6.2
- '@ungap/structured-clone': 1.3.0
- jest-util: 30.2.0
- merge-stream: 2.0.0
- supports-color: 8.1.1
+ embla-carousel: 8.6.0
+ embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0)
+ vue: 3.5.34(typescript@5.9.3)
- jest@30.2.0(@types/node@24.6.2):
+ embla-carousel-wheel-gestures@8.1.0(embla-carousel@8.6.0):
dependencies:
- '@jest/core': 30.2.0
- '@jest/types': 30.2.0
- import-local: 3.2.0
- jest-cli: 30.2.0(@types/node@24.6.2)
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - esbuild-register
- - supports-color
- - ts-node
+ embla-carousel: 8.6.0
+ wheel-gestures: 2.2.48
- jiti@1.20.0: {}
+ embla-carousel@8.6.0: {}
- jiti@1.21.0: {}
+ emoji-regex@10.6.0: {}
- jiti@1.21.6: {}
+ emoji-regex@8.0.0: {}
- jiti@2.6.1: {}
+ emoji-regex@9.2.2: {}
- jose@2.0.7:
- dependencies:
- '@panva/asn1.js': 1.0.0
- optional: true
+ encodeurl@2.0.0: {}
- js-beautify@1.14.9:
+ enhanced-resolve@5.21.6:
dependencies:
- config-chain: 1.1.13
- editorconfig: 1.0.4
- glob: 8.1.0
- nopt: 6.0.0
+ graceful-fs: 4.2.11
+ tapable: 2.3.3
- js-tokens@3.0.2: {}
+ entities@4.5.0: {}
- js-tokens@4.0.0: {}
+ entities@7.0.1: {}
- js-tokens@9.0.0: {}
+ env-paths@2.2.1: {}
- js-yaml@3.14.1:
- dependencies:
- argparse: 1.0.10
- esprima: 4.0.1
+ environment@1.1.0: {}
- js-yaml@4.1.0:
+ error-ex@1.3.4:
dependencies:
- argparse: 2.0.1
+ is-arrayish: 0.2.1
- jsdom@26.1.0:
- dependencies:
- cssstyle: 4.6.0
- data-urls: 5.0.0
- decimal.js: 10.6.0
- html-encoding-sniffer: 4.0.0
- http-proxy-agent: 7.0.2
- https-proxy-agent: 7.0.6
- is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.22
- parse5: 7.3.0
- rrweb-cssom: 0.8.0
- saxes: 6.0.0
- symbol-tree: 3.2.4
- tough-cookie: 5.1.2
- w3c-xmlserializer: 5.0.0
- webidl-conversions: 7.0.0
- whatwg-encoding: 3.1.1
- whatwg-mimetype: 4.0.0
- whatwg-url: 14.2.0
- ws: 8.18.3
- xml-name-validator: 5.0.0
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
+ error-stack-parser-es@1.0.5: {}
- jsesc@0.5.0: {}
+ error-stack-parser-es@2.0.1: {}
- jsesc@2.5.2: {}
+ errx@0.1.2: {}
- jsesc@3.1.0: {}
+ es-errors@1.3.0: {}
- json-bigint@1.0.0:
- dependencies:
- bignumber.js: 9.1.2
- optional: true
+ es-module-lexer@2.3.1: {}
- json-buffer@3.0.1: {}
+ es-toolkit@1.48.1: {}
- json-parse-better-errors@1.0.2: {}
+ esbuild@0.25.12:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.12
+ '@esbuild/android-arm': 0.25.12
+ '@esbuild/android-arm64': 0.25.12
+ '@esbuild/android-x64': 0.25.12
+ '@esbuild/darwin-arm64': 0.25.12
+ '@esbuild/darwin-x64': 0.25.12
+ '@esbuild/freebsd-arm64': 0.25.12
+ '@esbuild/freebsd-x64': 0.25.12
+ '@esbuild/linux-arm': 0.25.12
+ '@esbuild/linux-arm64': 0.25.12
+ '@esbuild/linux-ia32': 0.25.12
+ '@esbuild/linux-loong64': 0.25.12
+ '@esbuild/linux-mips64el': 0.25.12
+ '@esbuild/linux-ppc64': 0.25.12
+ '@esbuild/linux-riscv64': 0.25.12
+ '@esbuild/linux-s390x': 0.25.12
+ '@esbuild/linux-x64': 0.25.12
+ '@esbuild/netbsd-arm64': 0.25.12
+ '@esbuild/netbsd-x64': 0.25.12
+ '@esbuild/openbsd-arm64': 0.25.12
+ '@esbuild/openbsd-x64': 0.25.12
+ '@esbuild/openharmony-arm64': 0.25.12
+ '@esbuild/sunos-x64': 0.25.12
+ '@esbuild/win32-arm64': 0.25.12
+ '@esbuild/win32-ia32': 0.25.12
+ '@esbuild/win32-x64': 0.25.12
+
+ esbuild@0.27.7:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.7
+ '@esbuild/android-arm': 0.27.7
+ '@esbuild/android-arm64': 0.27.7
+ '@esbuild/android-x64': 0.27.7
+ '@esbuild/darwin-arm64': 0.27.7
+ '@esbuild/darwin-x64': 0.27.7
+ '@esbuild/freebsd-arm64': 0.27.7
+ '@esbuild/freebsd-x64': 0.27.7
+ '@esbuild/linux-arm': 0.27.7
+ '@esbuild/linux-arm64': 0.27.7
+ '@esbuild/linux-ia32': 0.27.7
+ '@esbuild/linux-loong64': 0.27.7
+ '@esbuild/linux-mips64el': 0.27.7
+ '@esbuild/linux-ppc64': 0.27.7
+ '@esbuild/linux-riscv64': 0.27.7
+ '@esbuild/linux-s390x': 0.27.7
+ '@esbuild/linux-x64': 0.27.7
+ '@esbuild/netbsd-arm64': 0.27.7
+ '@esbuild/netbsd-x64': 0.27.7
+ '@esbuild/openbsd-arm64': 0.27.7
+ '@esbuild/openbsd-x64': 0.27.7
+ '@esbuild/openharmony-arm64': 0.27.7
+ '@esbuild/sunos-x64': 0.27.7
+ '@esbuild/win32-arm64': 0.27.7
+ '@esbuild/win32-ia32': 0.27.7
+ '@esbuild/win32-x64': 0.27.7
+
+ esbuild@0.28.1:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.28.1
+ '@esbuild/android-arm': 0.28.1
+ '@esbuild/android-arm64': 0.28.1
+ '@esbuild/android-x64': 0.28.1
+ '@esbuild/darwin-arm64': 0.28.1
+ '@esbuild/darwin-x64': 0.28.1
+ '@esbuild/freebsd-arm64': 0.28.1
+ '@esbuild/freebsd-x64': 0.28.1
+ '@esbuild/linux-arm': 0.28.1
+ '@esbuild/linux-arm64': 0.28.1
+ '@esbuild/linux-ia32': 0.28.1
+ '@esbuild/linux-loong64': 0.28.1
+ '@esbuild/linux-mips64el': 0.28.1
+ '@esbuild/linux-ppc64': 0.28.1
+ '@esbuild/linux-riscv64': 0.28.1
+ '@esbuild/linux-s390x': 0.28.1
+ '@esbuild/linux-x64': 0.28.1
+ '@esbuild/netbsd-arm64': 0.28.1
+ '@esbuild/netbsd-x64': 0.28.1
+ '@esbuild/openbsd-arm64': 0.28.1
+ '@esbuild/openbsd-x64': 0.28.1
+ '@esbuild/openharmony-arm64': 0.28.1
+ '@esbuild/sunos-x64': 0.28.1
+ '@esbuild/win32-arm64': 0.28.1
+ '@esbuild/win32-ia32': 0.28.1
+ '@esbuild/win32-x64': 0.28.1
- json-parse-even-better-errors@2.3.1: {}
+ escalade@3.2.0: {}
- json-schema-traverse@0.4.1: {}
+ escape-html@1.0.3: {}
- json-schema-traverse@1.0.0: {}
+ escape-string-regexp@4.0.0: {}
- json-stable-stringify-without-jsonify@1.0.1: {}
+ escape-string-regexp@5.0.0: {}
- json5@0.5.1: {}
+ eslint-config-flat-gitignore@2.3.0(eslint@10.5.0(jiti@2.7.0)):
+ dependencies:
+ '@eslint/compat': 2.1.0(eslint@10.5.0(jiti@2.7.0))
+ eslint: 10.5.0(jiti@2.7.0)
- json5@1.0.2:
+ eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)):
dependencies:
- minimist: 1.2.8
+ eslint: 10.5.0(jiti@2.7.0)
- json5@2.2.3: {}
+ eslint-flat-config-utils@3.2.0:
+ dependencies:
+ '@eslint/config-helpers': 0.5.5
+ pathe: 2.0.3
- jsonfile@4.0.0:
+ eslint-import-context@0.1.9(unrs-resolver@1.12.2):
+ dependencies:
+ get-tsconfig: 4.14.0
+ stable-hash-x: 0.2.0
optionalDependencies:
- graceful-fs: 4.2.11
+ unrs-resolver: 1.12.2
+
+ eslint-merge-processors@2.0.0(eslint@10.5.0(jiti@2.7.0)):
+ dependencies:
+ eslint: 10.5.0(jiti@2.7.0)
+
+ eslint-plugin-import-lite@0.6.0(eslint@10.5.0(jiti@2.7.0)):
+ dependencies:
+ eslint: 10.5.0(jiti@2.7.0)
- jsonfile@6.1.0:
+ eslint-plugin-import-x@4.17.0(@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0)):
dependencies:
- universalify: 2.0.0
+ '@typescript-eslint/types': 8.62.0
+ comment-parser: 1.4.7
+ debug: 4.4.3
+ eslint: 10.5.0(jiti@2.7.0)
+ eslint-import-context: 0.1.9(unrs-resolver@1.12.2)
+ is-glob: 4.0.3
+ minimatch: 10.2.5
+ semver: 7.8.5
+ stable-hash-x: 0.2.0
+ unrs-resolver: 1.12.2
optionalDependencies:
- graceful-fs: 4.2.11
+ '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-plugin-jsdoc@63.0.7(eslint@10.5.0(jiti@2.7.0)):
+ dependencies:
+ '@es-joy/jsdoccomment': 0.87.0
+ '@es-joy/resolve.exports': 1.2.0
+ are-docs-informative: 0.0.2
+ comment-parser: 1.4.7
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint: 10.5.0(jiti@2.7.0)
+ espree: 11.2.0
+ esquery: 1.7.0
+ html-entities: 2.6.0
+ object-deep-merge: 2.0.1
+ parse-imports-exports: 0.2.4
+ semver: 7.8.5
+ spdx-expression-parse: 4.0.0
+ to-valid-identifier: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
- jsonparse@1.3.1: {}
+ eslint-plugin-regexp@3.1.0(eslint@10.5.0(jiti@2.7.0)):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0))
+ '@eslint-community/regexpp': 4.12.2
+ comment-parser: 1.4.7
+ eslint: 10.5.0(jiti@2.7.0)
+ jsdoc-type-pratt-parser: 7.2.0
+ refa: 0.12.1
+ regexp-ast-analysis: 0.7.1
+ scslre: 0.3.0
+
+ eslint-plugin-unicorn@65.0.1(eslint@10.5.0(jiti@2.7.0)):
+ dependencies:
+ '@babel/helper-validator-identifier': 7.29.7
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0))
+ change-case: 5.4.4
+ ci-info: 4.4.0
+ core-js-compat: 3.49.0
+ detect-indent: 7.0.2
+ eslint: 10.5.0(jiti@2.7.0)
+ find-up-simple: 1.0.1
+ globals: 17.7.0
+ indent-string: 5.0.0
+ is-builtin-module: 5.0.0
+ jsesc: 3.1.0
+ pluralize: 8.0.0
+ regjsparser: 0.13.2
+ semver: 7.8.5
+ strip-indent: 4.1.1
- jsonwebtoken@8.5.1:
+ eslint-plugin-vue@10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.5.0(jiti@2.7.0)))(@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.5.0(jiti@2.7.0))):
dependencies:
- jws: 3.2.2
- lodash.includes: 4.3.0
- lodash.isboolean: 3.0.3
- lodash.isinteger: 4.0.4
- lodash.isnumber: 3.0.3
- lodash.isplainobject: 4.0.6
- lodash.isstring: 4.0.1
- lodash.once: 4.1.1
- ms: 2.1.3
- semver: 5.7.2
- optional: true
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0))
+ eslint: 10.5.0(jiti@2.7.0)
+ natural-compare: 1.4.0
+ nth-check: 2.1.1
+ postcss-selector-parser: 7.1.1
+ semver: 7.8.5
+ vue-eslint-parser: 10.4.1(eslint@10.5.0(jiti@2.7.0))
+ xml-name-validator: 4.0.0
+ optionalDependencies:
+ '@stylistic/eslint-plugin': 5.10.0(eslint@10.5.0(jiti@2.7.0))
+ '@typescript-eslint/parser': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)
- jwa@1.4.1:
+ eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.41)(eslint@10.5.0(jiti@2.7.0)):
dependencies:
- buffer-equal-constant-time: 1.0.1
- ecdsa-sig-formatter: 1.0.11
- safe-buffer: 5.2.1
- optional: true
+ '@vue/compiler-sfc': 3.5.41
+ eslint: 10.5.0(jiti@2.7.0)
- jwa@2.0.0:
+ eslint-scope@9.1.2:
dependencies:
- buffer-equal-constant-time: 1.0.1
- ecdsa-sig-formatter: 1.0.11
- safe-buffer: 5.2.1
- optional: true
+ '@types/esrecurse': 4.3.1
+ '@types/estree': 1.0.9
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-typegen@2.3.1(eslint@10.5.0(jiti@2.7.0)):
+ dependencies:
+ eslint: 10.5.0(jiti@2.7.0)
+ json-schema-to-typescript-lite: 15.0.0
+ ohash: 2.0.11
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.1: {}
- jwks-rsa@2.1.5:
+ eslint-visitor-keys@5.0.1: {}
+
+ eslint@10.5.0(jiti@2.7.0):
dependencies:
- '@types/express': 4.17.18
- '@types/jsonwebtoken': 8.5.9
- debug: 4.4.1
- jose: 2.0.7
- limiter: 1.1.5
- lru-memoizer: 2.2.0
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0))
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.23.5
+ '@eslint/config-helpers': 0.6.0
+ '@eslint/core': 1.2.1
+ '@eslint/plugin-kit': 0.7.2
+ '@humanfs/node': 0.16.8
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.9
+ ajv: 6.15.0
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint-scope: 9.1.2
+ eslint-visitor-keys: 5.0.1
+ espree: 11.2.0
+ esquery: 1.7.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ minimatch: 10.2.5
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.7.0
transitivePeerDependencies:
- supports-color
- optional: true
- jws@3.2.2:
+ espree@10.4.0:
dependencies:
- jwa: 1.4.1
- safe-buffer: 5.2.1
- optional: true
+ acorn: 8.18.0
+ acorn-jsx: 5.3.2(acorn@8.18.0)
+ eslint-visitor-keys: 4.2.1
- jws@4.0.0:
+ espree@11.2.0:
dependencies:
- jwa: 2.0.0
- safe-buffer: 5.2.1
- optional: true
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
+ eslint-visitor-keys: 5.0.1
- keyv@4.5.3:
+ esquery@1.7.0:
dependencies:
- json-buffer: 3.0.1
+ estraverse: 5.3.0
- kind-of@3.2.2:
+ esrecurse@4.3.0:
dependencies:
- is-buffer: 1.1.6
+ estraverse: 5.3.0
- kind-of@4.0.0:
- dependencies:
- is-buffer: 1.1.6
+ estraverse@5.3.0: {}
- kind-of@5.1.0: {}
+ estree-walker@2.0.2: {}
- kind-of@6.0.3: {}
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.9
- klona@2.0.6: {}
+ esutils@2.0.3: {}
- knitwork@1.0.0: {}
+ etag@1.8.1: {}
- knitwork@1.1.0: {}
+ event-target-shim@5.0.1: {}
- known-css-properties@0.29.0: {}
+ eventemitter3@5.0.4: {}
- last-call-webpack-plugin@3.0.0:
+ events-universal@1.0.1:
dependencies:
- lodash: 4.17.21
- webpack-sources: 1.4.3
+ bare-events: 2.9.1
+ transitivePeerDependencies:
+ - bare-abort-controller
+
+ events@3.3.0: {}
- launch-editor-middleware@2.8.0:
+ execa@8.0.1:
dependencies:
- launch-editor: 2.8.0
+ cross-spawn: 7.0.6
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.3.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+
+ exsolve@1.1.1: {}
- launch-editor@2.8.0:
+ fast-deep-equal@3.1.3: {}
+
+ fast-fifo@1.3.2: {}
+
+ fast-glob@3.3.3:
dependencies:
- picocolors: 1.1.1
- shell-quote: 1.8.1
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
- leven@3.1.0: {}
+ fast-json-stable-stringify@2.1.0: {}
- levn@0.4.1:
+ fast-levenshtein@2.0.6: {}
+
+ fast-npm-meta@2.2.0:
dependencies:
- prelude-ls: 1.2.1
- type-check: 0.4.0
+ cac: 7.0.0
- libphonenumber-js@1.12.9: {}
+ fast-string-truncated-width@3.0.3: {}
- lilconfig@2.1.0: {}
+ fast-string-width@3.0.2:
+ dependencies:
+ fast-string-truncated-width: 3.0.3
- lilconfig@3.1.3: {}
+ fast-uri@3.1.2: {}
- limiter@1.1.5:
- optional: true
+ fast-wrap-ansi@0.2.2:
+ dependencies:
+ fast-string-width: 3.0.2
- lines-and-columns@1.2.4: {}
+ fast-xml-builder@1.2.1:
+ dependencies:
+ path-expression-matcher: 1.6.1
+ xml-naming: 0.1.0
- lint-staged@16.1.4:
+ fast-xml-parser@5.9.3:
dependencies:
- chalk: 5.5.0
- commander: 14.0.0
- debug: 4.4.1
- lilconfig: 3.1.3
- listr2: 9.0.1
- micromatch: 4.0.8
- nano-spawn: 1.0.2
- pidtree: 0.6.0
- string-argv: 0.3.2
- yaml: 2.8.1
- transitivePeerDependencies:
- - supports-color
+ '@nodable/entities': 2.2.0
+ fast-xml-builder: 1.2.1
+ is-unsafe: 1.0.1
+ path-expression-matcher: 1.6.1
+ strnum: 2.4.1
+ xml-naming: 0.1.0
+
+ fastest-levenshtein@1.0.16: {}
- listr2@9.0.1:
+ fastq@1.20.1:
dependencies:
- cli-truncate: 4.0.0
- colorette: 2.0.20
- eventemitter3: 5.0.1
- log-update: 6.1.0
- rfdc: 1.4.1
- wrap-ansi: 9.0.0
+ reusify: 1.1.0
- loader-runner@2.4.0: {}
+ faye-websocket@0.11.4:
+ dependencies:
+ websocket-driver: 0.7.4
- loader-runner@4.3.0: {}
+ fdir@6.5.0(picomatch@4.0.5):
+ optionalDependencies:
+ picomatch: 4.0.5
- loader-utils@1.4.2:
+ file-entry-cache@11.1.3:
dependencies:
- big.js: 5.2.2
- emojis-list: 3.0.0
- json5: 1.0.2
+ flat-cache: 6.1.22
- loader-utils@2.0.4:
+ file-entry-cache@8.0.0:
dependencies:
- big.js: 5.2.2
- emojis-list: 3.0.0
- json5: 2.2.3
+ flat-cache: 4.0.1
- local-pkg@0.4.3: {}
+ file-uri-to-path@1.0.0: {}
- local-pkg@0.5.0:
+ fill-range@7.1.1:
dependencies:
- mlly: 1.7.1
- pkg-types: 1.1.2
+ to-regex-range: 5.0.1
+
+ find-up-simple@1.0.1: {}
- locate-path@3.0.0:
+ find-up@4.1.0:
dependencies:
- p-locate: 3.0.0
- path-exists: 3.0.0
+ locate-path: 5.0.0
+ path-exists: 4.0.0
- locate-path@5.0.0:
+ find-up@5.0.0:
dependencies:
- p-locate: 4.1.0
+ locate-path: 6.0.0
+ path-exists: 4.0.0
- locate-path@6.0.0:
+ find-up@8.0.0:
+ dependencies:
+ locate-path: 8.0.0
+ unicorn-magic: 0.3.0
+
+ firebase@12.13.0:
+ dependencies:
+ '@firebase/ai': 2.12.0(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)
+ '@firebase/analytics': 0.10.22(@firebase/app@0.14.12)
+ '@firebase/analytics-compat': 0.2.28(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)
+ '@firebase/app': 0.14.12
+ '@firebase/app-check': 0.11.3(@firebase/app@0.14.12)
+ '@firebase/app-check-compat': 0.4.3(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)
+ '@firebase/app-compat': 0.5.12
+ '@firebase/app-types': 0.9.5
+ '@firebase/auth': 1.13.1(@firebase/app@0.14.12)
+ '@firebase/auth-compat': 0.6.6(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)
+ '@firebase/data-connect': 0.7.0(@firebase/app@0.14.12)
+ '@firebase/database': 1.1.3
+ '@firebase/database-compat': 2.1.4
+ '@firebase/firestore': 4.14.1(@firebase/app@0.14.12)
+ '@firebase/firestore-compat': 0.4.9(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)
+ '@firebase/functions': 0.13.4(@firebase/app@0.14.12)
+ '@firebase/functions-compat': 0.4.4(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)
+ '@firebase/installations': 0.6.22(@firebase/app@0.14.12)
+ '@firebase/installations-compat': 0.2.22(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)
+ '@firebase/messaging': 0.12.26(@firebase/app@0.14.12)
+ '@firebase/messaging-compat': 0.2.26(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)
+ '@firebase/performance': 0.7.12(@firebase/app@0.14.12)
+ '@firebase/performance-compat': 0.2.25(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)
+ '@firebase/remote-config': 0.8.3(@firebase/app@0.14.12)
+ '@firebase/remote-config-compat': 0.2.24(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)
+ '@firebase/storage': 0.14.3(@firebase/app@0.14.12)
+ '@firebase/storage-compat': 0.4.3(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)
+ '@firebase/util': 1.15.1
+ transitivePeerDependencies:
+ - '@react-native-async-storage/async-storage'
+
+ flag-icons@7.5.0: {}
+
+ flat-cache@4.0.1:
dependencies:
- p-locate: 5.0.0
+ flatted: 3.4.2
+ keyv: 4.5.4
- locate-path@7.2.0:
+ flat-cache@6.1.22:
dependencies:
- p-locate: 6.0.0
+ cacheable: 2.3.5
+ flatted: 3.4.2
+ hookified: 1.15.1
- lodash._reinterpolate@3.0.0: {}
+ flatted@3.4.2: {}
- lodash.camelcase@4.3.0: {}
+ fnv1a-64@0.1.2: {}
- lodash.clonedeep@4.5.0:
- optional: true
+ fontaine@0.8.0:
+ dependencies:
+ '@capsizecss/unpack': 4.0.1
+ css-tree: 3.2.1
+ magic-regexp: 0.10.0
+ magic-string: 0.30.21
+ pathe: 2.0.3
+ ufo: 1.6.4
+ unplugin: 2.3.11
+
+ fontkitten@1.0.3:
+ dependencies:
+ tiny-inflate: 1.0.3
- lodash.debounce@4.0.8: {}
+ fontless@0.2.1(db0@0.3.4)(ioredis@5.11.1)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
+ dependencies:
+ consola: 3.4.2
+ css-tree: 3.2.1
+ defu: 6.1.7
+ esbuild: 0.27.7
+ fontaine: 0.8.0
+ jiti: 2.7.0
+ lightningcss: 1.33.0
+ magic-string: 0.30.21
+ ohash: 2.0.11
+ pathe: 2.0.3
+ ufo: 1.6.4
+ unifont: 0.7.4
+ unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1)
+ optionalDependencies:
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - idb-keyval
+ - ioredis
+ - uploadthing
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
- lodash.includes@4.3.0:
- optional: true
+ fraction.js@5.3.4: {}
- lodash.isboolean@3.0.3:
- optional: true
+ framer-motion@12.42.2:
+ dependencies:
+ motion-dom: 12.42.2
+ motion-utils: 12.39.0
+ tslib: 2.8.1
- lodash.isinteger@4.0.4:
- optional: true
+ fresh@2.0.0: {}
- lodash.isnumber@3.0.3:
+ fsevents@2.3.3:
optional: true
- lodash.isplainobject@4.0.6: {}
+ function-bind@1.1.2: {}
- lodash.isstring@4.0.1:
- optional: true
+ fuse.js@7.4.2: {}
- lodash.kebabcase@4.1.1: {}
+ fuse.js@7.5.0: {}
- lodash.memoize@4.1.2: {}
+ fzf@0.5.2: {}
- lodash.merge@4.6.2: {}
+ generic-names@4.0.0:
+ dependencies:
+ loader-utils: 3.3.1
- lodash.mergewith@4.6.2: {}
+ gensync@1.0.0-beta.2: {}
- lodash.once@4.1.1:
- optional: true
+ get-caller-file@2.0.5: {}
- lodash.snakecase@4.1.1: {}
+ get-east-asian-width@1.6.0: {}
- lodash.startcase@4.4.0: {}
+ get-port-please@3.2.0: {}
- lodash.template@4.5.0:
- dependencies:
- lodash._reinterpolate: 3.0.0
- lodash.templatesettings: 4.2.0
+ get-stream@8.0.1: {}
- lodash.templatesettings@4.2.0:
+ get-tsconfig@4.14.0:
dependencies:
- lodash._reinterpolate: 3.0.0
+ resolve-pkg-maps: 1.0.0
- lodash.truncate@4.4.2: {}
+ giget@3.3.1: {}
- lodash.unionby@4.8.0: {}
+ git-raw-commits@5.0.1(conventional-commits-parser@6.4.0):
+ dependencies:
+ '@conventional-changelog/git-client': 2.7.0(conventional-commits-parser@6.4.0)
+ meow: 13.2.0
+ transitivePeerDependencies:
+ - conventional-commits-filter
+ - conventional-commits-parser
- lodash.uniq@4.5.0: {}
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
- lodash.upperfirst@4.3.1: {}
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
- lodash@4.17.21: {}
+ glob@10.5.0:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.9
+ minipass: 7.1.3
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
- log-update@6.1.0:
+ glob@13.0.6:
dependencies:
- ansi-escapes: 7.1.1
- cli-cursor: 5.0.0
- slice-ansi: 7.1.0
- strip-ansi: 7.1.0
- wrap-ansi: 9.0.0
+ minimatch: 10.2.6
+ minipass: 7.1.3
+ path-scurry: 2.0.2
- long@4.0.0:
- optional: true
+ global-directory@4.0.1:
+ dependencies:
+ ini: 4.1.1
- long@5.2.3: {}
+ global-directory@5.0.0:
+ dependencies:
+ ini: 6.0.0
- loose-envify@1.4.0:
+ global-modules@2.0.0:
dependencies:
- js-tokens: 4.0.0
+ global-prefix: 3.0.0
- lower-case@2.0.2:
+ global-prefix@3.0.0:
dependencies:
- tslib: 2.6.2
+ ini: 1.3.8
+ kind-of: 6.0.3
+ which: 1.3.1
- lru-cache@10.4.3: {}
+ globals@17.7.0: {}
- lru-cache@4.0.2:
+ globby@16.2.0:
dependencies:
- pseudomap: 1.0.2
- yallist: 2.1.2
- optional: true
+ '@sindresorhus/merge-streams': 4.0.0
+ fast-glob: 3.3.3
+ ignore: 7.0.6
+ is-path-inside: 4.0.0
+ slash: 5.1.0
+ unicorn-magic: 0.4.0
- lru-cache@4.1.5:
+ globby@16.2.3:
dependencies:
- pseudomap: 1.0.2
- yallist: 2.1.2
+ '@sindresorhus/merge-streams': 4.0.0
+ fast-glob: 3.3.3
+ ignore: 7.0.6
+ is-path-inside: 4.0.0
+ slash: 5.1.0
+ unicorn-magic: 0.4.0
- lru-cache@5.1.1:
- dependencies:
- yallist: 3.1.1
+ globjoin@0.1.4: {}
- lru-cache@6.0.0:
+ google-fonts-helper@3.7.4:
dependencies:
- yallist: 4.0.0
+ deepmerge: 4.3.1
+ hookable: 5.5.3
+ ofetch: 1.5.1
+ ufo: 1.6.4
+
+ graceful-fs@4.2.11: {}
- lru-memoizer@2.2.0:
+ gzip-size@7.0.0:
dependencies:
- lodash.clonedeep: 4.5.0
- lru-cache: 4.0.2
- optional: true
+ duplexer: 0.1.2
- magic-string@0.30.10:
+ h3@1.15.11:
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
+ cookie-es: 1.2.3
+ crossws: 0.3.5
+ defu: 6.1.7
+ destr: 2.0.5
+ iron-webcrypto: 1.2.1
+ node-mock-http: 1.0.5
+ radix3: 1.1.2
+ ufo: 1.6.4
+ uncrypto: 0.1.3
- magic-string@0.30.4:
+ h3@2.0.1-rc.22(crossws@0.4.10(srvx@0.11.22)):
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
+ rou3: 0.8.1
+ srvx: 0.11.22
+ optionalDependencies:
+ crossws: 0.4.10(srvx@0.11.22)
+
+ has-flag@5.0.1: {}
- make-dir@1.3.0:
+ hashery@1.5.1:
dependencies:
- pify: 3.0.0
+ hookified: 1.15.1
- make-dir@2.1.0:
+ hasown@2.0.4:
dependencies:
- pify: 4.0.1
- semver: 5.7.2
+ function-bind: 1.1.2
- make-dir@3.1.0:
+ hast-util-to-html@9.0.5:
dependencies:
- semver: 6.3.1
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.1
+ property-information: 7.2.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
- make-dir@4.0.0:
+ hast-util-whitespace@3.0.0:
dependencies:
- semver: 7.7.2
+ '@types/hast': 3.0.4
- make-error@1.3.6: {}
+ hey-listen@1.0.8: {}
- makeerror@1.0.12:
- dependencies:
- tmpl: 1.0.5
+ highlight.js@11.11.1: {}
- map-cache@0.2.2: {}
+ hookable@5.5.3: {}
- map-obj@1.0.1: {}
+ hookable@6.1.1: {}
- map-obj@4.3.0: {}
+ hookified@1.15.1: {}
- map-visit@1.0.0:
- dependencies:
- object-visit: 1.0.1
+ hookified@2.2.0: {}
- markdown-table@2.0.0:
- dependencies:
- repeat-string: 1.6.1
+ html-entities@2.6.0: {}
- material-design-lite@1.3.0: {}
+ html-tags@5.1.0: {}
- math-intrinsics@1.1.0: {}
+ html-void-elements@3.0.0: {}
- mathml-tag-names@2.1.3: {}
+ htmlparser2@8.0.2:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ entities: 4.5.0
- md5.js@1.3.5:
+ http-errors@2.0.1:
dependencies:
- hash-base: 3.1.0
+ depd: 2.0.0
inherits: 2.0.4
- safe-buffer: 5.2.1
-
- mdn-data@2.0.14: {}
+ setprototypeof: 1.2.0
+ statuses: 2.0.2
+ toidentifier: 1.0.1
- mdn-data@2.0.28: {}
+ http-parser-js@0.5.10: {}
- mdn-data@2.0.30: {}
+ http-shutdown@1.2.2: {}
- memfs@3.5.3:
+ https-proxy-agent@7.0.6:
dependencies:
- fs-monkey: 1.0.5
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
- memfs@4.9.3:
- dependencies:
- '@jsonjoy.com/json-pack': 1.0.4(tslib@2.6.2)
- '@jsonjoy.com/util': 1.2.0(tslib@2.6.2)
- tree-dump: 1.0.2(tslib@2.6.2)
- tslib: 2.6.2
+ httpxy@0.5.5: {}
- memory-fs@0.4.1:
- dependencies:
- errno: 0.1.8
- readable-stream: 2.3.8
+ human-signals@5.0.0: {}
- memory-fs@0.5.0:
- dependencies:
- errno: 0.1.8
- readable-stream: 2.3.8
+ husky@9.1.7: {}
- meow@10.1.5:
- dependencies:
- '@types/minimist': 1.2.3
- camelcase-keys: 7.0.2
- decamelize: 5.0.1
- decamelize-keys: 1.1.1
- hard-rejection: 2.1.0
- minimist-options: 4.1.0
- normalize-package-data: 3.0.3
- read-pkg-up: 8.0.0
- redent: 4.0.0
- trim-newlines: 4.1.1
- type-fest: 1.4.0
- yargs-parser: 20.2.9
+ idb@7.1.1: {}
- meow@12.1.1: {}
+ ieee754@1.2.1: {}
- merge-source-map@1.1.0:
- dependencies:
- source-map: 0.6.1
+ ignore@5.3.2: {}
- merge-stream@2.0.0: {}
+ ignore@7.0.5: {}
- merge2@1.4.1: {}
+ ignore@7.0.6: {}
- micromatch@3.1.10:
- dependencies:
- arr-diff: 4.0.0
- array-unique: 0.3.2
- braces: 2.3.2
- define-property: 2.0.2
- extend-shallow: 3.0.2
- extglob: 2.0.4
- fragment-cache: 0.2.1
- kind-of: 6.0.3
- nanomatch: 1.2.13
- object.pick: 1.3.0
- regex-not: 1.0.2
- snapdragon: 0.8.2
- to-regex: 3.0.2
- transitivePeerDependencies:
- - supports-color
+ image-meta@0.2.2: {}
- micromatch@4.0.5:
- dependencies:
- braces: 3.0.2
- picomatch: 2.3.1
+ image-size@2.0.2: {}
- micromatch@4.0.8:
- dependencies:
- braces: 3.0.3
- picomatch: 2.3.1
+ immutable@5.1.5: {}
- miller-rabin@4.0.1:
+ import-fresh@3.3.1:
dependencies:
- bn.js: 4.12.0
- brorand: 1.1.0
-
- mime-db@1.52.0: {}
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
- mime-db@1.54.0: {}
+ import-meta-resolve@4.2.0: {}
- mime-types@2.1.35:
+ importx@0.5.2:
dependencies:
- mime-db: 1.52.0
+ bundle-require: 5.1.0(esbuild@0.25.12)
+ debug: 4.4.3
+ esbuild: 0.25.12
+ jiti: 2.7.0
+ pathe: 2.0.3
+ tsx: 4.22.3
+ transitivePeerDependencies:
+ - supports-color
- mime@1.6.0: {}
+ impound@1.1.6(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ es-module-lexer: 2.3.1
+ pathe: 2.0.3
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin-utils: 0.3.2
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - rolldown
+ - rollup
+ - unloader
+ - vite
+ - webpack
- mime@2.5.2: {}
+ imurmurhash@0.1.4: {}
- mime@3.0.0:
- optional: true
+ indent-string@5.0.0: {}
- mimic-fn@2.1.0: {}
+ inherits@2.0.4: {}
- mimic-fn@4.0.0: {}
+ ini@1.3.8: {}
- mimic-function@5.0.1: {}
+ ini@4.1.1: {}
- min-indent@1.0.1: {}
+ ini@6.0.0: {}
- minimalistic-assert@1.0.1: {}
+ ioredis@5.11.1:
+ dependencies:
+ '@ioredis/commands': 1.10.0
+ cluster-key-slot: 1.1.1
+ debug: 4.4.3
+ denque: 2.1.0
+ redis-errors: 1.2.0
+ redis-parser: 3.0.0
+ standard-as-callback: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
- minimalistic-crypto-utils@1.0.1: {}
+ iron-webcrypto@1.2.1: {}
- minimatch@3.0.8:
- dependencies:
- brace-expansion: 1.1.11
+ is-arrayish@0.2.1: {}
- minimatch@3.1.2:
+ is-builtin-module@5.0.0:
dependencies:
- brace-expansion: 1.1.11
+ builtin-modules: 5.2.0
- minimatch@5.1.6:
+ is-core-module@2.16.2:
dependencies:
- brace-expansion: 2.0.1
+ hasown: 2.0.4
- minimatch@9.0.1:
- dependencies:
- brace-expansion: 2.0.1
+ is-docker@2.2.1: {}
- minimatch@9.0.5:
- dependencies:
- brace-expansion: 2.0.2
+ is-docker@3.0.0: {}
- minimist-options@4.1.0:
- dependencies:
- arrify: 1.0.1
- is-plain-obj: 1.1.0
- kind-of: 6.0.3
+ is-extglob@2.1.1: {}
- minimist@1.2.8: {}
+ is-fullwidth-code-point@3.0.0: {}
- minipass-collect@1.0.2:
+ is-fullwidth-code-point@5.1.0:
dependencies:
- minipass: 3.3.6
+ get-east-asian-width: 1.6.0
- minipass-flush@1.0.5:
+ is-glob@4.0.3:
dependencies:
- minipass: 3.3.6
+ is-extglob: 2.1.1
- minipass-pipeline@1.2.4:
+ is-in-ssh@1.0.0: {}
+
+ is-inside-container@1.0.0:
dependencies:
- minipass: 3.3.6
+ is-docker: 3.0.0
- minipass@3.3.6:
+ is-installed-globally@1.0.0:
dependencies:
- yallist: 4.0.0
+ global-directory: 4.0.1
+ is-path-inside: 4.0.0
- minipass@5.0.0: {}
+ is-module@1.0.0: {}
- minipass@7.1.2: {}
+ is-number@7.0.0: {}
- minizlib@2.1.2:
- dependencies:
- minipass: 3.3.6
- yallist: 4.0.0
+ is-obj@2.0.0: {}
- mississippi@3.0.0:
- dependencies:
- concat-stream: 1.6.2
- duplexify: 3.7.1
- end-of-stream: 1.4.4
- flush-write-stream: 1.1.1
- from2: 2.3.0
- parallel-transform: 1.2.0
- pump: 3.0.0
- pumpify: 1.5.1
- stream-each: 1.2.3
- through2: 2.0.5
+ is-path-inside@4.0.0: {}
- mixin-deep@1.3.2:
- dependencies:
- for-in: 1.0.2
- is-extendable: 1.0.1
+ is-plain-obj@4.1.0: {}
- mkdirp@0.5.6:
+ is-reference@1.2.1:
dependencies:
- minimist: 1.2.8
-
- mkdirp@1.0.4: {}
+ '@types/estree': 1.0.9
- mlly@1.4.2:
- dependencies:
- acorn: 8.15.0
- pathe: 1.1.2
- pkg-types: 1.1.2
- ufo: 1.6.1
+ is-stream@2.0.1: {}
- mlly@1.7.1:
- dependencies:
- acorn: 8.15.0
- pathe: 1.1.2
- pkg-types: 1.1.2
- ufo: 1.6.1
+ is-stream@3.0.0: {}
- mlly@1.7.3:
- dependencies:
- acorn: 8.15.0
- pathe: 1.1.2
- pkg-types: 1.2.1
- ufo: 1.6.1
+ is-unsafe@1.0.1: {}
- moment@2.30.1: {}
+ is-what@5.5.0: {}
- move-concurrently@1.0.1:
+ is-wsl@2.2.0:
dependencies:
- aproba: 1.2.0
- copy-concurrently: 1.0.5
- fs-write-stream-atomic: 1.0.10
- mkdirp: 0.5.6
- rimraf: 2.7.1
- run-queue: 1.0.3
+ is-docker: 2.2.1
- mri@1.2.0: {}
+ is-wsl@3.1.1:
+ dependencies:
+ is-inside-container: 1.0.0
- mrmime@1.0.1: {}
+ isarray@1.0.0: {}
- ms@2.0.0: {}
+ isexe@2.0.0: {}
- ms@2.1.2: {}
+ isexe@4.0.0: {}
- ms@2.1.3: {}
+ isomorphic.js@0.2.5: {}
- mustache@2.3.2: {}
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
- mute-stream@0.0.8: {}
+ jiti@2.6.1: {}
- nan@2.18.0:
- optional: true
+ jiti@2.7.0: {}
- nano-spawn@1.0.2: {}
+ js-tokens@10.0.0: {}
- nanoid@3.3.11: {}
+ js-tokens@4.0.0: {}
- nanoid@3.3.8: {}
+ js-tokens@9.0.1: {}
- nanomatch@1.2.13:
+ js-yaml@4.2.0:
dependencies:
- arr-diff: 4.0.0
- array-unique: 0.3.2
- define-property: 2.0.2
- extend-shallow: 3.0.2
- fragment-cache: 0.2.1
- is-windows: 1.0.2
- kind-of: 6.0.3
- object.pick: 1.3.0
- regex-not: 1.0.2
- snapdragon: 0.8.2
- to-regex: 3.0.2
- transitivePeerDependencies:
- - supports-color
+ argparse: 2.0.1
- napi-postinstall@0.3.3: {}
+ jsdoc-type-pratt-parser@7.2.0: {}
- natural-compare@1.4.0: {}
+ jsesc@3.1.0: {}
- negotiator@0.6.3: {}
+ json-buffer@3.0.1: {}
- neo-async@2.6.2: {}
+ json-parse-even-better-errors@2.3.1: {}
- no-case@3.0.4:
+ json-schema-to-typescript-lite@15.0.0:
dependencies:
- lower-case: 2.0.2
- tslib: 2.6.2
+ '@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15)
+ '@types/json-schema': 7.0.15
- node-addon-api@1.7.2: {}
+ json-schema-traverse@0.4.1: {}
- node-cache@4.2.1:
- dependencies:
- clone: 2.1.2
- lodash: 4.17.21
+ json-schema-traverse@1.0.0: {}
- node-fetch-native@1.6.7: {}
+ json-stable-stringify-without-jsonify@1.0.1: {}
- node-fetch@2.7.0:
- dependencies:
- whatwg-url: 5.0.0
+ json5@2.2.3: {}
- node-forge@1.3.1:
- optional: true
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
- node-html-parser@6.1.13:
+ keyv@5.6.0:
dependencies:
- css-select: 5.1.0
- he: 1.2.0
+ '@keyv/serialize': 1.1.1
- node-int64@0.4.0: {}
+ kind-of@6.0.3: {}
- node-libs-browser@2.2.1:
- dependencies:
- assert: 1.5.1
- browserify-zlib: 0.2.0
- buffer: 4.9.2
- console-browserify: 1.2.0
- constants-browserify: 1.0.0
- crypto-browserify: 3.12.0
- domain-browser: 1.2.0
- events: 3.3.0
- https-browserify: 1.0.0
- os-browserify: 0.3.0
- path-browserify: 0.0.1
- process: 0.11.10
- punycode: 1.4.1
- querystring-es3: 0.2.1
- readable-stream: 2.3.8
- stream-browserify: 2.0.2
- stream-http: 2.8.3
- string_decoder: 1.3.0
- timers-browserify: 2.0.12
- tty-browserify: 0.0.0
- url: 0.11.3
- util: 0.11.1
- vm-browserify: 1.1.2
+ kleur@4.1.5: {}
- node-object-hash@1.4.2: {}
+ klona@2.0.6: {}
- node-releases@2.0.21: {}
+ knitwork@1.3.0: {}
- node-res@5.0.1:
+ launch-editor@2.14.1:
dependencies:
- destroy: 1.2.0
- etag: 1.8.1
- mime-types: 2.1.35
- on-finished: 2.4.1
- vary: 1.1.2
+ picocolors: 1.1.1
+ shell-quote: 1.10.0
- nopt@6.0.0:
+ lazystream@1.0.1:
dependencies:
- abbrev: 1.1.1
+ readable-stream: 2.3.8
- normalize-package-data@2.5.0:
+ levn@0.4.1:
dependencies:
- hosted-git-info: 2.8.9
- resolve: 1.22.6
- semver: 5.7.2
- validate-npm-package-license: 3.0.4
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
- normalize-package-data@3.0.3:
+ lib0@0.2.117:
dependencies:
- hosted-git-info: 4.1.0
- is-core-module: 2.13.0
- semver: 7.7.2
- validate-npm-package-license: 3.0.4
+ isomorphic.js: 0.2.5
- normalize-path@2.1.1:
+ libphonenumber-js@1.13.3: {}
+
+ lighthouse-logger@2.0.2:
dependencies:
- remove-trailing-separator: 1.1.0
+ debug: 4.4.3
+ marky: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ lightningcss-android-arm64@1.32.0:
optional: true
- normalize-path@3.0.0: {}
+ lightningcss-android-arm64@1.33.0:
+ optional: true
- normalize-range@0.1.2: {}
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
- normalize-url@1.9.1:
- dependencies:
- object-assign: 4.1.1
- prepend-http: 1.0.4
- query-string: 4.3.4
- sort-keys: 1.1.2
+ lightningcss-darwin-arm64@1.33.0:
+ optional: true
- normalize-url@6.1.0: {}
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
- npm-run-path@4.0.1:
- dependencies:
- path-key: 3.1.1
+ lightningcss-darwin-x64@1.33.0:
+ optional: true
- npm-run-path@5.3.0:
- dependencies:
- path-key: 4.0.0
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
- nth-check@2.1.1:
- dependencies:
- boolbase: 1.0.0
+ lightningcss-freebsd-x64@1.33.0:
+ optional: true
- nuxt-highlightjs@1.0.3:
- dependencies:
- highlight.js: 11.11.1
-
- nuxt@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.6.2)(typescript@4.9.5)(vue@2.7.16):
- dependencies:
- '@nuxt/babel-preset-app': 2.18.1(vue@2.7.16)
- '@nuxt/builder': 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.6.2)(typescript@4.9.5)(vue@2.7.16)
- '@nuxt/cli': 2.18.1
- '@nuxt/components': 2.2.1(consola@3.2.3)
- '@nuxt/config': 2.18.1
- '@nuxt/core': 2.18.1
- '@nuxt/generator': 2.18.1
- '@nuxt/loading-screen': 2.0.4
- '@nuxt/opencollective': 0.4.0
- '@nuxt/server': 2.18.1
- '@nuxt/telemetry': 1.5.0
- '@nuxt/utils': 2.18.1
- '@nuxt/vue-app': 2.18.1
- '@nuxt/vue-renderer': 2.18.1
- '@nuxt/webpack': 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.6.2)(typescript@4.9.5)(vue@2.7.16)
- transitivePeerDependencies:
- - '@vue/compiler-sfc'
- - arc-templates
- - atpl
- - babel-core
- - bluebird
- - bracket-template
- - buffer
- - bufferutil
- - coffee-script
- - consola
- - dot
- - dust
- - dustjs-helpers
- - dustjs-linkedin
- - eco
- - ect
- - ejs
- - encoding
- - haml-coffee
- - hamlet
- - hamljs
- - handlebars
- - hogan.js
- - htmling
- - jade
- - jazz
- - jqtpl
- - just
- - liquid-node
- - liquor
- - marko
- - mote
- - mustache
- - nunjucks
- - plates
- - prettier
- - pug
- - qejs
- - ractive
- - razor-tmpl
- - react
- - react-dom
- - slm
- - squirrelly
- - supports-color
- - swig
- - swig-templates
- - teacup
- - templayed
- - then-jade
- - then-pug
- - tinyliquid
- - toffee
- - twig
- - twing
- - typescript
- - underscore
- - utf-8-validate
- - vash
- - velocityjs
- - vue
- - walrus
- - webpack-cli
- - webpack-command
- - whiskers
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
- nwsapi@2.2.22: {}
+ lightningcss-linux-arm-gnueabihf@1.33.0:
+ optional: true
- nypm@0.3.9:
- dependencies:
- citty: 0.1.6
- consola: 3.2.3
- execa: 8.0.1
- pathe: 1.1.2
- pkg-types: 1.2.1
- ufo: 1.6.1
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.33.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.33.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.33.0:
+ optional: true
- object-assign@4.1.1: {}
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
- object-copy@0.1.0:
- dependencies:
- copy-descriptor: 0.1.1
- define-property: 0.2.5
- kind-of: 3.2.2
+ lightningcss-linux-x64-musl@1.33.0:
+ optional: true
- object-hash@3.0.0:
+ lightningcss-win32-arm64-msvc@1.32.0:
optional: true
- object-inspect@1.12.3: {}
+ lightningcss-win32-arm64-msvc@1.33.0:
+ optional: true
- object-keys@1.1.1: {}
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
- object-visit@1.0.1:
- dependencies:
- isobject: 3.0.1
+ lightningcss-win32-x64-msvc@1.33.0:
+ optional: true
- object.assign@4.1.4:
+ lightningcss@1.32.0:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- has-symbols: 1.0.3
- object-keys: 1.1.1
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
+ lightningcss@1.33.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.33.0
+ lightningcss-darwin-arm64: 1.33.0
+ lightningcss-darwin-x64: 1.33.0
+ lightningcss-freebsd-x64: 1.33.0
+ lightningcss-linux-arm-gnueabihf: 1.33.0
+ lightningcss-linux-arm64-gnu: 1.33.0
+ lightningcss-linux-arm64-musl: 1.33.0
+ lightningcss-linux-x64-gnu: 1.33.0
+ lightningcss-linux-x64-musl: 1.33.0
+ lightningcss-win32-arm64-msvc: 1.33.0
+ lightningcss-win32-x64-msvc: 1.33.0
- object.fromentries@2.0.7:
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
+ lilconfig@3.1.3: {}
- object.getownpropertydescriptors@2.1.7:
- dependencies:
- array.prototype.reduce: 1.0.6
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
- safe-array-concat: 1.0.1
+ lines-and-columns@1.2.4: {}
- object.groupby@1.0.1:
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
- get-intrinsic: 1.2.1
+ linkifyjs@4.3.3: {}
- object.pick@1.3.0:
+ lint-staged@17.0.8:
dependencies:
- isobject: 3.0.1
+ listr2: 10.2.1
+ picomatch: 4.0.4
+ string-argv: 0.3.2
+ tinyexec: 1.2.4
+ optionalDependencies:
+ yaml: 2.9.0
+
+ listhen@1.10.1(@parcel/watcher@2.5.6)(srvx@0.11.22):
+ dependencies:
+ '@parcel/watcher-wasm': 2.6.0
+ citty: 0.2.2
+ consola: 3.4.2
+ crossws: 0.4.10(srvx@0.11.22)
+ defu: 6.1.7
+ get-port-please: 3.2.0
+ h3: 1.15.11
+ http-shutdown: 1.2.2
+ jiti: 2.7.0
+ node-forge: 1.4.0
+ pathe: 2.0.3
+ std-env: 4.2.0
+ tinyclip: 0.1.15
+ ufo: 1.6.4
+ untun: 0.2.2
+ uqr: 0.1.3
+ optionalDependencies:
+ '@parcel/watcher': 2.5.6
+ transitivePeerDependencies:
+ - srvx
- object.values@1.1.7:
+ listr2@10.2.1:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
+ cli-truncate: 5.2.0
+ eventemitter3: 5.0.4
+ log-update: 6.1.0
+ rfdc: 1.4.1
+ wrap-ansi: 10.0.0
- ohash@1.1.3: {}
+ load-tsconfig@0.2.5: {}
- ohash@1.1.4: {}
+ loader-utils@3.3.1: {}
- on-finished@2.3.0:
+ local-pkg@1.2.1:
dependencies:
- ee-first: 1.1.1
+ mlly: 1.8.2
+ pkg-types: 2.3.1
+ quansync: 0.2.11
- on-finished@2.4.1:
+ locate-path@5.0.0:
dependencies:
- ee-first: 1.1.1
-
- on-headers@1.0.2: {}
+ p-locate: 4.1.0
- once@1.4.0:
+ locate-path@6.0.0:
dependencies:
- wrappy: 1.0.2
+ p-locate: 5.0.0
- onetime@5.1.2:
+ locate-path@8.0.0:
dependencies:
- mimic-fn: 2.1.0
+ p-locate: 6.0.0
- onetime@6.0.0:
- dependencies:
- mimic-fn: 4.0.0
+ lodash.camelcase@4.3.0: {}
- onetime@7.0.0:
- dependencies:
- mimic-function: 5.0.1
+ lodash.truncate@4.4.2: {}
- opener@1.5.2: {}
+ lodash@4.18.1: {}
- optimize-css-assets-webpack-plugin@6.0.1(webpack@4.47.0):
+ log-update@6.1.0:
dependencies:
- cssnano: 5.1.15(postcss@8.4.39)
- last-call-webpack-plugin: 3.0.0
- postcss: 8.4.39
- webpack: 4.47.0
+ ansi-escapes: 7.3.0
+ cli-cursor: 5.0.0
+ slice-ansi: 7.1.2
+ strip-ansi: 7.2.0
+ wrap-ansi: 9.0.2
- optionator@0.9.3:
- dependencies:
- '@aashutoshrathi/word-wrap': 1.2.6
- deep-is: 0.1.4
- fast-levenshtein: 2.0.6
- levn: 0.4.1
- prelude-ls: 1.2.1
- type-check: 0.4.0
+ long@5.3.2: {}
- os-browserify@0.3.0: {}
+ lru-cache@10.4.3: {}
- os-tmpdir@1.0.2: {}
+ lru-cache@11.5.2: {}
- p-limit@2.3.0:
+ lru-cache@5.1.1:
dependencies:
- p-try: 2.2.0
+ yallist: 3.1.1
- p-limit@3.1.0:
+ magic-regexp@0.10.0:
dependencies:
- yocto-queue: 0.1.0
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ regexp-tree: 0.1.27
+ type-level-regexp: 0.1.17
+ ufo: 1.6.4
+ unplugin: 2.3.11
- p-limit@4.0.0:
+ magic-string-ast@1.0.3:
dependencies:
- yocto-queue: 1.2.1
+ magic-string: 0.30.21
- p-locate@3.0.0:
+ magic-string@0.30.21:
dependencies:
- p-limit: 2.3.0
+ '@jridgewell/sourcemap-codec': 1.5.5
- p-locate@4.1.0:
+ magic-string@1.1.0:
dependencies:
- p-limit: 2.3.0
+ '@jridgewell/sourcemap-codec': 1.5.5
- p-locate@5.0.0:
+ magicast@0.5.3:
dependencies:
- p-limit: 3.1.0
+ '@babel/parser': 7.29.7
+ '@babel/types': 7.29.7
+ source-map-js: 1.2.1
- p-locate@6.0.0:
+ magicast@0.5.4:
dependencies:
- p-limit: 4.0.0
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
+ source-map-js: 1.2.1
+
+ marked@17.0.6: {}
- p-map@4.0.0:
+ marky@1.3.0: {}
+
+ mathml-tag-names@4.0.0: {}
+
+ mdast-util-to-hast@13.2.1:
dependencies:
- aggregate-error: 3.1.0
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.2
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
- p-try@2.2.0: {}
+ mdn-data@2.0.28: {}
- package-json-from-dist@1.0.1: {}
+ mdn-data@2.27.1: {}
- pako@1.0.11: {}
+ meow@13.2.0: {}
- parallel-transform@1.2.0:
- dependencies:
- cyclist: 1.0.2
- inherits: 2.0.4
- readable-stream: 2.3.8
+ meow@14.1.0: {}
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
- param-case@3.0.4:
+ micromark-util-character@2.1.1:
dependencies:
- dot-case: 3.0.4
- tslib: 2.6.2
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- parent-module@1.0.1:
+ micromark-util-encode@2.0.1: {}
+
+ micromark-util-sanitize-uri@2.0.1:
dependencies:
- callsites: 3.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-symbol@2.0.1: {}
- parse-asn1@5.1.6:
+ micromark-util-types@2.0.2: {}
+
+ micromatch@4.0.8:
dependencies:
- asn1.js: 5.4.1
- browserify-aes: 1.2.0
- evp_bytestokey: 1.0.3
- pbkdf2: 3.1.2
- safe-buffer: 5.2.1
+ braces: 3.0.3
+ picomatch: 2.3.2
- parse-git-config@3.0.0:
+ mime-db@1.54.0: {}
+
+ mime-types@3.0.2:
dependencies:
- git-config-path: 2.0.0
- ini: 1.3.8
+ mime-db: 1.54.0
+
+ mime@4.1.0: {}
+
+ mimic-fn@4.0.0: {}
+
+ mimic-function@5.0.1: {}
- parse-json@4.0.0:
+ minimatch@10.2.5:
dependencies:
- error-ex: 1.3.2
- json-parse-better-errors: 1.0.2
+ brace-expansion: 5.0.6
- parse-json@5.2.0:
+ minimatch@10.2.6:
dependencies:
- '@babel/code-frame': 7.23.5
- error-ex: 1.3.2
- json-parse-even-better-errors: 2.3.1
- lines-and-columns: 1.2.4
+ brace-expansion: 5.0.9
- parse-path@7.0.0:
+ minimatch@5.1.9:
dependencies:
- protocols: 2.0.1
+ brace-expansion: 2.1.4
- parse-url@8.1.0:
+ minimatch@9.0.9:
dependencies:
- parse-path: 7.0.0
+ brace-expansion: 2.1.4
- parse5@7.3.0:
+ minipass@7.1.3: {}
+
+ minizlib@3.1.0:
dependencies:
- entities: 6.0.1
+ minipass: 7.1.3
- parseurl@1.3.3: {}
+ mitt@3.0.1: {}
- pascal-case@3.1.2:
+ mlly@1.8.2:
dependencies:
- no-case: 3.0.4
- tslib: 2.6.2
+ acorn: 8.18.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.4
- pascalcase@0.1.1: {}
+ mocked-exports@0.1.1: {}
- path-browserify@0.0.1: {}
+ moment@2.30.1: {}
- path-dirname@1.0.2:
- optional: true
+ motion-dom@12.42.2:
+ dependencies:
+ motion-utils: 12.39.0
- path-exists@3.0.0: {}
+ motion-utils@12.39.0: {}
- path-exists@4.0.0: {}
+ motion-v@2.3.0(@vueuse/core@14.3.0(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3)):
+ dependencies:
+ '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ framer-motion: 12.42.2
+ hey-listen: 1.0.8
+ motion-dom: 12.42.2
+ motion-utils: 12.39.0
+ vue: 3.5.34(typescript@5.9.3)
+ transitivePeerDependencies:
+ - '@emotion/is-prop-valid'
+ - react
+ - react-dom
- path-exists@5.0.0: {}
+ mrmime@2.0.1: {}
- path-is-absolute@1.0.1: {}
+ ms@2.1.3: {}
- path-key@3.1.1: {}
+ muggle-string@0.4.1: {}
- path-key@4.0.0: {}
+ nanoid@3.3.12: {}
- path-parse@1.0.7: {}
+ nanoid@3.3.17: {}
- path-scurry@1.11.1:
- dependencies:
- lru-cache: 10.4.3
- minipass: 7.1.2
+ nanotar@0.3.0: {}
+
+ napi-postinstall@0.3.4: {}
- path-type@4.0.0: {}
+ natural-compare@1.4.0: {}
- path-type@5.0.0: {}
+ nitropack@2.13.4(@parcel/watcher@2.5.6)(oxc-parser@0.138.0)(rolldown@1.2.3)(srvx@0.11.22)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
+ dependencies:
+ '@cloudflare/kv-asset-handler': 0.4.2
+ '@rollup/plugin-alias': 6.0.0(rollup@4.62.4)
+ '@rollup/plugin-commonjs': 29.0.3(rollup@4.62.4)
+ '@rollup/plugin-inject': 5.0.5(rollup@4.62.4)
+ '@rollup/plugin-json': 6.1.0(rollup@4.62.4)
+ '@rollup/plugin-node-resolve': 16.0.3(rollup@4.62.4)
+ '@rollup/plugin-replace': 6.0.3(rollup@4.62.4)
+ '@rollup/plugin-terser': 1.0.0(rollup@4.62.4)
+ '@vercel/nft': 1.10.2(rollup@4.62.4)
+ archiver: 7.0.1
+ c12: 3.3.4(magicast@0.5.4)
+ chokidar: 5.0.0
+ citty: 0.2.2
+ compatx: 0.2.0
+ confbox: 0.2.4
+ consola: 3.4.2
+ cookie-es: 2.0.1
+ croner: 10.0.1
+ crossws: 0.3.5
+ db0: 0.3.4
+ defu: 6.1.7
+ destr: 2.0.5
+ dot-prop: 10.2.0
+ esbuild: 0.28.1
+ escape-string-regexp: 5.0.0
+ etag: 1.8.1
+ exsolve: 1.1.1
+ globby: 16.2.3
+ gzip-size: 7.0.0
+ h3: 1.15.11
+ hookable: 5.5.3
+ httpxy: 0.5.5
+ ioredis: 5.11.1
+ jiti: 2.7.0
+ klona: 2.0.6
+ knitwork: 1.3.0
+ listhen: 1.10.1(@parcel/watcher@2.5.6)(srvx@0.11.22)
+ magic-string: 0.30.21
+ magicast: 0.5.4
+ mime: 4.1.0
+ mlly: 1.8.2
+ node-fetch-native: 1.6.7
+ node-mock-http: 1.0.5
+ ofetch: 1.5.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.1
+ pretty-bytes: 7.1.1
+ radix3: 1.1.2
+ rollup: 4.62.4
+ rollup-plugin-visualizer: 7.0.1(rolldown@1.2.3)(rollup@4.62.4)
+ scule: 1.3.0
+ semver: 7.8.5
+ serve-placeholder: 2.0.2
+ serve-static: 2.2.1
+ source-map: 0.7.6
+ std-env: 4.2.0
+ ufo: 1.6.4
+ ultrahtml: 1.7.0
+ uncrypto: 0.1.3
+ unctx: 2.5.0
+ unenv: 2.0.0-rc.24
+ unimport: 6.4.0(esbuild@0.28.1)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin-utils: 0.3.2
+ unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1)
+ untyped: 2.0.0
+ unwasm: 0.5.3
+ youch: 4.1.1
+ youch-core: 0.3.3
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@electric-sql/pglite'
+ - '@farmfe/core'
+ - '@libsql/client'
+ - '@netlify/blobs'
+ - '@parcel/watcher'
+ - '@planetscale/database'
+ - '@rspack/core'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bare-abort-controller
+ - bare-buffer
+ - better-sqlite3
+ - bun-types-no-globals
+ - drizzle-orm
+ - encoding
+ - idb-keyval
+ - mysql2
+ - oxc-parser
+ - react-native-b4a
+ - rolldown
+ - sqlite3
+ - srvx
+ - supports-color
+ - unloader
+ - uploadthing
+ - vite
+ - webpack
- pathe@1.1.1: {}
+ node-addon-api@7.1.1:
+ optional: true
- pathe@1.1.2: {}
+ node-fetch-native@1.6.7: {}
- pbkdf2@3.1.2:
+ node-fetch@2.7.0:
dependencies:
- create-hash: 1.2.0
- create-hmac: 1.1.7
- ripemd160: 2.0.2
- safe-buffer: 5.2.1
- sha.js: 2.4.11
+ whatwg-url: 5.0.0
- perfect-debounce@1.0.0: {}
+ node-forge@1.4.0: {}
- picocolors@0.2.1: {}
+ node-gyp-build@4.8.4: {}
- picocolors@1.0.0: {}
+ node-mock-http@1.0.5: {}
- picocolors@1.0.1: {}
+ node-releases@2.0.53: {}
- picocolors@1.1.1: {}
+ nopt@8.1.0:
+ dependencies:
+ abbrev: 3.0.1
- picomatch@2.3.1: {}
+ normalize-path@3.0.0: {}
- picomatch@4.0.3: {}
+ nostics@0.2.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
+ dependencies:
+ magic-string: 0.30.21
+ oxc-parser: 0.132.0
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - rolldown
+ - rollup
+ - unloader
+ - vite
+ - webpack
- pidtree@0.6.0: {}
+ nostics@1.2.0: {}
- pify@2.3.0: {}
+ npm-run-path@5.3.0:
+ dependencies:
+ path-key: 4.0.0
- pify@3.0.0: {}
+ npm-run-path@6.0.0:
+ dependencies:
+ path-key: 4.0.0
+ unicorn-magic: 0.3.0
- pify@4.0.1: {}
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
- pify@5.0.0: {}
+ nuxt-link-checker@5.1.2(44f4b2b7d2f9ee8e362dff21d5ae9b48):
+ dependencies:
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ consola: 3.4.2
+ diff: 9.0.0
+ fuse.js: 7.4.2
+ h3: 1.15.11
+ magic-string: 0.30.21
+ nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0)
+ nuxt-site-config: 4.1.1(7877631f0cf65e725df80f294cd86891)
+ nuxtseo-shared: 5.3.2(9a4742efa56a00a44e3e94e40a26a5f7)
+ ofetch: 1.5.1
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ radix3: 1.1.2
+ site-config-stack: 4.1.1(vue@3.5.34(typescript@5.9.3))
+ ufo: 1.6.4
+ ultrahtml: 1.7.0
+ unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@nuxt/schema'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - idb-keyval
+ - ioredis
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - uploadthing
+ - vite
+ - vue
+ - zod
+
+ nuxt-og-image@6.7.2(da6d5f553c655a51bde07ce599cb019e):
+ dependencies:
+ '@clack/prompts': 1.6.0
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@unhead/vue': 3.3.1(@oxc-project/types@0.143.0)(esbuild@0.25.12)(lightningcss@1.33.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))
+ '@unocss/config': 66.7.4
+ '@unocss/core': 66.7.4
+ '@vue/compiler-sfc': 3.5.39
+ chrome-launcher: 1.2.1
+ consola: 3.4.2
+ culori: 4.0.2
+ defu: 6.1.7
+ devalue: 5.9.0
+ exsolve: 1.1.1
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ magicast: 0.5.3
+ mocked-exports: 0.1.1
+ nuxt-site-config: 4.1.1(da50f1e9fdc48b596813f24331f87232)
+ nuxtseo-shared: 5.3.2(28af55199f4cc9df90f9ffd6fd2b2367)
+ nypm: 0.6.9
+ ofetch: 1.5.1
+ ohash: 2.0.11
+ oxc-parser: 0.138.0
+ oxc-walker: 1.1.1(@oxc-project/types@0.143.0)(oxc-parser@0.138.0)(rolldown@1.2.3)
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ radix3: 1.1.2
+ std-env: 4.2.0
+ strip-literal: 3.1.0
+ tinyexec: 1.2.4
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ ultrahtml: 1.7.0
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.1)
+ optionalDependencies:
+ fontless: 0.2.1(db0@0.3.4)(ioredis@5.11.1)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ nitropack: 2.13.4(@parcel/watcher@2.5.6)(oxc-parser@0.138.0)(rolldown@1.2.3)(srvx@0.11.22)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ tailwindcss: 4.3.2
+ unifont: 0.7.4
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@nuxt/schema'
+ - '@oxc-project/types'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - nuxt
+ - rolldown
+ - rollup
+ - supports-color
+ - unloader
+ - vite
+ - vue
+ - webpack
- pirates@4.0.7: {}
+ nuxt-schema-org@6.2.3(932aeff8fdec8e3ce6179ad3f7827f8b):
+ dependencies:
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ defu: 6.1.7
+ nuxt-site-config: 4.1.1(4d79e2cd154eafd0ae5acf0b0945c71b)
+ nuxtseo-shared: 5.3.2(043985539a50ea96924caeb25844c44e)
+ pkg-types: 2.3.1
+ ufo: 1.6.4
+ optionalDependencies:
+ '@unhead/vue': 3.3.1(@oxc-project/types@0.143.0)(esbuild@0.25.12)(lightningcss@1.33.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))
+ unhead: 3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ transitivePeerDependencies:
+ - '@nuxt/schema'
+ - magic-string
+ - magicast
+ - nuxt
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vite
+ - vue
- pkg-dir@3.0.0:
+ nuxt-seo-utils@8.3.1(175313bbf896de2adf74b471bfbf40bf):
dependencies:
- find-up: 3.0.0
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@unhead/bundler': 3.1.7(@oxc-project/types@0.143.0)(crossws@0.4.10(srvx@0.11.22))(esbuild@0.25.12)(lightningcss@1.33.0)(rolldown@1.2.3)(rollup@4.62.4)(typescript@5.9.3)(unhead@3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ citty: 0.2.2
+ consola: 3.4.2
+ defu: 6.1.7
+ escape-string-regexp: 5.0.0
+ exsolve: 1.1.1
+ image-size: 2.0.2
+ nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0)
+ nuxt-site-config: 4.1.1(4d79e2cd154eafd0ae5acf0b0945c71b)
+ nuxtseo-layer-devtools: 5.3.2(228959972d51119f78b2f06547565ac7)
+ nuxtseo-shared: 5.3.2(043985539a50ea96924caeb25844c44e)
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ scule: 1.3.0
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ optionalDependencies:
+ '@unhead/vue': 3.3.1(@oxc-project/types@0.143.0)(esbuild@0.25.12)(lightningcss@1.33.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))
+ esbuild: 0.25.12
+ lightningcss: 1.33.0
+ rolldown: 1.2.3
+ sharp: 0.35.3(@types/node@25.9.1)
+ unhead: 3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@emotion/is-prop-valid'
+ - '@farmfe/core'
+ - '@inertiajs/vue3'
+ - '@internationalized/date'
+ - '@internationalized/number'
+ - '@modelcontextprotocol/sdk'
+ - '@netlify/blobs'
+ - '@nuxt/content'
+ - '@nuxt/schema'
+ - '@oxc-project/types'
+ - '@planetscale/database'
+ - '@rspack/core'
+ - '@tiptap/core'
+ - '@tiptap/extension-bubble-menu'
+ - '@tiptap/extension-code'
+ - '@tiptap/extension-collaboration'
+ - '@tiptap/extension-drag-handle'
+ - '@tiptap/extension-drag-handle-vue-3'
+ - '@tiptap/extension-floating-menu'
+ - '@tiptap/extension-horizontal-rule'
+ - '@tiptap/extension-image'
+ - '@tiptap/extension-mention'
+ - '@tiptap/extension-node-range'
+ - '@tiptap/extension-placeholder'
+ - '@tiptap/markdown'
+ - '@tiptap/pm'
+ - '@tiptap/starter-kit'
+ - '@tiptap/suggestion'
+ - '@tiptap/vue-3'
+ - '@types/node'
+ - '@unhead/cli'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vue/composition-api'
+ - async-validator
+ - aws4fetch
+ - axios
+ - bufferutil
+ - bun-types-no-globals
+ - change-case
+ - crossws
+ - db0
+ - drauu
+ - embla-carousel
+ - focus-trap
+ - idb-keyval
+ - ioredis
+ - joi
+ - jwt-decode
+ - magic-string
+ - magicast
+ - nprogress
+ - oxc-parser
+ - qrcode
+ - react
+ - react-dom
+ - rollup
+ - sortablejs
+ - superstruct
+ - typescript
+ - universal-cookie
+ - unloader
+ - unplugin
+ - uploadthing
+ - utf-8-validate
+ - valibot
+ - vite
+ - vue
+ - vue-router
+ - webpack
+ - yup
+ - zod
- pkg-dir@4.2.0:
+ nuxt-site-config-kit@4.1.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vue@3.5.34(typescript@5.9.3)):
dependencies:
- find-up: 4.1.0
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ site-config-stack: 4.1.1(vue@3.5.34(typescript@5.9.3))
+ std-env: 4.2.0
+ ufo: 1.6.4
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vue
- pkg-types@1.1.2:
+ nuxt-site-config-kit@4.1.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vue@3.5.34(typescript@5.9.3)):
dependencies:
- confbox: 0.1.7
- mlly: 1.7.1
- pathe: 1.1.2
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ site-config-stack: 4.1.1(vue@3.5.34(typescript@5.9.3))
+ std-env: 4.2.0
+ ufo: 1.6.4
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vue
- pkg-types@1.2.1:
+ nuxt-site-config-kit@4.1.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vue@3.5.34(typescript@5.9.3)):
dependencies:
- confbox: 0.1.8
- mlly: 1.7.3
- pathe: 1.1.2
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ site-config-stack: 4.1.1(vue@3.5.34(typescript@5.9.3))
+ std-env: 4.2.0
+ ufo: 1.6.4
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vue
- pluralize@8.0.0: {}
+ nuxt-site-config@4.1.1(4d79e2cd154eafd0ae5acf0b0945c71b):
+ dependencies:
+ '@nuxt/devalue': 2.0.2
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ h3: 1.15.11
+ nuxt-site-config-kit: 4.1.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vue@3.5.34(typescript@5.9.3))
+ nuxtseo-shared: 5.3.2(043985539a50ea96924caeb25844c44e)
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ site-config-stack: 4.1.1(vue@3.5.34(typescript@5.9.3))
+ ufo: 1.6.4
+ transitivePeerDependencies:
+ - '@nuxt/schema'
+ - magic-string
+ - magicast
+ - nuxt
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vite
+ - vue
+ - zod
- pngjs@5.0.0: {}
+ nuxt-site-config@4.1.1(7877631f0cf65e725df80f294cd86891):
+ dependencies:
+ '@nuxt/devalue': 2.0.2
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ h3: 1.15.11
+ nuxt-site-config-kit: 4.1.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vue@3.5.34(typescript@5.9.3))
+ nuxtseo-shared: 5.3.2(9a4742efa56a00a44e3e94e40a26a5f7)
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ site-config-stack: 4.1.1(vue@3.5.34(typescript@5.9.3))
+ ufo: 1.6.4
+ transitivePeerDependencies:
+ - '@nuxt/schema'
+ - magic-string
+ - magicast
+ - nuxt
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vite
+ - vue
+ - zod
+
+ nuxt-site-config@4.1.1(da50f1e9fdc48b596813f24331f87232):
+ dependencies:
+ '@nuxt/devalue': 2.0.2
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ h3: 1.15.11
+ nuxt-site-config-kit: 4.1.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vue@3.5.34(typescript@5.9.3))
+ nuxtseo-shared: 5.3.2(28af55199f4cc9df90f9ffd6fd2b2367)
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ site-config-stack: 4.1.1(vue@3.5.34(typescript@5.9.3))
+ ufo: 1.6.4
+ transitivePeerDependencies:
+ - '@nuxt/schema'
+ - magic-string
+ - magicast
+ - nuxt
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vite
+ - vue
+ - zod
+
+ nuxt@4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0):
+ dependencies:
+ '@dxup/nuxt': 0.5.6(esbuild@0.25.12)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/cli': 3.37.0(@nuxt/schema@4.5.1)(@parcel/watcher@2.5.6)(cac@6.7.14)(magicast@0.5.4)
+ '@nuxt/devtools': 3.4.1(db0@0.3.4)(ioredis@5.11.1)(magic-string@1.1.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@nuxt/nitro-server': 4.5.1(e10a0efb5e23c0fd36d3ace2a5e3aeb3)
+ '@nuxt/schema': 4.5.1
+ '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))))
+ '@nuxt/vite-builder': 4.5.1(0261b043a53150a2c4b40251899787e8)
+ '@unhead/vue': 3.3.1(@oxc-project/types@0.143.0)(esbuild@0.25.12)(lightningcss@1.33.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))
+ '@vue/shared': 3.5.41
+ chokidar: 5.0.0
+ compatx: 0.2.0
+ consola: 3.4.2
+ cookie-es: 3.1.1
+ defu: 6.1.7
+ devalue: 5.9.0
+ errx: 0.1.2
+ escape-string-regexp: 5.0.0
+ exsolve: 1.1.1
+ fnv1a-64: 0.1.2
+ hookable: 6.1.1
+ ignore: 7.0.6
+ impound: 1.1.6(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ jiti: 2.7.0
+ klona: 2.0.6
+ knitwork: 1.3.0
+ magic-string: 1.1.0
+ mlly: 1.8.2
+ nanotar: 0.3.0
+ nostics: 1.2.0
+ nypm: 0.6.9
+ object-identity: 0.2.3
+ ofetch: 1.5.1
+ ohash: 2.0.11
+ on-change: 6.0.2
+ oxc-walker: 1.1.1(@oxc-project/types@0.143.0)(oxc-parser@0.138.0)(rolldown@1.2.3)
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ picomatch: 4.0.5
+ pkg-types: 2.3.1
+ rolldown: 1.2.3
+ rolldown-string: 0.3.1(rolldown@1.2.3)
+ rou3: 0.9.1
+ scule: 1.3.0
+ std-env: 4.2.0
+ tinyglobby: 0.2.17
+ ufo: 1.6.4
+ ultrahtml: 1.7.0
+ uncrypto: 0.1.3
+ unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ undici: 8.10.0
+ unhead: 3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unimport: 6.4.0(esbuild@0.25.12)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unrouting: 0.2.2
+ untyped: 2.0.0
+ verkit: 0.2.0
+ vue: 3.5.41(typescript@5.9.3)
+ vue-router: 5.2.0(@vue/compiler-sfc@3.5.41)(esbuild@0.25.12)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3))
+ optionalDependencies:
+ '@parcel/watcher': 2.5.6
+ '@types/node': 25.9.1
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@babel/plugin-proposal-decorators'
+ - '@babel/plugin-syntax-jsx'
+ - '@babel/plugin-syntax-typescript'
+ - '@biomejs/biome'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@electric-sql/pglite'
+ - '@farmfe/core'
+ - '@libsql/client'
+ - '@netlify/blobs'
+ - '@oxc-project/types'
+ - '@pinia/colada'
+ - '@planetscale/database'
+ - '@rollup/plugin-babel'
+ - '@rspack/core'
+ - '@unhead/cli'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vitejs/devtools'
+ - '@vitejs/devtools-kit'
+ - '@vue/compiler-sfc'
+ - aws4fetch
+ - bare-abort-controller
+ - bare-buffer
+ - better-sqlite3
+ - bufferutil
+ - bun-types-no-globals
+ - cac
+ - commander
+ - db0
+ - drizzle-orm
+ - encoding
+ - esbuild
+ - eslint
+ - idb-keyval
+ - ioredis
+ - less
+ - lightningcss
+ - magicast
+ - meow
+ - mysql2
+ - optionator
+ - oxc-parser
+ - oxlint
+ - pinia
+ - react-native-b4a
+ - rollup
+ - rollup-plugin-visualizer
+ - sass
+ - sass-embedded
+ - sqlite3
+ - srvx
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - unloader
+ - uploadthing
+ - utf-8-validate
+ - vite
+ - vue-tsc
+ - webpack
+ - xml2js
+ - yaml
+
+ nuxtseo-layer-devtools@5.3.2(228959972d51119f78b2f06547565ac7):
+ dependencies:
+ '@iconify-json/carbon': 1.2.24
+ '@nuxt/devtools-kit': 4.0.0-alpha.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@nuxt/ui': 4.9.0(58502101345dd8570863426db89bf8e6)
+ '@shikijs/langs': 4.3.1
+ '@shikijs/themes': 4.3.1
+ '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ '@vueuse/nuxt': 14.3.0(d41a3947a020e9f1740412568023ae47)
+ nuxtseo-shared: 5.3.2(043985539a50ea96924caeb25844c44e)
+ ofetch: 1.5.1
+ shiki: 4.3.1
+ tailwindcss: 4.3.2
+ ufo: 1.6.4
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@emotion/is-prop-valid'
+ - '@farmfe/core'
+ - '@inertiajs/vue3'
+ - '@internationalized/date'
+ - '@internationalized/number'
+ - '@netlify/blobs'
+ - '@nuxt/content'
+ - '@nuxt/schema'
+ - '@planetscale/database'
+ - '@rspack/core'
+ - '@tiptap/core'
+ - '@tiptap/extension-bubble-menu'
+ - '@tiptap/extension-code'
+ - '@tiptap/extension-collaboration'
+ - '@tiptap/extension-drag-handle'
+ - '@tiptap/extension-drag-handle-vue-3'
+ - '@tiptap/extension-floating-menu'
+ - '@tiptap/extension-horizontal-rule'
+ - '@tiptap/extension-image'
+ - '@tiptap/extension-mention'
+ - '@tiptap/extension-node-range'
+ - '@tiptap/extension-placeholder'
+ - '@tiptap/markdown'
+ - '@tiptap/pm'
+ - '@tiptap/starter-kit'
+ - '@tiptap/suggestion'
+ - '@tiptap/vue-3'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vue/composition-api'
+ - async-validator
+ - aws4fetch
+ - axios
+ - bun-types-no-globals
+ - change-case
+ - db0
+ - drauu
+ - embla-carousel
+ - esbuild
+ - focus-trap
+ - idb-keyval
+ - ioredis
+ - joi
+ - jwt-decode
+ - magic-string
+ - magicast
+ - nprogress
+ - nuxt
+ - nuxt-site-config
+ - oxc-parser
+ - qrcode
+ - react
+ - react-dom
+ - rolldown
+ - rollup
+ - sortablejs
+ - superstruct
+ - typescript
+ - universal-cookie
+ - unloader
+ - unplugin
+ - uploadthing
+ - valibot
+ - vite
+ - vue
+ - vue-router
+ - webpack
+ - yup
+ - zod
+
+ nuxtseo-shared@5.3.2(043985539a50ea96924caeb25844c44e):
+ dependencies:
+ '@clack/prompts': 1.6.0
+ '@nuxt/devtools-kit': 4.0.0-alpha.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@nuxt/schema': 4.5.2
+ birpc: 4.0.0
+ consola: 3.4.2
+ defu: 6.1.7
+ nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0)
+ nypm: 0.6.9
+ ofetch: 1.5.1
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ radix3: 1.1.2
+ sirv: 3.0.2
+ std-env: 4.2.0
+ ufo: 1.6.4
+ vue: 3.5.34(typescript@5.9.3)
+ optionalDependencies:
+ nuxt-site-config: 4.1.1(4d79e2cd154eafd0ae5acf0b0945c71b)
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vite
- pnp-webpack-plugin@1.7.0(typescript@4.9.5):
- dependencies:
- ts-pnp: 1.2.0(typescript@4.9.5)
+ nuxtseo-shared@5.3.2(28af55199f4cc9df90f9ffd6fd2b2367):
+ dependencies:
+ '@clack/prompts': 1.6.0
+ '@nuxt/devtools-kit': 4.0.0-alpha.3(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@nuxt/schema': 4.5.2
+ birpc: 4.0.0
+ consola: 3.4.2
+ defu: 6.1.7
+ nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0)
+ nypm: 0.6.9
+ ofetch: 1.5.1
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ radix3: 1.1.2
+ sirv: 3.0.2
+ std-env: 4.2.0
+ ufo: 1.6.4
+ vue: 3.5.34(typescript@5.9.3)
+ optionalDependencies:
+ nuxt-site-config: 4.1.1(4d79e2cd154eafd0ae5acf0b0945c71b)
transitivePeerDependencies:
- - typescript
-
- posix-character-classes@0.1.1: {}
-
- postcss-attribute-case-insensitive@6.0.3(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vite
- postcss-calc@10.0.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
- postcss-value-parser: 4.2.0
+ nuxtseo-shared@5.3.2(9a4742efa56a00a44e3e94e40a26a5f7):
+ dependencies:
+ '@clack/prompts': 1.6.0
+ '@nuxt/devtools-kit': 4.0.0-alpha.3(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@nuxt/schema': 4.5.2
+ birpc: 4.0.0
+ consola: 3.4.2
+ defu: 6.1.7
+ nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.143.0)(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.41)(cac@6.7.14)(db0@0.3.4)(esbuild@0.25.12)(eslint@10.5.0(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(meow@14.1.0)(optionator@0.9.4)(oxc-parser@0.138.0)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4))(rollup@4.62.4)(sass@1.100.0)(srvx@0.11.22)(stylelint@17.13.0(typescript@5.9.3))(terser@5.49.2)(tsx@4.22.3)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(yaml@2.9.0)
+ nypm: 0.6.9
+ ofetch: 1.5.1
+ pathe: 2.0.3
+ pkg-types: 2.3.1
+ radix3: 1.1.2
+ sirv: 3.0.2
+ std-env: 4.2.0
+ ufo: 1.6.4
+ vue: 3.5.34(typescript@5.9.3)
+ optionalDependencies:
+ nuxt-site-config: 4.1.1(4d79e2cd154eafd0ae5acf0b0945c71b)
+ transitivePeerDependencies:
+ - magic-string
+ - magicast
+ - oxc-parser
+ - rolldown
+ - unplugin
+ - vite
- postcss-calc@8.2.4(postcss@8.4.39):
+ nypm@0.6.9:
dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
- postcss-value-parser: 4.2.0
+ citty: 0.2.2
+ pathe: 2.0.3
+ tinyexec: 1.3.0
- postcss-clamp@4.1.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ object-deep-merge@2.0.1: {}
- postcss-color-functional-notation@6.0.12(postcss@8.4.39):
- dependencies:
- '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
+ object-identity@0.2.3: {}
- postcss-color-hex-alpha@9.0.4(postcss@8.4.39):
- dependencies:
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ obug@2.1.4: {}
- postcss-color-rebeccapurple@9.0.3(postcss@8.4.39):
+ ofetch@1.5.1:
dependencies:
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ destr: 2.0.5
+ node-fetch-native: 1.6.7
+ ufo: 1.6.4
- postcss-colormin@5.3.1(postcss@8.4.39):
- dependencies:
- browserslist: 4.26.3
- caniuse-api: 3.0.0
- colord: 2.9.3
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ ofetch@2.0.0-alpha.3: {}
- postcss-colormin@7.0.1(postcss@8.4.39):
- dependencies:
- browserslist: 4.26.3
- caniuse-api: 3.0.0
- colord: 2.9.3
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ ohash@2.0.11: {}
- postcss-convert-values@5.1.3(postcss@8.4.39):
- dependencies:
- browserslist: 4.26.3
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ on-change@6.0.2: {}
- postcss-convert-values@7.0.1(postcss@8.4.39):
+ on-finished@2.4.1:
dependencies:
- browserslist: 4.26.3
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ ee-first: 1.1.1
- postcss-custom-media@10.0.7(postcss@8.4.39):
+ onetime@6.0.0:
dependencies:
- '@csstools/cascade-layer-name-parser': 1.0.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/media-query-list-parser': 2.1.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- postcss: 8.4.39
+ mimic-fn: 4.0.0
- postcss-custom-properties@13.3.11(postcss@8.4.39):
+ onetime@7.0.0:
dependencies:
- '@csstools/cascade-layer-name-parser': 1.0.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ mimic-function: 5.0.1
- postcss-custom-selectors@7.1.11(postcss@8.4.39):
- dependencies:
- '@csstools/cascade-layer-name-parser': 1.0.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ oniguruma-parser@0.12.2: {}
- postcss-dir-pseudo-class@8.0.1(postcss@8.4.39):
+ oniguruma-to-es@4.3.6:
dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ oniguruma-parser: 0.12.2
+ regex: 6.1.0
+ regex-recursion: 6.0.2
- postcss-discard-comments@5.1.2(postcss@8.4.39):
+ open@11.0.0:
dependencies:
- postcss: 8.4.39
+ default-browser: 5.5.0
+ define-lazy-prop: 3.0.0
+ is-in-ssh: 1.0.0
+ is-inside-container: 1.0.0
+ powershell-utils: 0.1.0
+ wsl-utils: 0.3.1
- postcss-discard-comments@7.0.1(postcss@8.4.39):
+ optionator@0.9.4:
dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
- postcss-discard-duplicates@5.1.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ orderedmap@2.1.1: {}
- postcss-discard-duplicates@7.0.0(postcss@8.4.39):
+ oxc-parser@0.132.0:
dependencies:
- postcss: 8.4.39
+ '@oxc-project/types': 0.132.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.132.0
+ '@oxc-parser/binding-android-arm64': 0.132.0
+ '@oxc-parser/binding-darwin-arm64': 0.132.0
+ '@oxc-parser/binding-darwin-x64': 0.132.0
+ '@oxc-parser/binding-freebsd-x64': 0.132.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.132.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.132.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.132.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.132.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.132.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.132.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.132.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.132.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.132.0
+ '@oxc-parser/binding-linux-x64-musl': 0.132.0
+ '@oxc-parser/binding-openharmony-arm64': 0.132.0
+ '@oxc-parser/binding-wasm32-wasi': 0.132.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.132.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.132.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.132.0
+
+ oxc-parser@0.137.0:
+ dependencies:
+ '@oxc-project/types': 0.137.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.137.0
+ '@oxc-parser/binding-android-arm64': 0.137.0
+ '@oxc-parser/binding-darwin-arm64': 0.137.0
+ '@oxc-parser/binding-darwin-x64': 0.137.0
+ '@oxc-parser/binding-freebsd-x64': 0.137.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.137.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.137.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.137.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.137.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.137.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.137.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.137.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.137.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.137.0
+ '@oxc-parser/binding-linux-x64-musl': 0.137.0
+ '@oxc-parser/binding-openharmony-arm64': 0.137.0
+ '@oxc-parser/binding-wasm32-wasi': 0.137.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.137.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.137.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.137.0
+
+ oxc-parser@0.138.0:
+ dependencies:
+ '@oxc-project/types': 0.138.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.138.0
+ '@oxc-parser/binding-android-arm64': 0.138.0
+ '@oxc-parser/binding-darwin-arm64': 0.138.0
+ '@oxc-parser/binding-darwin-x64': 0.138.0
+ '@oxc-parser/binding-freebsd-x64': 0.138.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.138.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.138.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.138.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.138.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.138.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.138.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.138.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.138.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.138.0
+ '@oxc-parser/binding-linux-x64-musl': 0.138.0
+ '@oxc-parser/binding-openharmony-arm64': 0.138.0
+ '@oxc-parser/binding-wasm32-wasi': 0.138.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.138.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.138.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.138.0
+
+ oxc-walker@1.1.1(@oxc-project/types@0.143.0)(oxc-parser@0.137.0)(rolldown@1.2.3):
+ optionalDependencies:
+ '@oxc-project/types': 0.143.0
+ oxc-parser: 0.137.0
+ rolldown: 1.2.3
- postcss-discard-empty@5.1.1(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ oxc-walker@1.1.1(@oxc-project/types@0.143.0)(oxc-parser@0.138.0)(rolldown@1.2.3):
+ optionalDependencies:
+ '@oxc-project/types': 0.143.0
+ oxc-parser: 0.138.0
+ rolldown: 1.2.3
- postcss-discard-empty@7.0.0(postcss@8.4.39):
+ p-limit@2.3.0:
dependencies:
- postcss: 8.4.39
+ p-try: 2.2.0
- postcss-discard-overridden@5.1.0(postcss@8.4.39):
+ p-limit@3.1.0:
dependencies:
- postcss: 8.4.39
+ yocto-queue: 0.1.0
- postcss-discard-overridden@7.0.0(postcss@8.4.39):
+ p-limit@4.0.0:
dependencies:
- postcss: 8.4.39
+ yocto-queue: 1.2.2
- postcss-double-position-gradients@5.0.6(postcss@8.4.39):
+ p-locate@4.1.0:
dependencies:
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ p-limit: 2.3.0
- postcss-focus-visible@9.0.1(postcss@8.4.39):
+ p-locate@5.0.0:
dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ p-limit: 3.1.0
- postcss-focus-within@8.0.1(postcss@8.4.39):
+ p-locate@6.0.0:
dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ p-limit: 4.0.0
- postcss-font-variant@5.0.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ p-try@2.2.0: {}
- postcss-gap-properties@5.0.1(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ package-json-from-dist@1.0.1: {}
- postcss-html@1.7.0:
- dependencies:
- htmlparser2: 8.0.2
- js-tokens: 9.0.0
- postcss: 8.4.35
- postcss-safe-parser: 6.0.0(postcss@8.4.35)
+ package-manager-detector@1.6.0: {}
- postcss-image-set-function@6.0.3(postcss@8.4.39):
+ parent-module@1.0.1:
dependencies:
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ callsites: 3.1.0
- postcss-import-resolver@2.0.0:
+ parse-imports-exports@0.2.4:
dependencies:
- enhanced-resolve: 4.5.0
+ parse-statements: 1.0.11
- postcss-import@15.1.0(postcss@8.4.39):
+ parse-json@5.2.0:
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
- read-cache: 1.0.0
- resolve: 1.22.6
+ '@babel/code-frame': 7.29.7
+ error-ex: 1.3.4
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
- postcss-lab-function@6.0.17(postcss@8.4.39):
- dependencies:
- '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2)
- '@csstools/css-tokenizer': 2.3.2
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/utilities': 1.0.0(postcss@8.4.39)
- postcss: 8.4.39
+ parse-statements@1.0.11: {}
- postcss-loader@4.3.0(postcss@8.4.39)(webpack@4.47.0):
- dependencies:
- cosmiconfig: 7.1.0
- klona: 2.0.6
- loader-utils: 2.0.4
- postcss: 8.4.39
- schema-utils: 3.3.0
- semver: 7.7.2
- webpack: 4.47.0
+ parseurl@1.3.3: {}
- postcss-logical@7.0.1(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ path-exists@4.0.0: {}
- postcss-merge-longhand@5.1.7(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
- stylehacks: 5.1.1(postcss@8.4.39)
+ path-expression-matcher@1.6.1: {}
- postcss-merge-longhand@7.0.2(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
- stylehacks: 7.0.2(postcss@8.4.39)
+ path-key@3.1.1: {}
- postcss-merge-rules@5.1.4(postcss@8.4.39):
- dependencies:
- browserslist: 4.26.3
- caniuse-api: 3.0.0
- cssnano-utils: 3.1.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ path-key@4.0.0: {}
- postcss-merge-rules@7.0.2(postcss@8.4.39):
- dependencies:
- browserslist: 4.26.3
- caniuse-api: 3.0.0
- cssnano-utils: 5.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ path-parse@1.0.7: {}
- postcss-minify-font-values@5.1.0(postcss@8.4.39):
+ path-scurry@1.11.1:
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ lru-cache: 10.4.3
+ minipass: 7.1.3
- postcss-minify-font-values@7.0.0(postcss@8.4.39):
+ path-scurry@2.0.2:
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ lru-cache: 11.5.2
+ minipass: 7.1.3
- postcss-minify-gradients@5.1.1(postcss@8.4.39):
- dependencies:
- colord: 2.9.3
- cssnano-utils: 3.1.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ pathe@1.1.2: {}
- postcss-minify-gradients@7.0.0(postcss@8.4.39):
- dependencies:
- colord: 2.9.3
- cssnano-utils: 5.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ pathe@2.0.3: {}
- postcss-minify-params@5.1.4(postcss@8.4.39):
- dependencies:
- browserslist: 4.26.3
- cssnano-utils: 3.1.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ perfect-debounce@1.0.0: {}
- postcss-minify-params@7.0.1(postcss@8.4.39):
- dependencies:
- browserslist: 4.26.3
- cssnano-utils: 5.0.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ perfect-debounce@2.1.0: {}
- postcss-minify-selectors@5.2.1(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ picocolors@1.1.1: {}
- postcss-minify-selectors@7.0.2(postcss@8.4.39):
- dependencies:
- cssesc: 3.0.0
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ picomatch@2.3.2: {}
- postcss-modules-extract-imports@3.0.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ picomatch@4.0.4: {}
- postcss-modules-local-by-default@4.0.3(postcss@8.4.39):
- dependencies:
- icss-utils: 5.1.0(postcss@8.4.39)
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
- postcss-value-parser: 4.2.0
+ picomatch@4.0.5: {}
- postcss-modules-scope@3.0.0(postcss@8.4.39):
+ pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)):
dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ '@vue/devtools-api': 7.7.9
+ vue: 3.5.34(typescript@5.9.3)
+ optionalDependencies:
+ typescript: 5.9.3
- postcss-modules-values@4.0.0(postcss@8.4.39):
+ pkg-types@1.3.1:
dependencies:
- icss-utils: 5.1.0(postcss@8.4.39)
- postcss: 8.4.39
+ confbox: 0.1.8
+ mlly: 1.8.2
+ pathe: 2.0.3
- postcss-nesting@12.1.5(postcss@8.4.39):
+ pkg-types@2.3.1:
dependencies:
- '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.1.2)
- '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2)
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ confbox: 0.2.4
+ exsolve: 1.1.1
+ pathe: 2.0.3
- postcss-normalize-charset@5.1.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ pluralize@8.0.0: {}
- postcss-normalize-charset@7.0.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ pngjs@5.0.0: {}
- postcss-normalize-display-values@5.1.0(postcss@8.4.39):
+ postcss-calc@10.1.1(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ postcss: 8.5.26
+ postcss-selector-parser: 7.1.5
postcss-value-parser: 4.2.0
- postcss-normalize-display-values@7.0.0(postcss@8.4.39):
+ postcss-colormin@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ '@colordx/core': 5.5.0
+ browserslist: 4.28.7
+ caniuse-api: 4.0.0
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-normalize-positions@5.1.1(postcss@8.4.39):
+ postcss-convert-values@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ browserslist: 4.28.7
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-normalize-positions@7.0.0(postcss@8.4.39):
+ postcss-discard-comments@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ postcss: 8.5.26
+ postcss-selector-parser: 7.1.5
- postcss-normalize-repeat-style@5.1.1(postcss@8.4.39):
+ postcss-discard-duplicates@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ postcss: 8.5.26
- postcss-normalize-repeat-style@7.0.0(postcss@8.4.39):
+ postcss-discard-empty@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ postcss: 8.5.26
- postcss-normalize-string@5.1.0(postcss@8.4.39):
+ postcss-discard-overridden@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ postcss: 8.5.26
- postcss-normalize-string@7.0.0(postcss@8.4.39):
+ postcss-html@1.8.1:
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ htmlparser2: 8.0.2
+ js-tokens: 9.0.1
+ postcss: 8.5.15
+ postcss-safe-parser: 6.0.0(postcss@8.5.15)
- postcss-normalize-timing-functions@5.1.0(postcss@8.4.39):
+ postcss-merge-longhand@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
+ stylehacks: 8.0.2(postcss@8.5.26)
- postcss-normalize-timing-functions@7.0.0(postcss@8.4.39):
+ postcss-merge-rules@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ browserslist: 4.28.7
+ caniuse-api: 4.0.0
+ cssnano-utils: 6.0.2(postcss@8.5.26)
+ postcss: 8.5.26
+ postcss-selector-parser: 7.1.5
- postcss-normalize-unicode@5.1.1(postcss@8.4.39):
+ postcss-minify-font-values@8.0.2(postcss@8.5.26):
dependencies:
- browserslist: 4.26.3
- postcss: 8.4.39
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-normalize-unicode@7.0.1(postcss@8.4.39):
+ postcss-minify-gradients@8.0.2(postcss@8.5.26):
dependencies:
- browserslist: 4.26.3
- postcss: 8.4.39
+ '@colordx/core': 5.5.0
+ cssnano-utils: 6.0.2(postcss@8.5.26)
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-normalize-url@5.1.0(postcss@8.4.39):
+ postcss-minify-params@8.0.2(postcss@8.5.26):
dependencies:
- normalize-url: 6.1.0
- postcss: 8.4.39
+ browserslist: 4.28.7
+ cssnano-utils: 6.0.2(postcss@8.5.26)
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-normalize-url@7.0.0(postcss@8.4.39):
+ postcss-minify-selectors@8.0.3(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ browserslist: 4.28.7
+ caniuse-api: 4.0.0
+ cssesc: 3.0.0
+ postcss: 8.5.26
+ postcss-selector-parser: 7.1.5
- postcss-normalize-whitespace@5.1.1(postcss@8.4.39):
+ postcss-normalize-charset@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
+ postcss: 8.5.26
- postcss-normalize-whitespace@7.0.0(postcss@8.4.39):
+ postcss-normalize-display-values@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-opacity-percentage@2.0.0(postcss@8.4.39):
+ postcss-normalize-positions@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ postcss: 8.5.26
+ postcss-value-parser: 4.2.0
- postcss-ordered-values@5.1.3(postcss@8.4.39):
+ postcss-normalize-repeat-style@8.0.2(postcss@8.5.26):
dependencies:
- cssnano-utils: 3.1.0(postcss@8.4.39)
- postcss: 8.4.39
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-ordered-values@7.0.1(postcss@8.4.39):
+ postcss-normalize-string@8.0.2(postcss@8.5.26):
dependencies:
- cssnano-utils: 5.0.0(postcss@8.4.39)
- postcss: 8.4.39
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-overflow-shorthand@5.0.1(postcss@8.4.39):
+ postcss-normalize-timing-functions@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-page-break@3.0.4(postcss@8.4.39):
+ postcss-normalize-unicode@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ browserslist: 4.28.7
+ postcss: 8.5.26
+ postcss-value-parser: 4.2.0
- postcss-place@9.0.1(postcss@8.4.39):
+ postcss-normalize-url@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-preset-env@9.5.15(postcss@8.4.39):
- dependencies:
- '@csstools/postcss-cascade-layers': 4.0.6(postcss@8.4.39)
- '@csstools/postcss-color-function': 3.0.17(postcss@8.4.39)
- '@csstools/postcss-color-mix-function': 2.0.17(postcss@8.4.39)
- '@csstools/postcss-exponential-functions': 1.0.8(postcss@8.4.39)
- '@csstools/postcss-font-format-keywords': 3.0.2(postcss@8.4.39)
- '@csstools/postcss-gamut-mapping': 1.0.10(postcss@8.4.39)
- '@csstools/postcss-gradients-interpolation-method': 4.0.18(postcss@8.4.39)
- '@csstools/postcss-hwb-function': 3.0.16(postcss@8.4.39)
- '@csstools/postcss-ic-unit': 3.0.6(postcss@8.4.39)
- '@csstools/postcss-initial': 1.0.1(postcss@8.4.39)
- '@csstools/postcss-is-pseudo-class': 4.0.8(postcss@8.4.39)
- '@csstools/postcss-light-dark-function': 1.0.6(postcss@8.4.39)
- '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.4.39)
- '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.4.39)
- '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.4.39)
- '@csstools/postcss-logical-resize': 2.0.1(postcss@8.4.39)
- '@csstools/postcss-logical-viewport-units': 2.0.10(postcss@8.4.39)
- '@csstools/postcss-media-minmax': 1.1.7(postcss@8.4.39)
- '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.10(postcss@8.4.39)
- '@csstools/postcss-nested-calc': 3.0.2(postcss@8.4.39)
- '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.4.39)
- '@csstools/postcss-oklab-function': 3.0.17(postcss@8.4.39)
- '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39)
- '@csstools/postcss-relative-color-syntax': 2.0.17(postcss@8.4.39)
- '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.4.39)
- '@csstools/postcss-stepped-value-functions': 3.0.9(postcss@8.4.39)
- '@csstools/postcss-text-decoration-shorthand': 3.0.7(postcss@8.4.39)
- '@csstools/postcss-trigonometric-functions': 3.0.9(postcss@8.4.39)
- '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.39)
- autoprefixer: 10.4.19(postcss@8.4.39)
- browserslist: 4.26.2
- css-blank-pseudo: 6.0.2(postcss@8.4.39)
- css-has-pseudo: 6.0.5(postcss@8.4.39)
- css-prefers-color-scheme: 9.0.1(postcss@8.4.39)
- cssdb: 8.0.2
- postcss: 8.4.39
- postcss-attribute-case-insensitive: 6.0.3(postcss@8.4.39)
- postcss-clamp: 4.1.0(postcss@8.4.39)
- postcss-color-functional-notation: 6.0.12(postcss@8.4.39)
- postcss-color-hex-alpha: 9.0.4(postcss@8.4.39)
- postcss-color-rebeccapurple: 9.0.3(postcss@8.4.39)
- postcss-custom-media: 10.0.7(postcss@8.4.39)
- postcss-custom-properties: 13.3.11(postcss@8.4.39)
- postcss-custom-selectors: 7.1.11(postcss@8.4.39)
- postcss-dir-pseudo-class: 8.0.1(postcss@8.4.39)
- postcss-double-position-gradients: 5.0.6(postcss@8.4.39)
- postcss-focus-visible: 9.0.1(postcss@8.4.39)
- postcss-focus-within: 8.0.1(postcss@8.4.39)
- postcss-font-variant: 5.0.0(postcss@8.4.39)
- postcss-gap-properties: 5.0.1(postcss@8.4.39)
- postcss-image-set-function: 6.0.3(postcss@8.4.39)
- postcss-lab-function: 6.0.17(postcss@8.4.39)
- postcss-logical: 7.0.1(postcss@8.4.39)
- postcss-nesting: 12.1.5(postcss@8.4.39)
- postcss-opacity-percentage: 2.0.0(postcss@8.4.39)
- postcss-overflow-shorthand: 5.0.1(postcss@8.4.39)
- postcss-page-break: 3.0.4(postcss@8.4.39)
- postcss-place: 9.0.1(postcss@8.4.39)
- postcss-pseudo-class-any-link: 9.0.2(postcss@8.4.39)
- postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.39)
- postcss-selector-not: 7.0.2(postcss@8.4.39)
-
- postcss-pseudo-class-any-link@9.0.2(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
-
- postcss-reduce-initial@5.1.2(postcss@8.4.39):
- dependencies:
- browserslist: 4.26.3
- caniuse-api: 3.0.0
- postcss: 8.4.39
-
- postcss-reduce-initial@7.0.1(postcss@8.4.39):
- dependencies:
- browserslist: 4.26.3
- caniuse-api: 3.0.0
- postcss: 8.4.39
-
- postcss-reduce-transforms@5.1.0(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
+ postcss-normalize-whitespace@8.0.2(postcss@8.5.26):
+ dependencies:
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-reduce-transforms@7.0.0(postcss@8.4.39):
+ postcss-ordered-values@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ cssnano-utils: 6.0.2(postcss@8.5.26)
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- postcss-replace-overflow-wrap@4.0.0(postcss@8.4.39):
+ postcss-reduce-initial@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ browserslist: 4.28.7
+ caniuse-api: 4.0.0
+ postcss: 8.5.26
- postcss-resolve-nested-selector@0.1.1: {}
-
- postcss-safe-parser@6.0.0(postcss@8.4.31):
+ postcss-reduce-transforms@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.31
+ postcss: 8.5.26
+ postcss-value-parser: 4.2.0
- postcss-safe-parser@6.0.0(postcss@8.4.35):
+ postcss-safe-parser@6.0.0(postcss@8.5.15):
dependencies:
- postcss: 8.4.35
+ postcss: 8.5.15
- postcss-selector-not@7.0.2(postcss@8.4.39):
+ postcss-safe-parser@7.0.1(postcss@8.5.15):
dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ postcss: 8.5.15
- postcss-selector-parser@6.0.13:
+ postcss-selector-parser@7.1.1:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
- postcss-selector-parser@6.1.2:
+ postcss-selector-parser@7.1.5:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
- postcss-svgo@5.1.0(postcss@8.4.39):
+ postcss-svgo@8.0.3(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
+ postcss: 8.5.26
postcss-value-parser: 4.2.0
- svgo: 2.8.0
+ svgo: 4.0.2
- postcss-svgo@7.0.1(postcss@8.4.39):
+ postcss-unique-selectors@8.0.2(postcss@8.5.26):
dependencies:
- postcss: 8.4.39
- postcss-value-parser: 4.2.0
- svgo: 3.3.2
-
- postcss-unique-selectors@5.1.1(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
-
- postcss-unique-selectors@7.0.1(postcss@8.4.39):
- dependencies:
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
-
- postcss-url@10.1.3(postcss@8.4.39):
- dependencies:
- make-dir: 3.1.0
- mime: 2.5.2
- minimatch: 3.0.8
- postcss: 8.4.39
- xxhashjs: 0.2.2
+ postcss: 8.5.26
+ postcss-selector-parser: 7.1.5
postcss-value-parser@4.2.0: {}
- postcss@7.0.39:
- dependencies:
- picocolors: 0.2.1
- source-map: 0.6.1
-
- postcss@8.4.31:
- dependencies:
- nanoid: 3.3.8
- picocolors: 1.0.0
- source-map-js: 1.0.2
-
- postcss@8.4.35:
+ postcss@8.5.15:
dependencies:
- nanoid: 3.3.8
- picocolors: 1.0.0
- source-map-js: 1.0.2
-
- postcss@8.4.39:
- dependencies:
- nanoid: 3.3.8
- picocolors: 1.0.1
- source-map-js: 1.2.0
+ nanoid: 3.3.12
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
- postcss@8.5.6:
+ postcss@8.5.26:
dependencies:
- nanoid: 3.3.11
+ nanoid: 3.3.17
picocolors: 1.1.1
source-map-js: 1.2.1
- prelude-ls@1.2.1: {}
-
- prepend-http@1.0.4: {}
-
- prettier@2.8.8:
- optional: true
-
- prettier@3.6.2: {}
-
- pretty-bytes@5.6.0: {}
-
- pretty-error@2.1.2:
- dependencies:
- lodash: 4.17.21
- renderkid: 2.0.7
+ powershell-utils@0.1.0: {}
- pretty-format@30.2.0:
- dependencies:
- '@jest/schemas': 30.0.5
- ansi-styles: 5.2.0
- react-is: 18.3.1
+ prelude-ls@1.2.1: {}
- pretty-time@1.1.0: {}
+ prettier@3.8.4: {}
- pretty@2.0.0:
- dependencies:
- condense-newlines: 0.2.1
- extend-shallow: 2.0.1
- js-beautify: 1.14.9
+ pretty-bytes@7.1.1: {}
process-nextick-args@2.0.1: {}
process@0.11.10: {}
- promise-inflight@1.0.1(bluebird@3.7.2):
- optionalDependencies:
- bluebird: 3.7.2
-
proper-lockfile@4.1.2:
dependencies:
graceful-fs: 4.2.11
retry: 0.12.0
signal-exit: 3.0.7
- proto-list@1.2.4: {}
+ property-information@7.2.0: {}
- proto3-json-serializer@0.1.9:
+ prosemirror-changeset@2.4.1:
dependencies:
- protobufjs: 6.11.4
- optional: true
+ prosemirror-transform: 1.12.0
- protobufjs@6.11.3:
+ prosemirror-commands@1.7.2:
dependencies:
- '@protobufjs/aspromise': 1.1.2
- '@protobufjs/base64': 1.1.2
- '@protobufjs/codegen': 2.0.4
- '@protobufjs/eventemitter': 1.1.0
- '@protobufjs/fetch': 1.1.0
- '@protobufjs/float': 1.0.2
- '@protobufjs/inquire': 1.1.0
- '@protobufjs/path': 1.1.2
- '@protobufjs/pool': 1.1.0
- '@protobufjs/utf8': 1.1.0
- '@types/long': 4.0.2
- '@types/node': 24.6.2
- long: 4.0.0
- optional: true
+ prosemirror-model: 1.25.11
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
- protobufjs@6.11.4:
+ prosemirror-dropcursor@1.8.3:
dependencies:
- '@protobufjs/aspromise': 1.1.2
- '@protobufjs/base64': 1.1.2
- '@protobufjs/codegen': 2.0.4
- '@protobufjs/eventemitter': 1.1.0
- '@protobufjs/fetch': 1.1.0
- '@protobufjs/float': 1.0.2
- '@protobufjs/inquire': 1.1.0
- '@protobufjs/path': 1.1.2
- '@protobufjs/pool': 1.1.0
- '@protobufjs/utf8': 1.1.0
- '@types/long': 4.0.2
- '@types/node': 24.6.2
- long: 4.0.0
- optional: true
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
+ prosemirror-view: 1.42.2
- protobufjs@7.2.5:
+ prosemirror-gapcursor@1.4.1:
dependencies:
- '@protobufjs/aspromise': 1.1.2
- '@protobufjs/base64': 1.1.2
- '@protobufjs/codegen': 2.0.4
- '@protobufjs/eventemitter': 1.1.0
- '@protobufjs/fetch': 1.1.0
- '@protobufjs/float': 1.0.2
- '@protobufjs/inquire': 1.1.0
- '@protobufjs/path': 1.1.2
- '@protobufjs/pool': 1.1.0
- '@protobufjs/utf8': 1.1.0
- '@types/node': 24.6.2
- long: 5.2.3
-
- protocols@2.0.1: {}
+ prosemirror-keymap: 1.2.3
+ prosemirror-model: 1.25.11
+ prosemirror-state: 1.4.4
+ prosemirror-view: 1.42.2
- proxy-from-env@1.1.0: {}
+ prosemirror-history@1.5.0:
+ dependencies:
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
+ prosemirror-view: 1.42.2
+ rope-sequence: 1.3.4
- prr@1.0.1: {}
+ prosemirror-inputrules@1.5.1:
+ dependencies:
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
- pseudomap@1.0.2: {}
+ prosemirror-keymap@1.2.3:
+ dependencies:
+ prosemirror-state: 1.4.4
+ w3c-keyname: 2.2.8
- public-encrypt@4.0.3:
+ prosemirror-model@1.25.11:
dependencies:
- bn.js: 4.12.0
- browserify-rsa: 4.1.0
- create-hash: 1.2.0
- parse-asn1: 5.1.6
- randombytes: 2.1.0
- safe-buffer: 5.2.1
+ orderedmap: 2.1.1
- pump@2.0.1:
+ prosemirror-schema-list@1.5.1:
dependencies:
- end-of-stream: 1.4.4
- once: 1.4.0
+ prosemirror-model: 1.25.11
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
- pump@3.0.0:
+ prosemirror-state@1.4.4:
dependencies:
- end-of-stream: 1.4.4
- once: 1.4.0
+ prosemirror-model: 1.25.11
+ prosemirror-transform: 1.12.0
+ prosemirror-view: 1.42.2
- pumpify@1.5.1:
+ prosemirror-tables@1.8.5:
dependencies:
- duplexify: 3.7.1
- inherits: 2.0.4
- pump: 2.0.1
+ prosemirror-keymap: 1.2.3
+ prosemirror-model: 1.25.11
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
+ prosemirror-view: 1.42.2
- pumpify@2.0.1:
+ prosemirror-transform@1.12.0:
dependencies:
- duplexify: 4.1.2
- inherits: 2.0.4
- pump: 3.0.0
- optional: true
+ prosemirror-model: 1.25.11
- punycode@1.4.1: {}
+ prosemirror-view@1.42.2:
+ dependencies:
+ prosemirror-model: 1.25.11
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
- punycode@2.3.0: {}
+ protobufjs@7.6.1:
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/base64': 1.1.2
+ '@protobufjs/codegen': 2.0.5
+ '@protobufjs/eventemitter': 1.1.1
+ '@protobufjs/fetch': 1.1.1
+ '@protobufjs/float': 1.0.2
+ '@protobufjs/inquire': 1.1.2
+ '@protobufjs/path': 1.1.2
+ '@protobufjs/pool': 1.1.0
+ '@protobufjs/utf8': 1.1.1
+ '@types/node': 25.9.1
+ long: 5.3.2
punycode@2.3.1: {}
- pure-rand@7.0.1: {}
-
- pusher-js@8.4.0:
+ pusher-js@8.5.0:
dependencies:
tweetnacl: 1.0.3
+ qified@0.10.1:
+ dependencies:
+ hookified: 2.2.0
+
qrcode@1.5.4:
dependencies:
dijkstrajs: 1.0.3
pngjs: 5.0.0
yargs: 15.4.1
- qs@6.11.2:
- dependencies:
- side-channel: 1.0.4
-
- query-string@4.3.4:
- dependencies:
- object-assign: 4.1.1
- strict-uri-encode: 1.1.0
+ quansync@0.2.11: {}
- querystring-es3@0.2.1: {}
+ quansync@1.0.0: {}
queue-microtask@1.2.3: {}
- quick-lru@5.1.1: {}
-
- randombytes@2.1.0:
- dependencies:
- safe-buffer: 5.2.1
-
- randomfill@1.0.4:
- dependencies:
- randombytes: 2.1.0
- safe-buffer: 5.2.1
-
- range-parser@1.2.1: {}
-
- rc9@2.1.1:
- dependencies:
- defu: 6.1.4
- destr: 2.0.3
- flat: 5.0.2
-
- rc9@2.1.2:
- dependencies:
- defu: 6.1.4
- destr: 2.0.3
-
- react-is@18.3.1: {}
-
- read-cache@1.0.0:
- dependencies:
- pify: 2.3.0
-
- read-pkg-up@7.0.1:
- dependencies:
- find-up: 4.1.0
- read-pkg: 5.2.0
- type-fest: 0.8.1
-
- read-pkg-up@8.0.0:
- dependencies:
- find-up: 5.0.0
- read-pkg: 6.0.0
- type-fest: 1.4.0
+ radix3@1.1.2: {}
- read-pkg@5.2.0:
- dependencies:
- '@types/normalize-package-data': 2.4.2
- normalize-package-data: 2.5.0
- parse-json: 5.2.0
- type-fest: 0.6.0
+ range-parser@1.3.0: {}
- read-pkg@6.0.0:
+ rc9@3.0.1:
dependencies:
- '@types/normalize-package-data': 2.4.2
- normalize-package-data: 3.0.3
- parse-json: 5.2.0
- type-fest: 1.4.0
+ defu: 6.1.7
+ destr: 2.0.5
readable-stream@2.3.8:
dependencies:
@@ -18797,88 +15118,66 @@ snapshots:
string_decoder: 1.1.1
util-deprecate: 1.0.2
- readable-stream@3.6.2:
+ readable-stream@4.7.0:
dependencies:
- inherits: 2.0.4
+ abort-controller: 3.0.0
+ buffer: 6.0.3
+ events: 3.3.0
+ process: 0.11.10
string_decoder: 1.3.0
- util-deprecate: 1.0.2
-
- readdirp@2.2.1:
- dependencies:
- graceful-fs: 4.2.11
- micromatch: 3.1.10
- readable-stream: 2.3.8
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- readdirp@3.6.0:
- dependencies:
- picomatch: 2.3.1
-
- redent@4.0.0:
- dependencies:
- indent-string: 5.0.0
- strip-indent: 4.0.0
- regenerate-unicode-properties@10.1.1:
+ readdir-glob@1.1.3:
dependencies:
- regenerate: 1.4.2
+ minimatch: 5.1.9
- regenerate@1.4.2: {}
+ readdirp@5.1.1: {}
- regenerator-runtime@0.11.1: {}
+ redis-errors@1.2.0: {}
- regenerator-runtime@0.14.1: {}
-
- regenerator-transform@0.15.2:
+ redis-parser@3.0.0:
dependencies:
- '@babel/runtime': 7.24.7
+ redis-errors: 1.2.0
- regex-not@1.0.2:
+ refa@0.12.1:
dependencies:
- extend-shallow: 3.0.2
- safe-regex: 1.1.0
-
- regexp-tree@0.1.27: {}
+ '@eslint-community/regexpp': 4.12.2
- regexp.prototype.flags@1.5.1:
+ regex-recursion@6.0.2:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- set-function-name: 2.0.1
+ regex-utilities: 2.3.0
- regexpp@3.2.0: {}
+ regex-utilities@2.3.0: {}
- regexpu-core@5.3.2:
+ regex@6.1.0:
dependencies:
- '@babel/regjsgen': 0.8.0
- regenerate: 1.4.2
- regenerate-unicode-properties: 10.1.1
- regjsparser: 0.9.1
- unicode-match-property-ecmascript: 2.0.0
- unicode-match-property-value-ecmascript: 2.1.0
+ regex-utilities: 2.3.0
- regjsparser@0.9.1:
+ regexp-ast-analysis@0.7.1:
dependencies:
- jsesc: 0.5.0
-
- relateurl@0.2.7: {}
+ '@eslint-community/regexpp': 4.12.2
+ refa: 0.12.1
- remove-trailing-separator@1.1.0:
- optional: true
+ regexp-tree@0.1.27: {}
- renderkid@2.0.7:
+ regjsparser@0.13.2:
dependencies:
- css-select: 4.3.0
- dom-converter: 0.2.0
- htmlparser2: 6.1.0
- lodash: 4.17.21
- strip-ansi: 3.0.1
-
- repeat-element@1.1.4: {}
+ jsesc: 3.1.0
- repeat-string@1.6.1: {}
+ reka-ui@2.9.10(vue@3.5.34(typescript@5.9.3)):
+ dependencies:
+ '@floating-ui/dom': 1.7.6
+ '@floating-ui/vue': 1.1.11(vue@3.5.34(typescript@5.9.3))
+ '@internationalized/date': 3.12.2
+ '@internationalized/number': 3.6.7
+ '@tanstack/vue-virtual': 3.13.31(vue@3.5.34(typescript@5.9.3))
+ '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ '@vueuse/shared': 14.3.0(vue@3.5.34(typescript@5.9.3))
+ aria-hidden: 1.2.6
+ defu: 6.1.7
+ ohash: 2.0.11
+ vue: 3.5.34(typescript@5.9.3)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
require-directory@2.1.1: {}
@@ -18886,257 +15185,210 @@ snapshots:
require-main-filename@2.0.0: {}
- resolve-cwd@3.0.0:
- dependencies:
- resolve-from: 5.0.0
-
+ reserved-identifiers@1.2.0: {}
+
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
resolve-pkg-maps@1.0.0: {}
- resolve-url@0.2.1: {}
-
- resolve@1.22.6:
+ resolve@1.22.12:
dependencies:
- is-core-module: 2.13.0
+ es-errors: 1.3.0
+ is-core-module: 2.16.2
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- restore-cursor@3.1.0:
- dependencies:
- onetime: 5.1.2
- signal-exit: 3.0.7
-
restore-cursor@5.1.0:
dependencies:
onetime: 7.0.0
signal-exit: 4.1.0
- ret@0.1.15: {}
-
- retry-request@4.2.2:
- dependencies:
- debug: 4.4.3
- extend: 3.0.2
- transitivePeerDependencies:
- - supports-color
- optional: true
-
retry@0.12.0: {}
- retry@0.13.1:
- optional: true
-
- reusify@1.0.4: {}
+ reusify@1.1.0: {}
rfdc@1.4.1: {}
- rimraf@2.7.1:
+ rolldown-string@0.3.1(rolldown@1.2.3):
dependencies:
- glob: 7.2.3
+ magic-string: 1.1.0
+ optionalDependencies:
+ rolldown: 1.2.3
- rimraf@3.0.2:
+ rolldown@1.2.3:
dependencies:
- glob: 7.2.3
+ '@oxc-project/types': 0.143.0
+ '@rolldown/pluginutils': 1.0.1
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.2.3
+ '@rolldown/binding-darwin-arm64': 1.2.3
+ '@rolldown/binding-darwin-x64': 1.2.3
+ '@rolldown/binding-freebsd-x64': 1.2.3
+ '@rolldown/binding-linux-arm-gnueabihf': 1.2.3
+ '@rolldown/binding-linux-arm64-gnu': 1.2.3
+ '@rolldown/binding-linux-arm64-musl': 1.2.3
+ '@rolldown/binding-linux-ppc64-gnu': 1.2.3
+ '@rolldown/binding-linux-s390x-gnu': 1.2.3
+ '@rolldown/binding-linux-x64-gnu': 1.2.3
+ '@rolldown/binding-linux-x64-musl': 1.2.3
+ '@rolldown/binding-openharmony-arm64': 1.2.3
+ '@rolldown/binding-win32-arm64-msvc': 1.2.3
+ '@rolldown/binding-win32-x64-msvc': 1.2.3
+
+ rollup-plugin-visualizer@7.0.1(rolldown@1.2.3)(rollup@4.62.4):
+ dependencies:
+ open: 11.0.0
+ picomatch: 4.0.5
+ source-map: 0.7.6
+ yargs: 18.1.0
+ optionalDependencies:
+ rolldown: 1.2.3
+ rollup: 4.62.4
- ripemd160@2.0.2:
+ rollup@4.62.4:
dependencies:
- hash-base: 3.1.0
- inherits: 2.0.4
-
- rollup@2.79.2:
+ '@types/estree': 1.0.9
optionalDependencies:
+ '@napi-rs/lzma-linux-x64-gnu': 1.5.1
+ '@rollup/rollup-android-arm-eabi': 4.62.4
+ '@rollup/rollup-android-arm64': 4.62.4
+ '@rollup/rollup-darwin-arm64': 4.62.4
+ '@rollup/rollup-darwin-x64': 4.62.4
+ '@rollup/rollup-freebsd-arm64': 4.62.4
+ '@rollup/rollup-freebsd-x64': 4.62.4
+ '@rollup/rollup-linux-arm-gnueabihf': 4.62.4
+ '@rollup/rollup-linux-arm-musleabihf': 4.62.4
+ '@rollup/rollup-linux-arm64-gnu': 4.62.4
+ '@rollup/rollup-linux-arm64-musl': 4.62.4
+ '@rollup/rollup-linux-loong64-gnu': 4.62.4
+ '@rollup/rollup-linux-loong64-musl': 4.62.4
+ '@rollup/rollup-linux-ppc64-gnu': 4.62.4
+ '@rollup/rollup-linux-ppc64-musl': 4.62.4
+ '@rollup/rollup-linux-riscv64-gnu': 4.62.4
+ '@rollup/rollup-linux-riscv64-musl': 4.62.4
+ '@rollup/rollup-linux-s390x-gnu': 4.62.4
+ '@rollup/rollup-linux-x64-gnu': 4.62.4
+ '@rollup/rollup-linux-x64-musl': 4.62.4
+ '@rollup/rollup-openbsd-x64': 4.62.4
+ '@rollup/rollup-openharmony-arm64': 4.62.4
+ '@rollup/rollup-win32-arm64-msvc': 4.62.4
+ '@rollup/rollup-win32-ia32-msvc': 4.62.4
+ '@rollup/rollup-win32-x64-gnu': 4.62.4
+ '@rollup/rollup-win32-x64-msvc': 4.62.4
fsevents: 2.3.3
- rollup@3.29.5:
- optionalDependencies:
- fsevents: 2.3.3
+ rope-sequence@1.3.4: {}
+
+ rou3@0.8.1: {}
- rrweb-cssom@0.8.0: {}
+ rou3@0.9.1: {}
- run-async@2.4.1: {}
+ run-applescript@7.1.0: {}
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
- run-queue@1.0.3:
- dependencies:
- aproba: 1.2.0
-
- rxjs@6.6.7:
- dependencies:
- tslib: 1.14.1
-
- safe-array-concat@1.0.1:
- dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.3.0
- has-symbols: 1.0.3
- isarray: 2.0.5
-
safe-buffer@5.1.2: {}
safe-buffer@5.2.1: {}
- safe-regex-test@1.0.0:
- dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.3.0
- is-regex: 1.1.4
-
- safe-regex@1.1.0:
+ sass@1.100.0:
dependencies:
- ret: 0.1.15
-
- safe-regex@2.1.1:
- dependencies:
- regexp-tree: 0.1.27
-
- safer-buffer@2.1.2: {}
-
- sass-loader@10.4.1(sass@1.32.13)(webpack@5.102.0):
- dependencies:
- klona: 2.0.6
- loader-utils: 2.0.4
- neo-async: 2.6.2
- schema-utils: 3.3.0
- semver: 7.7.2
- webpack: 5.102.0
+ chokidar: 5.0.0
+ immutable: 5.1.5
+ source-map-js: 1.2.1
optionalDependencies:
- sass: 1.32.13
-
- sass@1.32.13:
- dependencies:
- chokidar: 3.6.0
-
- sax@1.4.1: {}
-
- saxes@6.0.0:
- dependencies:
- xmlchars: 2.2.0
-
- schema-utils@1.0.0:
- dependencies:
- ajv: 6.12.6
- ajv-errors: 1.0.1(ajv@6.12.6)
- ajv-keywords: 3.5.2(ajv@6.12.6)
-
- schema-utils@2.7.0:
- dependencies:
- '@types/json-schema': 7.0.15
- ajv: 6.12.6
- ajv-keywords: 3.5.2(ajv@6.12.6)
-
- schema-utils@2.7.1:
- dependencies:
- '@types/json-schema': 7.0.15
- ajv: 6.12.6
- ajv-keywords: 3.5.2(ajv@6.12.6)
+ '@parcel/watcher': 2.5.6
- schema-utils@3.3.0:
- dependencies:
- '@types/json-schema': 7.0.15
- ajv: 6.12.6
- ajv-keywords: 3.5.2(ajv@6.12.6)
+ sax@1.6.1: {}
- schema-utils@4.3.2:
+ scslre@0.3.0:
dependencies:
- '@types/json-schema': 7.0.15
- ajv: 8.17.1
- ajv-formats: 2.1.1(ajv@8.17.1)
- ajv-keywords: 5.1.0(ajv@8.17.1)
-
- scule@0.2.1: {}
-
- scule@1.0.0: {}
+ '@eslint-community/regexpp': 4.12.2
+ refa: 0.12.1
+ regexp-ast-analysis: 0.7.1
scule@1.3.0: {}
- semver@5.7.2: {}
-
semver@6.3.1: {}
- semver@7.5.4:
- dependencies:
- lru-cache: 6.0.0
+ semver@7.8.1: {}
- semver@7.7.2: {}
+ semver@7.8.5: {}
- send@0.19.0:
+ send@1.2.1:
dependencies:
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- encodeurl: 1.0.2
+ debug: 4.4.3
+ encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
- fresh: 0.5.2
- http-errors: 2.0.0
- mime: 1.6.0
+ fresh: 2.0.0
+ http-errors: 2.0.1
+ mime-types: 3.0.2
ms: 2.1.3
on-finished: 2.4.1
- range-parser: 1.2.1
- statuses: 2.0.1
+ range-parser: 1.3.0
+ statuses: 2.0.2
transitivePeerDependencies:
- supports-color
- serialize-javascript@4.0.0:
- dependencies:
- randombytes: 2.1.0
-
- serialize-javascript@5.0.1:
- dependencies:
- randombytes: 2.1.0
-
- serialize-javascript@6.0.1:
- dependencies:
- randombytes: 2.1.0
+ serialize-javascript@7.0.7: {}
- serialize-javascript@6.0.2:
- dependencies:
- randombytes: 2.1.0
+ seroval@1.6.2: {}
serve-placeholder@2.0.2:
dependencies:
- defu: 6.1.4
+ defu: 6.1.7
- serve-static@1.16.2:
+ serve-static@2.2.1:
dependencies:
encodeurl: 2.0.0
escape-html: 1.0.3
parseurl: 1.3.3
- send: 0.19.0
+ send: 1.2.1
transitivePeerDependencies:
- supports-color
- server-destroy@1.0.1: {}
-
set-blocking@2.0.0: {}
- set-function-name@2.0.1:
- dependencies:
- define-data-property: 1.1.0
- functions-have-names: 1.2.3
- has-property-descriptors: 1.0.0
-
- set-value@2.0.1:
- dependencies:
- extend-shallow: 2.0.1
- is-extendable: 0.1.1
- is-plain-object: 2.0.4
- split-string: 3.1.0
-
- setimmediate@1.0.5: {}
-
setprototypeof@1.2.0: {}
- sha.js@2.4.11:
+ sharp@0.35.3(@types/node@25.9.1):
dependencies:
- inherits: 2.0.4
- safe-buffer: 5.2.1
+ '@img/colour': 1.1.0
+ detect-libc: 2.1.2
+ semver: 7.8.5
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.35.3
+ '@img/sharp-darwin-x64': 0.35.3
+ '@img/sharp-freebsd-wasm32': 0.35.3
+ '@img/sharp-libvips-darwin-arm64': 1.3.2
+ '@img/sharp-libvips-darwin-x64': 1.3.2
+ '@img/sharp-libvips-linux-arm': 1.3.2
+ '@img/sharp-libvips-linux-arm64': 1.3.2
+ '@img/sharp-libvips-linux-ppc64': 1.3.2
+ '@img/sharp-libvips-linux-riscv64': 1.3.2
+ '@img/sharp-libvips-linux-s390x': 1.3.2
+ '@img/sharp-libvips-linux-x64': 1.3.2
+ '@img/sharp-libvips-linuxmusl-arm64': 1.3.2
+ '@img/sharp-libvips-linuxmusl-x64': 1.3.2
+ '@img/sharp-linux-arm': 0.35.3
+ '@img/sharp-linux-arm64': 0.35.3
+ '@img/sharp-linux-ppc64': 0.35.3
+ '@img/sharp-linux-riscv64': 0.35.3
+ '@img/sharp-linux-s390x': 0.35.3
+ '@img/sharp-linux-x64': 0.35.3
+ '@img/sharp-linuxmusl-arm64': 0.35.3
+ '@img/sharp-linuxmusl-x64': 0.35.3
+ '@img/sharp-webcontainers-wasm32': 0.35.3
+ '@img/sharp-win32-arm64': 0.35.3
+ '@img/sharp-win32-ia32': 0.35.3
+ '@img/sharp-win32-x64': 0.35.3
+ '@types/node': 25.9.1
+ optional: true
shebang-command@2.0.0:
dependencies:
@@ -19144,35 +15396,45 @@ snapshots:
shebang-regex@3.0.0: {}
- shell-quote@1.8.1: {}
+ shell-quote@1.10.0: {}
- side-channel@1.0.4:
+ shiki@4.3.1:
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.3.0
- object-inspect: 1.12.3
+ '@shikijs/core': 4.3.1
+ '@shikijs/engine-javascript': 4.3.1
+ '@shikijs/engine-oniguruma': 4.3.1
+ '@shikijs/langs': 4.3.1
+ '@shikijs/themes': 4.3.1
+ '@shikijs/types': 4.3.1
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
signal-exit@3.0.7: {}
signal-exit@4.1.0: {}
- sirv@2.0.3:
+ simple-git@3.36.0:
dependencies:
- '@polka/url': 1.0.0-next.23
- mrmime: 1.0.1
- totalist: 3.0.1
+ '@kwsites/file-exists': 1.1.1
+ '@kwsites/promise-deferred': 1.1.1
+ '@simple-git/args-pathspec': 1.0.3
+ '@simple-git/argv-parser': 1.1.1
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
- sitemap@4.1.1:
+ sirv@3.0.2:
dependencies:
- '@types/node': 12.20.55
- '@types/sax': 1.2.7
- arg: 4.1.3
- sax: 1.4.1
- xmlbuilder: 13.0.2
+ '@polka/url': 1.0.0-next.29
+ mrmime: 2.0.1
+ totalist: 3.0.1
- slash@3.0.0: {}
+ sisteransi@1.0.5: {}
- slash@4.0.0: {}
+ site-config-stack@4.1.1(vue@3.5.34(typescript@5.9.3)):
+ dependencies:
+ ufo: 1.6.4
+ vue: 3.5.34(typescript@5.9.3)
slash@5.1.0: {}
@@ -19182,168 +15444,63 @@ snapshots:
astral-regex: 2.0.0
is-fullwidth-code-point: 3.0.0
- slice-ansi@5.0.0:
+ slice-ansi@7.1.2:
dependencies:
ansi-styles: 6.2.3
- is-fullwidth-code-point: 4.0.0
+ is-fullwidth-code-point: 5.1.0
- slice-ansi@7.1.0:
+ slice-ansi@8.0.0:
dependencies:
ansi-styles: 6.2.3
- is-fullwidth-code-point: 5.0.0
-
- snapdragon-node@2.1.1:
- dependencies:
- define-property: 1.0.0
- isobject: 3.0.1
- snapdragon-util: 3.0.1
-
- snapdragon-util@3.0.1:
- dependencies:
- kind-of: 3.2.2
-
- snapdragon@0.8.2:
- dependencies:
- base: 0.11.2
- debug: 2.6.9
- define-property: 0.2.5
- extend-shallow: 2.0.1
- map-cache: 0.2.2
- source-map: 0.5.7
- source-map-resolve: 0.5.3
- use: 3.1.1
- transitivePeerDependencies:
- - supports-color
-
- sort-keys@1.1.2:
- dependencies:
- is-plain-obj: 1.1.0
-
- sort-keys@2.0.0:
- dependencies:
- is-plain-obj: 1.1.0
-
- source-list-map@2.0.1: {}
+ is-fullwidth-code-point: 5.1.0
- source-map-js@1.0.2: {}
-
- source-map-js@1.2.0: {}
+ smob@1.6.2: {}
source-map-js@1.2.1: {}
- source-map-resolve@0.5.3:
- dependencies:
- atob: 2.1.2
- decode-uri-component: 0.2.2
- resolve-url: 0.2.1
- source-map-url: 0.4.1
- urix: 0.1.0
-
- source-map-support@0.5.13:
- dependencies:
- buffer-from: 1.1.2
- source-map: 0.6.1
-
source-map-support@0.5.21:
dependencies:
buffer-from: 1.1.2
source-map: 0.6.1
- source-map-url@0.4.1: {}
-
- source-map@0.5.6: {}
-
- source-map@0.5.7: {}
-
source-map@0.6.1: {}
source-map@0.7.6: {}
- spdx-correct@3.2.0:
- dependencies:
- spdx-expression-parse: 3.0.1
- spdx-license-ids: 3.0.15
-
- spdx-exceptions@2.3.0: {}
-
- spdx-expression-parse@3.0.1:
- dependencies:
- spdx-exceptions: 2.3.0
- spdx-license-ids: 3.0.15
-
- spdx-license-ids@3.0.15: {}
-
- split-string@3.1.0:
- dependencies:
- extend-shallow: 3.0.2
-
- split2@4.2.0: {}
-
- sprintf-js@1.0.3: {}
-
- ssri@6.0.2:
- dependencies:
- figgy-pudding: 3.5.2
-
- ssri@8.0.1:
- dependencies:
- minipass: 3.3.6
-
- stable@0.1.8: {}
+ space-separated-tokens@2.0.2: {}
- stack-trace@0.0.10: {}
+ spdx-exceptions@2.5.0: {}
- stack-utils@2.0.6:
+ spdx-expression-parse@4.0.0:
dependencies:
- escape-string-regexp: 2.0.0
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.23
- stackframe@1.3.4: {}
-
- static-extend@0.1.2:
- dependencies:
- define-property: 0.2.5
- object-copy: 0.1.0
+ spdx-license-ids@3.0.23: {}
- statuses@1.5.0: {}
+ speakingurl@14.0.1: {}
- statuses@2.0.1: {}
+ srvx@0.11.22: {}
- std-env@3.7.0: {}
+ stable-hash-x@0.2.0: {}
- stream-browserify@2.0.2:
- dependencies:
- inherits: 2.0.4
- readable-stream: 2.3.8
+ standard-as-callback@2.1.0: {}
- stream-each@1.2.3:
- dependencies:
- end-of-stream: 1.4.4
- stream-shift: 1.0.1
+ statuses@2.0.2: {}
- stream-events@1.0.5:
- dependencies:
- stubs: 3.0.0
- optional: true
+ std-env@4.2.0: {}
- stream-http@2.8.3:
+ streamx@2.28.0:
dependencies:
- builtin-status-codes: 3.0.0
- inherits: 2.0.4
- readable-stream: 2.3.8
- to-arraybuffer: 1.0.1
- xtend: 4.0.2
-
- stream-shift@1.0.1: {}
-
- strict-uri-encode@1.1.0: {}
+ events-universal: 1.0.1
+ fast-fifo: 1.3.2
+ text-decoder: 1.2.7
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
string-argv@0.3.2: {}
- string-length@4.0.2:
- dependencies:
- char-regex: 1.0.2
- strip-ansi: 6.0.1
-
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -19354,31 +15511,23 @@ snapshots:
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
- strip-ansi: 7.1.2
+ strip-ansi: 7.2.0
string-width@7.2.0:
dependencies:
- emoji-regex: 10.4.0
- get-east-asian-width: 1.3.0
- strip-ansi: 7.1.2
-
- string.prototype.trim@1.2.8:
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.6.0
+ strip-ansi: 7.2.0
- string.prototype.trimend@1.0.7:
+ string-width@8.2.1:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
+ get-east-asian-width: 1.6.0
+ strip-ansi: 7.2.0
- string.prototype.trimstart@1.0.7:
+ string-width@8.2.2:
dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.1
- es-abstract: 1.22.2
+ get-east-asian-width: 1.6.0
+ strip-ansi: 7.2.0
string_decoder@1.1.1:
dependencies:
@@ -19388,449 +15537,242 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
- strip-ansi@3.0.1:
+ stringify-entities@4.0.4:
dependencies:
- ansi-regex: 2.1.1
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
- strip-ansi@7.1.0:
+ strip-ansi@7.2.0:
dependencies:
- ansi-regex: 6.1.0
-
- strip-ansi@7.1.2:
- dependencies:
- ansi-regex: 6.1.0
-
- strip-bom@3.0.0: {}
-
- strip-bom@4.0.0: {}
-
- strip-final-newline@2.0.0: {}
+ ansi-regex: 6.2.2
strip-final-newline@3.0.0: {}
- strip-indent@3.0.0:
- dependencies:
- min-indent: 1.0.1
-
- strip-indent@4.0.0:
- dependencies:
- min-indent: 1.0.1
-
- strip-json-comments@2.0.1: {}
-
- strip-json-comments@3.1.1: {}
-
- strip-literal@1.3.0:
- dependencies:
- acorn: 8.15.0
-
- strip-literal@2.1.0:
- dependencies:
- js-tokens: 9.0.0
-
- stubs@3.0.0:
- optional: true
+ strip-indent@4.1.1: {}
- style-resources-loader@1.5.0(webpack@4.47.0):
+ strip-literal@3.1.0:
dependencies:
- glob: 7.2.3
- loader-utils: 2.0.4
- schema-utils: 2.7.1
- tslib: 2.6.2
- webpack: 4.47.0
+ js-tokens: 9.0.1
- style-search@0.1.0: {}
-
- stylehacks@5.1.1(postcss@8.4.39):
+ strip-literal@4.0.0:
dependencies:
- browserslist: 4.26.3
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ js-tokens: 10.0.0
- stylehacks@7.0.2(postcss@8.4.39):
+ strnum@2.4.1:
dependencies:
- browserslist: 4.26.3
- postcss: 8.4.39
- postcss-selector-parser: 6.1.2
+ anynum: 1.0.1
- stylelint-config-html@1.1.0(postcss-html@1.7.0)(stylelint@15.11.0(typescript@4.9.5)):
- dependencies:
- postcss-html: 1.7.0
- stylelint: 15.11.0(typescript@4.9.5)
+ structured-clone-es@2.0.1: {}
- stylelint-config-prettier@9.0.5(stylelint@15.11.0(typescript@4.9.5)):
+ stylehacks@8.0.2(postcss@8.5.26):
dependencies:
- stylelint: 15.11.0(typescript@4.9.5)
+ browserslist: 4.28.7
+ postcss: 8.5.26
+ postcss-selector-parser: 7.1.5
- stylelint-config-recommended-vue@1.5.0(postcss-html@1.7.0)(stylelint@15.11.0(typescript@4.9.5)):
+ stylelint-config-html@1.1.0(postcss-html@1.8.1)(stylelint@17.13.0(typescript@5.9.3)):
dependencies:
- postcss-html: 1.7.0
- semver: 7.5.4
- stylelint: 15.11.0(typescript@4.9.5)
- stylelint-config-html: 1.1.0(postcss-html@1.7.0)(stylelint@15.11.0(typescript@4.9.5))
- stylelint-config-recommended: 13.0.0(stylelint@15.11.0(typescript@4.9.5))
+ postcss-html: 1.8.1
+ stylelint: 17.13.0(typescript@5.9.3)
- stylelint-config-recommended@13.0.0(stylelint@15.11.0(typescript@4.9.5)):
+ stylelint-config-recommended-vue@1.6.1(postcss-html@1.8.1)(stylelint@17.13.0(typescript@5.9.3)):
dependencies:
- stylelint: 15.11.0(typescript@4.9.5)
+ postcss-html: 1.8.1
+ semver: 7.8.1
+ stylelint: 17.13.0(typescript@5.9.3)
+ stylelint-config-html: 1.1.0(postcss-html@1.8.1)(stylelint@17.13.0(typescript@5.9.3))
+ stylelint-config-recommended: 18.0.0(stylelint@17.13.0(typescript@5.9.3))
- stylelint-config-standard@34.0.0(stylelint@15.11.0(typescript@4.9.5)):
+ stylelint-config-recommended@18.0.0(stylelint@17.13.0(typescript@5.9.3)):
dependencies:
- stylelint: 15.11.0(typescript@4.9.5)
- stylelint-config-recommended: 13.0.0(stylelint@15.11.0(typescript@4.9.5))
+ stylelint: 17.13.0(typescript@5.9.3)
- stylelint-webpack-plugin@5.0.1(stylelint@15.11.0(typescript@4.9.5))(webpack@5.102.0):
+ stylelint-config-standard@40.0.0(stylelint@17.13.0(typescript@5.9.3)):
dependencies:
- globby: 11.1.0
- jest-worker: 29.7.0
- micromatch: 4.0.8
- normalize-path: 3.0.0
- schema-utils: 4.3.2
- stylelint: 15.11.0(typescript@4.9.5)
- webpack: 5.102.0
+ stylelint: 17.13.0(typescript@5.9.3)
+ stylelint-config-recommended: 18.0.0(stylelint@17.13.0(typescript@5.9.3))
- stylelint@15.11.0(typescript@4.9.5):
+ stylelint@17.13.0(typescript@5.9.3):
dependencies:
- '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1)
- '@csstools/css-tokenizer': 2.2.1
- '@csstools/media-query-list-parser': 2.1.5(@csstools/css-parser-algorithms@2.3.2(@csstools/css-tokenizer@2.2.1))(@csstools/css-tokenizer@2.2.1)
- '@csstools/selector-specificity': 3.0.0(postcss-selector-parser@6.0.13)
- balanced-match: 2.0.0
+ '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-syntax-patches-for-csstree': 1.1.5(css-tree@3.2.1)
+ '@csstools/css-tokenizer': 4.0.0
+ '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
+ '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1)
+ '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1)
colord: 2.9.3
- cosmiconfig: 8.3.6(typescript@4.9.5)
- css-functions-list: 3.2.1
- css-tree: 2.3.1
- debug: 4.3.4
- fast-glob: 3.3.1
+ cosmiconfig: 9.0.2(typescript@5.9.3)
+ css-functions-list: 3.3.3
+ css-tree: 3.2.1
+ debug: 4.4.3
+ fast-glob: 3.3.3
fastest-levenshtein: 1.0.16
- file-entry-cache: 7.0.1
+ file-entry-cache: 11.1.3
global-modules: 2.0.0
- globby: 11.1.0
+ globby: 16.2.0
globjoin: 0.1.4
- html-tags: 3.3.1
- ignore: 5.2.4
- import-lazy: 4.0.0
- imurmurhash: 0.1.4
- is-plain-object: 5.0.0
- known-css-properties: 0.29.0
- mathml-tag-names: 2.1.3
- meow: 10.1.5
- micromatch: 4.0.5
+ html-tags: 5.1.0
+ ignore: 7.0.5
+ import-meta-resolve: 4.2.0
+ mathml-tag-names: 4.0.0
+ meow: 14.1.0
+ micromatch: 4.0.8
normalize-path: 3.0.0
- picocolors: 1.0.0
- postcss: 8.4.31
- postcss-resolve-nested-selector: 0.1.1
- postcss-safe-parser: 6.0.0(postcss@8.4.31)
- postcss-selector-parser: 6.0.13
+ picocolors: 1.1.1
+ postcss: 8.5.15
+ postcss-safe-parser: 7.0.1(postcss@8.5.15)
+ postcss-selector-parser: 7.1.1
postcss-value-parser: 4.2.0
- resolve-from: 5.0.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
- style-search: 0.1.0
- supports-hyperlinks: 3.0.0
+ string-width: 8.2.1
+ supports-hyperlinks: 4.5.0
svg-tags: 1.0.0
- table: 6.8.1
- write-file-atomic: 5.0.1
+ table: 6.9.0
+ write-file-atomic: 7.0.1
transitivePeerDependencies:
- supports-color
- typescript
- supports-color@2.0.0: {}
-
- supports-color@5.5.0:
- dependencies:
- has-flag: 3.0.0
-
- supports-color@7.2.0:
+ superjson@2.2.6:
dependencies:
- has-flag: 4.0.0
+ copy-anything: 4.0.5
- supports-color@8.1.1:
- dependencies:
- has-flag: 4.0.0
+ supports-color@10.2.2: {}
- supports-hyperlinks@3.0.0:
+ supports-hyperlinks@4.5.0:
dependencies:
- has-flag: 4.0.0
- supports-color: 7.2.0
+ has-flag: 5.0.1
+ supports-color: 10.2.2
supports-preserve-symlinks-flag@1.0.0: {}
svg-tags@1.0.0: {}
- svgo@2.8.0:
+ svgo@4.0.2:
dependencies:
- '@trysound/sax': 0.2.0
- commander: 7.2.0
- css-select: 4.3.0
- css-tree: 1.1.3
- csso: 4.2.0
- picocolors: 1.1.1
- stable: 0.1.8
-
- svgo@3.3.2:
- dependencies:
- '@trysound/sax': 0.2.0
- commander: 7.2.0
- css-select: 5.1.0
- css-tree: 2.3.1
- css-what: 6.1.0
+ commander: 11.1.0
+ css-select: 5.2.2
+ css-tree: 3.2.1
+ css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
+ sax: 1.6.1
- symbol-tree@3.2.4: {}
-
- synckit@0.11.11:
+ table@6.9.0:
dependencies:
- '@pkgr/core': 0.2.9
-
- table@6.8.1:
- dependencies:
- ajv: 8.12.0
+ ajv: 8.20.0
lodash.truncate: 4.4.2
slice-ansi: 4.0.0
string-width: 4.2.3
strip-ansi: 6.0.1
- tapable@1.1.3: {}
+ tagged-tag@1.0.0: {}
- tapable@2.2.3: {}
+ tailwind-merge@3.6.0: {}
- tar@6.2.0:
+ tailwind-variants@3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.2):
dependencies:
- chownr: 2.0.0
- fs-minipass: 2.1.0
- minipass: 5.0.0
- minizlib: 2.1.2
- mkdirp: 1.0.4
- yallist: 4.0.0
+ tailwindcss: 4.3.2
+ optionalDependencies:
+ tailwind-merge: 3.6.0
- teeny-request@7.2.0:
- dependencies:
- http-proxy-agent: 5.0.0
- https-proxy-agent: 5.0.1
- node-fetch: 2.7.0
- stream-events: 1.0.5
- uuid: 8.3.2
- transitivePeerDependencies:
- - encoding
- - supports-color
- optional: true
+ tailwindcss@4.3.2: {}
- terser-webpack-plugin@1.4.6(webpack@4.47.0):
- dependencies:
- cacache: 12.0.4
- find-cache-dir: 2.1.0
- is-wsl: 1.1.0
- schema-utils: 1.0.0
- serialize-javascript: 4.0.0
- source-map: 0.6.1
- terser: 4.8.1
- webpack: 4.47.0
- webpack-sources: 1.4.3
- worker-farm: 1.7.0
+ tapable@2.3.3: {}
- terser-webpack-plugin@4.2.3(webpack@4.47.0):
+ tar-stream@3.2.0:
dependencies:
- cacache: 15.3.0
- find-cache-dir: 3.3.2
- jest-worker: 26.6.2
- p-limit: 3.1.0
- schema-utils: 3.3.0
- serialize-javascript: 5.0.1
- source-map: 0.6.1
- terser: 5.44.0
- webpack: 4.47.0
- webpack-sources: 1.4.3
+ b4a: 1.8.1
+ bare-fs: 4.8.0
+ fast-fifo: 1.3.2
+ streamx: 2.28.0
transitivePeerDependencies:
- - bluebird
+ - bare-abort-controller
+ - bare-buffer
+ - react-native-b4a
- terser-webpack-plugin@5.3.14(webpack@5.102.0):
+ tar@7.5.22:
dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- jest-worker: 27.5.1
- schema-utils: 4.3.2
- serialize-javascript: 6.0.2
- terser: 5.44.0
- webpack: 5.102.0
+ '@isaacs/fs-minipass': 4.0.1
+ chownr: 3.0.0
+ minipass: 7.1.3
+ minizlib: 3.1.0
+ yallist: 5.0.0
- terser@4.8.1:
+ teex@1.0.1:
dependencies:
- acorn: 8.15.0
- commander: 2.20.3
- source-map: 0.6.1
- source-map-support: 0.5.21
+ streamx: 2.28.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
- terser@5.44.0:
+ terser@5.49.2:
dependencies:
'@jridgewell/source-map': 0.3.11
- acorn: 8.15.0
+ acorn: 8.18.0
commander: 2.20.3
source-map-support: 0.5.21
- test-exclude@6.0.0:
- dependencies:
- '@istanbuljs/schema': 0.1.3
- glob: 7.2.3
- minimatch: 3.1.2
-
- text-decoding@1.0.0:
- optional: true
-
- text-extensions@2.4.0: {}
-
- text-table@0.2.0: {}
-
- thingies@1.21.0(tslib@2.6.2):
- dependencies:
- tslib: 2.6.2
-
- thread-loader@3.0.4(webpack@4.47.0):
- dependencies:
- json-parse-better-errors: 1.0.2
- loader-runner: 4.3.0
- loader-utils: 2.0.4
- neo-async: 2.6.2
- schema-utils: 3.3.0
- webpack: 4.47.0
-
- through2@2.0.5:
- dependencies:
- readable-stream: 2.3.8
- xtend: 4.0.2
-
- through@2.3.8: {}
-
- time-fix-plugin@2.0.7(webpack@4.47.0):
+ text-decoder@1.2.7:
dependencies:
- webpack: 4.47.0
-
- timers-browserify@2.0.12:
- dependencies:
- setimmediate: 1.0.5
-
- tinyexec@1.0.1: {}
+ b4a: 1.8.1
+ transitivePeerDependencies:
+ - react-native-b4a
- tldts-core@6.1.86: {}
+ tiny-inflate@1.0.3: {}
- tldts@6.1.86:
- dependencies:
- tldts-core: 6.1.86
+ tiny-invariant@1.3.3: {}
- tmp@0.0.33:
- dependencies:
- os-tmpdir: 1.0.2
+ tinyclip@0.1.15: {}
- tmpl@1.0.5: {}
+ tinyexec@1.2.2: {}
- to-arraybuffer@1.0.1: {}
+ tinyexec@1.2.4: {}
- to-fast-properties@1.0.3: {}
+ tinyexec@1.3.0: {}
- to-object-path@0.3.0:
+ tinyglobby@0.2.16:
dependencies:
- kind-of: 3.2.2
+ fdir: 6.5.0(picomatch@4.0.5)
+ picomatch: 4.0.5
- to-regex-range@2.1.1:
+ tinyglobby@0.2.17:
dependencies:
- is-number: 3.0.0
- repeat-string: 1.6.1
+ fdir: 6.5.0(picomatch@4.0.5)
+ picomatch: 4.0.5
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
- to-regex@3.0.2:
+ to-valid-identifier@1.0.0:
dependencies:
- define-property: 2.0.2
- extend-shallow: 3.0.2
- regex-not: 1.0.2
- safe-regex: 1.1.0
+ '@sindresorhus/base62': 1.0.0
+ reserved-identifiers: 1.2.0
toidentifier@1.0.1: {}
totalist@3.0.1: {}
- tough-cookie@5.1.2:
- dependencies:
- tldts: 6.1.86
-
tr46@0.0.3: {}
- tr46@5.1.1:
- dependencies:
- punycode: 2.3.1
-
- tree-dump@1.0.2(tslib@2.6.2):
- dependencies:
- tslib: 2.6.2
+ trim-lines@3.0.1: {}
- trim-newlines@4.1.1: {}
-
- ts-api-utils@1.0.3(typescript@4.9.5):
+ ts-api-utils@2.5.0(typescript@5.9.3):
dependencies:
- typescript: 4.9.5
+ typescript: 5.9.3
- ts-jest@29.4.4(@babel/core@7.28.4)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.4))(jest-util@30.2.0)(jest@30.2.0(@types/node@24.6.2))(typescript@4.9.5):
- dependencies:
- bs-logger: 0.2.6
- fast-json-stable-stringify: 2.1.0
- handlebars: 4.7.8
- jest: 30.2.0(@types/node@24.6.2)
- json5: 2.2.3
- lodash.memoize: 4.1.2
- make-error: 1.3.6
- semver: 7.7.2
- type-fest: 4.41.0
- typescript: 4.9.5
- yargs-parser: 21.1.1
- optionalDependencies:
- '@babel/core': 7.28.4
- '@jest/transform': 30.2.0
- '@jest/types': 30.2.0
- babel-jest: 30.2.0(@babel/core@7.28.4)
- jest-util: 30.2.0
+ tslib@2.8.1: {}
- ts-loader@8.4.0(typescript@4.9.5)(webpack@5.102.0):
+ tsx@4.22.3:
dependencies:
- chalk: 4.1.2
- enhanced-resolve: 4.5.0
- loader-utils: 2.0.4
- micromatch: 4.0.8
- semver: 7.7.2
- typescript: 4.9.5
- webpack: 5.102.0
-
- ts-pnp@1.2.0(typescript@4.9.5):
+ esbuild: 0.28.1
optionalDependencies:
- typescript: 4.9.5
-
- tsconfig-paths@3.14.2:
- dependencies:
- '@types/json5': 0.0.29
- json5: 1.0.2
- minimist: 1.2.8
- strip-bom: 3.0.0
-
- tsconfig@7.0.0:
- dependencies:
- '@types/strip-bom': 3.0.0
- '@types/strip-json-comments': 0.0.30
- strip-bom: 3.0.0
- strip-json-comments: 2.0.1
-
- tslib@1.14.1: {}
-
- tslib@2.6.2: {}
-
- tslib@2.8.1:
- optional: true
-
- tty-browserify@0.0.0: {}
+ fsevents: 2.3.3
tweetnacl@1.0.3: {}
@@ -19838,719 +15780,691 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
- type-detect@4.0.8: {}
-
- type-fest@0.20.2: {}
-
- type-fest@0.21.3: {}
-
- type-fest@0.6.0: {}
-
- type-fest@0.8.1: {}
-
- type-fest@1.4.0: {}
+ type-fest@5.8.0:
+ dependencies:
+ tagged-tag: 1.0.0
- type-fest@4.41.0: {}
+ type-level-regexp@0.1.17: {}
- typed-array-buffer@1.0.0:
- dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.3.0
- is-typed-array: 1.1.12
+ typescript@5.9.3: {}
- typed-array-byte-length@1.0.0:
- dependencies:
- call-bind: 1.0.2
- for-each: 0.3.3
- has-proto: 1.0.1
- is-typed-array: 1.1.12
+ ufo@1.6.4: {}
- typed-array-byte-offset@1.0.0:
- dependencies:
- available-typed-arrays: 1.0.5
- call-bind: 1.0.2
- for-each: 0.3.3
- has-proto: 1.0.1
- is-typed-array: 1.1.12
+ ultrahtml@1.7.0: {}
- typed-array-length@1.0.4:
+ unconfig-core@7.5.0:
dependencies:
- call-bind: 1.0.2
- for-each: 0.3.3
- is-typed-array: 1.1.12
+ '@quansync/fs': 1.0.0
+ quansync: 1.0.0
- typedarray-to-buffer@3.1.5:
+ unconfig@0.6.1:
dependencies:
- is-typedarray: 1.0.0
- optional: true
-
- typedarray@0.0.6: {}
-
- typescript@4.9.5: {}
-
- ua-parser-js@1.0.38: {}
-
- ufo@1.6.1: {}
-
- uglify-js@3.19.3:
- optional: true
+ '@antfu/utils': 8.1.1
+ defu: 6.1.7
+ importx: 0.5.2
+ transitivePeerDependencies:
+ - supports-color
- unbox-primitive@1.0.2:
+ unconfig@7.5.0:
dependencies:
- call-bind: 1.0.2
- has-bigints: 1.0.2
- has-symbols: 1.0.3
- which-boxed-primitive: 1.0.2
+ '@quansync/fs': 1.0.0
+ defu: 6.1.7
+ jiti: 2.7.0
+ quansync: 1.0.0
+ unconfig-core: 7.5.0
uncrypto@0.1.3: {}
- unctx@2.3.1:
+ unctx@2.5.0:
dependencies:
- acorn: 8.15.0
+ acorn: 8.18.0
estree-walker: 3.0.3
- magic-string: 0.30.10
- unplugin: 1.11.0
+ magic-string: 0.30.21
+ unplugin: 2.3.11
- undici-types@7.13.0: {}
+ unctx@3.0.0(magic-string@0.30.21)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))):
+ optionalDependencies:
+ magic-string: 0.30.21
+ oxc-parser: 0.138.0
+ rolldown: 1.2.3
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
- undici@6.19.7: {}
+ unctx@3.0.0(magic-string@1.1.0)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))):
+ optionalDependencies:
+ magic-string: 1.1.0
+ oxc-parser: 0.138.0
+ rolldown: 1.2.3
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
- unfetch@5.0.0: {}
+ undici-types@7.24.6: {}
- unicode-canonical-property-names-ecmascript@2.0.0: {}
+ undici@8.10.0: {}
- unicode-match-property-ecmascript@2.0.0:
+ unenv@2.0.0-rc.24:
dependencies:
- unicode-canonical-property-names-ecmascript: 2.0.0
- unicode-property-aliases-ecmascript: 2.1.0
-
- unicode-match-property-value-ecmascript@2.1.0: {}
+ pathe: 2.0.3
- unicode-property-aliases-ecmascript@2.1.0: {}
-
- unicorn-magic@0.1.0: {}
-
- unimport@3.4.0(rollup@3.29.5):
+ unhead@2.1.17:
dependencies:
- '@rollup/pluginutils': 5.0.4(rollup@3.29.5)
- escape-string-regexp: 5.0.0
- fast-glob: 3.3.1
- local-pkg: 0.4.3
- magic-string: 0.30.4
- mlly: 1.7.1
- pathe: 1.1.2
- pkg-types: 1.1.2
- scule: 1.3.0
- strip-literal: 1.3.0
- unplugin: 1.5.0
- transitivePeerDependencies:
- - rollup
+ hookable: 6.1.1
- unimport@3.7.2(rollup@3.29.5):
+ unhead@3.3.1(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
dependencies:
- '@rollup/pluginutils': 5.1.0(rollup@3.29.5)
- acorn: 8.15.0
- escape-string-regexp: 5.0.0
- estree-walker: 3.0.3
- fast-glob: 3.3.2
- local-pkg: 0.5.0
- magic-string: 0.30.10
- mlly: 1.7.1
- pathe: 1.1.2
- pkg-types: 1.1.2
- scule: 1.3.0
- strip-literal: 2.1.0
- unplugin: 1.11.0
+ hookable: 6.1.1
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ optionalDependencies:
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - rolldown
- rollup
+ - unloader
+ - webpack
- union-value@1.0.1:
- dependencies:
- arr-union: 3.1.0
- get-value: 2.0.6
- is-extendable: 0.1.1
- set-value: 2.0.1
-
- unique-filename@1.1.1:
- dependencies:
- unique-slug: 2.0.2
+ unicorn-magic@0.3.0: {}
- unique-slug@2.0.2:
- dependencies:
- imurmurhash: 0.1.4
+ unicorn-magic@0.4.0: {}
- unique-string@2.0.0:
+ unifont@0.7.4:
dependencies:
- crypto-random-string: 2.0.0
- optional: true
+ css-tree: 3.2.1
+ ofetch: 1.5.1
+ ohash: 2.0.11
- universalify@0.1.2: {}
-
- universalify@2.0.0: {}
-
- unpipe@1.0.0: {}
-
- unplugin@1.11.0:
+ unimport@5.7.0:
dependencies:
- acorn: 8.15.0
- chokidar: 3.6.0
- webpack-sources: 3.3.3
- webpack-virtual-modules: 0.6.2
+ acorn: 8.18.0
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ local-pkg: 1.2.1
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ pathe: 2.0.3
+ picomatch: 4.0.5
+ pkg-types: 2.3.1
+ scule: 1.3.0
+ strip-literal: 3.1.0
+ tinyglobby: 0.2.17
+ unplugin: 2.3.11
+ unplugin-utils: 0.3.2
- unplugin@1.5.0:
+ unimport@6.3.0(esbuild@0.25.12)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
dependencies:
- acorn: 8.15.0
- chokidar: 3.6.0
- webpack-sources: 3.3.3
- webpack-virtual-modules: 0.5.0
+ acorn: 8.16.0
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ local-pkg: 1.2.1
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ pathe: 2.0.3
+ picomatch: 4.0.5
+ pkg-types: 2.3.1
+ scule: 1.3.0
+ strip-literal: 3.1.0
+ tinyglobby: 0.2.17
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin-utils: 0.3.1
+ optionalDependencies:
+ oxc-parser: 0.138.0
+ rolldown: 1.2.3
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - rollup
+ - unloader
+ - vite
+ - webpack
- unrs-resolver@1.11.1:
+ unimport@6.4.0(esbuild@0.25.12)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
dependencies:
- napi-postinstall: 0.3.3
- optionalDependencies:
- '@unrs/resolver-binding-android-arm-eabi': 1.11.1
- '@unrs/resolver-binding-android-arm64': 1.11.1
- '@unrs/resolver-binding-darwin-arm64': 1.11.1
- '@unrs/resolver-binding-darwin-x64': 1.11.1
- '@unrs/resolver-binding-freebsd-x64': 1.11.1
- '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1
- '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1
- '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1
- '@unrs/resolver-binding-linux-arm64-musl': 1.11.1
- '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1
- '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1
- '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1
- '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1
- '@unrs/resolver-binding-linux-x64-gnu': 1.11.1
- '@unrs/resolver-binding-linux-x64-musl': 1.11.1
- '@unrs/resolver-binding-wasm32-wasi': 1.11.1
- '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1
- '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
- '@unrs/resolver-binding-win32-x64-msvc': 1.11.1
-
- unset-value@1.0.0:
- dependencies:
- has-value: 0.3.1
- isobject: 3.0.1
-
- untyped@1.4.0:
- dependencies:
- '@babel/core': 7.28.4
- '@babel/standalone': 7.23.1
- '@babel/types': 7.28.2
- defu: 6.1.4
- jiti: 1.21.6
- mri: 1.2.0
+ acorn: 8.18.0
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ local-pkg: 1.2.1
+ magic-string: 1.1.0
+ mlly: 1.8.2
+ pathe: 2.0.3
+ picomatch: 4.0.5
+ pkg-types: 2.3.1
scule: 1.3.0
+ strip-literal: 4.0.0
+ tinyglobby: 0.2.17
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin-utils: 0.3.2
+ optionalDependencies:
+ oxc-parser: 0.138.0
+ rolldown: 1.2.3
transitivePeerDependencies:
- - supports-color
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - rollup
+ - unloader
+ - vite
+ - webpack
- untyped@1.4.2:
+ unimport@6.4.0(esbuild@0.28.1)(oxc-parser@0.138.0)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
dependencies:
- '@babel/core': 7.28.4
- '@babel/standalone': 7.24.7
- '@babel/types': 7.28.2
- defu: 6.1.4
- jiti: 1.21.6
- mri: 1.2.0
+ acorn: 8.18.0
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ local-pkg: 1.2.1
+ magic-string: 1.1.0
+ mlly: 1.8.2
+ pathe: 2.0.3
+ picomatch: 4.0.5
+ pkg-types: 2.3.1
scule: 1.3.0
+ strip-literal: 4.0.0
+ tinyglobby: 0.2.17
+ unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin-utils: 0.3.2
+ optionalDependencies:
+ oxc-parser: 0.138.0
+ rolldown: 1.2.3
transitivePeerDependencies:
- - supports-color
-
- upath@1.2.0:
- optional: true
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - rollup
+ - unloader
+ - vite
+ - webpack
- upath@2.0.1: {}
+ unist-util-is@6.0.1:
+ dependencies:
+ '@types/unist': 3.0.3
- update-browserslist-db@1.1.3(browserslist@4.26.2):
+ unist-util-position@5.0.0:
dependencies:
- browserslist: 4.26.2
- escalade: 3.2.0
- picocolors: 1.1.1
+ '@types/unist': 3.0.3
- update-browserslist-db@1.1.3(browserslist@4.26.3):
+ unist-util-stringify-position@4.0.0:
dependencies:
- browserslist: 4.26.3
- escalade: 3.2.0
- picocolors: 1.1.1
+ '@types/unist': 3.0.3
- uri-js@4.4.1:
+ unist-util-visit-parents@6.0.2:
dependencies:
- punycode: 2.3.0
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
- urix@0.1.0: {}
+ unist-util-visit@5.1.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
- url-loader@4.1.1(file-loader@6.2.0(webpack@5.102.0))(webpack@4.47.0):
+ unplugin-auto-import@21.0.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))))(@vueuse/core@14.3.0(vue@3.5.34(typescript@5.9.3))):
dependencies:
- loader-utils: 2.0.4
- mime-types: 2.1.35
- schema-utils: 3.3.0
- webpack: 4.47.0
+ local-pkg: 1.2.1
+ magic-string: 0.30.21
+ picomatch: 4.0.5
+ unimport: 5.7.0
+ unplugin: 2.3.11
+ unplugin-utils: 0.3.2
optionalDependencies:
- file-loader: 6.2.0(webpack@5.102.0)
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
- url@0.11.3:
+ unplugin-utils@0.3.1:
dependencies:
- punycode: 1.4.1
- qs: 6.11.2
-
- use@3.1.1: {}
+ pathe: 2.0.3
+ picomatch: 4.0.5
- util-deprecate@1.0.2: {}
-
- util.promisify@1.0.0:
+ unplugin-utils@0.3.2:
dependencies:
- define-properties: 1.2.1
- object.getownpropertydescriptors: 2.1.7
+ pathe: 2.0.3
+ picomatch: 4.0.5
- util@0.10.4:
+ unplugin-vue-components@32.1.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))))(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3)):
dependencies:
- inherits: 2.0.3
+ chokidar: 5.0.0
+ local-pkg: 1.2.1
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ obug: 2.1.4
+ picomatch: 4.0.5
+ tinyglobby: 0.2.17
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin-utils: 0.3.2
+ vue: 3.5.34(typescript@5.9.3)
+ optionalDependencies:
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
+ transitivePeerDependencies:
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - rolldown
+ - rollup
+ - unloader
+ - vite
+ - webpack
- util@0.11.1:
+ unplugin@2.3.11:
dependencies:
- inherits: 2.0.3
-
- utila@0.4.0: {}
-
- utils-merge@1.0.1: {}
-
- uuid@8.3.2:
- optional: true
+ '@jridgewell/remapping': 2.3.5
+ acorn: 8.18.0
+ picomatch: 4.0.5
+ webpack-virtual-modules: 0.6.2
- v8-to-istanbul@9.3.0:
+ unplugin@3.0.0:
dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- '@types/istanbul-lib-coverage': 2.0.6
- convert-source-map: 2.0.0
+ '@jridgewell/remapping': 2.3.5
+ picomatch: 4.0.5
+ webpack-virtual-modules: 0.6.2
- validate-npm-package-license@3.0.4:
+ unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
dependencies:
- spdx-correct: 3.2.0
- spdx-expression-parse: 3.0.1
+ '@jridgewell/remapping': 2.3.5
+ picomatch: 4.0.5
+ webpack-virtual-modules: 0.6.2
+ optionalDependencies:
+ esbuild: 0.25.12
+ rolldown: 1.2.3
+ rollup: 4.62.4
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
- vary@1.1.2: {}
+ unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ picomatch: 4.0.5
+ webpack-virtual-modules: 0.6.2
+ optionalDependencies:
+ esbuild: 0.28.1
+ rolldown: 1.2.3
+ rollup: 4.62.4
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
- vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0)):
+ unrouting@0.2.2:
dependencies:
- '@rollup/pluginutils': 4.2.1
- '@types/eslint': 8.44.3
- eslint: 8.57.1
- rollup: 2.79.2
- vite: 4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0)
+ escape-string-regexp: 5.0.0
+ ufo: 1.6.4
- vite-plugin-stylelint@5.3.1(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0)):
+ unrs-resolver@1.12.2:
dependencies:
- '@rollup/pluginutils': 5.1.0(rollup@3.29.5)
- chokidar: 3.6.0
- debug: 4.4.1
- stylelint: 15.11.0(typescript@4.9.5)
- vite: 4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0)
+ napi-postinstall: 0.3.4
optionalDependencies:
- postcss: 8.4.39
- rollup: 3.29.5
- transitivePeerDependencies:
- - supports-color
-
- vite@4.5.3(@types/node@24.6.2)(sass@1.32.13)(terser@5.44.0):
+ '@unrs/resolver-binding-android-arm-eabi': 1.12.2
+ '@unrs/resolver-binding-android-arm64': 1.12.2
+ '@unrs/resolver-binding-darwin-arm64': 1.12.2
+ '@unrs/resolver-binding-darwin-x64': 1.12.2
+ '@unrs/resolver-binding-freebsd-x64': 1.12.2
+ '@unrs/resolver-binding-linux-arm-gnueabihf': 1.12.2
+ '@unrs/resolver-binding-linux-arm-musleabihf': 1.12.2
+ '@unrs/resolver-binding-linux-arm64-gnu': 1.12.2
+ '@unrs/resolver-binding-linux-arm64-musl': 1.12.2
+ '@unrs/resolver-binding-linux-loong64-gnu': 1.12.2
+ '@unrs/resolver-binding-linux-loong64-musl': 1.12.2
+ '@unrs/resolver-binding-linux-ppc64-gnu': 1.12.2
+ '@unrs/resolver-binding-linux-riscv64-gnu': 1.12.2
+ '@unrs/resolver-binding-linux-riscv64-musl': 1.12.2
+ '@unrs/resolver-binding-linux-s390x-gnu': 1.12.2
+ '@unrs/resolver-binding-linux-x64-gnu': 1.12.2
+ '@unrs/resolver-binding-linux-x64-musl': 1.12.2
+ '@unrs/resolver-binding-openharmony-arm64': 1.12.2
+ '@unrs/resolver-binding-wasm32-wasi': 1.12.2
+ '@unrs/resolver-binding-win32-arm64-msvc': 1.12.2
+ '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2
+ '@unrs/resolver-binding-win32-x64-msvc': 1.12.2
+
+ unstorage@1.17.5(db0@0.3.4)(ioredis@5.11.1):
dependencies:
- esbuild: 0.18.20
- postcss: 8.5.6
- rollup: 3.29.5
+ anymatch: 3.1.3
+ chokidar: 5.0.0
+ destr: 2.0.5
+ h3: 1.15.11
+ lru-cache: 11.5.2
+ node-fetch-native: 1.6.7
+ ofetch: 1.5.1
+ ufo: 1.6.4
optionalDependencies:
- '@types/node': 24.6.2
- fsevents: 2.3.3
- sass: 1.32.13
- terser: 5.44.0
+ db0: 0.3.4
+ ioredis: 5.11.1
- vm-browserify@1.1.2: {}
+ untun@0.2.2: {}
- vue-chartjs@5.3.2(chart.js@4.5.0)(vue@2.7.16):
+ untyped@2.0.0:
dependencies:
- chart.js: 4.5.0
- vue: 2.7.16
+ citty: 0.1.6
+ defu: 6.1.7
+ jiti: 2.7.0
+ knitwork: 1.3.0
+ scule: 1.3.0
- vue-class-component@7.2.6(vue@2.7.16):
+ unwasm@0.5.3:
dependencies:
- vue: 2.7.16
+ exsolve: 1.1.1
+ knitwork: 1.3.0
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ pathe: 2.0.3
+ pkg-types: 2.3.1
- vue-client-only@2.1.0: {}
+ upath@2.0.1: {}
- vue-eslint-parser@9.3.1(eslint@8.57.1):
+ update-browserslist-db@1.3.0(browserslist@4.28.7):
dependencies:
- debug: 4.4.1
- eslint: 8.57.1
- eslint-scope: 7.2.2
- eslint-visitor-keys: 3.4.3
- espree: 9.6.1
- esquery: 1.5.0
- lodash: 4.17.21
- semver: 7.5.4
- transitivePeerDependencies:
- - supports-color
+ browserslist: 4.28.7
+ escalade: 3.2.0
+ picocolors: 1.1.1
- vue-eslint-parser@9.4.3(eslint@8.57.1):
- dependencies:
- debug: 4.4.1
- eslint: 8.57.1
- eslint-scope: 7.2.2
- eslint-visitor-keys: 3.4.3
- espree: 9.6.1
- esquery: 1.6.0
- lodash: 4.17.21
- semver: 7.7.2
- transitivePeerDependencies:
- - supports-color
+ uqr@0.1.3: {}
- vue-glow@1.4.2:
+ uri-js@4.4.1:
dependencies:
- vue: 2.7.16
+ punycode: 2.3.1
- vue-hot-reload-api@2.3.4: {}
+ util-deprecate@1.0.2: {}
- vue-jest@3.0.7(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(vue-template-compiler@2.7.16)(vue@2.7.16):
+ v-phone-input@7.0.0(typescript@5.9.3)(vite-plugin-vuetify@2.1.3)(vue@3.5.34(typescript@5.9.3)):
dependencies:
- babel-core: 7.0.0-bridge.0(@babel/core@7.28.4)
- babel-plugin-transform-es2015-modules-commonjs: 6.26.2
- chalk: 2.4.2
- deasync: 0.1.29
- extract-from-css: 0.4.4
- find-babel-config: 1.2.0
- js-beautify: 1.14.9
- node-cache: 4.2.1
- object-assign: 4.1.1
- source-map: 0.5.7
- tsconfig: 7.0.0
- vue: 2.7.16
- vue-template-compiler: 2.7.16
- vue-template-es2015-compiler: 1.9.1
+ awesome-phonenumber: 7.8.0
+ countries-list: 3.3.0
+ vue: 3.5.34(typescript@5.9.3)
+ optionalDependencies:
+ flag-icons: 7.5.0
+ vuetify: 4.0.7(typescript@5.9.3)(vite-plugin-vuetify@2.1.3)(vue@3.5.34(typescript@5.9.3))
+ world-flags-sprite: 0.0.2
transitivePeerDependencies:
- - supports-color
+ - typescript
+ - vite-plugin-vuetify
+ - webpack-plugin-vuetify
- vue-loader@15.11.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(cache-loader@4.1.0(webpack@4.47.0))(css-loader@5.2.7(webpack@5.102.0))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.6.2)(vue-template-compiler@2.7.16)(webpack@4.47.0):
- dependencies:
- '@vue/component-compiler-utils': 3.3.0(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)
- css-loader: 5.2.7(webpack@5.102.0)
- hash-sum: 1.0.2
- loader-utils: 1.4.2
- vue-hot-reload-api: 2.3.4
- vue-style-loader: 4.1.3
- webpack: 4.47.0
+ valibot@1.4.1(typescript@5.9.3):
optionalDependencies:
- cache-loader: 4.1.0(webpack@4.47.0)
- prettier: 3.6.2
- vue-template-compiler: 2.7.16
- transitivePeerDependencies:
- - arc-templates
- - atpl
- - babel-core
- - bracket-template
- - coffee-script
- - dot
- - dust
- - dustjs-helpers
- - dustjs-linkedin
- - eco
- - ect
- - ejs
- - haml-coffee
- - hamlet
- - hamljs
- - handlebars
- - hogan.js
- - htmling
- - jade
- - jazz
- - jqtpl
- - just
- - liquid-node
- - liquor
- - lodash
- - marko
- - mote
- - mustache
- - nunjucks
- - plates
- - pug
- - qejs
- - ractive
- - razor-tmpl
- - react
- - react-dom
- - slm
- - squirrelly
- - swig
- - swig-templates
- - teacup
- - templayed
- - then-jade
- - then-pug
- - tinyliquid
- - toffee
- - twig
- - twing
- - underscore
- - vash
- - velocityjs
- - walrus
- - whiskers
-
- vue-meta@2.4.0:
+ typescript: 5.9.3
+
+ vaul-vue@0.4.1(reka-ui@2.9.10(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3)):
dependencies:
- deepmerge: 4.3.1
+ '@vueuse/core': 10.11.1(vue@3.5.34(typescript@5.9.3))
+ reka-ui: 2.9.10(vue@3.5.34(typescript@5.9.3))
+ vue: 3.5.34(typescript@5.9.3)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
- vue-no-ssr@1.1.1: {}
+ verkit@0.2.0: {}
- vue-property-decorator@9.1.2(vue-class-component@7.2.6(vue@2.7.16))(vue@2.7.16):
+ vfile-message@4.0.3:
dependencies:
- vue: 2.7.16
- vue-class-component: 7.2.6(vue@2.7.16)
+ '@types/unist': 3.0.3
+ unist-util-stringify-position: 4.0.0
- vue-router@3.6.5(vue@2.7.16):
+ vfile@6.0.3:
dependencies:
- vue: 2.7.16
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.3
- vue-server-renderer@2.7.16:
+ vite-dev-rpc@2.0.0(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
dependencies:
- chalk: 4.1.2
- hash-sum: 2.0.0
- he: 1.2.0
- lodash.template: 4.5.0
- lodash.uniq: 4.5.0
- resolve: 1.22.6
- serialize-javascript: 6.0.1
- source-map: 0.5.6
+ birpc: 4.0.0
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ vite-hot-client: 2.2.0(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
- vue-style-loader@4.1.3:
+ vite-hot-client@2.2.0(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
dependencies:
- hash-sum: 1.0.2
- loader-utils: 1.4.2
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
- vue-template-compiler@2.7.16:
+ vite-node@6.0.0(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0):
dependencies:
- de-indent: 1.0.2
- he: 1.2.0
-
- vue-template-es2015-compiler@1.9.1: {}
+ cac: 7.0.0
+ es-module-lexer: 2.3.1
+ obug: 2.1.4
+ pathe: 2.0.3
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - '@types/node'
+ - '@vitejs/devtools'
+ - esbuild
+ - jiti
+ - less
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - terser
+ - tsx
+ - yaml
+
+ vite-plugin-checker@0.14.5(eslint@10.5.0(jiti@2.7.0))(meow@14.1.0)(optionator@0.9.4)(stylelint@17.13.0(typescript@5.9.3))(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ chokidar: 5.0.0
+ npm-run-path: 6.0.0
+ picocolors: 1.1.1
+ picomatch: 4.0.5
+ proper-lockfile: 4.1.2
+ tiny-invariant: 1.3.3
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ optionalDependencies:
+ eslint: 10.5.0(jiti@2.7.0)
+ meow: 14.1.0
+ optionator: 0.9.4
+ stylelint: 17.13.0(typescript@5.9.3)
+ typescript: 5.9.3
+
+ vite-plugin-inspect@11.4.1(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))))(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)):
+ dependencies:
+ ansis: 4.3.1
+ error-stack-parser-es: 1.0.5
+ obug: 2.1.4
+ ohash: 2.0.11
+ open: 11.0.0
+ perfect-debounce: 2.1.0
+ sirv: 3.0.2
+ unplugin-utils: 0.3.2
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ vite-dev-rpc: 2.0.0(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ optionalDependencies:
+ '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.138.0)(rolldown@1.2.3)(unplugin@3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)))
- vue@2.7.16:
+ vite-plugin-vue-tracer@1.4.0(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3)):
dependencies:
- '@vue/compiler-sfc': 2.7.16
- csstype: 3.1.2
+ estree-walker: 3.0.3
+ exsolve: 1.1.1
+ magic-string: 0.30.21
+ pathe: 2.0.3
+ source-map-js: 1.2.1
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ vue: 3.5.41(typescript@5.9.3)
- vuetify-loader@1.9.2(vue@2.7.16)(vuetify@2.7.2(vue@2.7.16))(webpack@5.102.0):
+ vite-plugin-vuetify@2.1.3(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))(vuetify@4.0.7):
dependencies:
- acorn: 8.15.0
- acorn-walk: 8.2.0
- decache: 4.6.2
- file-loader: 6.2.0(webpack@5.102.0)
- loader-utils: 2.0.4
- vue: 2.7.16
- vuetify: 2.7.2(vue@2.7.16)
- webpack: 5.102.0
+ '@vuetify/loader-shared': 2.1.2(vue@3.5.34(typescript@5.9.3))(vuetify@4.0.7)
+ debug: 4.4.3
+ upath: 2.0.1
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
+ vue: 3.5.34(typescript@5.9.3)
+ vuetify: 4.0.7(typescript@5.9.3)(vite-plugin-vuetify@2.1.3)(vue@3.5.34(typescript@5.9.3))
+ transitivePeerDependencies:
+ - supports-color
- vuetify@2.7.2(vue@2.7.16):
+ vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0):
dependencies:
- vue: 2.7.16
+ lightningcss: 1.33.0
+ picomatch: 4.0.5
+ postcss: 8.5.26
+ rolldown: 1.2.3
+ tinyglobby: 0.2.17
+ optionalDependencies:
+ '@types/node': 25.9.1
+ esbuild: 0.25.12
+ fsevents: 2.3.3
+ jiti: 2.7.0
+ sass: 1.100.0
+ terser: 5.49.2
+ tsx: 4.22.3
+ yaml: 2.9.0
- vuex@3.6.2(vue@2.7.16):
+ vue-bundle-renderer@2.3.1:
dependencies:
- vue: 2.7.16
+ ufo: 1.6.4
- w3c-xmlserializer@5.0.0:
+ vue-chartjs@5.3.3(chart.js@4.5.1)(vue@3.5.34(typescript@5.9.3)):
dependencies:
- xml-name-validator: 5.0.0
+ chart.js: 4.5.1
+ vue: 3.5.34(typescript@5.9.3)
- walker@1.0.8:
- dependencies:
- makeerror: 1.0.12
+ vue-component-type-helpers@3.3.6: {}
- watchpack-chokidar2@2.0.1:
+ vue-demi@0.14.10(vue@3.5.34(typescript@5.9.3)):
dependencies:
- chokidar: 2.1.8
- transitivePeerDependencies:
- - supports-color
- optional: true
+ vue: 3.5.34(typescript@5.9.3)
+
+ vue-devtools-stub@0.1.0: {}
- watchpack@1.7.5:
+ vue-eslint-parser@10.4.1(eslint@10.5.0(jiti@2.7.0)):
dependencies:
- graceful-fs: 4.2.11
- neo-async: 2.6.2
- optionalDependencies:
- chokidar: 3.6.0
- watchpack-chokidar2: 2.0.1
+ debug: 4.4.3
+ eslint: 10.5.0(jiti@2.7.0)
+ eslint-scope: 9.1.2
+ eslint-visitor-keys: 5.0.1
+ espree: 11.2.0
+ esquery: 1.7.0
+ semver: 7.8.5
transitivePeerDependencies:
- supports-color
- watchpack@2.4.4:
+ vue-router@5.0.7(@vue/compiler-sfc@3.5.41)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3)):
dependencies:
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
-
- webidl-conversions@3.0.1: {}
-
- webidl-conversions@7.0.0: {}
+ '@babel/generator': 8.0.0-rc.6
+ '@vue-macros/common': 3.1.2(vue@3.5.34(typescript@5.9.3))
+ '@vue/devtools-api': 8.1.2
+ ast-walker-scope: 0.8.3
+ chokidar: 5.0.0
+ json5: 2.2.3
+ local-pkg: 1.2.1
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ muggle-string: 0.4.1
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ scule: 1.3.0
+ tinyglobby: 0.2.16
+ unplugin: 3.0.0
+ unplugin-utils: 0.3.1
+ vue: 3.5.34(typescript@5.9.3)
+ yaml: 2.9.0
+ optionalDependencies:
+ '@vue/compiler-sfc': 3.5.41
+ pinia: 3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3))
- webpack-bundle-analyzer@4.10.2:
+ vue-router@5.2.0(@vue/compiler-sfc@3.5.41)(esbuild@0.25.12)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3)))(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.41(typescript@5.9.3)):
dependencies:
- '@discoveryjs/json-ext': 0.5.7
- acorn: 8.15.0
- acorn-walk: 8.2.0
- commander: 7.2.0
- debounce: 1.2.1
- escape-string-regexp: 4.0.0
- gzip-size: 6.0.0
- html-escaper: 2.0.2
- opener: 1.5.2
- picocolors: 1.0.0
- sirv: 2.0.3
- ws: 7.5.10
+ '@babel/generator': 8.0.0
+ '@vue-macros/common': 3.1.4(vue@3.5.41(typescript@5.9.3))
+ '@vue/devtools-api': 8.2.1
+ ast-walker-scope: 0.9.0
+ chokidar: 5.0.0
+ json5: 2.2.3
+ local-pkg: 1.2.1
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ muggle-string: 0.4.1
+ nostics: 1.2.0
+ pathe: 2.0.3
+ picomatch: 4.0.5
+ scule: 1.3.0
+ tinyglobby: 0.2.17
+ unplugin: 3.3.0(esbuild@0.25.12)(rolldown@1.2.3)(rollup@4.62.4)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))
+ unplugin-utils: 0.3.2
+ vue: 3.5.41(typescript@5.9.3)
+ yaml: 2.9.0
+ optionalDependencies:
+ '@vue/compiler-sfc': 3.5.41
+ pinia: 3.0.4(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3))
+ vite: 8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0)
transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
+ - '@farmfe/core'
+ - '@rspack/core'
+ - bun-types-no-globals
+ - esbuild
+ - rolldown
+ - rollup
+ - unloader
+ - webpack
- webpack-dev-middleware@5.3.4(webpack@4.47.0):
+ vue@3.5.34(typescript@5.9.3):
dependencies:
- colorette: 2.0.20
- memfs: 3.5.3
- mime-types: 2.1.35
- range-parser: 1.2.1
- schema-utils: 4.3.2
- webpack: 4.47.0
+ '@vue/compiler-dom': 3.5.34
+ '@vue/compiler-sfc': 3.5.34
+ '@vue/runtime-dom': 3.5.34
+ '@vue/server-renderer': 3.5.34(vue@3.5.34(typescript@5.9.3))
+ '@vue/shared': 3.5.34
+ optionalDependencies:
+ typescript: 5.9.3
- webpack-hot-middleware@2.26.1:
+ vue@3.5.41(typescript@5.9.3):
dependencies:
- ansi-html-community: 0.0.8
- html-entities: 2.4.0
- strip-ansi: 6.0.1
-
- webpack-node-externals@3.0.0: {}
+ '@vue/compiler-dom': 3.5.41
+ '@vue/compiler-sfc': 3.5.41
+ '@vue/runtime-dom': 3.5.41
+ '@vue/server-renderer': 3.5.41
+ '@vue/shared': 3.5.41
+ optionalDependencies:
+ typescript: 5.9.3
- webpack-sources@1.4.3:
+ vuetify-nuxt-module@0.19.5(magicast@0.5.4)(typescript@5.9.3)(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3)):
dependencies:
- source-list-map: 2.0.1
- source-map: 0.6.1
+ '@nuxt/kit': 4.4.6(magicast@0.5.4)
+ defu: 6.1.7
+ destr: 2.0.5
+ local-pkg: 1.2.1
+ pathe: 1.1.2
+ perfect-debounce: 1.0.0
+ semver: 7.8.1
+ ufo: 1.6.4
+ unconfig: 0.6.1
+ upath: 2.0.1
+ vite-plugin-vuetify: 2.1.3(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))(vuetify@4.0.7)
+ vuetify: 4.0.7(typescript@5.9.3)(vite-plugin-vuetify@2.1.3)(vue@3.5.34(typescript@5.9.3))
+ transitivePeerDependencies:
+ - magicast
+ - supports-color
+ - typescript
+ - vite
+ - vue
+ - webpack-plugin-vuetify
- webpack-sources@3.3.3: {}
+ vuetify@4.0.7(typescript@5.9.3)(vite-plugin-vuetify@2.1.3)(vue@3.5.34(typescript@5.9.3)):
+ dependencies:
+ vue: 3.5.34(typescript@5.9.3)
+ optionalDependencies:
+ typescript: 5.9.3
+ vite-plugin-vuetify: 2.1.3(vite@8.2.1(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(sass@1.100.0)(terser@5.49.2)(tsx@4.22.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))(vuetify@4.0.7)
- webpack-virtual-modules@0.5.0: {}
+ w3c-keyname@2.2.8: {}
- webpack-virtual-modules@0.6.2: {}
+ web-vitals@4.2.4: {}
- webpack@4.47.0:
- dependencies:
- '@webassemblyjs/ast': 1.9.0
- '@webassemblyjs/helper-module-context': 1.9.0
- '@webassemblyjs/wasm-edit': 1.9.0
- '@webassemblyjs/wasm-parser': 1.9.0
- acorn: 6.4.2
- ajv: 6.12.6
- ajv-keywords: 3.5.2(ajv@6.12.6)
- chrome-trace-event: 1.0.4
- enhanced-resolve: 4.5.0
- eslint-scope: 4.0.3
- json-parse-better-errors: 1.0.2
- loader-runner: 2.4.0
- loader-utils: 1.4.2
- memory-fs: 0.4.1
- micromatch: 3.1.10
- mkdirp: 0.5.6
- neo-async: 2.6.2
- node-libs-browser: 2.2.1
- schema-utils: 1.0.0
- tapable: 1.1.3
- terser-webpack-plugin: 1.4.6(webpack@4.47.0)
- watchpack: 1.7.5
- webpack-sources: 1.4.3
- transitivePeerDependencies:
- - supports-color
+ webidl-conversions@3.0.1: {}
- webpack@5.102.0:
- dependencies:
- '@types/eslint-scope': 3.7.7
- '@types/estree': 1.0.8
- '@types/json-schema': 7.0.15
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/wasm-edit': 1.14.1
- '@webassemblyjs/wasm-parser': 1.14.1
- acorn: 8.15.0
- acorn-import-phases: 1.0.4(acorn@8.15.0)
- browserslist: 4.26.2
- chrome-trace-event: 1.0.4
- enhanced-resolve: 5.18.3
- es-module-lexer: 1.7.0
- eslint-scope: 5.1.1
- events: 3.3.0
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
- json-parse-even-better-errors: 2.3.1
- loader-runner: 4.3.0
- mime-types: 2.1.35
- neo-async: 2.6.2
- schema-utils: 4.3.2
- tapable: 2.2.3
- terser-webpack-plugin: 5.3.14(webpack@5.102.0)
- watchpack: 2.4.4
- webpack-sources: 3.3.3
- transitivePeerDependencies:
- - '@swc/core'
- - esbuild
- - uglify-js
-
- webpackbar@6.0.1(webpack@4.47.0):
- dependencies:
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- consola: 3.2.3
- figures: 3.2.0
- markdown-table: 2.0.0
- pretty-time: 1.1.0
- std-env: 3.7.0
- webpack: 4.47.0
- wrap-ansi: 7.0.0
+ webpack-virtual-modules@0.6.2: {}
websocket-driver@0.7.4:
dependencies:
- http-parser-js: 0.5.8
+ http-parser-js: 0.5.10
safe-buffer: 5.2.1
websocket-extensions: 0.1.4
websocket-extensions@0.1.4: {}
- whatwg-encoding@3.1.1:
- dependencies:
- iconv-lite: 0.6.3
-
- whatwg-mimetype@4.0.0: {}
-
- whatwg-url@14.2.0:
- dependencies:
- tr46: 5.1.1
- webidl-conversions: 7.0.0
-
whatwg-url@5.0.0:
dependencies:
tr46: 0.0.3
webidl-conversions: 3.0.1
- which-boxed-primitive@1.0.2:
- dependencies:
- is-bigint: 1.0.4
- is-boolean-object: 1.1.2
- is-number-object: 1.0.7
- is-string: 1.0.7
- is-symbol: 1.0.4
+ wheel-gestures@2.2.48: {}
which-module@2.0.1: {}
- which-typed-array@1.1.11:
- dependencies:
- available-typed-arrays: 1.0.5
- call-bind: 1.0.2
- for-each: 0.3.3
- gopd: 1.0.1
- has-tostringtag: 1.0.2
-
which@1.3.1:
dependencies:
isexe: 2.0.0
@@ -20559,15 +16473,20 @@ snapshots:
dependencies:
isexe: 2.0.0
- widest-line@3.1.0:
+ which@6.0.1:
dependencies:
- string-width: 4.2.3
+ isexe: 4.0.0
- wordwrap@1.0.0: {}
+ word-wrap@1.2.5: {}
- worker-farm@1.7.0:
+ world-flags-sprite@0.0.2:
+ optional: true
+
+ wrap-ansi@10.0.0:
dependencies:
- errno: 0.1.8
+ ansi-styles: 6.2.3
+ string-width: 8.2.1
+ strip-ansi: 7.2.0
wrap-ansi@6.2.0:
dependencies:
@@ -20585,88 +16504,53 @@ snapshots:
dependencies:
ansi-styles: 6.2.3
string-width: 5.1.2
- strip-ansi: 7.1.2
+ strip-ansi: 7.2.0
- wrap-ansi@9.0.0:
+ wrap-ansi@9.0.2:
dependencies:
ansi-styles: 6.2.3
string-width: 7.2.0
- strip-ansi: 7.1.0
-
- wrappy@1.0.2: {}
+ strip-ansi: 7.2.0
- write-file-atomic@2.4.3:
+ write-file-atomic@7.0.1:
dependencies:
- graceful-fs: 4.2.11
- imurmurhash: 0.1.4
- signal-exit: 3.0.7
-
- write-file-atomic@3.0.3:
- dependencies:
- imurmurhash: 0.1.4
- is-typedarray: 1.0.0
- signal-exit: 3.0.7
- typedarray-to-buffer: 3.1.5
- optional: true
-
- write-file-atomic@5.0.1:
- dependencies:
- imurmurhash: 0.1.4
signal-exit: 4.1.0
- write-json-file@2.3.0:
- dependencies:
- detect-indent: 5.0.0
- graceful-fs: 4.2.11
- make-dir: 1.3.0
- pify: 3.0.0
- sort-keys: 2.0.0
- write-file-atomic: 2.4.3
-
- ws@7.5.10: {}
+ ws@8.21.3: {}
- ws@8.18.3: {}
-
- xdg-basedir@4.0.0:
- optional: true
+ wsl-utils@0.3.1:
+ dependencies:
+ is-wsl: 3.1.1
+ powershell-utils: 0.1.0
xml-name-validator@4.0.0: {}
- xml-name-validator@5.0.0: {}
-
- xmlbuilder@13.0.2: {}
-
- xmlchars@2.2.0: {}
-
- xtend@4.0.2: {}
+ xml-naming@0.1.0: {}
- xxhashjs@0.2.2:
+ y-protocols@1.0.7(yjs@13.6.31):
dependencies:
- cuint: 0.2.2
+ lib0: 0.2.117
+ yjs: 13.6.31
y18n@4.0.3: {}
y18n@5.0.8: {}
- yallist@2.1.2: {}
-
yallist@3.1.1: {}
- yallist@4.0.0: {}
-
- yaml@1.10.2: {}
+ yallist@5.0.0: {}
- yaml@2.8.1: {}
+ yaml@2.9.0: {}
yargs-parser@18.1.3:
dependencies:
camelcase: 5.3.1
decamelize: 1.2.0
- yargs-parser@20.2.9: {}
-
yargs-parser@21.1.1: {}
+ yargs-parser@22.0.0: {}
+
yargs@15.4.1:
dependencies:
cliui: 6.0.0
@@ -20681,27 +16565,59 @@ snapshots:
y18n: 4.0.3
yargs-parser: 18.1.3
- yargs@16.2.0:
+ yargs@17.7.2:
dependencies:
- cliui: 7.0.4
+ cliui: 8.0.1
escalade: 3.2.0
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3
y18n: 5.0.8
- yargs-parser: 20.2.9
- optional: true
+ yargs-parser: 21.1.1
- yargs@17.7.2:
+ yargs@18.0.0:
dependencies:
- cliui: 8.0.1
+ cliui: 9.0.1
escalade: 3.2.0
get-caller-file: 2.0.5
- require-directory: 2.1.1
- string-width: 4.2.3
+ string-width: 7.2.0
y18n: 5.0.8
- yargs-parser: 21.1.1
+ yargs-parser: 22.0.0
+
+ yargs@18.1.0:
+ dependencies:
+ cliui: 9.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ string-width: 8.2.2
+ y18n: 5.0.8
+ yargs-parser: 22.0.0
+
+ yjs@13.6.31:
+ dependencies:
+ lib0: 0.2.117
yocto-queue@0.1.0: {}
- yocto-queue@1.2.1: {}
+ yocto-queue@1.2.2: {}
+
+ youch-core@0.3.3:
+ dependencies:
+ '@poppinss/exception': 1.2.3
+ error-stack-parser-es: 1.0.5
+
+ youch@4.1.1:
+ dependencies:
+ '@poppinss/colors': 4.1.6
+ '@poppinss/dumper': 0.7.0
+ '@speed-highlight/core': 1.2.23
+ cookie-es: 3.1.1
+ youch-core: 0.3.3
+
+ zip-stream@6.0.1:
+ dependencies:
+ archiver-utils: 5.0.2
+ compress-commons: 6.0.2
+ readable-stream: 4.7.0
+
+ zwitch@2.0.4: {}
diff --git a/web/pnpm-workspace.yaml b/web/pnpm-workspace.yaml
new file mode 100644
index 000000000..391a8baf8
--- /dev/null
+++ b/web/pnpm-workspace.yaml
@@ -0,0 +1,7 @@
+allowBuilds:
+ '@firebase/util': true
+ '@parcel/watcher': true
+ esbuild: true
+ protobufjs: true
+ unrs-resolver: true
+ vue-demi: true
diff --git a/web/static/avatar.png b/web/public/avatar.png
similarity index 100%
rename from web/static/avatar.png
rename to web/public/avatar.png
diff --git a/web/static/favicon.ico b/web/public/favicon.ico
similarity index 100%
rename from web/static/favicon.ico
rename to web/public/favicon.ico
diff --git a/web/static/header.png b/web/public/header.png
similarity index 100%
rename from web/static/header.png
rename to web/public/header.png
diff --git a/web/assets/img/alert.svg b/web/public/img/alert.svg
similarity index 100%
rename from web/assets/img/alert.svg
rename to web/public/img/alert.svg
diff --git a/web/assets/img/arnold.png b/web/public/img/arnold.png
similarity index 100%
rename from web/assets/img/arnold.png
rename to web/public/img/arnold.png
diff --git a/web/static/img/blog/end-to-end-encryption-to-sms-messages/encryption-key-android.png b/web/public/img/blog/end-to-end-encryption-to-sms-messages/encryption-key-android.png
similarity index 100%
rename from web/static/img/blog/end-to-end-encryption-to-sms-messages/encryption-key-android.png
rename to web/public/img/blog/end-to-end-encryption-to-sms-messages/encryption-key-android.png
diff --git a/web/static/img/blog/end-to-end-encryption-to-sms-messages/send-sms-message.png b/web/public/img/blog/end-to-end-encryption-to-sms-messages/send-sms-message.png
similarity index 100%
rename from web/static/img/blog/end-to-end-encryption-to-sms-messages/send-sms-message.png
rename to web/public/img/blog/end-to-end-encryption-to-sms-messages/send-sms-message.png
diff --git a/web/static/img/blog/forward-incoming-sms-from-phone-to-webhook/android-app.png b/web/public/img/blog/forward-incoming-sms-from-phone-to-webhook/android-app.png
similarity index 100%
rename from web/static/img/blog/forward-incoming-sms-from-phone-to-webhook/android-app.png
rename to web/public/img/blog/forward-incoming-sms-from-phone-to-webhook/android-app.png
diff --git a/web/static/img/blog/forward-incoming-sms-from-phone-to-webhook/header.png b/web/public/img/blog/forward-incoming-sms-from-phone-to-webhook/header.png
similarity index 100%
rename from web/static/img/blog/forward-incoming-sms-from-phone-to-webhook/header.png
rename to web/public/img/blog/forward-incoming-sms-from-phone-to-webhook/header.png
diff --git a/web/static/img/blog/forward-incoming-sms-from-phone-to-webhook/settings.png b/web/public/img/blog/forward-incoming-sms-from-phone-to-webhook/settings.png
similarity index 100%
rename from web/static/img/blog/forward-incoming-sms-from-phone-to-webhook/settings.png
rename to web/public/img/blog/forward-incoming-sms-from-phone-to-webhook/settings.png
diff --git a/web/static/img/blog/forward-incoming-sms-from-phone-to-webhook/webhook.png b/web/public/img/blog/forward-incoming-sms-from-phone-to-webhook/webhook.png
similarity index 100%
rename from web/static/img/blog/forward-incoming-sms-from-phone-to-webhook/webhook.png
rename to web/public/img/blog/forward-incoming-sms-from-phone-to-webhook/webhook.png
diff --git a/web/static/img/blog/grant-send-and-read-sms-permissions-on-android/allow-restricted-settings.png b/web/public/img/blog/grant-send-and-read-sms-permissions-on-android/allow-restricted-settings.png
similarity index 100%
rename from web/static/img/blog/grant-send-and-read-sms-permissions-on-android/allow-restricted-settings.png
rename to web/public/img/blog/grant-send-and-read-sms-permissions-on-android/allow-restricted-settings.png
diff --git a/web/static/img/blog/grant-send-and-read-sms-permissions-on-android/allow.png b/web/public/img/blog/grant-send-and-read-sms-permissions-on-android/allow.png
similarity index 100%
rename from web/static/img/blog/grant-send-and-read-sms-permissions-on-android/allow.png
rename to web/public/img/blog/grant-send-and-read-sms-permissions-on-android/allow.png
diff --git a/web/static/img/blog/grant-send-and-read-sms-permissions-on-android/app-info.png b/web/public/img/blog/grant-send-and-read-sms-permissions-on-android/app-info.png
similarity index 100%
rename from web/static/img/blog/grant-send-and-read-sms-permissions-on-android/app-info.png
rename to web/public/img/blog/grant-send-and-read-sms-permissions-on-android/app-info.png
diff --git a/web/static/img/blog/send-bulk-sms-from-csv-file-with-no-code/bulk-csv-upload.png b/web/public/img/blog/send-bulk-sms-from-csv-file-with-no-code/bulk-csv-upload.png
similarity index 100%
rename from web/static/img/blog/send-bulk-sms-from-csv-file-with-no-code/bulk-csv-upload.png
rename to web/public/img/blog/send-bulk-sms-from-csv-file-with-no-code/bulk-csv-upload.png
diff --git a/web/static/img/blog/send-bulk-sms-from-csv-file-with-no-code/httpms-spreedsheet.png b/web/public/img/blog/send-bulk-sms-from-csv-file-with-no-code/httpms-spreedsheet.png
similarity index 100%
rename from web/static/img/blog/send-bulk-sms-from-csv-file-with-no-code/httpms-spreedsheet.png
rename to web/public/img/blog/send-bulk-sms-from-csv-file-with-no-code/httpms-spreedsheet.png
diff --git a/web/static/img/blog/send-sms-from-android-phone-with-python/header.png b/web/public/img/blog/send-sms-from-android-phone-with-python/header.png
similarity index 100%
rename from web/static/img/blog/send-sms-from-android-phone-with-python/header.png
rename to web/public/img/blog/send-sms-from-android-phone-with-python/header.png
diff --git a/web/static/img/blog/send-sms-from-android-phone-with-python/sms-sent.png b/web/public/img/blog/send-sms-from-android-phone-with-python/sms-sent.png
similarity index 100%
rename from web/static/img/blog/send-sms-from-android-phone-with-python/sms-sent.png
rename to web/public/img/blog/send-sms-from-android-phone-with-python/sms-sent.png
diff --git a/web/static/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/google-sheets.png b/web/public/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/google-sheets.png
similarity index 100%
rename from web/static/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/google-sheets.png
rename to web/public/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/google-sheets.png
diff --git a/web/static/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-action-action.png b/web/public/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-action-action.png
similarity index 100%
rename from web/static/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-action-action.png
rename to web/public/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-action-action.png
diff --git a/web/static/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-action-event.png b/web/public/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-action-event.png
similarity index 100%
rename from web/static/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-action-event.png
rename to web/public/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-action-event.png
diff --git a/web/static/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-trigger.png b/web/public/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-trigger.png
similarity index 100%
rename from web/static/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-trigger.png
rename to web/public/img/blog/send-sms-when-new-row-is-added-to-google-sheets-using-zapier/zapier-trigger.png
diff --git a/web/assets/img/bulk-sms-template.png b/web/public/img/bulk-sms-template.png
similarity index 100%
rename from web/assets/img/bulk-sms-template.png
rename to web/public/img/bulk-sms-template.png
diff --git a/web/assets/img/code-snippet.png b/web/public/img/code-snippet.png
similarity index 100%
rename from web/assets/img/code-snippet.png
rename to web/public/img/code-snippet.png
diff --git a/web/assets/img/connection.svg b/web/public/img/connection.svg
similarity index 100%
rename from web/assets/img/connection.svg
rename to web/public/img/connection.svg
diff --git a/web/assets/img/discord-logo-blue.svg b/web/public/img/discord-logo-blue.svg
similarity index 100%
rename from web/assets/img/discord-logo-blue.svg
rename to web/public/img/discord-logo-blue.svg
diff --git a/web/assets/img/discord-logo.svg b/web/public/img/discord-logo.svg
similarity index 100%
rename from web/assets/img/discord-logo.svg
rename to web/public/img/discord-logo.svg
diff --git a/web/assets/img/flow-diagram.svg b/web/public/img/flow-diagram.svg
similarity index 100%
rename from web/assets/img/flow-diagram.svg
rename to web/public/img/flow-diagram.svg
diff --git a/web/assets/img/httpsms-github.png b/web/public/img/httpsms-github.png
similarity index 100%
rename from web/assets/img/httpsms-github.png
rename to web/public/img/httpsms-github.png
diff --git a/web/assets/img/icon.svg b/web/public/img/icon.svg
similarity index 100%
rename from web/assets/img/icon.svg
rename to web/public/img/icon.svg
diff --git a/web/assets/img/logo-mono.svg b/web/public/img/logo-mono.svg
similarity index 100%
rename from web/assets/img/logo-mono.svg
rename to web/public/img/logo-mono.svg
diff --git a/web/assets/img/logo.svg b/web/public/img/logo.svg
similarity index 100%
rename from web/assets/img/logo.svg
rename to web/public/img/logo.svg
diff --git a/web/assets/img/logos/uneed.svg b/web/public/img/logos/uneed.svg
similarity index 100%
rename from web/assets/img/logos/uneed.svg
rename to web/public/img/logos/uneed.svg
diff --git a/web/assets/img/manage-phones.svg b/web/public/img/manage-phones.svg
similarity index 100%
rename from web/assets/img/manage-phones.svg
rename to web/public/img/manage-phones.svg
diff --git a/web/assets/img/mobile-encryption.svg b/web/public/img/mobile-encryption.svg
similarity index 100%
rename from web/assets/img/mobile-encryption.svg
rename to web/public/img/mobile-encryption.svg
diff --git a/web/assets/img/open-source.svg b/web/public/img/open-source.svg
similarity index 100%
rename from web/assets/img/open-source.svg
rename to web/public/img/open-source.svg
diff --git a/web/assets/img/person-texting.svg b/web/public/img/person-texting.svg
similarity index 100%
rename from web/assets/img/person-texting.svg
rename to web/public/img/person-texting.svg
diff --git a/web/assets/img/phone-api-key.png b/web/public/img/phone-api-key.png
similarity index 100%
rename from web/assets/img/phone-api-key.png
rename to web/public/img/phone-api-key.png
diff --git a/web/assets/img/phone-login.png b/web/public/img/phone-login.png
similarity index 100%
rename from web/assets/img/phone-login.png
rename to web/public/img/phone-login.png
diff --git a/web/assets/img/queue.svg b/web/public/img/queue.svg
similarity index 100%
rename from web/assets/img/queue.svg
rename to web/public/img/queue.svg
diff --git a/web/assets/img/schedule-messages.svg b/web/public/img/schedule-messages.svg
similarity index 100%
rename from web/assets/img/schedule-messages.svg
rename to web/public/img/schedule-messages.svg
diff --git a/web/assets/img/writing-code-phone.svg b/web/public/img/writing-code-phone.svg
similarity index 100%
rename from web/assets/img/writing-code-phone.svg
rename to web/public/img/writing-code-phone.svg
diff --git a/web/assets/img/zapier-logo.svg b/web/public/img/zapier-logo.svg
similarity index 100%
rename from web/assets/img/zapier-logo.svg
rename to web/public/img/zapier-logo.svg
diff --git a/web/static/integrations.js b/web/public/integrations.js
similarity index 100%
rename from web/static/integrations.js
rename to web/public/integrations.js
diff --git a/web/static/logo-bg-none.png b/web/public/logo-bg-none.png
similarity index 100%
rename from web/static/logo-bg-none.png
rename to web/public/logo-bg-none.png
diff --git a/web/public/templates/httpsms-bulk.csv b/web/public/templates/httpsms-bulk.csv
new file mode 100644
index 000000000..66411bc7c
--- /dev/null
+++ b/web/public/templates/httpsms-bulk.csv
@@ -0,0 +1,3 @@
+FromPhoneNumber,ToPhoneNumber,Content,SendTime(optional)
+18005550199,18005550100,This is a sample text message1,
+18005550199,18005550100,This is a sample text message2,2023-11-11T02:10:01
diff --git a/web/public/templates/httpsms-bulk.xlsx b/web/public/templates/httpsms-bulk.xlsx
new file mode 100644
index 000000000..ca23f441d
Binary files /dev/null and b/web/public/templates/httpsms-bulk.xlsx differ
diff --git a/web/shared/types/api.ts b/web/shared/types/api.ts
new file mode 100644
index 000000000..27e2db111
--- /dev/null
+++ b/web/shared/types/api.ts
@@ -0,0 +1,855 @@
+/* eslint-disable */
+/* tslint:disable */
+// @ts-nocheck
+/*
+ * ---------------------------------------------------------------
+ * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
+ * ## ##
+ * ## AUTHOR: acacode ##
+ * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
+ * ---------------------------------------------------------------
+ */
+
+export enum EntitiesSubscriptionName {
+ SubscriptionNameFree = "free",
+ SubscriptionNameProMonthly = "pro-monthly",
+ SubscriptionNameProYearly = "pro-yearly",
+ SubscriptionNameUltraMonthly = "ultra-monthly",
+ SubscriptionNameUltraYearly = "ultra-yearly",
+ SubscriptionNameProLifetime = "pro-lifetime",
+ SubscriptionName20KMonthly = "20k-monthly",
+ SubscriptionName100KMonthly = "100k-monthly",
+ SubscriptionName50KMonthly = "50k-monthly",
+ SubscriptionName200KMonthly = "200k-monthly",
+ SubscriptionName20KYearly = "20k-yearly",
+}
+
+export enum EntitiesSIM {
+ SIM1 = "SIM1",
+ SIM2 = "SIM2",
+}
+
+export interface EntitiesBillingUsage {
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ created_at: string;
+ /** @example "2022-01-31T23:59:59+00:00" */
+ end_timestamp: string;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ id: string;
+ /** @example 465 */
+ received_messages: number;
+ /** @example 321 */
+ sent_messages: number;
+ /** @example "2022-01-01T00:00:00+00:00" */
+ start_timestamp: string;
+ /** @example 0 */
+ total_cost: number;
+ /** @example "2022-06-05T14:26:10.303278+03:00" */
+ updated_at: string;
+ /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
+ user_id: string;
+}
+
+export interface EntitiesBulkMessage {
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ created_at: string;
+ /** @example 25 */
+ delivered_count: number;
+ /** @example 3 */
+ expired_count: number;
+ /** @example 5 */
+ failed_count: number;
+ /** @example 30 */
+ pending_count: number;
+ /** @example "bulk-httpsms-file.csv" */
+ request_id: string;
+ /** @example 50 */
+ scheduled_count: number;
+ /** @example 40 */
+ sent_count: number;
+ /** @example 150 */
+ total: number;
+}
+
+export interface EntitiesDiscord {
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ created_at: string;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ id: string;
+ /** @example "1095780203256627291" */
+ incoming_channel_id: string;
+ /** @example "Game Server" */
+ name: string;
+ /** @example "1095778291488653372" */
+ server_id: string;
+ /** @example "2022-06-05T14:26:10.303278+03:00" */
+ updated_at: string;
+ /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
+ user_id: string;
+}
+
+export interface EntitiesHeartbeat {
+ /** @example true */
+ charging: boolean;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ id: string;
+ /** @example "+18005550199" */
+ owner: string;
+ /** @example "2022-06-05T14:26:01.520828+03:00" */
+ timestamp: string;
+ /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
+ user_id: string;
+ /** @example "344c10f" */
+ version: string;
+}
+
+export interface EntitiesMessage {
+ /** @example ["https://example.com/image.jpg","https://example.com/video.mp4"] */
+ attachments: string[];
+ /** @example "+18005550100" */
+ contact: string;
+ /** @example "This is a sample text message" */
+ content: string;
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ created_at: string;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ delivered_at?: string;
+ /** @example false */
+ encrypted: boolean;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ expired_at?: string;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ failed_at?: string;
+ /** @example "UNKNOWN" */
+ failure_reason?: string;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ id: string;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ last_attempted_at?: string;
+ /** @example 1 */
+ max_send_attempts: number;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ order_timestamp: string;
+ /** @example "+18005550199" */
+ owner: string;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ received_at?: string;
+ /** @example "153554b5-ae44-44a0-8f4f-7bbac5657ad4" */
+ request_id?: string;
+ /** @example "2022-06-05T14:26:01.520828+03:00" */
+ request_received_at: string;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ scheduled_at?: string;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ scheduled_send_time?: string;
+ /** @example 0 */
+ send_attempt_count: number;
+ /**
+ * SendDuration is the number of nanoseconds from when the request was received until when the mobile phone send the message
+ * @example 133414
+ */
+ send_time?: number;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ sent_at?: string;
+ /**
+ * SIM is the SIM card to use to send the message
+ * * SMS1: use the SIM card in slot 1
+ * * SMS2: use the SIM card in slot 2
+ * * DEFAULT: used the default communication SIM card
+ * @example "DEFAULT"
+ */
+ sim: EntitiesSIM;
+ /** @example "pending" */
+ status: string;
+ /** @example "mobile-terminated" */
+ type: string;
+ /** @example "2022-06-05T14:26:10.303278+03:00" */
+ updated_at: string;
+ /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
+ user_id: string;
+}
+
+export interface EntitiesMessageSendSchedule {
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ created_at: string;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ id: string;
+ /** @example "Business Hours" */
+ name: string;
+ /** @example "Europe/Tallinn" */
+ timezone: string;
+ /** @example "2022-06-05T14:26:10.303278+03:00" */
+ updated_at: string;
+ /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
+ user_id: string;
+ windows: EntitiesMessageSendScheduleWindow[];
+}
+
+export interface EntitiesMessageSendScheduleWindow {
+ /** @example 1 */
+ day_of_week: number;
+ /** @example 1020 */
+ end_minute: number;
+ /** @example 540 */
+ start_minute: number;
+}
+
+export interface EntitiesMessageThread {
+ /** @example "indigo" */
+ color: string;
+ /** @example "+18005550100" */
+ contact: string;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ created_at: string;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703ca" */
+ id: string;
+ /** @example false */
+ is_archived: boolean;
+ /** @example true */
+ is_read: boolean;
+ /** @example "This is a sample message content" */
+ last_message_content: string;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703ca" */
+ last_message_id: string;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ order_timestamp: string;
+ /** @example "+18005550199" */
+ owner: string;
+ /** @example "PENDING" */
+ status: string;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ updated_at: string;
+ /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
+ user_id: string;
+}
+
+export interface EntitiesPhone {
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ created_at: string;
+ /** @example "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....." */
+ fcm_token?: string;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ id: string;
+ /**
+ * MaxSendAttempts determines how many times to retry sending an SMS message
+ * @example 2
+ */
+ max_send_attempts: number;
+ /** MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired. */
+ message_expiration_seconds: number;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ message_send_schedule_id?: string;
+ /** @example 1 */
+ messages_per_minute: number;
+ /** @example "This phone cannot receive calls. Please send an SMS instead." */
+ missed_call_auto_reply?: string;
+ /** @example "+18005550199" */
+ phone_number: string;
+ sim: EntitiesSIM;
+ /**
+ * UnarchiveThread moves an archived message thread back to the inbox when a new message is received on this phone.
+ * @example false
+ */
+ unarchive_thread: boolean;
+ /** @example "2022-06-05T14:26:10.303278+03:00" */
+ updated_at: string;
+ /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
+ user_id: string;
+}
+
+export interface EntitiesPhoneAPIKey {
+ /** @example "pk_DGW8NwQp7mxKaSZ72Xq9v6xxxxx" */
+ api_key: string;
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ created_at: string;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ id: string;
+ /** @example "Business Phone Key" */
+ name: string;
+ /** @example ["32343a19-da5e-4b1b-a767-3298a73703cb","32343a19-da5e-4b1b-a767-3298a73703cc"] */
+ phone_ids: string[];
+ /** @example ["+18005550199","+18005550100"] */
+ phone_numbers: string[];
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ updated_at: string;
+ /** @example "user@gmail.com" */
+ user_email: string;
+ /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
+ user_id: string;
+}
+
+export interface EntitiesUser {
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ active_phone_id?: string;
+ /** @example "x-api-key" */
+ api_key: string;
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ created_at: string;
+ /** @example "name@email.com" */
+ email: string;
+ /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
+ id: string;
+ /** @example true */
+ notification_heartbeat_enabled: boolean;
+ /** @example true */
+ notification_message_status_enabled: boolean;
+ /** @example true */
+ notification_newsletter_enabled: boolean;
+ /** @example true */
+ notification_webhook_enabled: boolean;
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ subscription_ends_at?: string;
+ /** @example "8f9c71b8-b84e-4417-8408-a62274f65a08" */
+ subscription_id: string;
+ /** @example "free" */
+ subscription_name: EntitiesSubscriptionName;
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ subscription_renews_at?: string;
+ /** @example "on_trial" */
+ subscription_status?: string;
+ /** @example "Europe/Helsinki" */
+ timezone: string;
+ /** @example "2022-06-05T14:26:10.303278+03:00" */
+ updated_at: string;
+}
+
+export interface EntitiesWebhook {
+ /** @example "2022-06-05T14:26:02.302718+03:00" */
+ created_at: string;
+ /** @example ["message.phone.received"] */
+ events: string[];
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ id: string;
+ /** @example ["+18005550199","+18005550100"] */
+ phone_numbers: string[];
+ /** @example "DGW8NwQp7mxKaSZ72Xq9v67SLqSbWQvckzzmK8D6rvd7NywSEkdMJtuxKyEkYnCY" */
+ signing_key: string;
+ /** @example "2022-06-05T14:26:10.303278+03:00" */
+ updated_at: string;
+ /** @example "https://example.com" */
+ url: string;
+ /** @example "WB7DRDWrJZRGbYrv2CKGkqbzvqdC" */
+ user_id: string;
+}
+
+export interface RequestsDiscordStore {
+ incoming_channel_id: string;
+ name: string;
+ server_id: string;
+}
+
+export interface RequestsDiscordUpdate {
+ incoming_channel_id: string;
+ name: string;
+ server_id: string;
+}
+
+export interface RequestsHeartbeatStore {
+ charging: boolean;
+ phone_numbers: string[];
+}
+
+export interface RequestsMessageAttachment {
+ /**
+ * Content is the base64-encoded attachment data
+ * @example "base64data..."
+ */
+ content: string;
+ /**
+ * ContentType is the MIME type of the attachment
+ * @example "image/jpeg"
+ */
+ content_type: string;
+ /**
+ * Name is the original filename of the attachment
+ * @example "photo.jpg"
+ */
+ name: string;
+}
+
+export interface RequestsMessageBulkSend {
+ /** Attachments are optional. When you provide a list of attachments, the message will be sent out as an MMS */
+ attachments?: string[];
+ /** @example "This is a sample text message" */
+ content: string;
+ /**
+ * Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app
+ * @example false
+ */
+ encrypted?: boolean;
+ /** @example "+18005550199" */
+ from: string;
+ /**
+ * RequestID is an optional parameter used to track a request from the client's perspective
+ * @example "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
+ */
+ request_id?: string;
+ /** @example ["+18005550100","+18005550100"] */
+ to: string[];
+}
+
+export interface RequestsMessageCallMissed {
+ /** @example "+18005550199" */
+ from: string;
+ /** @example "SIM1" */
+ sim: string;
+ /** @example "2022-06-05T14:26:09.527976+03:00" */
+ timestamp: string;
+ /** @example "+18005550100" */
+ to: string;
+}
+
+export interface RequestsMessageEvent {
+ /**
+ * EventName is the type of event
+ * * SENT: is emitted when a message is sent by the mobile phone
+ * * FAILED: is event is emitted when the message could not be sent by the mobile phone
+ * * DELIVERED: is event is emitted when a delivery report has been received by the mobile phone
+ * @example "SENT"
+ */
+ event_name: string;
+ /** Reason is the exact error message in case the event is an error */
+ reason: string;
+ /**
+ * Timestamp is the time when the event was emitted, Please send the timestamp in UTC with as much precision as possible
+ * @example "2022-06-05T14:26:09.527976+03:00"
+ */
+ timestamp: string;
+}
+
+export interface RequestsMessageReceive {
+ /** Attachments is the list of MMS attachments received with the message */
+ attachments?: RequestsMessageAttachment[];
+ /** @example "This is a sample text message received on a phone" */
+ content: string;
+ /**
+ * Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app
+ * @example false
+ */
+ encrypted: boolean;
+ /** @example "+18005550199" */
+ from: string;
+ /**
+ * SIM card that received the message
+ * @example "SIM1"
+ */
+ sim: EntitiesSIM;
+ /**
+ * Timestamp is the time when the event was emitted, Please send the timestamp in UTC with as much precision as possible
+ * @example "2022-06-05T14:26:09.527976+03:00"
+ */
+ timestamp: string;
+ /** @example "+18005550100" */
+ to: string;
+}
+
+export interface RequestsMessageSend {
+ /**
+ * Attachments are optional. When you provide a list of attachments, the message will be sent out as an MMS
+ * @example ["https://example.com/image.jpg","https://example.com/video.mp4"]
+ */
+ attachments?: string[];
+ /** @example "This is a sample text message" */
+ content: string;
+ /**
+ * Encrypted is an optional parameter used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app
+ * @example false
+ */
+ encrypted?: boolean;
+ /** @example "+18005550199" */
+ from: string;
+ /**
+ * RequestID is an optional parameter used to track a request from the client's perspective
+ * @example "153554b5-ae44-44a0-8f4f-7bbac5657ad4"
+ */
+ request_id?: string;
+ /**
+ * SendAt is an optional parameter used to schedule a message to be sent in the future. The time is considered to be in your profile's local timezone and you can queue messages for up to 20 days (480 hours) in the future.
+ * @example "2025-12-19T16:39:57-08:00"
+ */
+ send_at?: string;
+ /** @example "+18005550100" */
+ to: string;
+}
+
+export interface RequestsMessageSendScheduleStore {
+ name: string;
+ timezone: string;
+ windows: RequestsMessageSendScheduleWindow[];
+}
+
+export interface RequestsMessageSendScheduleWindow {
+ day_of_week: number;
+ end_minute: number;
+ start_minute: number;
+}
+
+export interface RequestsMessageThreadUpdate {
+ /** @example true */
+ is_archived?: boolean;
+ /** @example true */
+ is_read?: boolean;
+}
+
+export interface RequestsPhoneAPIKeyStoreRequest {
+ /** @example "My Phone API Key" */
+ name: string;
+}
+
+export interface RequestsPhoneFCMToken {
+ /** @example "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....." */
+ fcm_token: string;
+ /** @example "[+18005550199]" */
+ phone_number: string;
+ /**
+ * SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot
+ * @example "SIM1"
+ */
+ sim: string;
+}
+
+export interface RequestsPhoneUpsert {
+ /** @example "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzd....." */
+ fcm_token: string;
+ /**
+ * MaxSendAttempts is the number of attempts when sending an SMS message to handle the case where the phone is offline.
+ * @example 2
+ */
+ max_send_attempts: number;
+ /**
+ * MessageExpirationSeconds is the duration in seconds after sending a message when it is considered to be expired.
+ * @example 12345
+ */
+ message_expiration_seconds: number;
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ message_send_schedule_id?: string;
+ /** @example 1 */
+ messages_per_minute: number;
+ /** @example "e.g. This phone cannot receive calls. Please send an SMS instead." */
+ missed_call_auto_reply: string;
+ /** @example "+18005550199" */
+ phone_number: string;
+ /**
+ * SIM is the SIM slot of the phone in case the phone has more than 1 SIM slot
+ * @example "SIM1"
+ */
+ sim: string;
+ /**
+ * UnarchiveThread moves an archived thread back to the inbox when a new message is received on this phone.
+ * @example false
+ */
+ unarchive_thread: boolean;
+}
+
+export interface RequestsUserNotificationUpdate {
+ /** @example true */
+ heartbeat_enabled: boolean;
+ /** @example true */
+ message_status_enabled: boolean;
+ /** @example true */
+ newsletter_enabled: boolean;
+ /** @example true */
+ webhook_enabled: boolean;
+}
+
+export interface RequestsUserPaymentInvoice {
+ /** @example "221B Baker Street, London" */
+ address: string;
+ /** @example "Los Angeles" */
+ city: string;
+ /** @example "US" */
+ country: string;
+ /** @example "Acme Corp" */
+ name: string;
+ /** @example "Thank you for your business!" */
+ notes: string;
+ /** @example "CA" */
+ state: string;
+ /** @example "9800" */
+ zip_code: string;
+}
+
+export interface RequestsUserUpdate {
+ /** @example "32343a19-da5e-4b1b-a767-3298a73703cb" */
+ active_phone_id: string;
+ /** @example "Europe/Helsinki" */
+ timezone: string;
+}
+
+export interface RequestsWebhookStore {
+ events: string[];
+ /** @example ["+18005550100","+18005550100"] */
+ phone_numbers: string[];
+ signing_key: string;
+ url: string;
+}
+
+export interface RequestsWebhookUpdate {
+ events: string[];
+ /** @example ["+18005550100","+18005550100"] */
+ phone_numbers: string[];
+ signing_key: string;
+ url: string;
+}
+
+export interface ResponsesBadRequest {
+ /** @example "The request body is not a valid JSON string" */
+ data: string;
+ /** @example "The request isn't properly formed" */
+ message: string;
+ /** @example "error" */
+ status: string;
+}
+
+export interface ResponsesBillingUsageResponse {
+ data: EntitiesBillingUsage;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesBillingUsagesResponse {
+ data: EntitiesBillingUsage[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesBulkMessagesResponse {
+ data: EntitiesBulkMessage[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesDiscordResponse {
+ data: EntitiesDiscord;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesDiscordsResponse {
+ data: EntitiesDiscord[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesHeartbeatResponse {
+ data: EntitiesHeartbeat;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesHeartbeatsResponse {
+ data: EntitiesHeartbeat[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesInternalServerError {
+ /** @example "We ran into an internal error while handling the request." */
+ message: string;
+ /** @example "error" */
+ status: string;
+}
+
+export interface ResponsesMessageResponse {
+ data: EntitiesMessage;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesMessageSendScheduleResponse {
+ data: EntitiesMessageSendSchedule;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesMessageSendSchedulesResponse {
+ data: EntitiesMessageSendSchedule[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesMessageThreadResponse {
+ data: EntitiesMessageThread;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesMessageThreadsResponse {
+ data: EntitiesMessageThread[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesMessagesResponse {
+ data: EntitiesMessage[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesNoContent {
+ /** @example "action performed successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesNotFound {
+ /** @example "cannot find message with ID [32343a19-da5e-4b1b-a767-3298a73703ca]" */
+ message: string;
+ /** @example "error" */
+ status: string;
+}
+
+export interface ResponsesOkString {
+ data: string;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesPaymentRequired {
+ /** @example "You have reached the maximum number of allowed resources. Please upgrade your plan." */
+ message: string;
+ /** @example "error" */
+ status: string;
+}
+
+export interface ResponsesPhoneAPIKeyResponse {
+ data: EntitiesPhoneAPIKey;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesPhoneAPIKeysResponse {
+ data: EntitiesPhoneAPIKey[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesPhoneResponse {
+ data: EntitiesPhone;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesPhonesResponse {
+ data: EntitiesPhone[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesUnauthorized {
+ /** @example "Make sure your API key is set in the [X-API-Key] header in the request" */
+ data: string;
+ /** @example "You are not authorized to carry out this request." */
+ message: string;
+ /** @example "error" */
+ status: string;
+}
+
+export interface ResponsesUnprocessableEntity {
+ data: Record;
+ /** @example "validation errors while handling request" */
+ message: string;
+ /** @example "error" */
+ status: string;
+}
+
+export interface ResponsesUserResponse {
+ data: EntitiesUser;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesUserSubscriptionPaymentsResponse {
+ data: {
+ attributes: {
+ billing_reason: string;
+ card_brand: string;
+ card_last_four: string;
+ created_at: string;
+ currency: string;
+ currency_rate: string;
+ discount_total: number;
+ discount_total_formatted: string;
+ discount_total_usd: number;
+ refunded: boolean;
+ refunded_amount: number;
+ refunded_amount_formatted: string;
+ refunded_amount_usd: number;
+ refunded_at: any;
+ status: string;
+ status_formatted: string;
+ subtotal: number;
+ subtotal_formatted: string;
+ subtotal_usd: number;
+ tax: number;
+ tax_formatted: string;
+ tax_inclusive: boolean;
+ tax_usd: number;
+ total: number;
+ total_formatted: string;
+ total_usd: number;
+ updated_at: string;
+ };
+ id: string;
+ type: string;
+ }[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesWebhookResponse {
+ data: EntitiesWebhook;
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
+
+export interface ResponsesWebhooksResponse {
+ data: EntitiesWebhook[];
+ /** @example "Request handled successfully" */
+ message: string;
+ /** @example "success" */
+ status: string;
+}
diff --git a/web/shared/types/message.ts b/web/shared/types/message.ts
new file mode 100644
index 000000000..d47a2db93
--- /dev/null
+++ b/web/shared/types/message.ts
@@ -0,0 +1,11 @@
+export interface SearchMessagesRequest {
+ owners: string[]
+ types: string[]
+ statuses: string[]
+ query: string
+ sort_by: string
+ token?: string
+ sort_descending: boolean
+ skip: number
+ limit: number
+}
diff --git a/web/static/robots.txt b/web/static/robots.txt
deleted file mode 100644
index 1a68258bd..000000000
--- a/web/static/robots.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-User-agent: *
-Allow: /
-
-Sitemap: https://httpsms.com/sitemap.xml
diff --git a/web/static/templates/httpsms-bulk.csv b/web/static/templates/httpsms-bulk.csv
deleted file mode 100644
index 38891f63e..000000000
--- a/web/static/templates/httpsms-bulk.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-FromPhoneNumber,ToPhoneNumber,Content
-+18005550199,+18005550100,This is a sample text message1
-+18005550199,+18005550100,This is a sample text message2
diff --git a/web/static/templates/httpsms-bulk.xlsx b/web/static/templates/httpsms-bulk.xlsx
deleted file mode 100644
index bb7130870..000000000
Binary files a/web/static/templates/httpsms-bulk.xlsx and /dev/null differ
diff --git a/web/store/index.ts b/web/store/index.ts
deleted file mode 100644
index 92c15c5da..000000000
--- a/web/store/index.ts
+++ /dev/null
@@ -1,1150 +0,0 @@
-import { ActionContext } from 'vuex'
-import { AxiosError, AxiosResponse } from 'axios'
-import { MessageThread } from '~/models/message-thread'
-import { Message, SearchMessagesRequest } from '~/models/message'
-import { Heartbeat } from '~/models/heartbeat'
-import axios, { setApiKey, setAuthHeader } from '~/plugins/axios'
-import { User } from '~/models/user'
-import { BillingUsage } from '~/models/billing'
-import {
- EntitiesDiscord,
- EntitiesMessage,
- EntitiesPhone,
- EntitiesPhoneAPIKey,
- EntitiesUser,
- EntitiesWebhook,
- RequestsDiscordStore,
- RequestsDiscordUpdate,
- RequestsUserNotificationUpdate,
- RequestsWebhookStore,
- RequestsWebhookUpdate,
- ResponsesDiscordResponse,
- ResponsesDiscordsResponse,
- ResponsesMessagesResponse,
- ResponsesNoContent,
- ResponsesOkString,
- ResponsesPhoneAPIKeyResponse,
- ResponsesPhoneAPIKeysResponse,
- ResponsesUnprocessableEntity,
- ResponsesUserResponse,
- ResponsesWebhookResponse,
- ResponsesWebhooksResponse,
-} from '~/models/api'
-import { getErrorMessages } from '~/plugins/errors'
-
-const defaultNotificationTimeout = 3000
-
-type NotificationType = 'error' | 'success' | 'info'
-
-export interface Notification {
- message: string
- timeout: number
- active: boolean
- type: NotificationType
-}
-
-export interface NotificationRequest {
- message: string
- type: NotificationType
-}
-
-export type AuthUser = {
- email: string | null
- displayName: string | null
- id: string
-}
-
-export type State = {
- owner: string | null
- axiosError: AxiosError | null
- loadingThreads: boolean
- archivedThreads: boolean
- authStateChanged: boolean
- authUser: AuthUser | null
- billingUsage: BillingUsage | null
- billingUsageHistory: Array
- user: User | null
- phones: Array
- threads: Array
- threadId: string | null
- heartbeat: null | Heartbeat
- pooling: boolean
- notification: Notification
-}
-
-export const state = (): State => ({
- threads: [],
- threadId: null,
- heartbeat: null,
- axiosError: null,
- authStateChanged: false,
- loadingThreads: true,
- billingUsage: null,
- billingUsageHistory: [],
- archivedThreads: false,
- pooling: false,
- phones: [],
- user: null,
- owner: null,
- authUser: null,
- notification: {
- active: false,
- message: '',
- type: 'success',
- timeout: defaultNotificationTimeout,
- },
-})
-
-export type AppData = {
- url: string
- name: string
- env: string
- appDownloadUrl: string
- documentationUrl: string
- githubUrl: string
-}
-
-export const getters = {
- getThreads(state: State): Array {
- return state.threads
- },
-
- getAppData(): AppData {
- let url = process.env.APP_URL as string
- if (url.length > 0 && url[url.length - 1] === '/') {
- url = url.substring(0, url.length - 1)
- }
- return {
- url,
- env: process.env.APP_ENV as string,
- appDownloadUrl: process.env.APP_DOWNLOAD_URL as string,
- documentationUrl: process.env.APP_DOCUMENTATION_URL as string,
- githubUrl: process.env.APP_GITHUB_URL as string,
- name: process.env.APP_NAME as string,
- }
- },
-
- hasThreadId: (state: State) => (threadId: string) => {
- return state.threads.find((x) => x.id === threadId) !== undefined
- },
-
- getAuthUser(state: State): AuthUser | null {
- return state.authUser
- },
-
- getAxiosError(state: State): AxiosError | null {
- return state.axiosError
- },
-
- authStateChanged: (state: State) => state.authStateChanged,
-
- isLocal(): boolean {
- return process.env.APP_ENV === 'local'
- },
-
- getUser(state: State): User | null {
- return state.user
- },
-
- getBillingUsageHistory(state: State): Array {
- return state.billingUsageHistory
- },
-
- getBillingUsage(state: State): BillingUsage | null {
- return state.billingUsage
- },
-
- getOwner(state: State): string | null {
- return state.owner
- },
-
- getActivePhone(state: State): EntitiesPhone | null {
- return (
- state.phones.find((x: EntitiesPhone) => {
- return x.phone_number === state.owner
- }) ?? null
- )
- },
-
- getPhones(state: State): Array {
- return state.phones
- },
-
- hasThread(state: State): boolean {
- return state.threadId != null && !state.loadingThreads
- },
-
- getLoadingThreads(state: State): boolean {
- return state.loadingThreads
- },
-
- getThread(state: State): MessageThread {
- const thread = state.threads.find((x) => x.id === state.threadId)
- if (thread === undefined) {
- throw new Error(`cannot find thread with id ${state.threadId}`)
- }
- return thread
- },
-
- getHeartbeat(state: State): Heartbeat | null {
- return state.heartbeat
- },
-
- getPolling(state: State): boolean {
- return state.pooling
- },
-
- getIsArchived(state: State): boolean {
- return state.archivedThreads
- },
-
- getNotification(state: State): Notification {
- return state.notification
- },
-}
-
-export const mutations = {
- setThreads(state: State, payload: Array) {
- state.threads = [...payload]
- state.loadingThreads = false
- },
- setThreadId(state: State, payload: string | null) {
- state.threadId = payload
- },
- setBillingUsageHistory(state: State, payload: Array) {
- state.billingUsageHistory = payload
- },
- setBillingUsage(state: State, payload: BillingUsage | null) {
- state.billingUsage = payload
- },
- setHeartbeat(state: State, payload: Heartbeat | null) {
- state.heartbeat = payload
- },
- setPooling(state: State, payload: boolean) {
- state.pooling = payload
- },
- setAuthUser(state: State, payload: AuthUser | null) {
- state.authStateChanged = true
- state.authUser = payload
- },
- setAxiosError(state: State, payload: AxiosError | null) {
- state.axiosError = payload
- },
- setNotification(state: State, notification: NotificationRequest) {
- state.notification = {
- ...state.notification,
- active: true,
- message: notification.message,
- type: notification.type,
- timeout: Math.floor(Math.random() * 100) + defaultNotificationTimeout, // Reset the timeout
- }
- },
- disableNotification(state: State) {
- state.notification.active = false
- },
- setPhones(state: State, payload: Array) {
- state.phones = payload
-
- const owner = payload.find((x) => x.phone_number === state.owner)
- if (!owner && state.phones.length > 0) {
- state.owner = state.phones[0].phone_number
- }
- },
- setUser(state: State, payload: User | null) {
- state.user = payload
- },
-
- setOwner(state: State, payload: string) {
- state.owner = payload
- state.loadingThreads = true
- },
-
- setArchivedThreads(state: State, payload: boolean) {
- state.archivedThreads = payload
- },
-
- setLoadingThreads(state: State, payload: boolean) {
- state.loadingThreads = payload
- },
-
- resetState(state: State) {
- state.threads = []
- state.billingUsage = null
- state.billingUsageHistory = []
- state.phones = []
- state.user = null
- state.threadId = null
- state.archivedThreads = false
- state.pooling = false
- state.owner = null
- setApiKey('')
- },
-}
-
-export type SIM = 'SIM1' | 'SIM2' | 'DEFAULT'
-
-export type SendMessageRequest = {
- from: string
- to: string
- content: string
- sim: SIM
-}
-
-export const actions = {
- async loadThreads(context: ActionContext) {
- if (
- context.getters.getOwner === null &&
- context.getters.getPhones.length === 0
- ) {
- context.commit('setLoadingThreads', false)
- return
- }
-
- const response = await axios.get('/v1/message-threads', {
- params: {
- owner:
- context.getters.getOwner ?? context.getters.getPhones[0].phone_number,
- limit: 100,
- is_archived: context.getters.getIsArchived,
- },
- })
-
- // eslint-disable-next-line no-console
- context.dispatch('getHeartbeat').catch(console.error)
- await context.commit('setThreads', response.data.data)
- },
-
- async loadBillingUsage(context: ActionContext) {
- const response = await axios.get('/v1/billing/usage')
- context.commit('setBillingUsage', response.data.data)
- },
-
- async loadBillingUsageHistory(context: ActionContext) {
- const response = await axios.get('/v1/billing/usage-history')
- context.commit('setBillingUsageHistory', response.data.data)
- },
-
- toggleArchive(context: ActionContext) {
- context.commit('setArchivedThreads', !context.getters.getIsArchived)
- },
-
- async loadPhones(context: ActionContext, force: boolean) {
- if (context.getters.getPhones.length > 0 && !force) {
- return
- }
-
- const response = await axios.get('/v1/phones', { params: { limit: 100 } })
- context.commit('setPhones', response.data.data)
-
- if (context.state.user && context.state.user.active_phone_id) {
- const phone = response.data.data.find(
- (x: EntitiesPhone) => x.id === context.state.user?.active_phone_id,
- )
- if (phone) {
- context.commit('setOwner', phone.phone_number)
- }
- }
- },
-
- async loadUser(context: ActionContext) {
- const response = await axios.get('/v1/users/me')
- context.commit('setUser', response.data.data)
- },
-
- async deletePhone(context: ActionContext, phoneID: string) {
- await axios.delete(`/v1/phones/${phoneID}`)
- await context.dispatch('loadPhones', true)
- },
-
- resetState(context: ActionContext) {
- context.commit('resetState', false)
- },
-
- async updatePhone(
- context: ActionContext,
- phone: EntitiesPhone,
- ) {
- await axios
- .put(`/v1/phones`, {
- fcm_token: phone.fcm_token,
- sim: phone.sim,
- phone_number: phone.phone_number,
- message_expiration_seconds: parseInt(
- phone.message_expiration_seconds.toString(),
- ),
- missed_call_auto_reply: phone.missed_call_auto_reply,
- max_send_attempts: parseInt(phone.max_send_attempts.toString()),
- messages_per_minute: parseInt(phone.messages_per_minute.toString()),
- })
- .catch((error: AxiosError) => {
- context.dispatch('handleAxiosError', error)
- })
- .then((response: any) => {
- context.dispatch('addNotification', {
- message: response.data.message,
- type: 'success',
- })
- })
-
- await context.dispatch('loadPhones', true)
- },
-
- sendBulkMessages(context: ActionContext, document: File) {
- return new Promise((resolve, reject) => {
- const formData = new FormData()
- formData.append('document', document)
- axios
- .post(`/v1/bulk-messages`, formData, {
- headers: {
- 'content-type': 'multipart/form-data',
- },
- })
- .then(async (response: AxiosResponse) => {
- await context.dispatch('addNotification', {
- message: response.data.message ?? 'Bulk messages sent successfully',
- type: 'success',
- })
- resolve(response.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- error.response?.data?.message ??
- 'Errors while sending bulk messages',
- type: 'error',
- }),
- ])
- reject(error)
- })
- })
- },
-
- storePhoneApiKey(context: ActionContext, name: string) {
- return new Promise((resolve, reject) => {
- axios
- .post(`/v1/phone-api-keys`, { name })
- .then(async (response: AxiosResponse) => {
- await context.dispatch('addNotification', {
- message:
- response.data.message ?? 'Phone API Key created successfully',
- type: 'success',
- })
- resolve(response.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- error.response?.data?.message ??
- 'Errors while creating phone API key',
- type: 'error',
- }),
- ])
- reject(error)
- })
- })
- },
-
- indexPhoneApiKeys(context: ActionContext) {
- return new Promise>((resolve, reject) => {
- axios
- .get(`/v1/phone-api-keys`, {
- params: {
- limit: 100,
- },
- })
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while fetching phone API keys',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- deletePhoneApiKey(
- context: ActionContext,
- phoneAPIKeyID: string,
- ) {
- return new Promise((resolve, reject) => {
- axios
- .delete(`/v1/phone-api-keys/${phoneAPIKeyID}`)
- .then(async (response: AxiosResponse) => {
- await context.dispatch('addNotification', {
- message:
- response.data.message ??
- 'The phone API key has been deleted successfully',
- type: 'success',
- })
- resolve()
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while deleting phone API key',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- deletePhoneFromPhoneApiKey(
- context: ActionContext,
- payload: { phoneApiKeyId: string; phoneId: string },
- ) {
- return new Promise((resolve, reject) => {
- axios
- .delete(
- `/v1/phone-api-keys/${payload.phoneApiKeyId}/phones/${payload.phoneId}`,
- )
- .then(async (response: AxiosResponse) => {
- await context.dispatch('addNotification', {
- message:
- response.data.message ??
- 'The phone has been removed from the phone API key successfully',
- type: 'success',
- })
- resolve()
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while deleting phone API key',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- async handleAxiosError(
- context: ActionContext,
- error: AxiosError,
- ) {
- const errorMessage = (error.response?.data as any)?.data[
- Object.keys((error.response?.data as any)?.data)[0]
- ][0]
- await context.dispatch('addNotification', {
- message:
- (errorMessage ? errorMessage.replaceAll('_', ' ') : null) ??
- (error.response?.data as any)?.message,
- type: 'error',
- })
- context.commit('setAxiosError', error)
- },
-
- getHeartbeat(
- context: ActionContext,
- limit = 1,
- ): Promise> {
- return new Promise>((resolve, reject) => {
- axios
- .get('/v1/heartbeats', {
- params: {
- limit,
- owner: context.getters.getOwner,
- },
- })
- .then((response: AxiosResponse) => {
- if (response.data.data.length > 0) {
- context.commit('setHeartbeat', response.data.data[0])
- } else {
- context.commit('setHeartbeat', null)
- }
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Errors while fetching heartbeat',
- type: 'error',
- })
- reject(error)
- })
- })
- },
-
- setPolling(context: ActionContext, status: boolean) {
- context.commit('setPooling', status)
- },
-
- async sendMessage(
- context: ActionContext,
- request: SendMessageRequest,
- ) {
- try {
- const response = await axios.post('/v1/messages/send', request)
- await context.dispatch('addNotification', {
- message: response.data.message,
- type: 'success',
- })
- } catch (e) {
- await context.dispatch('addNotification', {
- message:
- ((e as AxiosError).response?.data as any)?.message ??
- 'Error while sending message',
- type: 'error',
- })
- }
- await Promise.all([context.dispatch('loadThreads')])
- },
-
- deleteMessage(context: ActionContext, messageId: string) {
- return new Promise((resolve, reject) => {
- axios
- .delete(`/v1/messages/${messageId}`)
- .then(async () => {
- await context.dispatch('addNotification', {
- message: 'The message has been deleted successfully',
- type: 'success',
- })
- resolve()
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while deleting message',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- searchMessages(
- _: ActionContext,
- payload: SearchMessagesRequest,
- ) {
- const token = payload.token
- delete payload.token
- return new Promise((resolve, reject) => {
- axios
- .get(`/v1/messages/search`, {
- params: payload,
- headers: { token },
- })
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch((error: AxiosError) => {
- reject(error)
- })
- })
- },
-
- setThreadId(context: ActionContext, threadId: string | null) {
- context.commit('setThreadId', threadId)
- },
-
- addNotification(
- context: ActionContext,
- request: NotificationRequest,
- ) {
- context.commit('setNotification', request)
- },
-
- disableNotification(context: ActionContext) {
- context.commit('disableNotification')
- },
-
- loadThreadMessages(
- context: ActionContext,
- threadId: string | null,
- ): Promise> {
- context.commit('setThreadId', threadId)
- return new Promise>((resolve, reject) => {
- axios
- .get('/v1/messages', {
- params: {
- contact: context.getters.getThread.contact,
- owner: context.getters.getThread.owner,
- limit: 50,
- },
- })
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Errors while fetching messages',
- type: 'error',
- })
- reject(error)
- })
- })
- },
-
- async setAuthUser(
- context: ActionContext,
- user: AuthUser | null | undefined,
- ) {
- const userChanged = user?.id !== context.getters.getAuthUser?.id
-
- if (user === undefined) {
- user = null
- }
-
- await context.commit('setAuthUser', user)
-
- if (userChanged && user !== null) {
- await Promise.all([
- context.dispatch('loadUser'),
- context.dispatch('loadPhones'),
- ])
-
- const phone = context.getters.getPhones.find(
- (x: EntitiesPhone) => x.id === context.getters.getUser.active_phone_id,
- )
- if (phone) {
- await context.dispatch('updateUser', {
- owner: phone.phone_number,
- timezone: context.getters.getUser.timezone,
- })
- }
- }
- },
- async onAuthStateChanged(
- context: ActionContext,
- // @ts-ignore
- { authUser },
- ) {
- if (authUser == null) {
- await Promise.all([
- context.commit('setAuthUser', null),
- context.commit('setUser', null),
- ])
- setApiKey('')
- return
- }
- setAuthHeader(await authUser.getIdToken())
- const { uid, email, displayName } = authUser
- await Promise.all([
- context.commit('setAuthUser', { id: uid, email, displayName }),
- ])
- },
-
- async onIdTokenChanged(
- _: ActionContext,
- // @ts-ignore
- { authUser },
- ) {
- if (authUser == null) {
- setApiKey('')
- return
- }
- setAuthHeader(await authUser.getIdToken())
- },
-
- clearAxiosError(context: ActionContext) {
- context.commit('setAxiosError', null)
- },
-
- async updateUser(
- context: ActionContext,
- payload: { owner: string; timezone: string },
- ) {
- context.commit('setOwner', payload.owner)
-
- const phone = context.getters.getActivePhone as EntitiesPhone | null
- if (!phone) {
- return
- }
-
- const response = await axios.put('/v1/users/me', {
- active_phone_id: phone.id,
- timezone: payload.timezone ?? context.getters.getUser.timezone,
- })
-
- setApiKey(response.data.data.api_key)
- context.commit('setUser', response.data.data)
- },
-
- deleteUserAccount(context: ActionContext) {
- return new Promise((resolve, reject) => {
- axios
- .delete(`/v1/users/me`)
- .then((response: AxiosResponse) => {
- resolve(response.data.message)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while deleting your user account',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- updateTimezone(
- context: ActionContext,
- payload: string,
- ): Promise {
- return new Promise((resolve, reject) => {
- axios
- .put(`/v1/users/me`, {
- timezone: payload ?? context.getters.getUser.timezone,
- })
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch((error: AxiosError) => {
- reject(getErrorMessages(error))
- })
- })
- },
-
- async updateThread(
- context: ActionContext,
- payload: { threadId: string; isArchived: boolean },
- ) {
- await axios.put(`/v1/message-threads/${payload.threadId}`, {
- is_archived: payload.isArchived,
- })
- context.commit('setArchivedThreads', payload.isArchived)
- await context.dispatch('loadThreads')
- },
-
- deleteThread(context: ActionContext, threadId: string) {
- return new Promise((resolve, reject) => {
- axios
- .delete(`/v1/message-threads/${threadId}`)
- .then(async () => {
- context.commit('setThreadId', null)
- await context.dispatch('addNotification', {
- message: 'The message thread has been deleted successfully',
- type: 'success',
- })
- resolve()
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while deleting message thread',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- getSubscriptionUpdateLink(context: ActionContext) {
- return new Promise((resolve, reject) => {
- axios
- .get(`/v1/users/subscription-update-url`)
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while fetching the update URL',
- type: 'error',
- }),
- ])
- reject(error)
- })
- })
- },
-
- cancelSubscription(context: ActionContext) {
- return new Promise((resolve, reject) => {
- axios
- .delete(`/v1/users/subscription`)
- .then((response: AxiosResponse) => {
- resolve(response.data.message)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while cancelling your subscription',
- type: 'error',
- }),
- ])
- reject(error)
- })
- })
- },
-
- createDiscord(
- context: ActionContext,
- payload: RequestsDiscordStore,
- ): Promise {
- return new Promise((resolve, reject) => {
- axios
- .post(`/v1/discord-integrations`, payload)
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while adding discord integration',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- getDiscordIntegrations(context: ActionContext) {
- return new Promise>((resolve, reject) => {
- axios
- .get(`/v1/discord-integrations`, {
- params: {
- limit: 100,
- },
- })
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while fetching discord integrations',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- updateDiscordIntegration(
- context: ActionContext,
- payload: RequestsDiscordUpdate & { id: string },
- ) {
- return new Promise((resolve, reject) => {
- axios
- .put(
- `/v1/discord-integrations/${payload.id}`,
- payload,
- )
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while updating discord integration',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- deleteDiscordIntegration(
- context: ActionContext,
- payload: string,
- ) {
- return new Promise((resolve, reject) => {
- axios
- .delete(`/v1/discord-integrations/${payload}`)
- .then(() => {
- resolve()
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while deleting discord integration',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- createWebhook(
- context: ActionContext,
- payload: RequestsWebhookStore,
- ) {
- return new Promise((resolve, reject) => {
- axios
- .post(`/v1/webhooks`, payload)
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while adding webhook',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- getWebhooks(context: ActionContext) {
- return new Promise>((resolve, reject) => {
- axios
- .get(`/v1/webhooks`, {
- params: {
- limit: 100,
- },
- })
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while fetching webhooks',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- rotateApiKey(context: ActionContext, payload: string) {
- return new Promise((resolve, reject) => {
- axios
- .delete(`/v1/users/${payload}/api-keys`)
- .then((response: AxiosResponse) => {
- context.commit('setUser', response.data.data)
- setApiKey(response.data.data.api_key)
- context.dispatch('addNotification', {
- message: 'API Key rotated successfully',
- type: 'success',
- })
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while rotating your API key',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- updateWebhook(
- context: ActionContext,
- payload: RequestsWebhookUpdate & { id: string },
- ) {
- return new Promise((resolve, reject) => {
- axios
- .put(`/v1/webhooks/${payload.id}`, payload)
- .then((response: AxiosResponse) => {
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while updating webhook',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- deleteWebhook(context: ActionContext, payload: string) {
- return new Promise((resolve, reject) => {
- axios
- .delete(`/v1/webhooks/${payload}`)
- .then(() => {
- resolve()
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while deleting webhook',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-
- saveEmailNotifications(
- context: ActionContext,
- payload: RequestsUserNotificationUpdate,
- ): Promise {
- return new Promise((resolve, reject) => {
- axios
- .put(
- `/v1/users/${context.state.user?.id}/notifications`,
- payload,
- )
- .then((response: AxiosResponse) => {
- context.commit('setUser', response.data.data)
- resolve(response.data.data)
- })
- .catch(async (error: AxiosError) => {
- await Promise.all([
- context.dispatch('addNotification', {
- message:
- (error.response?.data as any)?.message ??
- 'Error while updating email notification settings',
- type: 'error',
- }),
- ])
- reject(getErrorMessages(error))
- })
- })
- },
-}
diff --git a/web/stylelint.config.js b/web/stylelint.config.js
deleted file mode 100644
index e57a2fad1..000000000
--- a/web/stylelint.config.js
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = {
- customSyntax: 'postcss-html',
- extends: [
- 'stylelint-config-standard',
- 'stylelint-config-recommended-vue',
- 'stylelint-config-prettier',
- ],
- // add your custom config here
- // https://stylelint.io/user-guide/configuration
- rules: {},
-}
diff --git a/web/stylelint.config.mjs b/web/stylelint.config.mjs
new file mode 100644
index 000000000..f236e4152
--- /dev/null
+++ b/web/stylelint.config.mjs
@@ -0,0 +1,20 @@
+export default {
+ extends: ['stylelint-config-standard'],
+ overrides: [
+ {
+ files: ['**/*.vue'],
+ extends: ['stylelint-config-recommended-vue'],
+ customSyntax: 'postcss-html',
+ },
+ ],
+ ignoreFiles: [
+ '**/node_modules/**',
+ '.nuxt/**',
+ '.output/**',
+ '.nitro/**',
+ '.cache/**',
+ 'dist/**',
+ 'public/**',
+ ],
+ rules: {},
+}
diff --git a/web/test/NuxtLogo.spec.js b/web/test/NuxtLogo.spec.js
deleted file mode 100644
index fbdb3434c..000000000
--- a/web/test/NuxtLogo.spec.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { mount } from '@vue/test-utils'
-import NuxtLogo from '@/components/NuxtLogo.vue'
-
-describe('NuxtLogo', () => {
- test('is a Vue instance', () => {
- const wrapper = mount(NuxtLogo)
- expect(wrapper.vm).toBeTruthy()
- })
-})
diff --git a/web/tsconfig.json b/web/tsconfig.json
index 6c83e0fc4..875ee5af5 100644
--- a/web/tsconfig.json
+++ b/web/tsconfig.json
@@ -1,21 +1,30 @@
{
+ // https://nuxt.com/docs/guide/concepts/typescript
+ "files": [],
+ "references": [
+ {
+ "path": "./.nuxt/tsconfig.app.json"
+ },
+ {
+ "path": "./.nuxt/tsconfig.server.json"
+ },
+ {
+ "path": "./.nuxt/tsconfig.shared.json"
+ },
+ {
+ "path": "./.nuxt/tsconfig.node.json"
+ }
+ ],
"compilerOptions": {
- "target": "ES2018",
- "module": "ESNext",
- "moduleResolution": "Node",
- "lib": ["ESNext", "ESNext.AsyncIterable", "DOM"],
- "esModuleInterop": true,
- "allowJs": true,
- "sourceMap": true,
"strict": true,
- "noEmit": true,
- "experimentalDecorators": true,
- "baseUrl": ".",
+ "moduleResolution": "bundler",
+ "module": "ESNext",
+ "target": "ESNext",
"paths": {
- "~/*": ["./*"],
- "@/*": ["./*"]
- },
- "types": ["@nuxt/types", "@nuxtjs/axios", "@types/node", "vuetify"]
+ "~/*": ["./app/*"],
+ "~~/*": ["./*"],
+ "#imports": ["./app/types/nuxt-shims"]
+ }
},
- "exclude": ["node_modules", ".nuxt", "dist"]
+ "include": ["app/**/*.ts", "app/**/*.d.ts", "shared/**/*.ts"]
}
diff --git a/web/tsconfig.tsbuildinfo b/web/tsconfig.tsbuildinfo
new file mode 100644
index 000000000..2a3190079
--- /dev/null
+++ b/web/tsconfig.tsbuildinfo
@@ -0,0 +1 @@
+{"root":["./app/composables/useapi.ts","./app/composables/usefilters.ts","./app/middleware/auth.ts","./app/middleware/guest.ts","./app/plugins/chart.client.ts","./app/plugins/firebase.client.ts","./app/plugins/highlightjs.client.ts","./app/plugins/vphoneinput.client.ts","./app/plugins/vue-glow.client.ts","./app/stores/app.ts","./app/stores/auth.ts","./app/stores/billing.ts","./app/stores/messages.ts","./app/stores/notifications.ts","./app/stores/phones.ts","./app/stores/threads.ts","./app/types/nuxt-shims.d.ts","./app/utils/api-error.ts","./app/utils/bag.ts","./app/utils/capitalize.ts","./app/utils/countries.ts","./app/utils/errors.ts","./app/utils/filters.ts","./shared/types/api.ts","./shared/types/message.ts"],"errors":true,"version":"6.0.3"}
\ No newline at end of file
diff --git a/web/types.d.ts b/web/types.d.ts
deleted file mode 100644
index ea5ed961d..000000000
--- a/web/types.d.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import firebase from 'firebase/compat'
-import { Framework } from 'vuetify'
-
-interface Firebase {
- auth: firebase.auth.Auth
- appCheck: firebase.appCheck.AppCheck
- analytics: firebase.analytics.Analytics
-}
-
-export interface SelectItem {
- text: string
- value: string | number
-}
-
-declare module 'vue/types/vue' {
- interface Vue {
- $vuetify: Framework
- $fire: Firebase
- }
-}